產(chǎn)品的軟件質(zhì)量對于產(chǎn)品的重要性眾所周知,但不同公司在產(chǎn)品軟件處于研發(fā)階段的質(zhì)量管理卻是相距甚遠(yuǎn)。今天葉子就用西游世界中的天、地、神、人、鬼五種仙級侃侃不同的公司在軟件研發(fā)質(zhì)量管理方面修煉到何種仙級?
一、質(zhì)量管理全無—鬼仙級
讀研期間,我到導(dǎo)師朋友的公司A公司實習(xí),A公司的主要業(yè)務(wù)是出售**行業(yè)軟件和根據(jù)自行開發(fā)的軟件平臺實施客戶項目的二次開發(fā)。
當(dāng)時A公司的研發(fā)人員10人左右,其中包含了我們4個實習(xí)生。我進(jìn)入的團隊里,其實就是一個資深的系統(tǒng)架構(gòu)師+ 4個實習(xí)生。我們實習(xí)生的工作是在已經(jīng)搭建好的軟件架構(gòu)上各負(fù)責(zé)一個模塊的開發(fā),每隔一到兩天,系統(tǒng)架構(gòu)師就會把我們叫到面前,將我們開發(fā)的代碼合入到他的源代碼版本中,build過程有問題就解決一下,沒有問題就直接合入了。當(dāng)時我睜大了眼睛,心想我這一實習(xí)生寫的代碼就進(jìn)入到平臺了?平臺就可以拿出去做客戶項目的軟件實施了?要知道我只是在本地電腦上稍微測試了兩把??煽吹郊軜?gòu)師淡定的樣子,就啥也沒提。和我一起開發(fā)的另一個男實習(xí)生,他對自己要求高些,他經(jīng)常想出各種方法測試他開發(fā)的模塊,以自己最大努力保證不出現(xiàn)bug。
可以說那時,A公司沒有一個專職的人來測試這個軟件平臺。軟件研發(fā)的質(zhì)量只存在于開發(fā)人員隨機的責(zé)任心,公司也沒有明確要求軟件工程師要詳細(xì)自測,要自己負(fù)責(zé)自己模塊的質(zhì)量。
即便如此,在當(dāng)年,我們開發(fā)的軟件平臺在**行業(yè)軟件測評中還是榮獲了“推薦軟件”的最高榮譽,也許當(dāng)時**行業(yè)其他的國產(chǎn)軟件更爛吧。

當(dāng)時A公司,可以說產(chǎn)品在研發(fā)端的質(zhì)量管理全無,葉子將其等同為西游世界的“鬼仙”級別,“鬼仙”代表人物是山神、土地,能以鬼魂之體長期存活,但因為是鬼魂之體,在許多方面會受到天地法則的克制。一旦利用該軟件平臺實施一個現(xiàn)實的客戶項目,軟件質(zhì)量問題都會隨之而來。

二 質(zhì)量控制活動只有測試—人仙級
后來經(jīng)歷了公司總?cè)藬?shù)100人,40-50人研發(fā)團隊的中小型公司B公司。B公司的主要產(chǎn)品是集成軟硬件的終端產(chǎn)品。B公司相對于A公司而言,在軟件研發(fā)的質(zhì)量管理實現(xiàn)了從無到有的跨越。
1、從人力設(shè)置來講,研發(fā)體系有獨立的測試部門,測試人員與開發(fā)人員的比例達(dá)到1:3。
2、從過程控制來講,測試標(biāo)準(zhǔn)和測試用例都是集公司的最強技術(shù)實力評審而來;公司有bug管理系統(tǒng)跟蹤測試提出問題的解決情況;發(fā)布的軟件經(jīng)過測試部100%用例覆蓋的驗證;針對產(chǎn)品發(fā)貨后的質(zhì)量問題的改進(jìn)措施能夠循環(huán)到下一步產(chǎn)品改進(jìn)中。

B公司軟件研發(fā)質(zhì)量管理從A公司依賴于一個開發(fā)人員的隨機責(zé)任心修煉到依賴于一個測試部門的規(guī)范管理,這是一個巨大的進(jìn)步。葉子將B公司軟件研發(fā)質(zhì)量管理列為“人仙”級別,西游世界中人仙的代表是觀音禪院中的老方丈,他活了幾百歲。B公司的產(chǎn)品在客戶環(huán)境中軟件質(zhì)量要求不算高,業(yè)務(wù)也不算復(fù)雜,所以B公司的軟件研發(fā)質(zhì)量管理暫時還能匹配B公司的業(yè)務(wù)發(fā)展,能夠?qū)崿F(xiàn)正常的產(chǎn)品迭代。但是B公司的軟件研發(fā)質(zhì)量僅僅依賴于產(chǎn)品測試,即便測試,也只開展了研發(fā)末端的系統(tǒng)測試,即便系統(tǒng)測試,也只開展了針對固定測試用例的手動系統(tǒng)測試,這種最基本的研發(fā)質(zhì)量管理,碰到軟件質(zhì)量要求比較高的產(chǎn)品,就難逃輪回之苦。

三? 系統(tǒng)性研發(fā)質(zhì)量管理—神仙級
職業(yè)生涯中有幸進(jìn)入了C公司,C公司當(dāng)時員工總數(shù)萬級,主盈業(yè)務(wù)是**行業(yè)集成軟硬件的設(shè)備提供商。光我進(jìn)入的產(chǎn)品線,就有1個測試部加3個軟件開發(fā)部,測試人員與開發(fā)人員比例也接近1:3。進(jìn)入C公司之后,才發(fā)現(xiàn)軟件研發(fā)質(zhì)量管理的道道如此之多,那么C公司相對于B公司增加了哪些法術(shù)來提升產(chǎn)品的軟件研發(fā)質(zhì)量呢?
法術(shù)一:軟件部門落實編程規(guī)范,每個軟件部門按照自己的業(yè)務(wù)特點,并吸收歷史上容易犯錯的一些編碼方式形成部門級別的編程規(guī)范,全部門學(xué)習(xí)并且考試,通過這種低成本的方式預(yù)防軟件bug的產(chǎn)生。
法術(shù)二:開發(fā)過程中開展代碼review,代碼review是請在業(yè)務(wù)上有經(jīng)驗的資深工程師review其他工程師的代碼。
法術(shù)三:重點產(chǎn)品軟件開展白盒、灰盒測試,C公司的測試部不只是在做系統(tǒng)級的黑盒測試,有一半的測試人員在做白盒及灰盒級別的測試。不過白盒和灰盒測試并不是針對所有產(chǎn)品軟件開展,只有部分質(zhì)量要求很高的產(chǎn)品而且公司評估無法僅僅靠黑盒測試來提升質(zhì)量的才采用。
法術(shù)四:測試部門成立技術(shù)研究小組,提升測試人員業(yè)務(wù)能力。當(dāng)時測試部除了按照產(chǎn)品類型分為幾個業(yè)務(wù)小組之外,還成立幾個技術(shù)研究小組,這些技術(shù)小組組織測試工程師研究協(xié)議標(biāo)準(zhǔn)、自動化測試方法等,并在部門內(nèi)互相學(xué)習(xí)和分享。C公司的測試人員在對產(chǎn)品功能性能的測試要求和測試重點的把握上,比開發(fā)人員更專業(yè)。
法術(shù)五:開展自動化測試,自動化測試的應(yīng)用使得測試效率大幅提升,這樣固定的測試用例都會盡量采用自動化方式,測試工程師的精力主要放在無測試用例參考的發(fā)散型測試上面。
法術(shù)六:增加客戶環(huán)境測試,在產(chǎn)品開發(fā)流程中增加實驗局階段,實驗局一般部署在能夠充分驗證產(chǎn)品質(zhì)量的客戶場景。實驗室的模擬測試環(huán)境跟真實的客戶環(huán)境還是有區(qū)別的,只有通過實驗局客戶環(huán)境驗證的產(chǎn)品,才能進(jìn)行批量出貨。
法術(shù)七:成立獨立的研發(fā)質(zhì)量保證部門,專職的質(zhì)量保證人員監(jiān)控并且審計質(zhì)量管理過程的合規(guī)性和質(zhì)量活動的有效性,負(fù)責(zé)組織年復(fù)一年的持續(xù)改進(jìn)活動。例如總體方案設(shè)計、軟件模塊設(shè)計、測試用例設(shè)計都必須走同行評審,評審過程質(zhì)量部監(jiān)控。

C公司軟件研發(fā)質(zhì)量管理從人員配備、流程管控、質(zhì)量保證、質(zhì)量控制等方面都比B公司跨越了一個階梯,實現(xiàn)了系統(tǒng)化的軟件研發(fā)質(zhì)量管理體系,并且該體系進(jìn)入持續(xù)改進(jìn)的良性循環(huán)中,所以葉子將C公司的軟件研發(fā)質(zhì)量管理列為神仙級。神仙已經(jīng)脫離了六道輪回之苦,只要不發(fā)生大的天劫一般都能安然無恙。C公司目標(biāo)是成為百年公司,葉子覺得有這個潛力。

四? 形神兼?zhèn)涞馁|(zhì)量管理—地仙級
D公司工作經(jīng)歷是最令人興奮,D公司總?cè)藬?shù)萬級以上,主盈業(yè)務(wù)同C公司一樣,是**行業(yè)集成軟硬件的設(shè)備提供商。在D公司,俺才經(jīng)歷和體驗什么是真正的軟件研發(fā)質(zhì)量管理。前面的C公司軟件研發(fā)質(zhì)量管理已經(jīng)完備了,那么D公司與C公司來比,到底在什么方面不同呢,葉子認(rèn)為關(guān)鍵兩點如下:
1.?質(zhì)量管理形神中“神”的存在,開發(fā)員工具備強烈的質(zhì)量意識。D公司一位開發(fā)人員說的話,我至今記憶猶新。那位開發(fā)人員說每次代碼合入SVN的時候,他都是膽顫心驚。而事實上,D公司每位開發(fā)人員在代碼合入之前,都在本地電腦上做過最大限度的自測試,也執(zhí)行了圈復(fù)雜度工具和靜態(tài)代碼走查工具的檢查,甚至有些重點模塊,軟件開發(fā)經(jīng)理已經(jīng)安排過同行評審。即便這樣,在合入SVN的時候,開發(fā)人員依然小心翼翼。在代碼合入之后,當(dāng)晚系統(tǒng)就會自動執(zhí)行持續(xù)集成+冒煙測試,第二天一早開發(fā)人員就會收到自己所開發(fā)模塊的bug郵件(如果有的話)。因為冒煙測試執(zhí)行的是比較基本的功能測試,開發(fā)人員如果多次持續(xù)集成收到較多bug的話,在績效方面肯定是受影響。還有一個問題回歸不通過,也是非常嚴(yán)肅的事情。如果開發(fā)人員修改一個問題后提交給測試部,測試反饋出來該問題回歸不通過,開發(fā)人員的績效也是受影響的。嚴(yán)重時,QA可以要求軟件開發(fā)團隊啟動內(nèi)部回溯。正是這些細(xì)致的切身可見的質(zhì)量管理措施,提高了大家的質(zhì)量意識。相對于那些概念型的質(zhì)量管理培訓(xùn),那些遙遠(yuǎn)的質(zhì)量案例,這些更能讓研發(fā)人員感同身受。
2.?項目管理中流程清晰、質(zhì)量目標(biāo)明確、質(zhì)量控制活動經(jīng)過細(xì)致地策劃。在D公司,項目計劃出來的同時,項目的質(zhì)量控制活動計劃和質(zhì)量目標(biāo)已經(jīng)給出并且經(jīng)過評審。整個項目開發(fā)過程中QA會密切監(jiān)控質(zhì)量計劃和目標(biāo)的達(dá)成情況。當(dāng)時我在D公司的項目正好碰到瀑布開發(fā)模式向敏捷開發(fā)模式轉(zhuǎn)換。軟件SE在需求規(guī)格分析分解清楚之后,將所有需求拆分為一個個story,軟件開發(fā)經(jīng)理將這些story根據(jù)緊急程度和基礎(chǔ)程度計劃到幾輪迭代中,并用JIRA工具管理起來,所有人都可以看到整個迭代開發(fā)的進(jìn)展?fàn)顟B(tài)。當(dāng)時我們的項目計劃了三輪迭代,每輪迭代里面都安排集中的代碼review+系統(tǒng)測試。當(dāng)然因為產(chǎn)品的商業(yè)用途,敏捷里面所提倡的“測試驅(qū)動開發(fā)”“結(jié)對編程”因成本投入太大,沒有開展,白盒和灰盒測試也因為投入太大,沒有開展。其他關(guān)鍵的質(zhì)量控制活動和質(zhì)量目標(biāo)都定義的非常清晰。下面表格給出部分質(zhì)量控制活動以及對應(yīng)的目標(biāo)定義,供大家理解和參考。


所以葉子將D公司的軟件研發(fā)質(zhì)量管理列為地仙級。西游世界中,最厲害的地仙是鎮(zhèn)元子。鎮(zhèn)元子的人參果,九千年成熟一次,聞一聞人參果,就能活三百六十歲;吃一顆,就能活四萬七千年。 試想,D公司的這些管理精髓如果其他公司能學(xué)到、用到,是不是有人參果的功效呢。有了人參果,D公司已經(jīng)是法力無邊,即使遭遇天劫也有渡劫之法。

五 只在書上見過沒有經(jīng)歷過的質(zhì)量管理—天仙級
至于天仙級別的軟件研發(fā)質(zhì)量管理公司,葉子沒有經(jīng)歷過。畢竟A、B、C、D四家公司都是以民用產(chǎn)品為主,并且產(chǎn)品本身不直接涉及到人身性命安全。葉子想,醫(yī)療器械、航空設(shè)備、汽車設(shè)備這些與大眾生命密切相關(guān)的產(chǎn)品,應(yīng)該比D公司執(zhí)行更加嚴(yán)格的研發(fā)質(zhì)量管理,在質(zhì)量管理上面理應(yīng)更高一籌。
六 小結(jié)
A、B、C、D四家公司規(guī)模不同,發(fā)展階段不同,所處的行業(yè)也不完全相同,本文也闡述了他們軟件研發(fā)質(zhì)量管理層次也是有差距的。質(zhì)量管理的首要原則是 “以顧客為中心”,產(chǎn)品的質(zhì)量要求因產(chǎn)品的使用場景不同客戶要求也不同,當(dāng)然每個公司都是把“客戶的滿意度”放到第一位,但在質(zhì)量管理方面每個公司都會盡力做到投入收益比的最佳狀態(tài),所以對一個公司而言,合適的質(zhì)量管理很重要。但葉子只是想說,即使目前的軟件研發(fā)質(zhì)量管理沒有拖業(yè)務(wù)發(fā)展的后腿,管理者也需要知道從哪些方面去提升,更高一個層次的質(zhì)量管理是什么樣子的,需要了解不同層次的質(zhì)量管理帶來投入和產(chǎn)出是什么,需要知道自己所在的團隊是否在當(dāng)前的質(zhì)量管理投入下做到了卓越。比如說,你所研發(fā)的產(chǎn)品也許不需要白盒這種級別的測試,但軟件編程規(guī)范和代碼review這些極低成本質(zhì)量提升手段,是否可以實施呢?
本文的內(nèi)容純屬個人工作中一些感想和拙見,如果能夠給讀者帶來一些啟發(fā),就已經(jīng)非常感動;如果有寫得不到位的地方,還想讀者海涵包容!
另本文用的幾個英文縮寫,解釋如下:
QA:Quality Assurance
SE: System Engineer
DI:? ?Defect Index
PMO:?ProjectManagement Office
SVN:?Subversion