哈工大软件构造期末复习1
Chapter 1: Views and Quality Objectives of Software Construction
1.1 Multi-Dimensional Views of Software Construction
1. 軟件構造過程中的多維度視圖
多維度視圖
Moment維度關注于程序在某一個時刻的表現,而Period維度更關注于程序在一段時間內的表現;
Build-time維度關注程序還未被投入運行,編碼階段的表現,而Run-time維度更關注于程序運行時的表現;
Code-level維度關注程序的語句層面,Component-level維度更關注于一段代碼,當作一個塊觀察比如一個包、一個庫。
(1) Build-time, moment, and code-level view 關注的是源碼的組織情況,可在詞匯(源碼)、語法(抽象語法樹)、語義(類圖)三個層面分別分析。
(2) Build-time, period, and code-level view 關注的是代碼的變化(Code churn代碼變化)
(3) Build-time, moment, and component-level view 關注的是包/庫,而且是靜態(tài)鏈接庫
(4) Build-time, period, and component-level view 關注代碼的更迭,與(2)中不同的是,這個維度下更關注文件版本的變化,而不是具體語句的變化(2中關注的是哪一行代碼被修改了)----VCS的引出
(5) Run-time, moment, and code-level view 關注的是程序在某個時間點內存中的情況,如代碼快照圖(Code Snapshot)、內存信息轉儲(Memory dump)。
(6) Run-time, period and code-level view 關注的是代碼的執(zhí)行情況,執(zhí)行跟蹤
(7) Run-time, moment, and component-level view 關注的也是包/庫,但卻是在代碼執(zhí)行過程中的情況,如動態(tài)鏈接庫
(8) Run-time, period, and component-level view 關注的是系統(tǒng)的使用情況,使用日志查看
2. 視圖之間的聯系
從無到有,寫出了代碼,就進入了Build-time維度,開始只是單個的沒有任何聯系的代碼文件,所以是在moment+Code-level維度,此時隨著時間的推移,代碼刪刪改改,就屬于Period+Code-level了,而代碼越寫越多成為了一個包,甚至形成了一個庫,于是就屬于moment+Component-level維度了,但是隨著時間的推移,你的庫文件由于需求的變化發(fā)生了變化,所以就屬于Period+Component-level。代碼寫好了,投入運行,進入Run-time維度,觀察的如果是某一句代碼的執(zhí)行后結果,那就是moment+Code-level維度,但如果看的是代碼執(zhí)行的軌跡,那就是Period+Code-level維度,而如果看的是一個庫文件的連接情況等,那就是moment+Component-level維度了,如果看的是線程或進程的執(zhí)行過程,也就是通過日志等手段查看一段時間內系統(tǒng)都做了什么事情,那么就是Period+Component-level了。
1.2 Quality Objectives of Software Construction
1. 軟件系統(tǒng)的質量
外部質量因素
?
External 1:?Correctness(正確性),正確就是滿足spec,這是軟件開發(fā)最重要的因素,一個可用的軟件一定是正確的,所以首要保證軟件的正確性,其他的都可以做妥協(xié)、讓步,但只有這一項不可妥協(xié)。
External 2: Robustness(魯棒性),通過拋出異常然后處理異常等方式讓出錯的程序恢復到正常的執(zhí)行流程上。
External 3: Extendibility(易擴展性),要便于軟件功能的增加/擴展(ADT、OOP、留下一個Visitor),降低未來修改軟件時的成本。
External 4: Reusability(復用性),在異性之間盡可能地尋找共性,以便于未來可以直接使用現在寫的這段代碼。這樣可以降低軟件地開發(fā)成本。
External 5: Compatibility(兼容性),在不同的環(huán)境下都是可用的,不同的軟件系統(tǒng)之間相互可容易的集成。
External 6: Efficiency(效率),不要過早的優(yōu)化,性能在沒有正確性保障的條件下是沒有意義的。
External 7: Portability(可移植性),軟件可方便的在不同的技術環(huán)境之間移植。
External 8: Ease of use(易用性),學習成本低,結構簡單、清晰,易于使用。
External 9: Functionality(功能性),功能過多會導致易用性的降低。主要功能要首要提升質量。
External 10: Timeliness(時效性),軟件要能夠在交付時間之前完成開發(fā)交給使用者。
External 10++: Other qualities,Verifiability (可驗證性),Integrity (完整性),Repairability (可修復性),Economy (經濟性)。
內部質量因素
代碼行數(LOC)、圈復雜度、結構:高內聚低耦合、可讀性、可理解性、整潔度、大小
折中、妥協(xié)
Integrity vs. ease of use、Economy vs. functionality、Efficiency vs. portability、Efficiency vs. reusability、Economy vs. reusability、Timeliness vs. extendibility
這些質量屬性之間往往不能兼得,當某一項滿足的足夠好的時候有可能其他項的表現極差,因而需要做權衡,使得各部分的表現都較好,在某些特定要求下也可以放棄優(yōu)化其他項而做到某一項的極致,這需要靠開發(fā)者的經驗積累來判斷。
正確性是絕不能與其他質量因素折中的!!!
在OOP開發(fā)中,通過封裝、模塊化、組件、抽象、分散、錯誤處理、信息隱藏、框架、接口等技術來盡可能地滿足上述地質量因素,提高軟件的開發(fā)質量。
2. 五個關鍵的質量指標
(1)Elegant and beautiful code:代碼要容易理解,通過統(tǒng)一變量/方法的命名標準、代碼的風格、注釋、包組織結構、必要時重構代碼等方式讓代碼盡可能的容易理解。
(2)Design for/with reuse:ADT/OOP、接口、繼承(Overload、Override)、多態(tài)、泛型、框架等技術可用于提高代碼的可復用性。
(3)Low complexity:當復雜度較低的時候,代碼就容易被擴展新的功能,所以要高內聚低耦合,遵從SOLID原則、OO設計模式、使用VCS控制代碼版本
(4)Robustness and correctness:使用測試驅動的開發(fā)、異常處理、Assertion機制、防御式編程等技術保證程序的健壯性和正確性。
(5)Performance and efficiency:使用設計模式、并行/多線程等技術提升性能。
?
?
總結
以上是生活随笔為你收集整理的哈工大软件构造期末复习1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像成像原理与相机标定
- 下一篇: 常见时序算法集合【资源整理】