2018-2019-1 20189215 《構建之法》第二章學習總結
教材學習內容總結
再次強調一遍!!!
程式 = 資料結構 + 演算法
軟體 = 程式 + 軟體工程
軟體企業 = 軟體 + 商業模式- 單元測試的功能是讓自己負責的模組功能定義儘量明確,模組內部的改變不會影響其他模組,而且模組的質量能夠得到穩定、量化的保證。
好的單元測試的標準
- 單元測試應該在最基本的功能 / 引數上驗證程式的正確性
單元測試要測試API中的每一個方法及每一個引數。 - 單元測試必須由最熟悉程式碼的人(程式的作者)來寫
- 單元測試過後,機器狀態保持不變
- 單元測試要快
一個測試的執行時間是幾秒鐘,而不是幾分鐘 - 單元測試應該產生可重複、一致的結果
單元測試不能解決所有的問題,不必期望它能夠發現所有的缺陷。 - 獨立性
單元測試的執行 / 通過 / 失敗不依賴於別的測試,可以人為地構造資料(不是造假資料!!!!),以保持單元測試的獨立性。 - 單元測試應該覆蓋所有程式碼路徑
但是100%的程式碼覆蓋率並不等同於100%的正確性! - 單元測試應該整合到自動測試的框架中
- 單元測試必須和產品程式碼一起儲存和維護
- 單元測試應該在最基本的功能 / 引數上驗證程式的正確性
- 迴歸測試建立在單元測試的基礎上,“迴歸”在這裡的意思可以理解為“迴歸到以前不正常的狀態”,其實我覺得應該如此理解“之前出錯的測試用例迴歸,驗證新的程式碼已經進行了修正”。
- 效能分析一般的做法是先用抽樣的方法找到效能瓶頸所在,然後對特定的模組用程式碼注入的方法進行詳細分析。
- 在效能優化之前,如果不經實際結果分析就盲目優化,也許就會事倍功半。
PSP
掌上游戲機個人軟體開發流程(Personal Software Process)指導了一個軟體工程師在接到一個任務之後應該怎麼做。PSP2.1
計劃- 明確需求和其他相關因素,指明時間成本和依賴關係
- 分析需求
- 生成設計文件
- 設計複審(和同事稽核設計文件)
- 程式碼規範
- 具體設計
- 具體編碼(可以看到實際專案中,寫程式碼佔的比例很少)
- 程式碼複審
- 測試(包括自測、修改程式碼,提交修改)
記錄用時
測試報告
計算工作量
事後總結
提出過程改進計劃軟體設計的兩個原則
①單一職責原則(Single Responsibility Principle,SRP)
一個模組(類)應該只有一個導致它變化的原因,一個模組應該完全對某個功能負責。
②開放-封閉原則(Open-Close Principle,OCP)
軟體實體應該是可以擴充套件的,同時是不可修改的。- 允許擴充套件:當應用的需求發生改變時,我們可以對模組進行擴充套件,從而改變模組的功能。
- 不允許修改:對模組行為進行擴充套件時,不必改變模組的本身。
擴充套件有資料方面、需求方面、使用者方面、軟體構建方面等各種類的擴充套件需求。
教材學習中的問題和解決過程
- 問題1:VSTS是何物?
- 問題1解決方案:查閱資料。VSTS的全稱是Visual Studio Team System,是由微軟開發的一套具有高生產力、高整合性、可擴充套件的生命週期開發工具,VSTS使得整個開發團隊擁有更好的溝通與合作,並且保證了更好的質量。
- 問題2:單元測試中程式碼覆蓋率。
- 問題2解決方案:查閱資料。在做單元測試時,程式碼覆蓋率常常被拿來作為衡量測試好壞的指標,甚至,用程式碼覆蓋率來考核測試任務完成情況,比如,程式碼覆蓋率必須達到80%或 90%。於是乎,測試人員費盡心思設計案例覆蓋程式碼。用程式碼覆蓋率來衡量,有利也有有弊。程式碼覆蓋率的定義是
程式碼覆蓋率 = 程式碼的覆蓋程度
,是一種度量方式。程式碼覆蓋程度的度量方式又分為語句覆蓋、判定覆蓋、條件覆蓋、路徑覆蓋等。但是程式碼覆蓋率只能代表測試過多少程式碼,不能代表是否測試好這些程式碼。 - 問題3:“我有銀彈”的誤區,名詞解釋。
問題3解決方案:查閱資料。
「銀彈」:銀色子彈,在歐洲民間傳說及19世紀以來哥特小說風潮的影響下,銀色子彈往往被描繪成具有驅魔功效的武器,是針對狼人等超自然怪物的特效武器。後來也被比喻為具有極端有效性的解決方法,作為殺手鐗、最強殺招、王牌等的代稱。
因此在《構建之法》中的““沒有銀彈”是指沒有任何技術或管理上的進展,能夠獨立地許諾十年內使軟體系統專案生產率、可靠性或簡潔性獲得數量級上的進步。
在做軟體工程中,沒有足夠複雜性、易變性的軟體工程作業(或專案)要求,會使學生(或開發者)陷入“我有銀彈”的誤區,認為有可以解決一切問題的“銀彈”方法,究其原因,還是複雜性和易變性是軟體工程的基本要素。
程式碼除錯中的問題和解決過程
本書學習中目前還沒有程式碼。
[程式碼託管]
本書學習中目前還沒有程式碼。
github
連結為:https://github.com/jsjliyang 日後有程式碼會進行託管。
其他
《構建之法(第三版)》第2章《個人技術和流程》講到了單元測試、迴歸測試、效能分析的涵義和使用(均由VSTS提供),以及個人軟體開發流程PSP的最新標準PSP2.1,讓我瞭解到在實際的工程中不光包含程式碼的編寫,還包含很多規範性、有穩定結構的工作,都便於專案的順利進行;講到了軟體工程必須有複雜性、易變性兩個基本的要素,才能稱之為有價值的軟體工程。
學習進度條
章節數(新增/累積) | 部落格量(新增/累積) | |
---|---|---|
目標 | 共17章 | 共17篇 |
2018.10.23 | 1/1 | 1/1 |
2018.11.01 | 1/2 | 1/2 |
計劃在本學期讀完,希望自己可以做到。