[軟件構造] 04 第二章複習與總結
Chapter 2: Process and Tools of Software Construction
第二章 軟件構造的過程與工具
2.1 Software Lifecycle and Configuration Management
這一節最重要的是怎樣以Git工具爲基礎進行軟件配置管理(SCM),大致瞭解傳統的與現代的軟件開發過程模型有哪些,以及它們之間的區別。
1. 軟件開發的生命週期
- From 0 to 1 從無到有:
計劃需求分析設計實現測試與集成運維 - From 1 to n 從有到好:
不同版本之間不斷地進行的更新迭代
2.傳統的軟件過程模型
- Waterfall 瀑布模型:
- 線性的,非迭代的
- 將軟件生命週期劃分爲制定計劃、需求分析、軟件設計、程序編寫、軟件測試和運行維護等六個基本活動,並且規定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落。
- 瀑布模型的最大優點是簡單
- 瀑布模型的突出缺點是不適應用戶需求的變化
- Incremental 增量模型:
- 線性的,非迭代的
- 相對於瀑布模型而言,採用增量模型進行開發,開發人員不需要一次性地把整個軟件產品提交給用戶,而是可以分批次進行提交。
- V-Model V字模型
- 是瀑布模型的變種,反映了軟件測試活動與軟件開發過程(從分析到設計)的關係
- Prototyping 原型模型
- 迭代的
- 在開發真實系統之前,構造一個原型,在該原型的基礎上,逐漸完成整個系統的開發工作,通過逐步調整原型使其滿足客戶的要求
- Spiral 螺旋模型
- 迭代的
- 它將瀑布模型和快速原型模型結合起來,強調了其他模型所忽視的風險分析,特別適合於大型複雜的系統
這一部分不必拘泥於死記硬背的概念,應着重理解基本的過程,對其有一個大體的瞭解,在今後的學習過程中進行進一步的學習和應用。
3.敏捷開發
把一個複雜且開發週期很長的開發任務,分解爲很多小週期可完成的任務,這樣的一個週期就是一次迭代的過程;同時每一次迭代都可以生產或開發出一個可以交付的軟件產品。
- 快速交付
- XP 極限編程
- 結對編程
- 任務表與進度檢查
4. 軟件配置管理
一系列的概念:
軟件配置項SCI:軟件中發生變化和需要管理變化的基本單元。包括源代碼,數據,文檔等等。
基線baseline:軟件持續變化過程中的“穩定時刻”(例如:對外發布的版本)
配置管理數據庫CMDB:存儲軟件的各配置項隨時間發生變化的信息+基線
版本控制Versioning:爲軟件的任一特定時刻(Moment)的形態指 派一個唯一的編號,作爲“身份標識”
- 爲什麼需要版本控制?對個人,團隊的作用。
- Repository:倉庫,即SCM中的CMDB。
- VCS的發展:本地的版本控制系統集中式的版本控制系統分佈式的版本控制系統
5. Git的使用
該部分強烈建議閱讀Git使用手冊(https://www.git-scm.com/book/en/v2)。
- Git倉庫三部分:
- .git目錄,本地的CMDB
- 工作目錄:本地文件系統
- 暫存區:下次要提交到.git倉庫的內容
- 一個文件的三種狀態:Modified,Staged,Committed
已修改,已暫存,已提交 - Git的所有操作都是在一個圖數據結構(對象圖)上進行的。
- Git每次提交存儲一個快照圖,而傳統的VCS存儲配置項的增量變化。
- 本門課程需要掌握的Git命令:
git init
git add
git push
git commit
git status
git clone
git checkout
git merge
...
2.2 Process, Systems, and Tools of Software Construction
本節主要從廣義和狹義的角度講述了軟件構造的過程,以及在各個子過程中所使用的系統和工具。
1.廣義的軟件構造過程
(1)編碼Programming:
構造語言:
- 編程語言:C,Java,C++,…
編程工具:IDE集成開發環境 - 建模語言:UML(也可以看作是一種工具)
分爲 UML類圖,序列圖,組件圖,… - 配置語言:XML,YAML,JSON配置程序的參數和設置
(2)代碼評審和靜態代碼分析
結對編程,正式的代碼評審會議,…
(3)動態代碼分析和調優
執行程序並觀察現象、收集數據、分析不足
(4)調試與測試
測試:發現程序是否有錯誤。
調試:定位錯誤、發現錯誤、並對其進行修正的過程
(5)重構
在不改變代碼功能的前提下優化代碼。
本課程主要集中在上面的 1,4即編碼,測試和調試兩方面,剩餘的三方面由於今年的課程改革會很少地涉及到。
2 可見往年的第四章:面向可理解性的軟件構造
3 可見往年的第八章:面向性能的軟件構造
5 可見往年的第九章:重構
2.狹義的軟件構造過程
狹義的軟件構造關注在build階段,也就是藉助於工具,將軟件構造各階段的活動“自動化”。
常見的使用build的場景:
- 傳統的編譯型語言編寫的軟件的編譯過程,eg:C,C++,…
- 解釋型語言編寫的軟件的打包和測試過程,eg:Perl,Python
- 基於網絡應用的編譯與打包
- 單元測試過程
- 代碼靜態分析工具的執行過程
- 各種各樣的文檔化的過程
構建系統的組成:
版本控制工具,編譯工具,源代碼樹,目標文件樹,構建工具,構建機器,發行包,目標機器。
構建工具:
對於Java:Make,Ant,Maven,Gradle,Eclipse IDE
我認爲,這一節最重要的是教會了我構造工具有什麼,如何在開發中進行使用,以及它能夠幫我們做些什麼。學習到了如何將構建工具應用到lab實驗中進行自動構建,打包,測試等等一系列過程,真正的實現各階段活動的自動化。
本章概念繁多,但大多數只需瞭解即可,就考試而言,本章大概只能出簡單的選擇題,因而可以在後續的課程中對這些概念進行熟悉和學習。