軟件構造 第二章複習與總結

[軟件構造] 04 第二章複習與總結

Chapter 2: Process and Tools of Software Construction

第二章 軟件構造的過程與工具


2.1 Software Lifecycle and Configuration Management

這一節最重要的是怎樣以Git工具爲基礎進行軟件配置管理(SCM),大致瞭解傳統的與現代的軟件開發過程模型有哪些,以及它們之間的區別。
1. 軟件開發的生命週期

  • From 0 to 1 從無到有:
    計劃\Rightarrow需求分析\Rightarrow設計\Rightarrow實現\Rightarrow測試與集成\Rightarrow運維
  • From 1 to n 從有到好:
    不同版本之間不斷地進行的更新迭代

2.傳統的軟件過程模型

  • Waterfall 瀑布模型
    • 線性的,非迭代的
    • 將軟件生命週期劃分爲制定計劃、需求分析、軟件設計、程序編寫、軟件測試和運行維護等六個基本活動,並且規定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落。
    • 瀑布模型的最大優點是簡單
    • 瀑布模型的突出缺點是不適應用戶需求的變化
  • Incremental 增量模型
    • 線性的,非迭代的
    • 相對於瀑布模型而言,採用增量模型進行開發,開發人員不需要一次性地把整個軟件產品提交給用戶,而是可以分批次進行提交。
  • V-Model V字模型
    • 是瀑布模型的變種,反映了軟件測試活動與軟件開發過程(從分析到設計)的關係
  • Prototyping 原型模型
    • 迭代的
    • 在開發真實系統之前,構造一個原型,在該原型的基礎上,逐漸完成整個系統的開發工作,通過逐步調整原型使其滿足客戶的要求
  • Spiral 螺旋模型
    • 迭代的
    • 它將瀑布模型和快速原型模型結合起來,強調了其他模型所忽視的風險分析,特別適合於大型複雜的系統

這一部分不必拘泥於死記硬背的概念,應着重理解基本的過程,對其有一個大體的瞭解,在今後的學習過程中進行進一步的學習和應用。

3.敏捷開發
把一個複雜且開發週期很長的開發任務,分解爲很多小週期可完成的任務,這樣的一個週期就是一次迭代的過程;同時每一次迭代都可以生產或開發出一個可以交付的軟件產品。

  • 快速交付
  • XP 極限編程
  • 結對編程
  • 任務表與進度檢查

4. 軟件配置管理
一系列的概念:
軟件配置項SCI:軟件中發生變化和需要管理變化的基本單元。包括源代碼,數據,文檔等等。
基線baseline:軟件持續變化過程中的“穩定時刻”(例如:對外發布的版本)
配置管理數據庫CMDB:存儲軟件的各配置項隨時間發生變化的信息+基線
版本控制Versioning:爲軟件的任一特定時刻(Moment)的形態指 派一個唯一的編號,作爲“身份標識”

  • 爲什麼需要版本控制?對個人,團隊的作用。
  • Repository:倉庫,即SCM中的CMDB。
  • VCS的發展:本地的版本控制系統\Rightarrow集中式的版本控制系統\Rightarrow分佈式的版本控制系統

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:
構造語言:

  1. 編程語言:C,Java,C++,…
    編程工具:IDE集成開發環境
  2. 建模語言:UML(也可以看作是一種工具)
    分爲 UML類圖,序列圖,組件圖,…
  3. 配置語言:XML,YAML,JSON配置程序的參數和設置

(2)代碼評審和靜態代碼分析
結對編程,正式的代碼評審會議,…

(3)動態代碼分析和調優
執行程序並觀察現象、收集數據、分析不足

(4)調試與測試
測試:發現程序是否有錯誤。
調試:定位錯誤、發現錯誤、並對其進行修正的過程

(5)重構
在不改變代碼功能的前提下優化代碼。

本課程主要集中在上面的 1,4即編碼,測試和調試兩方面,剩餘的三方面由於今年的課程改革會很少地涉及到。
2 可見往年的第四章:面向可理解性的軟件構造
3 可見往年的第八章:面向性能的軟件構造
5 可見往年的第九章:重構

2.狹義的軟件構造過程
狹義的軟件構造關注在build階段,也就是藉助於工具,將軟件構造各階段的活動“自動化”。

常見的使用build的場景:

  1. 傳統的編譯型語言編寫的軟件的編譯過程,eg:C,C++,…
  2. 解釋型語言編寫的軟件的打包和測試過程,eg:Perl,Python
  3. 基於網絡應用的編譯與打包
  4. 單元測試過程
  5. 代碼靜態分析工具的執行過程
  6. 各種各樣的文檔化的過程

構建系統的組成:
版本控制工具,編譯工具,源代碼樹,目標文件樹,構建工具,構建機器,發行包,目標機器。

構建工具:
對於Java:Make,Ant,Maven,Gradle,Eclipse IDE

我認爲,這一節最重要的是教會了我構造工具有什麼,如何在開發中進行使用,以及它能夠幫我們做些什麼。學習到了如何將構建工具應用到lab實驗中進行自動構建,打包,測試等等一系列過程,真正的實現各階段活動的自動化。
本章概念繁多,但大多數只需瞭解即可,就考試而言,本章大概只能出簡單的選擇題,因而可以在後續的課程中對這些概念進行熟悉和學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章