構建之法-14-質量保障

質量保障

我們之前說過 軟件 = 程序 + 軟件工程 這個公式,那么軟件質量呢?所以,第一節主要介紹程序質量軟件工程質量,第二節介紹測試這個角色的工作。


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

  1. 一個團隊應該如何培養和安排各個角色呢?
  • 在初始階段(新項目,團隊進入一個新領域,人員剛進入一個項目),每個團隊成員都要盡量打通各個環節,多負責,把所有事情都搞懂,培養通才。
  • 當項目/產業發展到一定階段(進入陣地戰的時候),要大力提倡分工合作,培養專才。
  • 做好自己項目的架構和流程,讓所有人都能比較輕松地開展質量保障工作。
  • 培養“大家都要做QA,專人負責量化的測試,有條件多做測試自動化”的文化。
  • 弄清楚自己項目的特點,人員的特點,產業特點。避免簡單照搬別人的做法。不要聽說某某偉大的系統的開發/測試比例是多少,就哭著喊著也要同樣的比例……
  1. 測試人員的職業發展?

經過細致的分工之后,每人負責一小塊東西,怎么才能體現出個人獨特而巨大的價值呢?例如,你剛到一個軟件公司,領導讓你做“測試”這份工作,你怎么才能展現出你獨特的價值呢?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。