天天看點

全棧必備 靈活基礎

版權聲明:本文為半吊子子全棧工匠(wireless_com,同公衆号)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/53725385

喔家ArchiSelf

世界上不存在這樣一種方法:

隻要套用,就可以寫出完美的軟體,無論使用的哪種設計模式;

但确實可能存在一種開發方式,可以幫助我們一步步構造出需要的軟體和架構——這有可能就是靈活開發。

相對于軟體開發流程,有一門專門的學科——軟體工程。最早接觸軟體工程,是20年前在北電貝爾北方實驗室工作的時候,當時的開發流程是這樣的:

其他主流的瀑布式開發流程也大緻如此。然而,随着技術的演進,尤其是網際網路的發展,BS架構的廣泛應用,使用者回報的及時響應成為了可能。從90年代開始逐漸引起廣泛關注的一些新型軟體開發方法出現了,如XP ( Extreme Programming ),Scrum 等,統稱為靈活開發。靈活開發主要是通過高透明性、可檢驗性和适應性來管理複雜性、不可預測性和變化。

以Scrum為例,典型的開發模型如下:

這是一張被廣泛引用的圖檔,還有一張爛大街的圖檔就是Sprint 的流程圖:

難點在于一個sprint周期有多長,個人覺得Sprint周期的長度要依賴于你能在多長時間内保證在Sprint期間的需求不發生變更。

靈活是一種方式,不是單純的方法,通過各種的行為方式來實作目标。

首先是,Sprint 計劃會議。計劃會議要有足夠的時間,最好至少8個小時。取出部分産品需求做成sprint需求,并寫成索引卡。确定并細分每一個索引卡的故事(User Story), 然後進行工作認領(不是配置設定)。同時,确定每日站立會議的時間和地點,确定好示範會議和回顧會議的日期。

站會是靈活中的一個顯著特點,每次10-15分鐘,遲到将接受懲罰,每個成員自問自答三個問題:昨天做了什麼,今天要做什麼和遇到了什麼問題,會後再溝通問題的解決方案,最重要的是更新燃盡圖。

在開發過程中,要使用好任務看闆,關注産品的整個生命周期:需求,設計,開發,測試和維護。注意燃盡圖,對于小團隊而言,建議不要使用軟體取代看闆,可以選擇性的和XP或其它靈活的某些方式相結合。

示範會議是至關重要的。示範是跨團隊的,會産生不同團隊之間的交流。不要關注太多的細節,以主要的功能為主,一定要讓老闆或者客戶看到。示範會議

非常的重要,絕對不可以被忽略。

回顧會議的時間一般在1-3個小時,要找最舒适的地方(最好有回顧看闆)。開始的時候輪流發言,而不是主動發言。記錄問題并總結,并讨論改進的方法,放在回顧看闆上。每人将最重要的2-3個改進點,成為下一輪産品需求的一部分。

還是那就話,“沒有銀彈”,靈活也不是萬能的。Scrum的主要缺陷有,團隊壓力大,不友善跨時區和跨語言的協同團隊,而且一旦啟動無法被中斷,更重要的是程式維護的成本偏高,對工程師的要求較高,尤其是應用的架構和可擴充性。但是,靈活開發的12個準則還是應該了解的,個人總結成一句話,按花生醬,贊不絕口(參見http://blog.csdn.net/wireless_com/article/details/40622377)。

靈活開發乃至一般的開發過程都會涉及到一件事,任務估點,就如何見招拆招。個人覺得,一個task 最好以2個小時為機關,半小時設計,半小時編碼,半小時測試,半小時文檔、注釋以及重構。原因可能是這樣的,網際網路上流傳着一句名言——3個月就是一年,也就是1周相當于1個月。那麼,2個小時就相當于1天了,也就是說,我們的團隊要将每兩個小時當成一天來計算。衆所周知,所有的估算都是不準确的,以2小時為機關是為了降低誤差。就像我們度量的時候,以米為機關度量,誤差就是米,以毫米來量,誤差就是毫米。2個小時一個task,就相當于開發中的“毫米”。

靈活開發中最重要的還是代碼,優秀的代碼品質決定着産品或者服務的品質。個人以為,有四種手段可以提升一下代碼品質:

1)意圖導向程式設計,簡單地說,就是把注釋變成代碼,讓代碼擁有自解釋性

2)測試驅動開發,尤其是對後端而言更為重要,可以結合日志系統可以更快捷定位問題

3)建立和使用分離,這就是大家常說的“高内聚 低耦合”了

4)單點修改原則,單點修改可能隻是一種理想狀态,但應該銘記在心

至于靈活團隊,就是我提倡的ABC了:

具體的,我在舊文《和 <創時代>》(http://blog.csdn.net/wireless_com/article/details/52904654)中有描述,這裡不在重複。對于團隊靈活,我隻想澄清項目和産品開發(project developement vs product developement)的差別,這兩者在目标上還是又着差別的,例如持續演進,架構的可擴充性等等。

全棧必備 靈活基礎

微信掃一掃

關注該公衆号

繼續閱讀