1. 程式人生 > >《構建之法》第一、二、十六章閱讀筆記

《構建之法》第一、二、十六章閱讀筆記

gpo 技術 天都 出現問題 語言 出現 私有 .cn 概念

第一章

問題一:1.2.4軟件工程的目標--創造"足夠好"的軟件

什麽是好軟件?

原文1.一些同學認為,所謂好軟件,就是軟件沒有Bug,所謂軟件工程,就是把軟件中的Bug都消滅掉的過程。

軟件的行為和用戶的期望值不一樣就叫Bug

原文2.Bug的多少可以直接衡量一個軟件的開發效率、用戶滿意度、可靠性和可維護性。

首先對於第一點來說,我覺得無論多麽好的一個軟件或多或少都會有Bug,只不過是在用戶體驗的過程中讓用戶盡可能少的感受到缺陷,盡可能提高用戶的使用效率,這就是一個足夠好的軟件。而軟件的行為和用戶的期望值,我認為是針對開發者群體和用戶群體來說的。對開發者來說通過一定的軟件流程,在預計時間內發布出符合用戶需求,可維護、可繼續發展的軟件就是創造了一款比較好的軟件,但是一旦用戶增加可能會引發系統崩潰等一系列問題,這就是Bug。對於用戶來說,用戶希望的是隨時都能讓軟件正常使用,滿足自己的需求,一旦軟件出現問題,不能滿足用戶的需要,也是Bug。就比如說火車購票的軟件,我認為那是一個非常優秀的軟件,高峰時期一秒鐘可以出售700張車票,這對一個業界的開發者來說做的已經很優秀了。但是面對強大的購票群體來說,一秒鐘700張票仍然無法滿足人們的需求,與用戶的期望不一樣,也是一種BUG

第二點對於現階段的我來說這些概念可能會比較深一點,比如說我現在所接觸到的東西是一些簡單的前後端開發,我們在運行的過程中遇見的比較普通的錯誤,找到錯誤位置,增加一點或者刪除一點就好了。但是對於那種比較大的項目來說,我們應該如何通過Bug從代碼的角度更加細致更加具體的來分析軟件的開發效率、可靠性和可維護性,衡量軟件是否足夠好。還有就是,我們應該如何構建出這種開發體系?

第二章

個人感覺第二章有點不太懂,看了幾遍還是很懵。剛看的時候就覺得一直在題代碼覆蓋率,但是不是很清楚是什麽概念,然後看了幾篇博客,有了簡單的認識還有單元測試、回歸測試、效能分析這些概念感覺比較新,需要點時間來詳細了解。

代碼覆蓋率淺談:http://www.cnblogs.com/coderzh/archive/2009/03/29/1424344.html

代碼覆蓋率分析:http://blog.csdn.net/ffeiffei/article/details/6579280

如何編寫單元測試:http://www.cnblogs.com/mq0036/p/4100084.html

問題一:

通常代碼覆蓋率被拿來作為衡量單元測試好壞的指標。

原文1.單元測試應覆蓋所測單元的所有代碼路徑,包括錯誤處理路徑。為了保證代碼覆蓋率,單元測試必須測試公開的和私有的函數/方法。

原文2.100%的代碼覆蓋率並不等同於100%的正確性!

技術分享圖片

結合我在博客上看到的,我的問題是即使軟件的代碼覆蓋率達到了100%,但是會存在那些應該寫卻沒有寫的代碼,這樣代碼中就仍然有BUG無法解決,所以用代碼覆蓋率來衡量測試單元的好壞還有效嗎?

問題二:

效能分析還有點不是很明白,我的理解是通過抽樣或者代碼註入進行分析,降低程序的時間空間復雜度,從而提高程序運行速度。但是這個操作方法可能還不是很懂,希望有深入的理解!

問題三:

原文1.軟件的設計原則之一是開放--封閉原則。

允許擴展。當應用的需求發生改變時,我們可以對模塊進行擴展。

不允許修改。對模塊行為進行擴展時,不必改變模塊的本身。

分享幾個我覺得很好的博客

開放封閉原則http://blog.csdn.net/yqj2065/article/details/53508056

淺談Java的開放封閉原則https://www.cnblogs.com/chenmo-xpw/p/6649246.html

16

問題一:迷思之二:大家都喜歡創新

原文1.程序員們都堅信,沒有一門高級語言能像匯編語言那樣完美地完成工作。

其實我覺得技術每天都在變化,軟件的功能也在不斷地完善,新的語言也在出現。我們也應該對其他語言有所了解,就比如說最近幾年特別火的Python,以前人們總是說CJava是無可替代的,但是自從人工智能火了以後,Python就進入了大眾視野,人們用Python寫網絡爬蟲等,效率有了很大的提高。所以我們做軟件開發也不應該僅僅局限於JAVA,也應該適當地學習一下其它語言。

《構建之法》第一、二、十六章閱讀筆記