如何提高C/C++大型專案的軟體質量?
如何提高c/c++大型專案的軟體質量?
軟體的交付質量一直是我們軟體開發專案最為關注的核心問題,那麼如何保證軟體專案,尤其是大型和超大型軟體專案的質量,不管在國內還是國外一直是許多軟體企業一直關注和研究的問題。
通常我們會在功能性,可用性,高效性,可測試性,可維護性和可移植性等6個維度來對軟體質量進行把控和評定。
1.功能性,即軟體是否滿足了客戶業務要求;
2.可用性,即衡量使用者使用軟體需要付出多大的努力,簡潔容易操作的軟體,對於客戶來說是非常重要的,就拿國內使用者量最大的微信來說,你會不會覺得它的設計總是那麼的簡潔易用,以至於使用了這麼多年,它的複雜度也沒有增加很多,大道至簡的產品設計和簡單好用往往能吸引更多的使用者;
3.可靠性,即軟體是否能夠一直處在一個穩定的狀態上滿足可用性;可靠性是質量的傳統定義和基本要求。當然對於不同應用場景的軟體有不同的要求,比如,大部分客戶端軟體來說,好用,絕大部分情況下能夠正常執行和處理問題就可以了,但是對於一些行業的軟體,如金融交易軟體,航天和醫療軟體,如果出現問題,那麼產生的代價是巨大的。
4.高效性,即衡量軟體正常執行需要耗費多少物理資源;程式的實際執行和事件處理效率。尤其是對於一些實時性要求較高的應用場景,幾毫秒的差異可能會帶來結果的截然不同。如網際網路金融的高頻交易軟體、策略交易軟體和軍用軟體。
5.可測試性,即能對每個功能模組做有效的測試,通常,我們的軟體不會只因為通過了測試就變得可靠;到了你能夠測試的時候,軟體已經建立了內在質量。並不是所有的軟體都可以被有效的測試。為了讓軟體可以有效地測試,我們必須在專案的開始的每一個環節都本著高質量的這個目標進行設計。
6.可維護性,即衡量對已經完成的軟體進行調整的可行度;好的軟體必須要有系統的缺陷追蹤和對客戶新需求的可擴充套件性。對於C++開發的許多系統來說,如果系統的設計不好,可能導致系統的維護成本和擴充套件成本都會非常高。大型的系統,可維護的設計都是從專案的每一步(需求分析,系統架構,詳細設計,質量保障,嚴格測試等)都進行精心設計和策劃而來的。
7.可移植性,即衡量軟體是否能夠方便地部署到不同的執行環境中;任何一個好的系統都應具備向新平臺的可移植性。
提高軟體質量的方法:
1. 質量保證(Quality Assurance,QA),一般是一個軟體公司內部負責“確保”產品質量已達到某種標準的組織。建立軟體測試過程模型,QA所做的測試都是在終端使用者層次上進行的。任何層次的迴歸測試都依賴於開發者本身。
2. 質量保障,QA必須成為開發過程中不可獲取的一部分,不能只等著開發人員扔過來一個軟體才開始測試。開發者有責任保障軟體產品的質量。QA要去體現這一點。不管是客戶,還是架構師,開發人員,還是QA測試人員都有全程參與保證專案質量的責任和義務,要保證高質量的軟體產品,系統架構師和軟體開發者在整個軟體開發過程中都必須把質量放在首位。
3. 建立PDCA迴圈,不光是對於開發人員的要求,也是對QA測試人員的要求。PDCA迴圈又叫質量環,是管理學中的一個通用模型。是英語單詞Plan、Do、Check和Adjust的第一個字母,PDCA迴圈就是按照這樣的順序進行軟體質量管理。
4. 避免重複程式碼,重構系統中重複的程式碼,減少不必要的干擾。
5. 及時測試已經完成的程式碼,建立缺陷跟蹤。
6. 定期對程式碼進行審查,做好程式碼review。
7. 規範的程式碼註釋,註釋的目的是使得其他開發人員能夠明白你所寫的這段程式碼是做什麼的?如果你的註釋能做到這點,那麼OK,那麼你的註釋是基本完美的。
8. 程式碼邏輯清晰,減少不必要的程式碼,寫每一段程式碼之前都多思考一下,假設著提出幾種方案,看哪種方案更加簡潔易懂,就使用那種方案,力求能寫出不言自明的程式碼。
9. 對多種能達到同一目的的演算法,比較分析,找出更加有效和高效的演算法。
10. 良好的命名習慣,函式變數名,變數,方法的命名要見詞達意,使得看得人能一眼就看懂。
11. 複雜的類,方法,引數過多的函式應當把它拆分成更小的單元來實現,保證每一個單元的職責單一。
12. 不要在程式碼裡面使用純數字,能使用巨集定義,經量使用巨集。
13. 多層巢狀的程式碼,分開來處理,不要巢狀過深。
14. 區域性變數保證其用途單一。
15. 提倡使用程式碼生成工具,尤其在大型系統開發中,使用自動化工具的好處是顯而易見的。