軟體視角Views
三維度八檢視
Code-level:程式碼邏輯,函式、方法、類等
component-level:物理組織,包,庫,檔案等
Moment:某一時刻
Period:某一段時間的變化
Build,Code,Moment
一段具體程式碼實現,也可用AST,或者類圖。用它們表示一段程式碼
Build,Code,Period
一段程式碼的變化(Git追蹤)
Build,Component,Moment
某一時刻的專案結構
這部分講解了庫的知識
庫
編譯時,需要告訴編譯器採用了哪些檔案。靜態連結把庫檔案拷入程式碼,
Build,Component,Period
軟體版本管理,SCI(配置項)
VCS
控制版本
Runtime
- 可執行程式:編譯後的程式,可以放入記憶體執行
- 庫:常用指令,被可執行程式呼叫
- 配置和資料檔案:被可執行程式從硬碟中讀取
- 分散式程式:多個程式互聯,如客戶端和伺服器端互動
Run,Code,Moment
記憶體裡變數層面的狀態
Run,Code,Period
一段時間內發生的日誌
Run,Component,Moment
UML不同元件之間的互動
Run,Component,Period
系統層面的日誌,元件(程式)執行狀態
視角轉化
比如,程式碼到元件是設計,構建,編譯等
從構建到執行是debug,testing等
質量因素
Correctness、Robustness、Extendibility、Reusability、 Compatibility 、Efficiency、Portability、Ease of use、Functionality、Timeliness、other
Correctness
按照 規約 執行
- 測試與除錯
- 防禦式程式設計
- 形式化方法
Robustness
健壯性:針對異常
未被spec覆蓋的情況就是異常情況
可擴充性
ADT設計
Compatibility
相容性,由保持設計的同構性得到。透過標準化檔案和介面等實現
對質量因素的平衡
我們是一個工程師的工作,需要平衡需求與質量,以實現在有限的資金內實現效益最大化
雖然需要折中,但“正確性”絕不能與其他質量因素折中
OOP
正確性和健壯性:透過spec、testing、checkrep等,實現更可靠的程式
可擴充性和複用性:模組化程式
軟體中五個關鍵因素
- 優雅的程式碼
- 設計出可複用
- 低複雜性,易擴充
- 沒有錯誤,安全應對bug(做不到一點bug都沒有)
- 高效的執行
可理解性
構建:程式碼可理解性高,並且有spec,設計模式;專案結構可理解性高。一段時間內是程式碼重構和版本控制
執行:日誌格式
可複用性
構建:程式碼上採用ADT/OOP,採用設計模式,分離介面等;元件上採用API和庫實現
執行:動態連結其他庫和元件
可維護性/易擴充性
構建:程式碼上模組化設計,降低耦合度、SOLID六大設計模式;元件上同樣為SOLID;一段時間是VCS
健壯性
構建:程式碼上錯誤處理、測試有限、Exception、防禦式程式設計等;一段時間上持續整合並測試
執行:單元;整體測試;Debug和記憶體轉儲;一段時間上日誌輸出
表現
構建:程式碼調優
執行:程式碼上空間複雜度(記憶體管理)、時間複雜性(IO效能),元件上分散式系統;一段時間內是對效能進行資料收集、分析、調優,元件上多執行緒