我們之前說過 軟件 = 程序 + 軟件工程 這個公式,那么軟件質量呢?所以,第一節主要介紹程序質量和軟件工程質量,第二節介紹測試這個角色的工作。
14.1 軟件的質量
14.1.1 程序的質量
程序的質量體現在軟件外在功能的質量。例如,網站顯示查詢結果的速度;訂票網站能并發處理業務的吞吐量;支持同時在線用戶的數量。
我理解的程序的質量是代碼的好壞程度。。。
14.1.2 軟件工程的質量
軟件工程要做到兩個要求:快、便宜。軟件工程的質量體現在以下方面。
- 軟件開發過程的可見性(Visibility)
- 軟件開發過程的風險控制(Risk Manage-ment)
- 軟件內部模塊,項目中間階段的交付質量,項目管理工具的因素
- 軟件開發成本的控制(Cost Control)
- 內部質量指標的完成情況(Internal Bench-marks)
14.1.3 軟件工程的質量如何衡量
使用CMMI(全稱Capacity Maturity Model Inte-grated,能力成熟度模型集成)。不僅降低了項目的成本,而且提高了項目的質量和按期完成率。
14.1.4 質量的成本
要達到一定的軟件質量,是要付出成本的。
這些成本有被動響應的(例如應付各種故障),也有主動行動的(例如投資于學習或預防)。SWEBOK特別定義了軟件質量成本(Cost of Software Quality,CoSQ)的組成部分,其中包括預防、評審、內部故障、外部故障這四個方面,作者認為還要加上流程分析改進、投資改進等各種成本。
舉一個例子,碼農可能只花了20%時間用來開發新功能,而大部分時間就是花在上述的軟件質量成本:
預防:參加培訓,學習和應用新的測試框架。
評審:給同事做需求文檔復審、Spec復審、代碼復審,檢查外包公司提交的軟件模塊的質量。
內部故障:忙著修復測試人員發現的代碼錯誤。
外部故障:忙著調查和修復用戶報告的錯誤。
流程分析改進:分析眾多Bug產生的原因,忙著和隊友討論如何改進流程。
提高職業技能:參加一些學習班和討論,琢磨如何提高自我管理能力。
學習新的工具:學習新的開發工具。
14.2 軟件的質量保障工作
先弄清兩個角色的概念:
軟件測試(Test):運用一定的流程和工具,驗證軟件能實現預先設計的功能和特性,工作的流程和結果通常是可量化的。例如,測試用例、Bug、代碼覆蓋率、MTTF、軟件效能的參數等等。正因為流程和結果是明確定義的、可量化的,很多測試工作可以自動化。具體的測試分類可以看本書相關章節。
軟件質量保障工作(Quality Assurance):軟件團隊為了讓軟件達到事先定義的質量標準而進行的所有活動,包括測試工作。
14.2.1 測試的角色(Test)要獨立出來么
任何產業成熟到一定階段,獨立的質量保障角色都是必須的,團隊內部有QA角色,團隊外部也有獨立的QA角色。以藥品和食品為例,除了生產廠家自己的檢測之外,這些產品還要接受行業主管部門相關機構的檢測和認可(藥品檢驗,食品檢驗),才能上市。出現爭議時,還要由第三方機構來進行測試或認證。
14.2.2 和測試角色相關的問題
問題1 既然有專人負責,那我就不用負責了!
生活中有一個常見的歪理:既然有清潔工,那我亂扔點兒垃圾算什么,這才是他們的工作啊!盡管有專人負責測試工作,但是保證質量仍然是所有成員的職責。
問題2 盲目信任“專業人士”扮演的角色。
每個角色的水平不一樣,水平最差的角色往往對軟件質量的影響最大。專業人士做完之后,誰來負責測試?即使有專業人士扮演各種角色,還得有專人獨立地檢查驗證質量。
問題3 為了自己的角色而做績效優化。
分工之后,每個角色為了自己的績效而優化,會出現局部最優而全局未必最優的情況。
問題4 畫地為牢的分工。
有時分工導致鏈條過長,信息丟失。分工還可能會導致一個軟件的靈魂被切碎分給各個“角色”,每個功能都做得很賣力,但是整體就是不太行,明顯看出來是費了老大的勁給強行“集成”起來的。
問題5 無明確責任的分工。
如果一個開發者擔當了開發和測試的工作,那么就有可能出現:
“這代碼就是我寫的,哪會有什么錯……”
這種想法。
The End
- 一個團隊應該如何培養和安排各個角色呢?
- 在初始階段(新項目,團隊進入一個新領域,人員剛進入一個項目),每個團隊成員都要盡量打通各個環節,多負責,把所有事情都搞懂,培養通才。
- 當項目/產業發展到一定階段(進入陣地戰的時候),要大力提倡分工合作,培養專才。
- 做好自己項目的架構和流程,讓所有人都能比較輕松地開展質量保障工作。
- 培養“大家都要做QA,專人負責量化的測試,有條件多做測試自動化”的文化。
- 弄清楚自己項目的特點,人員的特點,產業特點。避免簡單照搬別人的做法。不要聽說某某偉大的系統的開發/測試比例是多少,就哭著喊著也要同樣的比例……
- 測試人員的職業發展?
經過細致的分工之后,每人負責一小塊東西,怎么才能體現出個人獨特而巨大的價值呢?例如,你剛到一個軟件公司,領導讓你做“測試”這份工作,你怎么才能展現出你獨特的價值呢?