一. 軟件開發生命周期(Software Development Life Cycle)主要包括以下幾個階段。
分析請求:分析用戶請求,才能知道要開發什么樣的軟件。
設計 :針對用戶請求,進行設計軟件架構等。
執行:任務分派開始開發。
測試 : 測試軟件的功能、代碼等。
演變或者維護:發布和后期維護,如補丁更新等。
二. 軟件開發中的瀑布開發模型,如下圖:
從上圖可以看到,開發階段是按順序來的。
瀑布模型的劣勢:
- 開發生命周期可能持續一年或者更長時間。
- 存在着世大的不確定性
- 不適合那些新特性更新頻繁的項目。比如,電子商務項目
- 持續集成的執行都是在開發階段完成后,往往后面會存在很多問題,尤其針對於大項目而言。
- 沒有向后的可追溯性。
- 在不同階段稱量進展是非常困難的,因為開發步驟相當於是線性的。后面肯定無法預估。
瀑布模型的優勢:(試用於以下類型的項目)
- 項目的初期布局有很好的文檔和非常的固定(很少變動)
- 有足夠的金錢去維持管理團隊,測試團隊,開發團隊,構建和釋放團隊,等。
- 該技術是固定的,沒有變動的。
- 沒有什么模糊的需求,也是最重要的。需求在需求分析階段有之外,在其它任何階段都沒有。
三. 敏捷的救援
敏捷意味着快速、簡單。 敏捷是開發的一種方法,它是通過組織內各團隊合作來完成的。敏捷背后的原則是增量、快速、靈活的軟件開發。提升了計划的靈活性。
1. 敏捷模型的12個原則
(1)通過早期有用的軟件進行持續交付來達到客戶滿意度。
(2)適應不斷變化的開發需求,甚至在軟件開發后期。
(3)軟件交付頻繁(可能幾周或者一個月內)
(4)在企業、人員、開者者之間密切的合作
(5)項目干系人應該是被信任的
(6)面對面的溝通方式是最好的交流方式
(7)正在開發軟件是程序測量的標准
(8)可持續的發展,能夠保持一個一致的步伐
(9)持續關注卓越的技術和良好的設計
(10)簡單
(11)組織內部的團隊成員
(12)適應不斷變化的環境
2. 敏捷開發工作方式
在敏捷開發進程中,軟件被分成多個功能或者模塊,這些功能是在迭代中進行持續交付的。每次迭代持續三個禮拜,包括在不同區域同時工作的團隊,比如計划,需求分析,設計,代碼,單元測試和可接受性測試。
這樣的一個結果就是,沒有任何人是空閑的。這和瀑布模型是完全不同的,瀑布模型是開發人員在非常忙的時候,測試人員和其它人員都比較空閑。 下圖描述了敏捷開發模型。
從上圖可以看出,模型像個圈一樣,不停的進行迭代。相當於以前工作是串行的,現在是並行的一樣。
3. 敏捷開發的優勢
- 功能可以被快速的開發和演示。
- 資源請求更少。
- 促進團隊合作和交叉訓練。
- 適用於那些需求經常改變的項目。
- 簡約的文檔
- 更少或者沒有計划。
- 並行開發:功能開發可以並行來做。
四. CI的元素
1. 版本控制系統
2. 分支策略:GitFlow是另一種使用多個分支管理代碼的方式。 如下圖所示:
GitFlow完全的架構圖如下 :
3. CI 工具
此處使用的是jenkins。 還有其它如Build Forge, Bamboo 和 TeamCity.
4. 自動觸發的構建
5. 代碼覆蓋率測試
代碼覆蓋的測試方式:
Type of coverage | Description |
Function | The number of function called out of the total number of functions defined |
Statement | The number of statements in the program that are truly called out of the totoal number |
Branches | The number of branches of the control structures executed |
Condition | The number of Boolean sub-expressions that are being tested for a ture and false value |
Line | The number of lines of source code that are being tested out of the total number of lines present inside the code |
代碼覆蓋率測試工具:
Language | Tools |
Java | Atlassian Clover, Cobertura, JaCoCo |
C#/.NET | OpenCover, dotCover |
C++ | OpenCppCoverage,gcov |
Python | Coverage.py |
Ruby | SimpleCov |