黃碧玲
(浙江省電子信息產(chǎn)品檢驗所,浙江杭州310007)
目前我國的軟件測試行業(yè)與發(fā)達(dá)國家相比還有比較大的差距,主要體現(xiàn)在軟件測試的意識、技術(shù)和規(guī)范上[1]。像歐美國家的軟件業(yè)起步較早,成熟度高,開發(fā)商對軟件質(zhì)量的控制力度很強(qiáng)。國內(nèi)軟件業(yè)起步晚,發(fā)展很不成熟,軟件測試更是處于弱勢地位。國內(nèi)軟件公司中能達(dá)到ISO和CMM(能力成熟度模型)高級認(rèn)證的很少,不規(guī)范的軟件開發(fā)普遍存在,很多方面沒有做到標(biāo)準(zhǔn)化和規(guī)范化。公司專職測試人員與開發(fā)人員的比例集中在1:3—1:5左右,這與國外軟件業(yè)1:1的比例相差甚遠(yuǎn)。隨著用戶對軟件質(zhì)量要求的提高,測試服務(wù)體系初步形成[2]。在軟件測試過程中,應(yīng)依靠技術(shù)與服務(wù)來征服用戶,注重測試方法與質(zhì)量。為了盡可能地減少測試風(fēng)險,引入風(fēng)險管理技術(shù)[3]。系統(tǒng)的風(fēng)險管理可以盡早識別項目中蘊(yùn)含的風(fēng)險、采取適當(dāng)?shù)念A(yù)防措施、制定應(yīng)變計劃,從而消除潛伏的風(fēng)險因素或降低風(fēng)險事件發(fā)生時對軟件項目造成的沖擊。
風(fēng)險就是在軟件測試過程中有可能發(fā)生的某些意外事情,并且在最糟的情況下對測試對象產(chǎn)生巨大的負(fù)面影響甚至導(dǎo)致失?。?]。軟件測試的風(fēng)險管理就是對可能遇到的風(fēng)險進(jìn)行計劃、識別、評估、應(yīng)對、監(jiān)控的全過程活動的總稱。
軟件測試是一種風(fēng)險管理策略,它可以用來驗證產(chǎn)品是否滿足了功能需求[5]。在基于需求規(guī)格說明書的測試中,風(fēng)險和測試之間的關(guān)系類似線性關(guān)系。即測試任何內(nèi)容都會降低軟件的風(fēng)險。如圖1所示。
但是在實際測試過程中,Pareto的“80/20”理論,即“80%的風(fēng)險來自于20%的功能”更符合風(fēng)險和測試之間的關(guān)系,因此風(fēng)險和測試之間的關(guān)系如圖2所示。
圖1 風(fēng)險和測試的線性關(guān)系
圖2 風(fēng)險和測試的曲線關(guān)系
從圖2中可以看出,測試人員應(yīng)采取一個更加合理的測試策略以優(yōu)化工作量的分配,即測試人需要首先關(guān)注圖中的F區(qū)域,從而減少風(fēng)險[6],如圖3所示:
圖3 不同策略下的風(fēng)險和測試
圖3中曲線可以看出,如果測試人員基于風(fēng)險劃分優(yōu)先級,并將測試工作量首先放在高風(fēng)險和高優(yōu)先級的區(qū)域,覆蓋測試項目50%的風(fēng)險需要付出的工作量要少得多[6]。
風(fēng)險管理的目的是通過管理軟件開發(fā)生命周期中的風(fēng)險,減少對測試項目造成不利影響的事件發(fā)生的可能性。在國際軟件測試認(rèn)證委員會大綱中,風(fēng)險管理包括風(fēng)險識別、風(fēng)險分析和風(fēng)險控制等3種活動。以國際軟件測試認(rèn)證委員會大綱為例,討論這3種風(fēng)險活動。
風(fēng)險識別應(yīng)在項目的早期進(jìn)行,在測試計劃開始時就進(jìn)行測試相關(guān)的風(fēng)險識別,以明晰對項目構(gòu)成威脅的因素,便于制定規(guī)避風(fēng)險和降低風(fēng)險的計劃及策略。
風(fēng)險識別過程是將不確定性轉(zhuǎn)變?yōu)槊鞔_的風(fēng)險陳述,并以文檔的形式記錄。根據(jù)不同的組織和項目特征可采用不同的風(fēng)險識別方法。不論是產(chǎn)品風(fēng)險,還是項目風(fēng)險,測試人員都可以通過專家咨詢、獨立評估、使用風(fēng)險模板、頭腦風(fēng)暴法、檢查表法等其中的一項或多項技術(shù)進(jìn)行識別[7]。
風(fēng)險分析是研究那些被識別出來的風(fēng)險,確定每個風(fēng)險的可能性及其嚴(yán)重程度,并得到每個風(fēng)險的風(fēng)險級別。
ISO/IEC 9126標(biāo)準(zhǔn)中列出了該質(zhì)量特性。風(fēng)險發(fā)生的可能性分為5種:非常低、低、中等、高、非常高;風(fēng)險嚴(yán)重程度分為5種:可忽略、次要、中等、嚴(yán)重、非常嚴(yán)重。
測試人員可以通過定量或定性的方法確定風(fēng)險的可能性和嚴(yán)重程度。通常來說,定量分析風(fēng)險比較困難,而定性分析則相對容易。因此測試過程中通常采用定性的方式定義風(fēng)險的可能性及其嚴(yán)重程度。我們也可以把定性和定量的方法相結(jié)合,將風(fēng)險發(fā)生的可能性和嚴(yán)重程度用相應(yīng)的數(shù)值代替,兩個值相乘得到一個量化的風(fēng)險等級,并且與風(fēng)險閥值相比較。若計算得到的風(fēng)險級別大于定義的風(fēng)險閥值,那么需要采取相關(guān)的風(fēng)險應(yīng)對措施以降低風(fēng)險級別。
2.3.1 風(fēng)險減輕
風(fēng)險級別由風(fēng)險發(fā)生的可能性和嚴(yán)重程度兩個因素決定,因此通過降低這兩者可以降低風(fēng)險的級別。當(dāng)它降低到一個可以接受的閥值,就認(rèn)為成功地實現(xiàn)了風(fēng)險的應(yīng)對。
2.3.2 風(fēng)險應(yīng)急
當(dāng)風(fēng)險成為現(xiàn)實,就需要相應(yīng)的應(yīng)急措施降低事件產(chǎn)生的影響程度。如果想讓風(fēng)險管理工作更有效,就需要采用“風(fēng)險排序”策略,重點關(guān)注“優(yōu)高先級”風(fēng)險,立即執(zhí)行風(fēng)險的應(yīng)對措施。
2.3.3 風(fēng)險轉(zhuǎn)移
不消除風(fēng)險,而是將風(fēng)險轉(zhuǎn)移給第三方。例如:買保險、軟件功能模塊的開發(fā)外包給第三方。
2.3.4 忽視或接受風(fēng)險及其產(chǎn)生的后果
識別的風(fēng)險經(jīng)過分析和評估之后,確認(rèn)在可接受范圍之內(nèi),這時可以接受風(fēng)險。其次,針對應(yīng)對風(fēng)險的成本比不應(yīng)對的成本還要高,也可以接受風(fēng)險。再者,如果風(fēng)險無法采取合適的應(yīng)對措施和活動來避免、轉(zhuǎn)移或者減輕風(fēng)險,也只能采取接受風(fēng)險的策略。
2.3.5 風(fēng)險追蹤
在風(fēng)險受到控制后,要及時進(jìn)行風(fēng)險跟蹤。監(jiān)視風(fēng)險狀況,檢查風(fēng)險應(yīng)對策略是否有效、跟蹤機(jī)制是否可行;不斷識別新的風(fēng)險點并制訂應(yīng)對措施。
測試風(fēng)險是不可避免的,它總是存在的[8]。在軟件測試工作中主要的風(fēng)險有:
(1)對產(chǎn)品認(rèn)識的風(fēng)險。質(zhì)量需求或產(chǎn)品特性理解不準(zhǔn)確,造成測試范圍分析誤差,結(jié)果某些地方始終測試不到或驗證標(biāo)準(zhǔn)不對;
(2)測試人員風(fēng)險。相應(yīng)的測試階段開始時,相關(guān)測試人員因故不到位;
(3)時間進(jìn)度風(fēng)險。需求突然變化,導(dǎo)致測試用例修改或重寫,測試時間不夠,資金投入增加;
(4)質(zhì)量目標(biāo)風(fēng)險。質(zhì)量標(biāo)準(zhǔn)不是很清晰,如適用性測試、易用性測試等;
(5)測試充分性的風(fēng)險。測試用例設(shè)計不到位,忽視了一些邊界條件、深層次的邏輯、用戶場景,部分缺陷不易重現(xiàn)等風(fēng)險;
(6)測試環(huán)境風(fēng)險。特定的測試環(huán)境不能到位,造成測試結(jié)果有誤差;
(7)測試工具風(fēng)險。相關(guān)測試工具未準(zhǔn)備好,或測試人員的對新工具無法熟練運用等;
(8)回歸測試一般不運行全部測試用例,是有選擇的執(zhí)行,必然帶來風(fēng)險。
針對上述軟件測試風(fēng)險,可以采用以下的方法進(jìn)行風(fēng)險控制:
(1)關(guān)于人員風(fēng)險,可以增加培訓(xùn),包括對項目背景培訓(xùn)、質(zhì)量標(biāo)準(zhǔn)培訓(xùn)、軟件測試工具培訓(xùn)、人員上崗培訓(xùn)等,以提高測試人員綜合素質(zhì),并對每個關(guān)鍵技術(shù)崗位培養(yǎng)后備人員,作好人員流動的準(zhǔn)備;
(2)關(guān)于時間進(jìn)度風(fēng)險,可采取前文提到的測試策略優(yōu)化措施,對測試用例和測試人員進(jìn)行優(yōu)先級排列,確定測試覆蓋率,選擇重要的和風(fēng)險級別高的測試開展,從而降低風(fēng)險和盡快提高軟件質(zhì)量;
(3)關(guān)于測試環(huán)境問題,可以通過事先列出要檢查的所有條目,測試環(huán)境設(shè)置好后,由其他人來檢查測試環(huán)境的搭建,便可有效降低測試環(huán)境不足帶來的風(fēng)險;
(4)對測試中不易重現(xiàn)的缺陷,要通過提高測試用例的覆蓋率(如達(dá)到99.9%)來降低這種風(fēng)險;
(5)對系統(tǒng)需求質(zhì)量低下或者不完整的,應(yīng)召集有關(guān)人員討論哪些是需要測試的、哪些是不需要測試的、測試深度等問題,以此來識別需求規(guī)格說明書中存在的不足;
(6)有些測試風(fēng)險可能會帶來非常嚴(yán)重的后果,應(yīng)該把這種高風(fēng)險轉(zhuǎn)化為低風(fēng)險,或進(jìn)行風(fēng)險轉(zhuǎn)移。如產(chǎn)品發(fā)布前夕,在某個不是很重要的新功能上發(fā)現(xiàn)一個嚴(yán)重缺陷,如果修正這個缺陷很有可能引起某個原有功能上的缺陷。這時處理這個缺陷所帶來的風(fēng)險就很大,對策是去掉那個新功能轉(zhuǎn)移這種風(fēng)險。
風(fēng)險管理是軟件測試過程中必不可少的一項工作。本文闡述了軟件測試風(fēng)險管理的主要過程、風(fēng)險和測試的關(guān)系、主要風(fēng)險及應(yīng)對措施。在測試項目實施中,必須嚴(yán)格按照風(fēng)險管理計劃對項目的風(fēng)險進(jìn)行管理,以規(guī)避風(fēng)險或?qū)L(fēng)險降低到較低的程度。
[1] 楠族開心果.國內(nèi)軟件測試現(xiàn)狀分析及對策[EB/OL].http://bbs.51testing.com/viewthread.php?tid=330009,2010-11-08.
[2] Wangyue中國軟件測試行業(yè)現(xiàn)狀調(diào)查報告[EB/OL].http://www.test8848.com/news/797.html,2011 -06 -23.
[3] 張瑾.軟件質(zhì)量管理指南[M].北京:電子工業(yè)出版社,2009:130-144.
[4] 郭寧,周曉華.軟件項目管理[M].北京:清華大學(xué)出版社、北京交通大學(xué)出版社,2007:199—206.
[5] William E Lewis,David Dobbs,Gunasekaran Veerapillai.陳紹英譯.軟件測試與持續(xù)質(zhì)量改進(jìn)[M].北京:人民郵電出版社,2011:9-16.
[6] 馬均飛,鄭文強(qiáng).軟件測試設(shè)計[M].北京:電子工業(yè)出版社,2011:252-269.
[7] Rex Black.劉琴,周震漪,鄭文強(qiáng),等譯.高級軟件測試卷1[M].北京:清華大學(xué)出版社,2011:48-58.
[8] 朱少民.全程軟件測試[M].北京:電子工業(yè)出版社,2007:358-374.