軟件測試的組織與管理(二)
作為軟件開發(fā)的重要環(huán)節(jié),軟件測試越來越受到人們的重視。隨著軟件開發(fā)規(guī)模的增大、復(fù)雜程度的增加,以尋找軟件中的錯誤為目的的測試工作就顯得更加困難。然而,為了盡可能多地找出程序中的錯誤,生產(chǎn)出高質(zhì)量的軟件產(chǎn)品,加強(qiáng)對測試工作的組織和管理就顯得尤為重要。
從軟件的生存周期看,測試往往指對程序的測試,這樣做的優(yōu)點是被測對象明確,測試的可操作性相對較強(qiáng)。但是,由于測試的依據(jù)是規(guī)格說明書、設(shè)計文檔和使用說明書,如果設(shè)計有錯誤,測試的質(zhì)量就難以保證。即使測試后發(fā)現(xiàn)是設(shè)計的錯誤,這時,修改的代價是相當(dāng)昂貴的。因此,較理想的做法應(yīng)該是對軟件的開發(fā)過程,按軟件工程各階段形成的結(jié)果,分別進(jìn)行嚴(yán)格的審查。軟件的生命周期可用圖1的流程表示。
為了確保軟件的質(zhì)量,對圖1的過程應(yīng)進(jìn)行嚴(yán)格的管理。雖然測試是在實現(xiàn)且經(jīng)驗證后進(jìn)行的,實際上,測試的準(zhǔn)備工作在分析和設(shè)計階段就開始了。
1.測試的過程及組織
當(dāng)設(shè)計工作完成以后,就應(yīng)該著手測試的準(zhǔn)備工作了,一般來講,由一位對整個系統(tǒng)設(shè)計熟悉的設(shè)計人員編寫測試大綱,明確測試的內(nèi)容和測試通過的準(zhǔn)則,設(shè)計完整合理的測試用例,以便系統(tǒng)實現(xiàn)后進(jìn)行全面測試。
在實現(xiàn)組將所開發(fā)的程序經(jīng)驗證后,提交測試組,由測試負(fù)責(zé)人組織測試,測試一般可按下列方式組織:
(1)首先,測試人員要仔細(xì)閱讀有關(guān)資料,包括規(guī)格說明、設(shè)計文檔、使用說明書及在設(shè)計過程中形成的測試大綱、測試內(nèi)容及測試的通過準(zhǔn)則,全面熟悉系統(tǒng),編寫測試計劃,設(shè)計測試用例,作好測試前的準(zhǔn)備工作。
(2)為了保證測試的質(zhì)量,將測試過程分成幾個階段,即:代碼審查、單元測試、集成測試和驗收測試。
(3)代碼會審:代碼會審是由一組人通過閱讀、討論和爭議對程序進(jìn)行靜態(tài)分析的過程。會審小組由組長,2~3名程序設(shè)計和測試人員及程序員組成。會審小組在充分閱讀待審程序文本、控制流程圖及有關(guān)要求、規(guī)范等文件基礎(chǔ)上,召開代碼會審會,程序員逐句講解程序的邏輯,并展開熱烈的討論甚至爭議,以揭示錯誤的關(guān)鍵所在。實踐表明,程序員在講解過程中能發(fā)現(xiàn)許多自己原來沒有發(fā)現(xiàn)的錯誤,而討論和爭議則進(jìn)一步促使了問題的暴露。例如,對某個局部性小問題修改方法的討論,可能發(fā)現(xiàn)與之有牽連的甚至能涉及到模塊的功說明、模塊間接口和系統(tǒng)總結(jié)構(gòu)的大問題,導(dǎo)致對需求定義的重定義、重設(shè)計驗證,大大改善了軟件的質(zhì)量。
(4)單元測試:單元測試集中在檢查軟件設(shè)計的最小單位—模塊上,通過測試發(fā)現(xiàn)實現(xiàn)該模塊的實際功能與定義該模塊的功能說明不符合的情況,以及編碼的錯誤。由于模塊規(guī)模小、功能單一、邏輯簡單,測試人員有可能通過模塊說明書和源程序,清楚地了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),采用結(jié)構(gòu)測試(白盒法)的用例,盡可能達(dá)到徹底測試,然后輔之以功能測試(黑盒法)的用例,使之對任何合理和不合理的輸入都能鑒別和響應(yīng)。高可靠性的模塊是組成可靠系統(tǒng)的堅實基礎(chǔ)。
(5)集成測試:集成測試是將模塊按照設(shè)計要求組裝起來同時進(jìn)行測試,主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。如數(shù)據(jù)穿過接口時可能丟失;一個模塊與另一個模塊可能有由于疏忽的問題而造成有害影響;把子功能組合起來可能不產(chǎn)生預(yù)期的主功能;個別看起來是可以接受的誤差可能積累到不能接受的程度;全程數(shù)據(jù)結(jié)構(gòu)可能有錯誤等。
(6)驗收測試:驗收測試的目的是向未來的用戶表明系統(tǒng)能夠像預(yù)定要求那樣工作。經(jīng)集成測試后,已經(jīng)按照設(shè)計把所有的模塊組裝成一個完整的軟件系統(tǒng),接口錯誤也已經(jīng)基本排除了,接著就應(yīng)該進(jìn)一步驗證軟件的有效性,這就是驗收測試的任務(wù),即軟件的功能和性能如同用戶所合理期待的那樣。
經(jīng)過上述的測試過程對軟件進(jìn)行測試后,軟件基本滿足開發(fā)的要求,測試宣告結(jié)束,經(jīng)驗收后,將軟件提交用戶。
2.測試方法的應(yīng)用
集成測試及其后的測試階段,一般采用黑盒方法。其策略包括:
(1)用邊值分析法和(或)等價分類法提出基本的測試用例;
(2)用猜測法補(bǔ)充新的測試用例;
(3)如果在程序的功能說明中含有輸入條件的組合,宜在一開始就用因果圖法,然后再按以上1、2兩步進(jìn)行。
單元測試的設(shè)計策略稍有不同。因為在為模塊設(shè)計程序用例時,可以直接參考模塊的源程序。所以單元測試的策略,總是把白盒法和黑盒法結(jié)合運用。具體做法有兩種:
a、先仿照上述步驟用黑盒法提出一組基本的測試用例,然后用白盒法作驗證。如果發(fā)現(xiàn)用黑盒法產(chǎn)生的測試用例未能滿足所需的覆蓋標(biāo)準(zhǔn),就用白盒法增補(bǔ)新的測試用例來滿足它們。覆蓋的標(biāo)準(zhǔn)應(yīng)該根據(jù)模塊的具體情況確定。對可靠性要求較高的模塊,通常要滿足條件組合覆蓋或路徑覆蓋標(biāo)準(zhǔn)。
b、先用白盒法分析模塊的邏輯結(jié)構(gòu),提出一批測試用例,然后根據(jù)模塊的功能用黑盒法進(jìn)行補(bǔ)充。
3.測試的人員組織
為了保證軟件的開發(fā)質(zhì)量,軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個過程。因此,對分析、設(shè)計和實現(xiàn)等各階段所得到的結(jié)果,包括需求規(guī)格說明、設(shè)計規(guī)格說明及源程序都應(yīng)進(jìn)行軟件測試。基于此,測試人員的組織也應(yīng)是分階段的。
(1)軟件的設(shè)計和實現(xiàn)都是基于需求分析規(guī)格說明進(jìn)行的。需求分析規(guī)格說明是否完整、正確、清晰是軟件開發(fā)成敗的關(guān)鍵。為了保證需求定義的質(zhì)量,應(yīng)對其進(jìn)行嚴(yán)格的審查。審查小組由下列人員組成:
組長:1人
成員:包括系統(tǒng)分析員,軟件開發(fā)管理者,軟件設(shè)計、開發(fā)和測試人員和用戶
(2)設(shè)計評審:軟件設(shè)計是將軟件需求轉(zhuǎn)換成軟件表示的過程。主要描繪出系統(tǒng)結(jié)構(gòu)、詳細(xì)的處理過程和數(shù)據(jù)庫模式。按照需求的規(guī)格說明對系統(tǒng)結(jié)構(gòu)的合理性、處理過程的正確性進(jìn)行評價,同時利用關(guān)系數(shù)據(jù)庫的規(guī)范化理論對數(shù)據(jù)庫模式進(jìn)行審查。評審小組由下列人員組成:
組長:1人
成員:包括系統(tǒng)分析員、軟件設(shè)計人員、測試負(fù)責(zé)人員各一人。
(3)程序的測試:軟件測試。是整個軟件開發(fā)過程中交付用戶使用前的最后階段,是軟件質(zhì)量保證的關(guān)鍵。軟件測試在軟件生存周期中橫跨兩個階段:通常在編寫出每一個模塊之后,就對它進(jìn)行必要的測試(稱為單元測試)。編碼與單元測試屬于軟件生存周期中的同一階段。該階段的測試工作,由編程組內(nèi)部人員進(jìn)行交叉測試(避免編程人員測試自己的程序)。這一階段結(jié)束后,進(jìn)入軟件生存周期的測試階段,對軟件系統(tǒng)進(jìn)行各種綜合測試。測試工作由專門的測試組完成,測試組設(shè)組長一名,負(fù)責(zé)整個測試的計劃、組織工作。測試組的其他成員由具有一定的分析、設(shè)計和編程經(jīng)驗的專業(yè)人員組成,人數(shù)根據(jù)具體情況可多可少,一般3~5人為宜。
4.軟件測試文件
軟件測試文件描述要執(zhí)行的軟件測試及測試的結(jié)果。由于軟件測試是一個很復(fù)雜的過程,同時也是設(shè)計軟件開發(fā)其它一些階段的工作,對于保證軟件的質(zhì)量和它的運行有著重要意義,必須把對它們的要求、過程及測試結(jié)果以正式的文件形式寫出。測試文件的編寫是測試工作規(guī)范化的一個組成部分。
測試文件不只在測試階段才考慮,它在軟件開發(fā)的需求分析階段就開始著手,因為測試文件與用戶有著密切的關(guān)系。在設(shè)計階段的一些設(shè)計方案也應(yīng)在測試文件中得到反映,以利于設(shè)計的檢驗。測試文件對于測試階段工作的指導(dǎo)與評價作用更是非常明顯的。需要特別指出的是,在已開發(fā)的軟件投入運行的維護(hù)階段,常常還要進(jìn)行再測試或回歸測試,這時仍須用到測試文件。
(1)測試文件的類型:根據(jù)測試文件所起的作用不同,通常把測試文件分成兩類,即測試計劃和測試分析報告。測試計劃詳細(xì)規(guī)定測試的要求,包括測試的目的和內(nèi)容、方法和步驟,以及測試的準(zhǔn)則等。由于要測試的內(nèi)容可能涉及到軟件的需求和軟件的設(shè)計,因此必須及早開始測試計劃的編寫工作。不應(yīng)在著手測試時,才開始考慮測試計劃。通常,測試計劃的編寫從需求分析階段開始,到軟件設(shè)計階段結(jié)束時完成。測試報告用來對測試結(jié)果的分析說明,經(jīng)過測試后,證實了軟件具有的能力,以及它的缺陷和限制,并給出評價的結(jié)論性意見,這些意見即是對軟件質(zhì)量的評價,又是決定該軟件能否交付用戶使用的依據(jù)。由于要反映測試工作的情況,自然要在測試階段內(nèi)編寫。
(2)測試文件的使用:測試文件的重要性表現(xiàn)在以下幾個方面:
a、驗證需求的正確性:測試文件中規(guī)定了用以驗證軟件需求的測試條件,研究這些測試條件對弄清用戶需求的意圖是十分有益的。
b、檢驗測試資源:測試計劃不僅要用文件的形式把測試過程規(guī)定下來,還應(yīng)說明測試工作必不可少的資源,進(jìn)而檢驗這些資源是否可以得到,即它的可用性如何。如果某個測試計劃已經(jīng)編寫出來,但所需資源仍未落實,那就必須及早解決。
c、明確任務(wù)的風(fēng)險:有了測試計劃,就可以弄清楚測試可以做什么,不能做什么。了解測試任務(wù)的風(fēng)險有助于對潛伏的可能出現(xiàn)的問題事先作好思想上和物質(zhì)上的準(zhǔn)備。
d、生成測試用例:測試用例的好壞決定著測試工作的效率,選擇合適的測試用例是作好測試工作的關(guān)鍵。在測試文件編制過程中,按規(guī)定的要求精心設(shè)計測試用例有重要的意義。
e、評價測試結(jié)果:測試文件包括測試用例,即若干測試數(shù)據(jù)及對應(yīng)的預(yù)期測試結(jié)果。完成測試后,將測試結(jié)果與預(yù)期的結(jié)果進(jìn)行比較,便可對已進(jìn)行的測試提出評價意見。
f、再測試:測試文件規(guī)定的和說明的內(nèi)容對維護(hù)階段由于各種原因的需求進(jìn)行再測試時,是非常有用的。
g、決定測試的有效性:完成測試后,把測試結(jié)果寫入文件,這對分析測試的有效性,甚至整個軟件的可用性提供了依據(jù)。同時還可以證實有關(guān)方面的結(jié)論。
(3)測試文件的編制
在軟件的需求分析階段,就開始測試文件的編制工作,各種測試文件的編寫應(yīng)按一定的格式進(jìn)行。
5.結(jié)束語
由于軟件開發(fā)的規(guī)模越來越大,因此軟件測試的重要性更加突出。本文主要對軟件測試各階段采用的方法和人員的組織進(jìn)行了簡要介紹。