01《構建之法》閱讀筆記01

我命傾塵發表於2018-01-01

個人感受:

  我過去的做法:

  1、寫程式以實現功能為主要目的,所以有時候為了功能的保證,會不太注重演算法的使用。

  2、在團隊專案中,習慣了個人程式設計,和團隊成員溝通偏少。

  為什麼這樣不好:

  1、不注重演算法的使用,會無端的浪費空間和執行時間,使程式效率大大降低。

  2、團隊成員之間交流過少時,程式碼融合會經常出現問題,這是必然的。

  解決方法:

  1、在執行程式前不斷比較各種演算法的差距,擇優使用。

  2、兩天進行一次團隊程式碼合併,防止出現差異過多難以融合的問題。

重點記錄:

  《構建之法》,是一本非常接地氣的講《軟體工程》的書,它的作者鄒欣有長達20年的一線軟體開發經驗,他利用業餘時間在數所高校進行了長達6年的軟體工程教學實踐,總結出了在16周的時間內讓 我們通過 “做中學” ,來掌握實用的軟體工程技術的教學計劃。

  第一章《概論》,旨在說明軟體工程的概念。

  軟體工程可以定義為: 把系統的、有序的、可量化的方法應用到軟體的開發、運營和維護上的過程。它包括以下領域:原始碼管理+需求分析+程式設計+軟體構建+軟體測試+軟體維護+生命週期管理等,廣泛意義的軟體工程。還包括使用者體驗、使用者介面設計等, 軟體工程決定了軟體質量。

  軟體工程和電腦科學的關係,這也是容易讓人迷糊的兩個概念,像我們去年在高考填志願的時候就不清楚他們的區別,到學校後發現學的東西差異也不是很大。而實質上,這是兩個側重點差異很大的概念:從知識領域上說,電腦科學包含計算機體系結構、作業系統、圖形學、人工智慧等,而軟體工程包含軟體需求、軟體設計、軟體維護、軟體測試等。

  我印象較深的一句話是:軟體=程式+軟體工程。在我的理解中,程式、演算法、資料結構是基本功,但是在演算法和資料結構之上,軟體工程決定了軟體的質量,商業模式決定了一個軟體企業的成敗。

  說到軟體工程的目標,自然就是:創造足夠好的軟體。這個足夠好的定義,可不僅僅是沒有bug,評價軟體的維度包括:使用者滿意度、可靠性、軟體流程的質量、可維護性等。

  關於軟體流程的質量,指的是軟體團隊和開發流程的問題太多,導致團隊成員無法良好協作,按時交付。換句話說也是軟體團隊的bug, 流程的質量往往是我們的研發過程中最容易忽視的地方,反思目前我們的現狀,很多研發團隊的研發流程實質是處於真空狀態,開發人員甚至不知道怎樣才是軟體開發的正確姿勢。

  書中點的很明確,理解軟體工程,無非三點:研發出符合使用者需求的軟體、通過一定的軟體流程,在預計的時間內釋出“足夠好”的軟體、通過資料和其他方式展現所開發的軟體是可以維護和繼續發展的。

  第二章《個人技術和流程》,旨在說明一個合格的軟體工程師是應該具備哪些技能。

  合格的工程師,開發時需要同時考慮質量和效率,與之同時需要具備的技能包括:單元測試、效能分析、個人研發流程。在書中,作者也為我們羅列出了關於單元測試的正確做法:

  ① 單元測試應該在最低的功能/引數上驗證程式的正確性。

  ② 單元測試必須由最熟悉程式碼的人來寫。

  ③單元測試過後,機器狀態保持不變。

  ④ 單元測試要快。

  ⑤ 獨立性—測試的執行/通過/失敗不依賴於別的測試。

  ⑥ 覆蓋所有程式碼路徑

  ⑦ 單元測試應該整合到自動化測試的框架中

  ⑧ 單元測試必須和產品程式碼一起儲存和維護

  效能分析往往是開發人員容易忽視的步驟,這也是為什麼我們不停做效能優化的原因。

  個人開發流程要著眼的是整個軟體開發的流程,輸出高質量的產品,需要從個人開發流程上去找bug,然後不斷修正,工程師才會成長,產品質量才會不斷提高。

  第三章《軟體工程師的成長》,旨在個人能力的衡量與發展。 

  軟體系統的絕大部分模組都是由個人開發或維護的,這些單個的成員在團隊中的流程,以開發人員為例,流程如下:

  1、通過交流、實驗、快速原型等方法,理解問題、需求或任務。

  2、提出多種解決辦法並估計工作量。

  3、其中包括尋找以前的解決方案,因為很多工作是重複性的。

  4、與相關角色交流解決問題的提案,決定一個可行的方案。

  5、執行,把想法變成實際中能工作的程式碼,同時驗證方案的可行性和其他特性。

  6、和團隊的其他角色合作,在測試環境中測試實現方案,修復bug,如果此方案有嚴重的問題,那麼就考慮其他方案。

  7、在解決方案發布出去之後,對結果負責每個人的工作質量直接影響最終軟體的質量。

  軟體開發的工作量和質量的衡量標準,無非就是:專案/任務有多大?花了多少時間?質量如何?交付的程式碼中有多少缺陷?是否按時交付?

  而對於交付這個定義,還有以下兩種情況:

  1、在程式碼完成時,交付給測試人員的軟體。

  2、最終釋出時,交付給顧客可以用缺陷的數量來除以專案的大小。

  初級軟體工程師成長階段,需要掌握有以下幾點:

  1、積累軟體開發相關的知識,提升技術技能。

  2、積累問題領域的知識和經驗。

  3、對通用的軟體設計思想和軟體工程思想的理解。

  4、提升職業技能。

  5、實際成果。

  我的感受:

  我們作為軟體工程系的一名學生,要努力向這個方向發展,從而為以後成為一名多方面盡相完善的工程師打下堅實的專業基礎。

相關文章