1. 程式人生 > >2018-2019-1 20189215 《構建之法》第二章學習總結

2018-2019-1 20189215 《構建之法》第二章學習總結

教材學習內容總結

  1. 再次強調一遍!!!

    程式 = 資料結構 + 演算法
    軟體 = 程式 + 軟體工程
    軟體企業 = 軟體 + 商業模式

  2. 單元測試的功能是讓自己負責的模組功能定義儘量明確,模組內部的改變不會影響其他模組,而且模組的質量能夠得到穩定、量化的保證。
  3. 好的單元測試的標準

    • 單元測試應該在最基本的功能 / 引數上驗證程式的正確性
      單元測試要測試API中的每一個方法及每一個引數。
    • 單元測試必須由最熟悉程式碼的人(程式的作者)來寫
    • 單元測試過後,機器狀態保持不變
    • 單元測試要快
      一個測試的執行時間是幾秒鐘,而不是幾分鐘
    • 單元測試應該產生可重複、一致的結果
      單元測試不能解決所有的問題,不必期望它能夠發現所有的缺陷。
    • 獨立性
      單元測試的執行 / 通過 / 失敗不依賴於別的測試,可以人為地構造資料(不是造假資料!!!!),以保持單元測試的獨立性。
    • 單元測試應該覆蓋所有程式碼路徑
      但是100%的程式碼覆蓋率並不等同於100%的正確性!
    • 單元測試應該整合到自動測試的框架中
    • 單元測試必須和產品程式碼一起儲存和維護
  4. 迴歸測試建立在單元測試的基礎上,“迴歸”在這裡的意思可以理解為“迴歸到以前不正常的狀態”,其實我覺得應該如此理解“之前出錯的測試用例迴歸,驗證新的程式碼已經進行了修正”。
  5. 效能分析一般的做法是先用抽樣的方法找到效能瓶頸所在,然後對特定的模組用程式碼注入的方法進行詳細分析。
  6. 在效能優化之前,如果不經實際結果分析就盲目優化,也許就會事倍功半。
  7. PSP掌上游戲機個人軟體開發流程(Personal Software Process)指導了一個軟體工程師在接到一個任務之後應該怎麼做。

    PSP2.1

    計劃
    • 明確需求和其他相關因素,指明時間成本和依賴關係
    開發
    • 分析需求
    • 生成設計文件
    • 設計複審(和同事稽核設計文件)
    • 程式碼規範
    • 具體設計
    • 具體編碼(可以看到實際專案中,寫程式碼佔的比例很少)
    • 程式碼複審
    • 測試(包括自測、修改程式碼,提交修改)

    記錄用時
    測試報告
    計算工作量
    事後總結
    提出過程改進計劃

  8. 軟體設計的兩個原則
    ①單一職責原則(Single Responsibility Principle,SRP)
    一個模組(類)應該只有一個導致它變化的原因,一個模組應該完全對某個功能負責。
    ②開放-封閉原則(Open-Close Principle,OCP)
    軟體實體應該是可以擴充套件的,同時是不可修改的。

    • 允許擴充套件:當應用的需求發生改變時,我們可以對模組進行擴充套件,從而改變模組的功能。
    • 不允許修改:對模組行為進行擴充套件時,不必改變模組的本身。
  9. 擴充套件有資料方面、需求方面、使用者方面、軟體構建方面等各種類的擴充套件需求。

教材學習中的問題和解決過程

  • 問題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

計劃在本學期讀完,希望自己可以做到。

參考資料