第1章 高品質軟體開發之道
本書的第1章之高品質軟體開發之道,作者用大量的篇幅介紹了“軟體品質”的基本概念,解釋了軟體品質的十大屬性。這十大品質屬性又分為功能性和非功能性兩類,功能性包括正確性,健壯性和可靠性;非功能性包括效能,易用性,清晰性,安全性,可擴充性,相容性和可移植性。
1.1 軟體品質的基本概念
在這一節裡,作者提出了“零缺陷”理念。
“沒有錯誤的程式世間難求”。我們也經常說,“零缺陷”只是一種理想狀態。然而,人在做一件事情時,由於存在很多不確定因素,一般不可能100%地達到目標。從嚴要求只有好處沒有壞處,因此有了“零缺陷”理念。如果沒有“零缺陷”的品質理念,也許缺陷就會成堆。這就是所謂的“取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,則無所得矣。”
1.2 細說軟體品質屬性
正確性,健壯性和可靠性
這是我們開發人員在開發產品時的基本要求!正確性的重要是不言而喻的,錯誤的東西不但毫無價值,反而會造成損失。健壯性和可靠性是軟體產品可用的保障,時不時崩潰或極不友好的軟體使用者肯定會不願意使用。
效能
效能通常是指軟體的“時間-空間”效率,而不僅是指軟體的運行速度。
特別是我目前從事的行業,因為經常要進行海量資料的處理,效能更是一個普遍關注的問題。解決效能問題,關鍵任務是找出效能瓶頸,不要在無關痛癢的地方瞎忙乎。就我而言,遇到最多的其實還是是時間效率多餘空間效率。因此,通常採用“空間換時間的做法”比較普遍。(可能是由於硬體的成本降低,大記憶體相對比較容易獲得)。
易用性
易用性最重要體現在需求人員(或產品設計師)對軟體產品的設計。
清晰性(可讀性、可維護性)
Martin Flower的《重構》一書中講過“任何一個傻瓜都能寫出電腦可以理解的代碼。唯有寫出人類容易理解的代碼,才是優秀的程式員。”足以可見可讀性的重要性!只有可讀的代碼才可維護。
安全性,可擴充性,相容性和可移植性,就從目前我所從事的行業來看,相容性和可擴充性相對更加重要些。與同行業相同強勢軟體的相容,版本之間的相容,等等。
經驗表明,如果“高品質”是“修補”出來的,毫無疑問會導致低生產率和高成本。如果能研製出某些好方法,將高品質與高生產率內建於開發過程之中,那麼就能自然的降低開發成本,這是軟體流程改善的目標。
1.3 人們關注的不僅僅是品質
軟體企業力求做到“魚,熊掌,美酒三者兼得”。
高品質既是軟體開發人員的技術追求,又是職業道德的要求。
品質與生產率之間存在相輔相成的關係。但不論如何,高生產率必須以品質合格為前提。
在過程混亂的企業裡,一批人馬累死累活地做完產品後,馬上又因品質問題被弄得焦頭爛額。
1.4 高品質軟體開發的基本方法
作者從建立軟體過程規範,複用,分而治之,最佳化與折中,技術評審,測試,品質保證和改錯等8個方面論述了軟體開發的基本流程。
無規矩不成方圓,軟體開發過程是一項長期複雜的活動,需要建立一套適合實際情況的規範和流程,並形成制度,從制度上對這一過程以保證。
“正常化”是區別“正規軍”和“遊擊隊”的根本標誌。
“請不要再發明相同的車輪子了。”是對複用的渴望。複用有利於提高品質,提高生產率,並減低成本。
最佳化工作不是可有可無的事情,而是必須要做的事情。
過程品質與產品品質存在某種因果關係,通常“好的過程”產生“好的產品”,而“差的過程”產生“差的產品”。當然,單獨的“品質保證”其實並不能保證品質。技術評審與測試才關注產品品質,技術評審和測試能彌補品質保證的不足,三者是相輔相成的品質管理方法。
1.5 關於軟體開發的一些常識和思考
在這一節裡作者從他自己的角度回答了一下問題:
1,有最好的程式設計語言嗎?
2,編程是一門藝術嗎?
3,編程時應該多提示嗎?
4,換更快的電腦還是換更快的演算法?
5,錯誤是否應該分等級?
並對一些錯誤的觀念給出了自己的觀點。