軟件測(cè)試方法
單元測(cè)試的基本方法
綜合測(cè)試的基本方法
確認(rèn)測(cè)試的基本方法
系統(tǒng)測(cè)試的基本方法
驗(yàn)收測(cè)試
軟件測(cè)試的方法和技術(shù)是多種多樣的。
對(duì)于軟件測(cè)試技術(shù),可以從不同的角度加以分類:
從是否需要執(zhí)行被測(cè)軟件的角度,可分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試。
從測(cè)試是否針對(duì)系統(tǒng)的內(nèi)部結(jié)構(gòu)和具體實(shí)現(xiàn)算法的角度來(lái)看,可分為白盒測(cè)試和黑盒測(cè)試;
1、黑盒測(cè)試
黑盒測(cè)試也稱功能測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試,它是在已知產(chǎn)品所應(yīng)具有的功能,通過(guò)測(cè)試來(lái)檢測(cè)每個(gè)功能是否都能正常使用,在測(cè)試時(shí),把程序看作一個(gè)不能打開的黑盆子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,測(cè)試者在程序接口進(jìn)行測(cè)試,它只檢查程序功能是否按照需求規(guī)格說(shuō)明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)鋸而產(chǎn)生正確的輸出信息,并且保持外部信息(如數(shù)據(jù)庫(kù)或文件)的完整性。黑盒測(cè)試方法主要有等價(jià)類劃分、邊值分析、因—果圖、錯(cuò)誤推測(cè)等,主要用于軟件確認(rèn)測(cè)試。 “黑盒”法著眼于程序外部結(jié)構(gòu)、不考慮內(nèi)部邏輯結(jié)構(gòu)、針對(duì)軟件界面和軟件功能進(jìn)行測(cè)試?!昂诤小狈ㄊ歉F舉輸入測(cè)試,只有把所有可能的輸入都作為測(cè)試情況使用,才能以這種方法查出程序中所有的錯(cuò)誤。實(shí)際上測(cè)試情況有無(wú)窮多個(gè),人們不僅要測(cè)試所有合法的輸入,而且還要對(duì)那些不合法但是可能的輸入進(jìn)行測(cè)試。
2、白盒測(cè)試
白盒測(cè)試也稱結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試,它是知道產(chǎn)品內(nèi)部工作過(guò)程,可通過(guò)測(cè)試來(lái)檢測(cè)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說(shuō)明書的規(guī)定正常進(jìn)行,按照程序內(nèi)部的結(jié)構(gòu)測(cè)試程序,檢驗(yàn)程序中的每條通路是否都有能按預(yù)定要求正確工作,而不顧它的功能,白盒測(cè)試的主要方法有邏輯驅(qū)動(dòng)、基路測(cè)試等,主要用于軟件驗(yàn)證。
“白盒”法全面了解程序內(nèi)部邏輯結(jié)構(gòu)、對(duì)所有邏輯路徑進(jìn)行測(cè)試?!鞍缀小狈ㄊ歉F舉路徑測(cè)試。在使用這一方案時(shí),測(cè)試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測(cè)試數(shù)據(jù)。貫穿程序的獨(dú)立路徑數(shù)是天文數(shù)字。但即使每條路徑都測(cè)試了仍然可能有錯(cuò)誤。第一,窮舉路徑測(cè)試決不能查出程序違反了設(shè)計(jì)規(guī)范,即程序本身是個(gè)錯(cuò)誤的程序。第二,窮舉路徑測(cè)試不可能查出程序中因遺漏路徑而出錯(cuò)。第三,窮舉路徑測(cè)試可能發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯(cuò)誤。
3.ALAC(Act-like-a-customer)測(cè)試
ALAC測(cè)試是一種基于客戶使用產(chǎn)品的知識(shí)開發(fā)出來(lái)的測(cè)試方法。ALAC測(cè)試是基于復(fù)雜的軟件產(chǎn)品有許多錯(cuò)誤的原則。最大的受益者是用戶,缺陷查找和改正將針對(duì)哪些客戶最容易遇到的錯(cuò)誤。
單元測(cè)試的基本方法
單元測(cè)試的對(duì)象是軟件設(shè)計(jì)的最小單位——模塊。單元測(cè)試的依據(jù)是詳細(xì)設(shè)描述,單元測(cè)試應(yīng)對(duì)模塊內(nèi)所有重要的控制路徑設(shè)計(jì)測(cè)試用例,以便發(fā)現(xiàn)模塊內(nèi)部的錯(cuò)誤。單元測(cè)試多采用白盒測(cè)試技術(shù),系統(tǒng)內(nèi)多個(gè)模塊可以并行地進(jìn)行測(cè)試。
單元測(cè)試任務(wù)
單元測(cè)試任務(wù)包括:1、模塊接口測(cè)試;2、模塊局部數(shù)據(jù)結(jié)構(gòu)測(cè)試;3、模塊邊界條件測(cè)試;4、模塊中所有獨(dú)立執(zhí)行通路測(cè)試;5、模塊的各條錯(cuò)誤處理通路測(cè)試。
模塊接口測(cè)試是單元測(cè)試的基礎(chǔ)。只有在數(shù)據(jù)能正確流入、流出模塊的前提下,其他測(cè)試才有意義。測(cè)試接口正確與否應(yīng)該考慮下列因素:
1、輸入的實(shí)際參數(shù)與形式參數(shù)的個(gè)數(shù)是否相同;
2、輸入的實(shí)際參數(shù)與形式參數(shù)的屬性是否匹配;
3、輸入的實(shí)際參數(shù)與形式參數(shù)的量綱是否一致;
4、調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的個(gè)數(shù)是否與被調(diào)模塊的形參個(gè)數(shù)相同;
5、調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的屬性是否與被調(diào)模塊的形參屬性匹配;
6、調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的量綱是否與被調(diào)模塊的形參量綱一致;
7、調(diào)用預(yù)定義函數(shù)時(shí)所用參數(shù)的個(gè)數(shù)、屬性和次序是否正確;
8、是否存在與當(dāng)前入口點(diǎn)無(wú)關(guān)的參數(shù)引用;
9、是否修改了只讀型參數(shù);
10、對(duì)全程變量的定義各模塊是否一致;
11、是否把某些約束作為參數(shù)傳遞。
如果模塊內(nèi)包括外部輸入輸出,還應(yīng)該考慮下列因素:
1、文件屬性是否正確;
2、OPEN/CLOSE語(yǔ)句是否正確;
3、格式說(shuō)明與輸入輸出語(yǔ)句是否匹配;
4、緩沖區(qū)大小與記錄長(zhǎng)度是否匹配;
5文件使用前是否已經(jīng)打開;
6、是否處理了文件尾;
7、是否處理了輸入/輸出錯(cuò)誤;
8、輸出信息中是否有文字性錯(cuò)誤;
檢查局部數(shù)據(jù)結(jié)構(gòu)是為了保證臨時(shí)存儲(chǔ)在模塊內(nèi)的數(shù)據(jù)在程序執(zhí)行過(guò)程中完整、正確。局部數(shù)據(jù)結(jié)構(gòu)往往是錯(cuò)誤的根源,應(yīng)仔細(xì)設(shè)計(jì)測(cè)試用例,力求發(fā)現(xiàn)下面幾類錯(cuò)誤:
1、不合適或不相容的類型說(shuō)明;
2、變量無(wú)初值;
3、變量初始化或省缺值有錯(cuò);
4、不正確的變量名(拼錯(cuò)或不正確地截?cái)啵?
5、出現(xiàn)上溢、下溢和地址異常。
除了局部數(shù)據(jù)結(jié)構(gòu)外,如果可能,單元測(cè)試時(shí)還應(yīng)該查清全局?jǐn)?shù)據(jù)(例如FORTRAN的公用區(qū))對(duì)模塊的影響。
在模塊中應(yīng)對(duì)每一條獨(dú)立執(zhí)行路徑進(jìn)行測(cè)試,單元測(cè)試的基本任務(wù)是保證模塊中每條語(yǔ)句至少執(zhí)行一次。此時(shí)設(shè)計(jì)測(cè)試用例是為了發(fā)現(xiàn)因錯(cuò)誤計(jì)算、不正確的比較和不適當(dāng)?shù)目刂屏髟斐傻腻e(cuò)誤。此時(shí)基本路徑測(cè)試和循環(huán)測(cè)試是最常用且最有效的測(cè)試技術(shù)。計(jì)算中常見的錯(cuò)誤包括:
1、誤解或用錯(cuò)了算符優(yōu)先級(jí);
2、混合類型運(yùn)算;
3、變量初值錯(cuò);
4、精度不夠;
5、表達(dá)式符號(hào)錯(cuò)。
比較判斷與控制流常常緊密相關(guān),測(cè)試用例還應(yīng)致力于發(fā)現(xiàn)下列錯(cuò)誤:
1、不同數(shù)據(jù)類型的對(duì)象之間進(jìn)行比較;
2、錯(cuò)誤地使用邏輯運(yùn)算符或優(yōu)先級(jí);
3、因計(jì)算機(jī)表示的局限性,期望理論上相等而實(shí)際上不相等的兩個(gè)量相等;
4、比較運(yùn)算或變量出錯(cuò);
5、循環(huán)終止條件或不可能出現(xiàn);
6、迭代發(fā)散時(shí)不能退出;
7、錯(cuò)誤地修改了循環(huán)變量。
一個(gè)好的設(shè)計(jì)應(yīng)能預(yù)見各種出錯(cuò)條件,并預(yù)設(shè)各種出錯(cuò)處理通路,出錯(cuò)處理通路同樣需要認(rèn)真測(cè)試,測(cè)試應(yīng)著重檢查下列問(wèn)題:
1、輸出的出錯(cuò)信息難以理解;
2、記錄的錯(cuò)誤與實(shí)際遇到的錯(cuò)誤不相符;
3、在程序自定義的出錯(cuò)處理段運(yùn)行之前,系統(tǒng)已介入;
4、異常處理不當(dāng);
5、錯(cuò)誤陳述中未能提供足夠的定位出錯(cuò)信息。
邊界條件測(cè)試是單元測(cè)試中最后,也是最重要的一項(xiàng)任務(wù)。眾的周知,軟件經(jīng)常在邊界上失效,采用邊界值分析技術(shù),針對(duì)邊界值及其左、右設(shè)計(jì)測(cè)試用例,很有可能發(fā)現(xiàn)新的錯(cuò)誤。
單元測(cè)試過(guò)程
一般認(rèn)為單元測(cè)試應(yīng)緊接在編碼之后,當(dāng)源程序編制完成并通過(guò)復(fù)審和編譯檢查,便可開始單元測(cè)試。測(cè)試用例的設(shè)計(jì)應(yīng)與復(fù)審工作相結(jié)合,根據(jù)設(shè)計(jì)信息選取測(cè)試數(shù)據(jù),將增大發(fā)現(xiàn)上述各類錯(cuò)誤的可能性。在確定測(cè)試用例的同時(shí),應(yīng)給出期望結(jié)果。
應(yīng)為測(cè)試模塊開發(fā)一個(gè)驅(qū)動(dòng)模塊(driver)和(或)若干個(gè)樁模塊(stub),下圖顯示了一般單元測(cè)試的環(huán)境。驅(qū)動(dòng)模塊在大多數(shù)場(chǎng)合稱為“主程序”,它接收測(cè)試數(shù)據(jù)并將這些數(shù)據(jù)傳遞到被測(cè)試模塊,被測(cè)試模塊被調(diào)用后,“主程序”打印“進(jìn)入-退出”消息。
驅(qū)動(dòng)模塊和樁模塊是測(cè)試使用的軟件,而不是軟件產(chǎn)品的組成部分,但它需要一定的開發(fā)費(fèi)用。若驅(qū)動(dòng)和樁模塊比較簡(jiǎn)單,實(shí)際開銷相對(duì)低些。遺憾的是,僅用簡(jiǎn)單的驅(qū)動(dòng)模塊和樁模塊不能完成某些模塊的測(cè)試任務(wù),這些模塊的單元測(cè)試只能采用下面討論的綜合測(cè)試方法。
提高模塊的內(nèi)聚度可簡(jiǎn)化單元測(cè)試,如果每個(gè)模塊只能完成一個(gè),所需測(cè)試用例數(shù)目將顯著減少,模塊中的錯(cuò)誤也更容易發(fā)現(xiàn)。
綜合測(cè)試的基本方法
時(shí)常有這樣的情況發(fā)生,每個(gè)模塊都能單獨(dú)工作,但這些模塊集成在一起之后卻不能正常工作。主要原因是,模塊相互調(diào)用時(shí)接口會(huì)引入許多新問(wèn)題。例如,數(shù)據(jù)經(jīng)過(guò)接口可能丟失;一個(gè)模塊對(duì)另一模塊可能造成不應(yīng)有的影響;幾個(gè)子功能組合起來(lái)不能實(shí)現(xiàn)主功能;誤差不斷積累達(dá)到不可接受的程度;全局?jǐn)?shù)據(jù)結(jié)構(gòu)出現(xiàn)錯(cuò)誤,等等。綜合測(cè)試是組裝軟件的系統(tǒng)測(cè)試技術(shù),按設(shè)計(jì)要求把通過(guò)單元測(cè)試的各個(gè)模塊組裝在一起之后,進(jìn)行綜合測(cè)試以便發(fā)現(xiàn)與接口有關(guān)的各種錯(cuò)誤。
某設(shè)計(jì)人員習(xí)慣于把所有模塊按設(shè)計(jì)要求一次全部組裝起來(lái),然后進(jìn)行整體測(cè)試,這稱為非增量式集成。這種方法容易出現(xiàn)混亂。因?yàn)闇y(cè)試時(shí)可能發(fā)現(xiàn)一大堆錯(cuò)誤,為每個(gè)錯(cuò)誤定位和糾正非常困難,并且在改正一個(gè)錯(cuò)誤的同時(shí)又可能引入新的錯(cuò)誤,新舊錯(cuò)誤混雜,更難斷定出錯(cuò)的原因和位置。與之相反的是增量式集成方法,程序一段一段地?cái)U(kuò)展,測(cè)試的范圍一步一步地增大,錯(cuò)誤易于定位和糾正,界面的測(cè)試亦可做到完全徹底。下面討論兩種增量式集成方法。
1、自頂向下集成
自頂向下集成是構(gòu)造程序結(jié)構(gòu)的一種增量式方式,它從主控模塊開始,按照軟件的控制層次結(jié)構(gòu),以深度優(yōu)先或廣度優(yōu)先的策略,逐步把各個(gè)模塊集成在一起。深度優(yōu)先策略首先是把主控制路徑上的模塊集成在一起,至于選擇哪一條路徑作為主控制路徑,這多少帶有隨意性,一般根據(jù)問(wèn)題的特性確定。以下圖為例,若選擇了最左一條路徑,首先將模塊M1,M2,M5和M8集成在一起,再將M6集成起來(lái),然后考慮中間和右邊的路徑。廣度優(yōu)先策略則不然,它沿控制層次結(jié)構(gòu)水平地向下移動(dòng)。仍以下圖為例,它首先把M2、M3和M4與主控模塊集成在一起,再將M5和M6和其他模塊集資集成起來(lái)。
自頂向下綜合測(cè)試的具體步驟為:
1、以主控模塊作為測(cè)試驅(qū)動(dòng)模塊,把對(duì)主控模塊進(jìn)行單元測(cè)試時(shí)引入的所有樁模塊用實(shí)際模塊替代;
2、依據(jù)所選的集成策略(深度優(yōu)先或廣度優(yōu)先),每次只替代一個(gè)樁模塊;
3、每集成一個(gè)模塊立即測(cè)試一遍;
4、只有每組測(cè)試完成后,才著手替換下一個(gè)樁模塊;
5、為避免引入新錯(cuò)誤,須不斷地進(jìn)行回歸測(cè)試(即全部或部分地重復(fù)已做過(guò)的測(cè)試)。
從第二步開始,循環(huán)執(zhí)行上述步驟,直至整個(gè)程序結(jié)構(gòu)構(gòu)造完畢。下圖中,實(shí)線表示已部分完成的結(jié)構(gòu),若采用深度優(yōu)先策略,下一步將用模塊M7替換樁模塊S7,當(dāng)然M7本身可能又帶有樁模塊,隨后將被對(duì)應(yīng)的實(shí)際模塊一一替代。
自頂向下集成的優(yōu)點(diǎn)在于能盡早地對(duì)程序的主要控制和決策機(jī)制進(jìn)行檢驗(yàn),因此較早地發(fā)現(xiàn)錯(cuò)誤。缺點(diǎn)是在測(cè)試較高層模塊時(shí),低層處理采用樁模塊替代,不能反映真實(shí)情況,重要數(shù)據(jù)不能及時(shí)回送到上層模塊,因此測(cè)試并不充分。解決這個(gè)問(wèn)題有幾種辦法,第一種是把某些測(cè)試推遲到用真實(shí)模塊替代樁模塊之后進(jìn)行,第二種是開發(fā)能模擬真實(shí)模塊的樁模塊;第三種是自底向上集成模塊。第一種方法又回退為非增量式的集成方法,使錯(cuò)誤難于定位和糾正,并且失去了在組裝模塊時(shí)進(jìn)行一些特定測(cè)試的可能性;第二種方法無(wú)疑要大大增加開銷;第三種方法比較切實(shí)可行,下面專門討論。
2、自底向上集成
自底向上測(cè)試是從“原子”模塊(即軟件結(jié)構(gòu)最低層的模塊)開始組裝測(cè)試,因測(cè)試到較高層模塊時(shí),所需的下層模塊功能均已具備,所以不再需要樁模塊。
自底向上綜合測(cè)試的步驟分為:
1、把低層模塊組織成實(shí)現(xiàn)某個(gè)子功能的模塊群(cluster);
2、開發(fā)一個(gè)測(cè)試驅(qū)動(dòng)模塊,控制測(cè)試數(shù)據(jù)的輸入和測(cè)試結(jié)果的輸出;
3、對(duì)每個(gè)模塊群進(jìn)行測(cè)試;
4、刪除測(cè)試使用的驅(qū)動(dòng)模塊,用較高層模塊把模塊群組織成為完成更大功能的新模塊群。
從第一步開始循環(huán)執(zhí)行上述各步驟,直至整個(gè)程序構(gòu)造完畢。
下圖說(shuō)明了上述過(guò)程。首先“原子”模塊被分為三個(gè)模塊群,每個(gè)模塊群引入一個(gè)驅(qū)動(dòng)模塊進(jìn)行測(cè)試。因模塊群1、模塊群2中的模塊均隸屬于模塊Ma,因此在驅(qū)動(dòng)模塊D1、D2去掉后,模塊群1與模塊群2直接與Ma接口,這時(shí)可對(duì)MaD3被去掉后,M3與模塊群3直接接口,可對(duì)Mb進(jìn)行集成測(cè)試,最后Ma、Mb和Mc全部集成在一起進(jìn)行測(cè)試。
自底向上集成方法不用樁模塊,測(cè)試用例的設(shè)計(jì)亦相對(duì)簡(jiǎn)單,但缺點(diǎn)是程序最后一個(gè)模塊加入時(shí)才具有整體形象。它與自頂向綜合測(cè)試方法優(yōu)缺點(diǎn)正好相反。因此,在測(cè)試軟件系統(tǒng)時(shí),應(yīng)根據(jù)軟件的特點(diǎn)和工程的進(jìn)度,選用適當(dāng)?shù)臏y(cè)試策略,有時(shí)混和使用兩種策略更為有效,上層模塊用自頂向下的方法,下層模塊用自底向上的方法。
此外,在綜合測(cè)試中尤其要注意關(guān)鍵模塊,所謂關(guān)鍵模塊一般都具有下述一或多個(gè)特征:①對(duì)應(yīng)幾條需求;②具有高層控制功能;③復(fù)雜、易出錯(cuò);④有特殊的性能要求。關(guān)鍵模塊應(yīng)盡早測(cè)試,并反復(fù)進(jìn)行回歸測(cè)試。
確認(rèn)測(cè)試的基本方法
通過(guò)綜合測(cè)試之后,軟件已完全組裝起來(lái),接口方面的錯(cuò)誤也已排除,軟件測(cè)試的最后一步——確認(rèn)測(cè)試即可開始。確認(rèn)測(cè)試應(yīng)檢查軟件能否按合同要求進(jìn)行工作,即是否滿足軟件需求說(shuō)明書中的確認(rèn)標(biāo)準(zhǔn)。
1. 確認(rèn)測(cè)試標(biāo)準(zhǔn)
實(shí)現(xiàn)軟件確認(rèn)要通過(guò)一系列墨盒測(cè)試。確認(rèn)測(cè)試同樣需要制訂測(cè)試計(jì)劃和過(guò)程,測(cè)試計(jì)劃應(yīng)規(guī)定測(cè)試的種類和測(cè)試進(jìn)度,測(cè)試過(guò)程則定義一些特殊的測(cè)試用例,旨在說(shuō)明軟件與需求是否一致。無(wú)是計(jì)劃還是過(guò)程,都應(yīng)該著重考慮軟件是否滿足合同規(guī)定的所有功能和性能,文檔資料是否完整、準(zhǔn)確人機(jī)界面和其他方面(例如,可移植性、兼容性、錯(cuò)誤恢復(fù)能力和可維護(hù)性等)是否令用戶滿意。
確認(rèn)測(cè)試的結(jié)果有兩種可能,一種是功能和性能指標(biāo)滿足軟件需求說(shuō)明的要求,用戶可以接受;另一種是軟件不滿足軟件需求說(shuō)明的要求,用戶無(wú)法接受。項(xiàng)目進(jìn)行到這個(gè)階段才發(fā)現(xiàn)嚴(yán)重錯(cuò)誤和偏差一般很難在預(yù)定的工期內(nèi)改正,因此必須與用戶協(xié)商,尋求一個(gè)妥善解決問(wèn)題的方法。
2. 配置復(fù)審
確認(rèn)測(cè)試的另一個(gè)重要環(huán)節(jié)是配置復(fù)審。復(fù)審的目的在于保證軟件配置齊全、分類有序,并且包括軟件維護(hù)所必須的細(xì)節(jié)。
3. α、β測(cè)試
事實(shí)上,軟件開發(fā)人員不可能完全預(yù)見用戶實(shí)際使用程序的情況。例如,用戶可能錯(cuò)誤的理解命令,或提供一些奇怪的數(shù)據(jù)組合,亦可能對(duì)設(shè)計(jì)者自認(rèn)明了的輸出信息迷惑不解,等等。因此,軟件是否真正滿足最終用戶的要求,應(yīng)由用戶進(jìn)行一系列“驗(yàn)收測(cè)試”。驗(yàn)收測(cè)試既可以是非正式的測(cè)試,也可以有計(jì)劃、有系統(tǒng)的測(cè)試。有時(shí),驗(yàn)收測(cè)試長(zhǎng)達(dá)數(shù)周甚至數(shù)月,不斷暴露錯(cuò)誤,導(dǎo)致開發(fā)延期。一個(gè)軟件產(chǎn)品,可能擁有眾多用戶,不可能由每個(gè)用戶驗(yàn)收,此時(shí)多采用稱為α、β測(cè)試的過(guò)程,以期發(fā)現(xiàn)那些似乎只有最終用戶才能發(fā)現(xiàn)的問(wèn)題。
α測(cè)試是指軟件開發(fā)公司組織內(nèi)部人員模擬各類用戶行對(duì)即將面市軟件產(chǎn)品(稱為α版本)進(jìn)行測(cè)試,試圖發(fā)現(xiàn)錯(cuò)誤并修正。α測(cè)試的關(guān)鍵在于盡可能逼真地模擬實(shí)際運(yùn)行環(huán)境和用戶對(duì)軟件產(chǎn)品的操作并盡最大努力涵蓋所有可能的用戶操作方式。經(jīng)過(guò)α測(cè)試調(diào)整的軟件產(chǎn)品稱為β版本。緊隨其后的β測(cè)試是指軟件開發(fā)公司組織各方面的典型用戶在日常工作中實(shí)際使用β版本,并要求用戶報(bào)告異常情況、提出批評(píng)意見。然后軟件開發(fā)公司再對(duì)β版本進(jìn)行改錯(cuò)和完善。
系統(tǒng)測(cè)試的基本方法
計(jì)算機(jī)軟件是基于計(jì)算機(jī)系統(tǒng)的一個(gè)重要組成部分,軟件開發(fā)完畢后應(yīng)與系統(tǒng)中其它成分集成在一起,此時(shí)需要進(jìn)行一系列系統(tǒng)集成和確認(rèn)測(cè)試。對(duì)這些測(cè)試的詳細(xì)討論已超出軟件工程的范圍,這些測(cè)試也不可能僅由軟件開發(fā)人員完成。在系統(tǒng)測(cè)試之前,軟件工程師應(yīng)完成下列工作:
(1)為測(cè)試軟件系統(tǒng)的輸入信息設(shè)計(jì)出錯(cuò)處理通路;
(2)設(shè)計(jì)測(cè)試用例,模擬錯(cuò)誤數(shù)據(jù)和軟件界面可能發(fā)生的錯(cuò)誤,記錄測(cè)試結(jié)果,為系統(tǒng)測(cè)試提供經(jīng)驗(yàn)和幫助;
(3)參與系統(tǒng)測(cè)試的規(guī)劃和設(shè)計(jì),保證軟件測(cè)試的合理性。
系統(tǒng)測(cè)試應(yīng)該由若干個(gè)不同測(cè)試組成,目的是充分運(yùn)行系統(tǒng),驗(yàn)證系統(tǒng)各部件是否都能政黨工作并完成所賦予的任務(wù)。下面簡(jiǎn)單討論幾類系統(tǒng)測(cè)試。
1、恢復(fù)測(cè)試
恢復(fù)測(cè)試主要檢查系統(tǒng)的容錯(cuò)能力。當(dāng)系統(tǒng)出錯(cuò)時(shí),能否在指定時(shí)間間隔內(nèi)修正錯(cuò)誤并重新啟動(dòng)系統(tǒng)?;謴?fù)測(cè)試首先要采用各種辦法強(qiáng)迫系統(tǒng)失敗,然后驗(yàn)證系統(tǒng)是否能盡快恢復(fù)。對(duì)于自動(dòng)恢復(fù)需驗(yàn)證重新初始化(reinitialization)、檢查點(diǎn)(checkpointing mechanisms)、數(shù)據(jù)恢復(fù)(data recovery)和重新啟動(dòng) (restart)等機(jī)制的正確性;對(duì)于人工干預(yù)的恢復(fù)系統(tǒng),還需估測(cè)平均修復(fù)時(shí)間,確定其是否在可接受的范圍內(nèi)。
2、安全測(cè)試
安全測(cè)試檢查系統(tǒng)對(duì)非法侵入的防范能力。安全測(cè)試期間,測(cè)試人員假扮非法入侵者,采用各種辦法試圖突破防線。例如,①想方設(shè)法截取或破譯口令;②專門定做軟件破壞系統(tǒng)的保護(hù)機(jī)制;③故意導(dǎo)致系統(tǒng)失敗,企圖趁恢復(fù)之機(jī)非法進(jìn)入;④試圖通過(guò)瀏覽非保密數(shù)據(jù),推導(dǎo)所需信息,等等。理論上講,只要有足夠的時(shí)間和資源,沒(méi)有不可進(jìn)入的系統(tǒng)。因此系統(tǒng)安全設(shè)計(jì)的準(zhǔn)則是,使非法侵入的代價(jià)超過(guò)被保護(hù)信息的價(jià)值。此時(shí)非法侵入者已無(wú)利可圖。
3、強(qiáng)度測(cè)試
強(qiáng)度測(cè)試檢查程序?qū)Ξ惓G闆r的抵抗能力。強(qiáng)度測(cè)試總是迫使系統(tǒng)在異常的資源配置下運(yùn)行。例如,①當(dāng)中斷的正常頻率為每秒一至兩個(gè)時(shí),運(yùn)行每秒產(chǎn)生十個(gè)中斷的測(cè)試用例;②定量地增長(zhǎng)數(shù)據(jù)輸入率,檢查輸入子功能的反映能力;③運(yùn)行需要最大存儲(chǔ)空間(或其他資源)的測(cè)試用例;④運(yùn)行可能導(dǎo)致虛存操作系統(tǒng)崩潰或磁盤數(shù)據(jù)劇烈抖動(dòng)的測(cè)試用例,等等。
4、 性能測(cè)試
對(duì)于那些實(shí)時(shí)和嵌入式系統(tǒng),軟件部分即使?jié)M足功能要求,也未必能夠滿足性能要求,雖然從單元測(cè)試起,每一測(cè)試步驟都包含性能測(cè)試,但只有當(dāng)系統(tǒng)真正集成之后,在真實(shí)環(huán)境中才能全面、可靠地測(cè)試運(yùn)行性能系統(tǒng)性能測(cè)試是為了完成這一任務(wù)。性能測(cè)試有時(shí)與強(qiáng)度測(cè)試相結(jié)合,經(jīng)常需要其他軟硬件的配套支持。
軟件測(cè)試的基本概念和方法軟件測(cè)試的基本概念
軟件測(cè)試方法之所以沒(méi)能完全標(biāo)準(zhǔn)化和統(tǒng)一化,主要原因是因?yàn)檐浖a(chǎn)業(yè)產(chǎn)品到軟件測(cè)試有各式各樣的軟件。但是目前仍有很多各樣軟件測(cè)試方法都基本可用的常用概念和方法。我們這里介紹的思路和方法就是可用于多數(shù)應(yīng)用軟件的測(cè)試。有六個(gè)有關(guān)軟件測(cè)試方法的基本概念是很重要的:白箱測(cè)試,黑箱測(cè)試,灰箱測(cè)試,有效用例和無(wú)效用例,邊界條件以及等價(jià)類測(cè)試。
白箱測(cè)試或白盒測(cè)試(White-box testing 或glass-boxtesting)是通過(guò)程序的源代碼進(jìn)行測(cè)試而不使用用戶界面。這種類型的測(cè)試需要從代碼句法發(fā)現(xiàn)內(nèi)部代碼在算法,溢出,路徑,條件等等中的缺點(diǎn)或者錯(cuò)誤,進(jìn)而加以修正。
黑箱測(cè)試或黑盒測(cè)試(Black-boxtesting)是通過(guò)使用整個(gè)軟件或某種軟件功能來(lái)嚴(yán)格地測(cè)試,而并沒(méi)有通過(guò)檢查程序的源代碼或者很清楚地了解該軟件或某種軟件功能的源代碼程序具體是怎樣設(shè)計(jì)的。測(cè)試人員通過(guò)輸入他們的數(shù)據(jù)然后看輸出的結(jié)果從而了解軟件怎樣工作。通常測(cè)試人員在進(jìn)行測(cè)試時(shí)不僅使用肯定出正確結(jié)果的輸入數(shù)據(jù),而且還會(huì)使用有挑戰(zhàn)性的輸入數(shù)據(jù)以及可能結(jié)果會(huì)出錯(cuò)的輸入數(shù)據(jù)以便了解軟件怎樣處理各種類型的數(shù)據(jù)。
灰箱測(cè)試或灰盒測(cè)試(Gray-boxtesting):灰箱測(cè)試就像黑箱測(cè)試一樣是通過(guò)用戶界面測(cè)試,但是測(cè)試人員已經(jīng)有所了解該軟件或某種軟件功能的源代碼程序具體是怎樣設(shè)計(jì)的。甚至于還讀過(guò)部分源代碼。因此測(cè)試人員可以有的放矢地進(jìn)行某種確定的條件/功能的測(cè)試。這樣做的意義在于:如果你知道產(chǎn)品內(nèi)部的設(shè)計(jì)和對(duì)產(chǎn)品有透過(guò)用戶界面的深入了解,你就能夠更有效和深入地從用戶界面來(lái)測(cè)試它的各項(xiàng)性能。
有效用例(Validcase)或者叫合法輸入用例:是那些已知軟件程序能正確地處理的測(cè)試用例。一般是指軟件輸入的測(cè)試用例。比如說(shuō),在Microsoft Excel中,用鍵盤輸入“=1+ 1”,看到的結(jié)果是“2”。這里輸入的有效用例是“=1+1”。無(wú)效用例(Invalid case有人叫不合法輸入用例)或者出錯(cuò)用例(error case):是那些事先就知道軟件程序不支持處理的測(cè)試用例。比如說(shuō)在Microsoft Excel中,用鍵盤輸入“=a+1”,看到的結(jié)果是“#NAME?”。這里輸入的“=a+1”既是無(wú)效用例同時(shí)也是出錯(cuò)用例。
邊界條件(BoundaryCases):環(huán)繞邊界值的測(cè)試。通常意味著最大值,最小值或者所設(shè)計(jì)軟件能夠處理的最長(zhǎng)的字符串等等。比如說(shuō)某軟件字體的字號(hào)支持范圍是:從8到72。那么邊界測(cè)試用例應(yīng)該包括:小于8, 等于8,等于72 和大于72。
等價(jià)類(equivalentclasses):等價(jià)類測(cè)試用例指的是如果有很多測(cè)試用例執(zhí)行再多也不會(huì)找到新的中的缺陷。因?yàn)殡m然輸入和輸出結(jié)果有所不同,但是它們都通過(guò)同樣的軟件的源代碼路徑。通常只要一個(gè)源代碼程序的路徑是用于處理一定數(shù)值范圍內(nèi)的所有數(shù)值,那么除了邊界值以外,在邊界值范圍以內(nèi)的所有數(shù)值一般都屬于等價(jià)類。因?yàn)槿绻浖绦蚰苷_處理一個(gè)值,也就意味著該程序能正確處理在這個(gè)范圍內(nèi)的除了邊界值以外的其他任何有效輸入值。我們來(lái)用以上軟件字體的字號(hào)來(lái)舉例說(shuō)明。軟件支持的字號(hào)范圍是:從8到72。那么8和72之間的所有支持的字號(hào)都可以被認(rèn)為是等價(jià)類的測(cè)試用例。再比如:測(cè)試超鏈接時(shí)兩個(gè)用例http://www.yahoo.com/ 和 http://www.yahoo2.com/也是等價(jià)類的測(cè)試用例。
軟件測(cè)試的基本方法
軟件測(cè)試方法在不同的書籍中可能有不同的分類,不同的叫法和不同的解釋。比如,從測(cè)試人員角度看,可分為手動(dòng)測(cè)試和自動(dòng)測(cè)試。從源代碼的角度可分為單元測(cè)試和功能測(cè)試。從理論定義來(lái)分,可分為黑箱測(cè)試,白箱測(cè)試和灰箱測(cè)試。這里要討論的基本軟件測(cè)試方法主要側(cè)重于軟件功能的黑箱測(cè)試方法:功能測(cè)試(Functionality Test),可接受性測(cè)試(Acceptance Test),用戶界面(User interface或UI)測(cè)試,Ad hoc一般指‘探討或開放’型測(cè)試,邊界條件測(cè)試(Boundary Condition),性能測(cè)試(Performance Test),回歸測(cè)試(Regression Test),強(qiáng)力測(cè)試(Stress Test),配置和安裝測(cè)試(Configuration and SetupTest),兼容性測(cè)試(Comparability Test),國(guó)際化支持測(cè)試(InternationalSufficiency)以及本地化語(yǔ)言測(cè)試(Localization)。
功能測(cè)試:驗(yàn)證測(cè)試軟件功能能否正常按照它的設(shè)計(jì)工作??催\(yùn)行軟件時(shí)的期望行為是否符合原設(shè)計(jì)。比如,測(cè)試Microsoft Excel插入->符號(hào)的功能包括測(cè)試能夠在MicrosoftExcel所選單元格中正確地插入符號(hào)并且顯示正確符號(hào)?能否正確顯示使用不同的字體的符號(hào)?
可接受性測(cè)試:是在把測(cè)試的版本交付測(cè)試部門大范圍測(cè)試以前進(jìn)行的對(duì)最基本功能的簡(jiǎn)單測(cè)試。因?yàn)樵诎褱y(cè)試的版本交付測(cè)試部門大范圍測(cè)試以前應(yīng)該先驗(yàn)證該版本對(duì)于所測(cè)試的功能基本上比較穩(wěn)定。必須滿足一些最低要求。比如不會(huì)很容易程序就掛起或崩潰。如果一個(gè)新版本沒(méi)通過(guò)可測(cè)試性的驗(yàn)證,就應(yīng)該阻攔測(cè)試部門花時(shí)間在該測(cè)試版本上測(cè)試。同時(shí)還要找到造成該版本不穩(wěn)定的主要缺陷并督促盡快加以修正。
用戶界面測(cè)試:分析軟件用戶界面的設(shè)計(jì)是否合乎用戶期望或要求。它常常包括菜單,對(duì)話框及對(duì)話框上所有按鈕,文字,出錯(cuò)提示,幫助信息(Menu 和Help content)等方面的測(cè)試。比如,測(cè)試MicrosoftExcel中插入符號(hào)功能所用的對(duì)話框的大小,所有按鈕是否對(duì)齊,字符串字體大小,出錯(cuò)信息內(nèi)容和字體大小,工具欄位置/圖標(biāo)等等。
‘探索或開放’型的測(cè)試:不是按部就班的按照一個(gè)又一個(gè)正式的測(cè)試用例來(lái)進(jìn)行,也不局限于測(cè)試用例特定的步驟。這種測(cè)試是測(cè)試人員在理解該軟件功能的基礎(chǔ)上運(yùn)用靈活多樣的想象力和創(chuàng)造力去模擬用戶的需求來(lái)使用該軟件的多種功能。通常涉及很多的測(cè)試用例或者通過(guò)更復(fù)雜的步驟來(lái)使用該軟件。
邊界條件測(cè)試:是環(huán)繞邊界值的測(cè)試。通常意味著測(cè)試軟件各功能是否能正確處理最大值,最小值或者所設(shè)計(jì)軟件能夠處理的最長(zhǎng)的字符串等等。
性能測(cè)試是:通常驗(yàn)證軟件的性能在正常環(huán)境和系統(tǒng)條件下重復(fù)使用是否還能滿足性能指標(biāo)?;蛘邎?zhí)行同樣任務(wù)時(shí)新版本不比舊版本慢。一般還檢查系統(tǒng)記憶容量在運(yùn)行程序時(shí)會(huì)不會(huì)流失(memoryleak)。比如,驗(yàn)證程序保存一個(gè)巨大的文件新版本不比舊版本慢。
回歸測(cè)試:根據(jù)修復(fù)好了的缺陷再重新進(jìn)行的測(cè)試。目的在于驗(yàn)證以前出現(xiàn)過(guò)但已經(jīng)修復(fù)好的缺陷不再重新出現(xiàn)。一般指對(duì)某已知修正的缺陷再次圍繞它原來(lái)出現(xiàn)時(shí)的步驟重新測(cè)試。通常確定所需的再測(cè)試的范圍時(shí)是比較困難的,特別當(dāng)臨近產(chǎn)品發(fā)布日期時(shí)。因?yàn)闉榱诵拚橙毕輹r(shí)必需更改源代碼,因而就有可能影響這部分源代碼所控制的功能。所以在驗(yàn)證修好的缺陷時(shí)不僅要服從缺陷原來(lái)出現(xiàn)時(shí)的步驟重新測(cè)試,而且還要測(cè)試有可能受影響的所有功能。因此應(yīng)當(dāng)鼓勵(lì)對(duì)所有回歸測(cè)試用例進(jìn)行自動(dòng)化。
強(qiáng)力測(cè)試:它通常驗(yàn)證軟件的性能在各種極端的環(huán)境和系統(tǒng)條件下是否還能正常工作?;蛘哒f(shuō)是驗(yàn)證軟件的性能在各種極端環(huán)境和系統(tǒng)條件下的承受能力。比如,在最低的硬盤驅(qū)動(dòng)器空間或系統(tǒng)記憶容量條件下,驗(yàn)證程序重復(fù)執(zhí)行打開和保存一個(gè)巨大的文件1000次后也不會(huì)崩潰或死機(jī)。
集成與兼容性測(cè)試:驗(yàn)證該功能[]能夠如預(yù)期的那樣與其他程序或者構(gòu)件協(xié)調(diào)工作。兼容性經(jīng)常意味著新舊版本之間的協(xié)調(diào),也包括測(cè)試的產(chǎn)品與其它產(chǎn)品的兼容使用。比如用同樣產(chǎn)品的新版本時(shí)不影響與用舊版本用戶之間保存文件,格式,和其他數(shù)據(jù)等操作。
裝配/安裝/配置測(cè)試:驗(yàn)證軟件程序在不同廠家的硬件上,所支持的不同語(yǔ)言的新舊版本平臺(tái)上,和不同方式安裝的軟件都能夠如預(yù)期的那樣正確運(yùn)行。比如,把英文版的Microsoft Office2003安裝在韓文版 的WindowsMe 上,再驗(yàn)證所有功能都正常運(yùn)行。
國(guó)際化支持測(cè)試:驗(yàn)證軟件程序在不同國(guó)家或區(qū)域的平臺(tái)上也能夠如預(yù)期的那樣運(yùn)行,而且還可以按照原設(shè)計(jì)尊重和支持使用當(dāng)?shù)爻S玫娜掌?,字體,文字表示,特殊格式等等。比如,用英文版的Windows XP 和 Microsoft Word 能否展示阿拉伯字符串?用阿拉伯版的Windows XP和阿拉伯版的Microsoft Word能否展示阿拉伯字符串?又比如,日文版的MicrosoftExcel對(duì)話框是否顯示正確翻譯的日語(yǔ)?一旦來(lái)說(shuō)執(zhí)行國(guó)際化支持測(cè)試的測(cè)試人員往往需要基本上了解這些國(guó)家或地區(qū)的語(yǔ)言要求和期望行為是什么。
本地化語(yǔ)言測(cè)試:要驗(yàn)證所有已計(jì)劃要發(fā)布的不同語(yǔ)言版本軟件如預(yù)期的那樣被正確地翻譯成當(dāng)?shù)卣Z(yǔ)言。這類測(cè)試一般包括驗(yàn)證菜單,對(duì)話框,出錯(cuò)信息,幫助內(nèi)容等所有用戶界面上的文字都能夠顯示正確翻譯好的當(dāng)?shù)匚淖帧?/p>
愛華網(wǎng)



