HITSC_3_Software Construction Process and Configuration Management

Ch1ldKing發表於2024-05-26
目標

軟體開發流程及模式,敏捷開發,軟體配置管理SCM,Git,軟體構造過程和構造工具

SDLC

image.png

傳統軟體開發模型

瀑布模型

線性模型
優點:劃分階段,管理簡單
缺點:不迭代,所以缺少靈活性,也難以適應需求;並且使用者看不到原型,導致風險高,前期錯誤後期發現

增量模型

瀑布序列,容易適應需求增加
image.png

V模型

左側開發,右側測試,並行進行,並且每個階段都要驗證
優點:階段劃分,質量高,早發現錯誤
缺點:順序執行,難以應對需求變化,成本高
image.png

原型過程

開發原型,不斷迭代,使用者試用評審,反饋修改,直到使用者滿意image.png

螺旋模型

多輪迭代,每一輪是瀑布,每一輪都有目標,迭代時嚴格驗證image.png

敏捷開發

快速迭代和小規模改進,Agile = 增量 + 迭代
敏捷宣言:

  1. 個體和互動勝過流程和工具(Individuals and interactions over processes and tools):
    • 強調團隊成員之間的合作和交流,而不是過度依賴於嚴格的流程和工具。
  2. 工作的軟體勝過詳盡的文件(Working software over comprehensive documentation):
    • 重點是交付能夠實際執行的軟體,而不是花費大量時間編寫和維護詳細的文件。
  3. 客戶合作勝過合同談判(Customer collaboration over contract negotiation):
    • 注重與客戶的持續合作和溝通,而不是僅僅根據合同進行工作。
  4. 響應變化勝過遵循計劃(Responding to change over following a plan):
    • 強調能夠靈活應對變化的能力,而不是嚴格按照預先制定的計劃執行。
      📕重點:使用者參與,小步驟迭代,確認驗證
      😀一些理念:結對程式設計,CI持續整合,taskbord與客戶共同制定開發計劃與迭代週期,頻繁釋出小版本便於使用者反饋,TDD測試驅動,持續改進程式碼結構,有編碼標準和集體程式碼所有權

SCM和VCS

SCM軟體配置管理:追蹤控制軟體變化
SCI軟體配置項:軟體中發生變化的基本單元(比如檔案)
基線:記錄軟體變化中的穩定時刻
CMDB配置管理資料庫:儲存軟體配置項變化資訊和基線

版本控制

作用:便於回滾、比較差異、備份歷史版本、獲取備份、合併
支援多開發者協作並記錄開發者行為,便於審計
結構:線性和分支結構
📕一些概念:

  • 倉庫:CMDB
  • 工作複製:開發者本地的專案複製
  • 檔案:一個配置項SCI
  • 版本:所有檔案在某個時間點的狀態集合
  • 變化:版本間差異
  • HEAD:當前工作的版本

VCS

Local:本地的,不能共享協作
Centralized:倉庫儲存在獨立伺服器
Distributed:倉庫儲存獨立的伺服器以及每個開發者的機器
image.png

Git

倉庫

本地git倉庫、工作目錄(就是本地的檔案系統)、暫存區(隔離工作目錄與Git倉庫)
之間的三種行為:修改、暫存、提交
image.png
同時包括遠端倉庫

Node Tree

圖解:

  • 通常情況下,commit指向一個父親
  • 多個commit指向同一個父親,那麼他們是多個分支
  • 一個commit指向兩個父親,它是分支的合併
  • HEAD是當前的commit源
  • branch是分支名字
    image.png

commit

commit中有作者等資訊,且其指向一顆樹,樹中有指向檔案的指標,如果未發生變化,則不需要重複儲存這兩個版本的檔案
image.png
如果檔案變化了,則會儲存兩個不同的檔案,兩個tree指向不同的檔案image.png

Git優點

儲存的是檔案,不只是程式碼行,無需在回滾提交時大量進行修改操作,節省時間
image.png

Merge

git fetch可獲取遠端分支的變化,並選擇是否與本地分支進行合併
git merge可以合併兩個分支,並在合併前進行程式碼審查

合作

Fork和pull request 使使用者之間可以向其他人倉庫提交修改申請,以實現多人合作。每個人都fork倉庫並向總專案提交PR

軟體構造過程

image.png

1.Programming

語言

從用途上劃分

  • Programming languages (e.g., C, C++, Java, Python)程式語言
  • Modeling languages (e.g., UML) 建模語言
  • Configuration languages (e.g., XML) 配置語言
  • Build languages (e.g., XML) 構建語言
    從形態上劃分
  • Linguistic-based 基於語言學的構造語言
  • Mathematics-based (formal) 基於數學的形式化構造語言
  • Graphics-based (visual) 基於圖形的視覺化構造語言

程式設計工具

IDE:

  • 原始碼編輯器、智慧程式碼補全工具、程式碼重構工具
  • 檔案管理
  • 庫管理
  • 軟體邏輯視覺化(轉化為圖)
  • GUI構造器
  • 編譯器和直譯器
  • 自動Build工具(編譯、連結、打包、測試、部署)
  • VCS
  • 外部工具

建模語言

視覺化系統設計,自動生成程式碼,便於驗證與交流

配置語言

描述軟體的配置引數和初始化設定,比如環境、元件連結等

2.程式碼評審

靜態程式碼分析
要求風格,設計等

3.動態效能分析

執行程式觀察現象,度量效能與狀態

4.除錯和測試

測試發現錯誤,除錯定位錯誤根源

5.重構

不改變功能,但透過結構等方式對程式碼最佳化,使其邏輯更清晰,設計風格更優,減少不必要的程式碼行

6.構建

編譯、打包、靜態分析、測試、生成文件、部署等,並實現自動化,藉助構建工具
🌰Cmake,Maven,Gradle,Webpack等

相關文章