50126实现
第7章? 實現(xiàn)
?
實現(xiàn):編碼和測試的統(tǒng)稱。
編碼:把軟件設(shè)計結(jié)果翻譯成用某種程序設(shè)計語言書寫的程序。
?
程序的質(zhì)量主要取決于:
? 軟件設(shè)計的質(zhì)量。
? 所選用的程序設(shè)計語言的特點及編碼風(fēng)格也將對程序的可靠性、可讀性、可測試性和可維護性產(chǎn)生深遠的影響。
? 軟件測試也是保證軟件質(zhì)量的關(guān)鍵步驟,它是對軟件規(guī)格說明、設(shè)計和編碼的最后復(fù)審。
?
?
7.1? 編碼 ?
7.1.1? 選擇程序設(shè)計語言
? 編碼之前的一項重要工作:
???? 就是選擇一種適當(dāng)?shù)某绦蛟O(shè)計語言。
? 高級語言
??? 用高級語言寫的程序容易閱讀,容易測試,容易調(diào)試,容易維護。
?
選用高級語言的實用標(biāo)準(zhǔn):
(1) 系統(tǒng)用戶的要求。選擇用戶熟悉的語言。
(2) 可以使用的編譯程序。運行目標(biāo)系統(tǒng)的環(huán)境中可提供的編譯程序往往限制了所選用語言的范圍。
(3) 可以得到的軟件工具。某種語言是否有支持程序開發(fā)的軟件工具可以利用。
(4) 工程規(guī)模。
(5) 程序員的知識。應(yīng)該選擇一種已經(jīng)為程序員所熟悉的語言。
(6) 軟件可移植性要求。
(7) 軟件的應(yīng)用領(lǐng)域。
?
7.1.2? 編碼風(fēng)格
好程序的標(biāo)準(zhǔn):
??? 代碼的邏輯:簡明清晰、易讀易懂。
故編碼應(yīng)該遵循下述規(guī)則:
? 程序內(nèi)部的文檔
? 數(shù)據(jù)說明
? 語句構(gòu)造
? 輸入輸出
? 效率
?? 程序內(nèi)部的文檔
?
程序內(nèi)部的文檔包括:恰當(dāng)?shù)臉?biāo)識符、適當(dāng)?shù)淖⒔?/p>
和程序的視覺組織等。
???????????????? 含義鮮明的名字
???????????????? 正確的注解
???????????????? 縮寫規(guī)則一致
??? 程序清單的布局對于程序的可讀性也有很大影
響,應(yīng)該利用適當(dāng)?shù)碾A梯形式使程序的層次結(jié)構(gòu)
清晰明顯。
?
?
2.? 數(shù)據(jù)說明
?數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化。
???? 有次序就容易查閱,因此能夠加速測試、調(diào)試和維護的過程。
??????? 先按類型
??????? 再按字母
?復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)該用注解說明用程序設(shè)計語言實現(xiàn)這個數(shù)據(jù)結(jié)構(gòu)的方法和特點。
?
?
3. 語句構(gòu)造
?簡單而直接
不要為了節(jié)省空間而把多個語句寫在同一行;
盡量避免使用復(fù)雜的條件;
盡量減少使用“非”條件;
避免大量使用循環(huán)嵌套和條件嵌套;
利用括號使邏輯表達式或算術(shù)表達式的運算次序清晰直觀。
?
4. 輸入輸出
?對所有輸入數(shù)據(jù)都進行檢驗;
?檢查輸入項重要組合的合法性;
?保持輸入格式簡單;
?使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目;
?明確提示交互式輸入的請求,詳細說明可用的選擇或邊界數(shù)值;
?當(dāng)程序設(shè)計語言對格式有嚴(yán)格要求時,應(yīng)保持輸入格式一致;
?設(shè)計良好的輸出報表;
?給所有輸出數(shù)據(jù)加標(biāo)志。
?
5.? 效率
主要討論程序運行時間和輸入輸出對效率的影響。
(1) 輸入輸出的效率
???? 簡單清晰是提高人機通訊效率的關(guān)鍵。
???? 如輸入輸出很難被人理解,將降低效率。
(2) 程序運行時間
影響源程序的效率的因素:
?算法的效率;
?寫程序的風(fēng)格。(對程序的執(zhí)行速度和存儲器要求產(chǎn)生影響)
因此寫程序時可應(yīng)用下述規(guī)則:
?
寫程序時可應(yīng)用下述規(guī)則:
?寫程序之前先簡化算術(shù)的和邏輯的表達式;
?仔細研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)層往外移;
?盡量避免使用多維數(shù)組;
?盡量避免使用指針和復(fù)雜的表;
?使用執(zhí)行時間短的算術(shù)運算;
?不要混合使用不同的數(shù)據(jù)類型;
?盡量使用整數(shù)運算和布爾表達式。
?
為什么要有編碼規(guī)范
編碼規(guī)范對于程序員而言尤為重要,原因:
? 一個軟件的生命周期中,80%的花費在于維護;
?幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護;
?編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼。
??? 為了執(zhí)行規(guī)范,每個軟件開發(fā)人員必須一致遵守編碼規(guī)范。
?
7.2? 軟件測試基礎(chǔ)
7.2.1? 軟件測試的目標(biāo)
G.Myers給出了關(guān)于測試的一些規(guī)則,這些規(guī)則也可以看作是測試的目標(biāo)或定義。
(1) 測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程;
(2) 好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案;
(3) 成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試。
? 測試是在精心控制的環(huán)境下執(zhí)行程序,以發(fā)現(xiàn)程序中的錯誤,給出程序可靠性的鑒定。
?
7.2.1? 軟件測試的目標(biāo)
?測試的正確定義是:“為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程”。
?錯誤的認(rèn)識:
??? “測試是為了表明程序是正確的”,
??? “成功的測試是沒有發(fā)現(xiàn)錯誤的測試” 。
?正確認(rèn)識測試的目標(biāo)是十分重要的,測試目標(biāo)決定了測試方案的設(shè)計。
??? 如果為了表明程序的正確,就會設(shè)計一些不易暴露錯誤的測試方案;
??? 如果是為了發(fā)現(xiàn)程序中的錯誤,就會設(shè)計出最能暴露錯誤的測試方案。
7.2.2? 軟件測試準(zhǔn)則
(1) 所有測試都應(yīng)該能追溯到用戶需求。
??? 軟件測試的目標(biāo)是發(fā)現(xiàn)錯誤,最嚴(yán)重的錯誤是導(dǎo)致程序不能滿足用戶需求。
(2) 應(yīng)該遠在測試開始之前就制定出測試計劃。
??? 在完成需求模型時,就著手制定測試計劃,
??? 在建立了設(shè)計模型后,就開始設(shè)計詳細的測試方案。
(3) 應(yīng)該從“小規(guī)模”測試開始,并逐步進行“大規(guī)模”測試。
??? 先測試單個程序模塊,再測試集成模塊,最后在整個系統(tǒng)中尋找錯誤。
(4) 應(yīng)該由獨立的第三方從事測試工作。
??? 軟件工程師不能承擔(dān)全部測試工作,主要承擔(dān)模塊測試工作。
(5) 窮舉測試是不可能的。
窮舉測試:把程序所有可能的執(zhí)行路徑都檢查一遍的測試。
??? 即使是一個中等規(guī)模的程序,其執(zhí)行路徑的排列數(shù)也十分龐大。因此,測試只能證明程序中有錯誤,不能證明程序中沒有錯誤。
?
? 假設(shè)一個程序P有輸入量X和Y及輸出量Z。在字長為32位的計算機上運行。若X、Y取整數(shù),按黑盒方法進行窮舉測試:
?
? 可能采用的
? 測試數(shù)據(jù)組:
??? 232×232
???? =264??
?如果測試一組數(shù)據(jù)需要1毫秒,一年工作365×24小時,完成所有測試需5億年。
?
?
7.2.3? 測試方法
?黑盒測試:指在軟件界面上進行的測試。一般用來證實軟件功能的可操作性;證實能很好的接收輸入,并正確地產(chǎn)生輸出;以及證實對外部信息完整性的保持。
?
?白盒測試:對程序細節(jié)進行嚴(yán)密檢驗,對軟件的邏輯路徑進行測試。
?
黑盒測試法:把程序看作一個黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。只檢查程序功能是否按照規(guī)格說明書的規(guī)定正常使用。
黑盒測試又稱為功能測試。
?
白盒測試法:把程序看成裝在一個透明的白盒子里,測試者完全知道程序的結(jié)構(gòu)和處理算法,用于檢測程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。
白盒測試又稱為結(jié)構(gòu)測試。
?
7.2.4? 測試步驟
1. 模塊測試
??? 把每個模塊作為一個單獨的實體來測試。
??? 模塊測試通常又稱為單元測試。在測試中所發(fā)現(xiàn)的往往是編碼和詳細設(shè)計的錯誤。
?
2. 子系統(tǒng)測試
??? 把經(jīng)過單元測試的模塊放在一起形成一個子系統(tǒng)來測試。
??? 模塊相互間的協(xié)調(diào)和通信是這個測試過程中的主要問題,著重測試模塊的接口。
?
3. 系統(tǒng)測試
??? 把經(jīng)過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來測試。
??? 驗證系統(tǒng)能否提供需求說明書中指定的功能,動態(tài)特性是否符合預(yù)定要求。其中發(fā)現(xiàn)的往往是軟件設(shè)計中的錯誤,也可能是需求說明中的錯誤。
??? 子系統(tǒng)測試和系統(tǒng)測試,都兼有檢測和組裝兩重含義,通常稱為集成測試。
?
4. 驗收測試
??? 把軟件系統(tǒng)作為單一的實體進行測試,測試內(nèi)容與系統(tǒng)測試基本類似,但它是在用戶積極參與下進行的,而且主要使用實際數(shù)據(jù)進行測試。
??? 目的是驗證系統(tǒng)確實能夠滿足用戶的需要,其中發(fā)現(xiàn)的往往是系統(tǒng)需求說明書中的錯誤。
??? 驗收測試也稱為確認(rèn)測試。
?
5. 平行運行
平行運行:就是同時運行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結(jié)果。
這樣做的具體目的有如下幾點:
(1) 可以在準(zhǔn)生產(chǎn)環(huán)境中運行新系統(tǒng)而又不冒風(fēng)險;
(2) 用戶能有一段熟悉新系統(tǒng)的時間;
(3) 可以驗證用戶指南和使用手冊之類的文檔;
(4) 能夠以準(zhǔn)生產(chǎn)模式對新系統(tǒng)進行全負(fù)荷測試,進一步驗證性能指標(biāo)。
?
7.2.5? 測試階段的信息流
測試階段的的輸入信息有兩類:
?(1)軟件配置,包括需求說明書、設(shè)計說明書和源程序清單等;
(2)測試配置,包括測試計劃和測試方案。
測試方案包括:
?測試用例:測試時使用的輸入數(shù)據(jù);
?每組輸入數(shù)據(jù)預(yù)定要檢驗的功能,以及每組輸入數(shù)據(jù)預(yù)期應(yīng)該得到的正確輸出。
??? 圖7.1
??? 測試結(jié)果和預(yù)期結(jié)果不一致,程序中可能有錯誤,進入調(diào)試階段。由程序的編寫者負(fù)責(zé)調(diào)試。
?
圖7.1 測試階段的信息流
?
?如果經(jīng)常出現(xiàn)要求修改設(shè)計的嚴(yán)重錯誤,那么軟件的質(zhì)量和可靠性是值得懷疑的。
?
?如果軟件功能完成得很正常,遇到的錯誤也很容易改正,仍然應(yīng)該考慮兩種可能:
?(1)軟件的可靠性是可以接受的;
?(2)所進行的測試尚不足以發(fā)現(xiàn)嚴(yán)重的錯誤。
?
?如果經(jīng)過測試,一個錯誤也沒有被發(fā)現(xiàn),則很可能是對測試配置思考不充分,以致不能暴露軟件中潛藏的錯誤。
?
?
7.3? 單元測試
??? 單元測試主要使用白盒測試技術(shù),而且對多個模塊的測試可以并行地進行。
?
7.3.1? 測試重點
1. 模塊接口
??? 首先應(yīng)該對通過模塊接口的數(shù)據(jù)流進行測試,如果數(shù)據(jù)不能正確地進出,所有其他測試都是不切實際的。
2. 局部數(shù)據(jù)結(jié)構(gòu)
?? 局部數(shù)據(jù)說明、初始化、默認(rèn)值等方面是否正確。
3. 重要的執(zhí)行通路
?? 由于不可能進行窮盡測試,在單元測試期間選擇最有代表性、最可能發(fā)現(xiàn)錯誤的執(zhí)行通路進行測試。
4. 出錯處理通路
??? 好的設(shè)計應(yīng)該能預(yù)見出現(xiàn)錯誤的條件,并且設(shè)置適當(dāng)?shù)奶幚礤e誤的通路。
??? 應(yīng)該認(rèn)真測試這種通路能否正確運行。
5. 邊界條件
??? 邊界測試在單元測試中非常重要。軟件常常在它的邊界上失效。
??? 使用剛好小于、剛好等于和剛好大于最大值或最小值的測試方案,非常可能發(fā)現(xiàn)軟件中的錯誤。
?
測試的過程
?程序的測試一般按三種方式進行:
靜態(tài)分析
動態(tài)測試
自動測試
?
?測試的過程,先進行靜態(tài)分析,然后進行動態(tài)測試;在某些特殊情況下,也可以借助自動測試工具對程序進行查錯。
?靜態(tài)分析:是指不執(zhí)行程序,而只由人工對程序文本進行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤。
?靜態(tài)分析是一種卓有成效的測試方法,大約30%—70%的邏輯設(shè)計錯誤和編碼錯誤可以通過靜態(tài)分析檢查出來。又稱代碼審查。
?
7.3.2? 代碼審查
?討論:是由一些有經(jīng)驗的測試人員閱讀程序文本及有關(guān)文檔,對程序的結(jié)構(gòu)與功能、數(shù)據(jù)的結(jié)構(gòu)、接口、控制流以及語法進行討論和分析,從而揭示程序中的錯誤。
?走查:是由測試人員用一些測試用例沿程序邏輯運行,并隨時記錄程序的蹤跡;然后進行分析,發(fā)現(xiàn)程序中的錯誤。
?
測試的過程
?程序的動態(tài)分析:
?? 使用測試用例在計算機上運行程序,使程序在運行過程中暴露錯誤。
?自動測試工具:
?? 是人們編制的用于測試的軟件,并用它來代替人工測試。
?
7.3.3? 計算機測試
??? 模塊并不是一個獨立的程序,因此必須為每個單元測試開發(fā)驅(qū)動軟件和(或)存根軟件。
?驅(qū)動程序:也稱“主程序”,它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出有關(guān)的結(jié)果。
?存根程序:也稱“虛擬子程序”,代替被測試的模塊所調(diào)用的模塊。
??? 它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,印出對入口的檢驗或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。
?
對最小的軟件設(shè)計單元——模塊的驗證工作
?
例:圖7.2是一個正文加工系統(tǒng)的部分層次圖,假定要測試其中編號為3.0的關(guān)鍵模塊——正文編輯模塊。
?
?需要有一個測試驅(qū)動程序來調(diào)用它。
??? 說明必要的變量,接收測試數(shù)據(jù)——字符串,并且設(shè)置正文編輯模塊的編輯功能。
?存根程序簡化地模擬下層模塊,完成具體的編輯功能。可只用一個存根程序模擬正文編輯模塊的所有下層模塊。
?
圖7.2 正文加工系統(tǒng)的層次圖
?
?
代碼審查比計算機測試優(yōu)越之處:
?一次審查會上可以發(fā)現(xiàn)許多錯誤;
?用計算機測試的方法發(fā)現(xiàn)錯誤之后,通常需要先改正這個錯誤才能繼續(xù)測試,因此錯誤是一個一個地發(fā)現(xiàn)并改正的。
?
??? 人工測試和計算機測試互相補充,相輔相成,缺少其中任何一種方法都會使查找錯誤的效率降低。
?
7.4? 集成測試
集成測試:把模塊按照設(shè)計要求組裝起來的同時進行測試。
主要目標(biāo):是發(fā)現(xiàn)與接口有關(guān)的問題。與系統(tǒng)測試類似。
?
組裝模塊有兩種方法:
1.非漸增式測試(整體拼裝):
? 首先對每個模塊分別進行模塊測試,然后再把所有模塊組裝在一起進行測試,最終得到要求的軟件系統(tǒng);
?
?
?
?
2.漸增式測試(增量集成):
?首先對一個個模塊進行模塊測試,然后將這些模塊逐步組裝成較大的系統(tǒng);
?在組裝的過程中邊連接邊測試,以發(fā)現(xiàn)連接過程中產(chǎn)生的問題
?通過增殖逐步組裝成為要求的軟件系統(tǒng)。
?
?
兩種方法優(yōu)缺點:
非漸增式測試:
??? 一下子把所有模塊放在一起,并把龐大的程序作為一個整體來測試,測試者面對的情況十分復(fù)雜,會遇到許多錯誤,改正錯誤更是極端困難。而且改正一個錯誤之后,馬上又會遇到新的錯誤。
漸增式測試:
??? 它把程序劃分成小段來構(gòu)造和測試,比較容易定位和改正錯誤;對接口可以進行更徹底的測試。
??? 故普遍采用漸增式測試方法。
??? 當(dāng)使用漸增方式組裝模塊時,有自頂向下和自底向上兩種集成策略。
?
7.4.1? 自頂向下集成
?將模塊按系統(tǒng)程序結(jié)構(gòu),沿控制層次自頂向下進行組裝。從主控制模塊開始。
?
?在測試過程中較早地驗證了主要的控制和判斷點。
?
?選用按深度方向測試的方式,可以首先實現(xiàn)和驗證一個完整的軟件功能。
???
? 或使用深度優(yōu)先策略,或使用寬度優(yōu)先策略。
?
?
?
7.4.1? 自頂向下集成
由下述4個步驟完成:
第一步,對主控制模塊進行測試,測試時用存根程序代替所有直接附屬于主控制模塊的模塊;
第二步,根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個實際模塊代換一個存根程序;
第三步,在結(jié)合進一個模塊的同時進行測試;
第四步,為了保證加入模塊沒有引進新的錯誤,需要進行回歸測試(全部或部分地重復(fù)以前做過的測試)。
上述第二步到第四步實質(zhì)上構(gòu)成了一個循環(huán).
?
?
圖7.3 自頂向下寬度優(yōu)先結(jié)合
7.4.2? 自底向上集成
?從程序模塊結(jié)構(gòu)的最底層的模塊( 原子模塊)開始組裝和測試。
?因為是自底向上組裝模塊,對于一個給定層次的模塊,它的子模塊已經(jīng)組裝并測試完成,所以不再需要存根程序。在測試過程中需要從子模塊得到的信息可以直接運行子模塊得到。
?
?
用下述四個步驟完成:
第一步,把低層模塊組合成實現(xiàn)某個特定的軟件子功能的族;
第二步,寫一個驅(qū)動程序,協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;
第三步,對由模塊組成的子功能族進行測試;
第四步,去掉驅(qū)動程序,沿軟件結(jié)構(gòu)自下向上移動,把子功能族組合起來形成更大的子功能族。
上述第二步到第四步實質(zhì)上構(gòu)成了一個循環(huán)。圖7.4
如果軟件結(jié)構(gòu)的頂部兩層用自頂向下的方法組裝,可以明顯減少驅(qū)動程序的數(shù)目,而且族的結(jié)合也將大大簡化。
?
圖7.4 自底向上結(jié)合
7.4.3? 不同集成測試策略的比較
???? 自頂向下測試方法的優(yōu)點:
?不需要測試驅(qū)動程序,
?能夠在測試階段的早期實現(xiàn)并驗證系統(tǒng)的主要功能,
?能在早期發(fā)現(xiàn)上層模塊的接口錯誤。
?
???? 自頂向下測試方法的缺點:
?是需要存根程序,
?低層關(guān)鍵模塊中的錯誤發(fā)現(xiàn)較晚,
?用這種方法在早期不能充分展開人力。
??? 自底向上優(yōu)缺點與自頂向下剛好相反。
?
通常采用混合策略:
(1) 改進的自頂向下測試方法。
?基本上使用自頂向下的測試方法,
?早期,對少數(shù)關(guān)鍵模塊使用自底向上的測試方法。
?
優(yōu)點:
?具備自頂向下方法的優(yōu)點;
?能在測試的早期發(fā)現(xiàn)關(guān)鍵模塊中的錯誤;
?
缺點:
?測試關(guān)鍵模塊時需要驅(qū)動程序。
?
(2) 混合法。
?較上層使用的自頂向下方法;
?較下層使用的自底向上方法。
兼有兩種方法的優(yōu)點和缺點,最好的折衷方法。
?
7.4.4? 回歸測試
??? 在集成測試過程中每當(dāng)一個新模塊結(jié)合進來時,程序就發(fā)生了變化,這些變化有可能使原來工作正常的功能出現(xiàn)問題。
回歸測試:重新執(zhí)行已經(jīng)做過測試的某個子集,以保證上述這些變化沒有帶來非預(yù)期的副作用。
?
7.5? 確認(rèn)測試
也稱為驗收測試。
目標(biāo):驗證軟件的有效性。發(fā)現(xiàn)那些只有最終用戶才能發(fā)現(xiàn)的錯誤。
驗證:保證軟件正確地實現(xiàn)了某個特定要求的一系列活動;
確認(rèn):為了保證軟件確實滿足了用戶需求而進行的一系列活動。
軟件的有效性: 如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。
軟件有效性的標(biāo)準(zhǔn):需求分析階段產(chǎn)生的軟件需求規(guī)格說明書,它是確認(rèn)測試的基礎(chǔ)。
?
?Alpha測試
??? 由一個用戶在開發(fā)者的場所來進行的測試,軟件在開發(fā)者對用戶的指導(dǎo)下進行測試,開發(fā)者負(fù)責(zé)記錄錯誤和使用中出現(xiàn)的問題。
?Beta測試
??? 由軟件的最終用戶在一個或者多個用戶場所來進行,開發(fā)者不在場,用戶記錄問題。
?
7.6? 白盒測試技術(shù)
設(shè)計測試方案是測試階段的關(guān)鍵技術(shù)問題。
測試方案:
?包括測試目的(預(yù)定要測試的具體功能),
?應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。
測試用例:由測試輸入數(shù)據(jù)及與之對應(yīng)的輸出結(jié)果組成。
?測試用例設(shè)計的好壞直接決定了測試的效果和結(jié)果。因此在軟件測試活動中最關(guān)鍵的步驟就是設(shè)計有效的測試用例。(因為不可能進行窮盡的測試)
?測試用例可以針對黑盒測試設(shè)計用例,也可以針對白盒測試設(shè)計用例。
?
白盒測試技術(shù):用白盒方法測試軟件時設(shè)計測試數(shù)據(jù)的典型技術(shù)。
黑盒測試技術(shù):用黑盒方法測試軟件時設(shè)計測試數(shù)據(jù)的典型技術(shù)。
?
白盒測試的目的:
? 保證一個模塊中的所有獨立路徑至少被執(zhí)行一次;
?對所有的邏輯值均需要測試真、假兩個分支;
?在上下邊界及可操作范圍內(nèi)運行所有循環(huán);
?檢查內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。
?
白盒測試的主要方法
? 邏輯驅(qū)動測試(邏輯覆蓋)
? 基本路徑測試
??????
?主要用于軟件驗證。
?用程序設(shè)計的控制結(jié)構(gòu)導(dǎo)出測試用例。
?
7.6.1? 邏輯覆蓋
邏輯覆蓋:是對一系列測試過程的總稱。這組測試過程逐漸進行越來越完整的通路測試。
覆蓋:測試數(shù)據(jù)執(zhí)行源程序的過程。
?
覆蓋源程序語句的詳盡程度存在不同的覆蓋標(biāo)準(zhǔn):
?語句覆蓋
?判定覆蓋
?條件覆蓋
?判定/條件覆蓋
?條件組合覆蓋
?
例:圖7.5所示的程序流程圖描繪了一個被測模塊的處理算法。
? ?
圖7.5 被測試模塊的流程圖
?
1. 語句覆蓋
語句覆蓋的含義:選擇足夠多的測試數(shù)據(jù),使被測程序中每個語句至少執(zhí)行一次。
??? 為了使每個語句都執(zhí)行一次,程序的執(zhí)行路徑應(yīng)該是sacbed。
??? 需要輸入下面的測試數(shù)據(jù):
??? A=2,B=0,X=4( X可以是任意實數(shù))
?
語句覆蓋缺點:
?對程序的邏輯覆蓋很少;
?語句覆蓋只關(guān)心判定表達式的值;
?沒有分別測試判定表達式中每個條件取不同值時的情況。
語句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。
?
2. 判定覆蓋
又叫分支覆蓋。
含義:不僅每個語句必須至少執(zhí)行一次,而且每個判定的每個分支都至少執(zhí)行一次。
需要輸入下面的測試數(shù)據(jù):
??? A=3,B=0,X=3(1)??? (路徑是:sacbd)
??? A=2,B=1,X=1??? (路徑是:sabed)
??? 判定覆蓋比語句覆蓋強,但是對程序邏輯的覆蓋程度仍然不高,只覆蓋了程序全部路徑的一半。
還差: sacbed,sabd
?
3. 條件覆蓋
含義:不僅每個語句至少執(zhí)行一次,而且使判定表達式中的每個條件都取到各種可能的結(jié)果。
測試數(shù)據(jù)使a點有下述各種結(jié)果:
???? A>1,A≤1,B=0,B≠0.
測試數(shù)據(jù)使b點有下述各種結(jié)果:
???? A=2,A≠2, X>1, X≤1.
需要輸入下面的測試數(shù)據(jù):
??? A=2,B=0,X=1??? (路徑是:sacbed)
??? A=1,B=1,X=2??? (路徑是:sabed )??? (少bd分支)
??? 條件覆蓋通常比判定覆蓋強,它使判定表達式中每個條件都取到了兩個不同的結(jié)果;不一定包含判定覆蓋.
??? 判定覆蓋只關(guān)心整個判定表達式的值。
?
含義:不僅每個語句至少執(zhí)行一次,而且使判定表達式中的每個條件都取到各種可能的結(jié)果。
測試數(shù)據(jù)使a點有下述各種結(jié)果:
?? ??A>1,A≤1,B=0,B≠0.
測試數(shù)據(jù)使b點有下述各種結(jié)果:
???? A=2,A≠2, X>1, X≤1.
另一組測試數(shù)據(jù):
??? A=2,B=0,X=4??????? (路徑是:sacbed)
??? A=1,B=1,X=1??????? (路徑是:sabd )
? 包含了判定覆蓋。
?
4. 判定/條件覆蓋
??? 判定覆蓋不一定包含條件覆蓋,條件覆蓋也不一定包含判定覆蓋。
因為:判定表達式中的每個條件都取到各種可能的結(jié)果,但不能保證每個判定表達式也都取到各種可能的結(jié)果。
提出了判定/條件覆蓋。
判定/條件覆蓋:一種能同時滿足這兩種覆蓋標(biāo)準(zhǔn)的邏輯覆蓋。
含義:選取足夠多的測試數(shù)據(jù),使得判定表達式中的每個條件都取到各種可能的值,而且每個判定表達式也都取到各種可能的結(jié)果。
有時判定/條件覆蓋并不比條件覆蓋更強。
?
測試數(shù)據(jù)使a點有下述各種結(jié)果:
???? A>1,A≤1,B=0,B≠0.
測試數(shù)據(jù)使b點有下述各種結(jié)果:
???? A=2,A≠2, X>1, X≤1.
測試數(shù)據(jù):
??? A=2,B=0,X=4??????? (路徑是:sacbed)
??? A=1,B=1,X=1??????? (路徑是:sabd )
也符合條件覆蓋。
有時判定/條件覆蓋并不一定比條件覆蓋更強。
?
5. 條件組合覆蓋
含義:使得每個判定表達式中條件的各種可能組合都至少出現(xiàn)一次。
共有8種組合:
???? A>1,B=0 ,?????????????????????? A>1,B≠0
???? A≤1,? B=0,?????????????????????? A≤1,? B≠0.
???? A= 2,?? X>1,?????????????????????? A= 2 ,? X≤1
???? A≠2,?? X>1,????????????????????? A≠2,?? X≤1
測試數(shù)據(jù):
??? A=2,B=0,X=4??????? (路徑是:sacbed)
??? A=2,B=1,X=1??????? (路徑是:sabed )
??? A=1,B=0,X=2??????? (路徑是:sabed)
??? A=1,B=1,X=1??????? (路徑是:sabd )
?
??? 滿足條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù),一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋標(biāo)準(zhǔn)。
?? 是更強的邏輯覆蓋標(biāo)準(zhǔn)。
?? 但不一定能使程序中的每條路徑都執(zhí)行到。
???? 如:sacbd
?
6. 點覆蓋
含義:選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖的每個結(jié)點一次。
??? 由于流圖的每個結(jié)點與一條或多條語句相對應(yīng),顯然,點覆蓋標(biāo)準(zhǔn)和語句覆蓋標(biāo)準(zhǔn)是相同的。
?
7. 邊覆蓋
含義:選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條邊一次。
??? 通常邊覆蓋和判定覆蓋是一致的。
?
8. 路徑覆蓋
含義:選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個環(huán)至少經(jīng)過一次)。
? 圖7.5程序有4條可執(zhí)行通路:
?????? sacbed,sacbd,sabed,sabd.
? 為做到路徑覆蓋,通常需要4組測試數(shù)據(jù)。
?
?
?
7.6.2? 控制結(jié)構(gòu)測試
?
1. 基本路徑測試
?McCabe提出的一種白盒測試技術(shù);
?可以保證程序中的每條語句至少執(zhí)行一次;
?每個條件在執(zhí)行時都將分別取真、假兩種值。
?
使用該技術(shù)設(shè)計測試用例的步驟如下:
第一步,根據(jù)過程設(shè)計結(jié)果畫出相應(yīng)的流圖。
流圖
? ?
復(fù)合條件的流圖
?
第二步,計算流圖的環(huán)形復(fù)雜度。
??? 前流圖的環(huán)形復(fù)雜度為4。
?
第三步,確定線性獨立路徑的基本集合。
??? 每一條新的路徑都包含一條新邊。
??? 程序的環(huán)形復(fù)雜度決定了程序中獨立路徑的數(shù)量。
?
第四步,設(shè)計可強制執(zhí)行基本集合中每條路徑的測試用例。
??? 一旦執(zhí)行完所有測試用例,就可以確保程序中所有語句都至少被執(zhí)行了一次,而且每個條件都分別取過true值和false值。
?
?
P156例:測試用PDL描述的求平均值過程。
?首先畫出圖7.6所示的流圖。
PROCEDURE average; /* 這個過程計算不超過100個在規(guī)定值域內(nèi)的有效數(shù)字的平均值;同時計算有效數(shù)字的總和及個數(shù)。*/INTERFACE RETURNS average, total.input, total.valid;INTERFACE ACCEPTS value, minimum, maximum;TYPE value[1…100] IS SCALAR ARRAY;TYPE average, total.input, total.valid;minimum,maximum, sum IS SCALAR;TYPE i IS INTEGER;1: i=1;total.input=total.valid=0;sum=0; 2: DO WHILE value[i] <> -999 3: AND total.input<100 4: increment total.input by1; 5: IF value[i]>=minimum 6: AND value[i]<=maximum 7: THEN increment total.valid by 1;sum=sum+value[i]; 8: ENDIFincrement i by 1; 9: ENDDO 10: IF total.valid>0 11: THEN average=sum/total.valid; 12: ELSE average=-999; 13: ENDIFEND average?
?
圖7.6 求平均值過程的流圖
?
對于圖7.6流圖:
?環(huán)形復(fù)雜度為6,
?共有6條獨立路徑,P157
?設(shè)計執(zhí)行每條路徑的測試用例。P158
??? 通常在設(shè)計測試用例時,識別出判定結(jié)點是很有必要的。本例中結(jié)點2、3、5、6和10是判定結(jié)點。
?
?
7.7? 黑盒測試技術(shù)
? 黑盒測試著重測試軟件功能。
? 黑盒測試不能取代白盒測試,是與白盒測試互補的測試方法,用于發(fā)現(xiàn)白盒測試不易發(fā)現(xiàn)的錯誤。
? 黑盒測試發(fā)現(xiàn)的錯誤類型:
? ①功能不正確或遺漏了功能;
? ②界面錯誤;
? ③數(shù)據(jù)結(jié)構(gòu)錯誤或外部數(shù)據(jù)庫訪問錯誤;
?④性能錯誤;
? ⑤初始化和終止錯誤。
?
白盒測試主要用于測試過程的早期,
黑盒測試主要用于測試過程的后期。
設(shè)計黑盒測試方案時,應(yīng)該考慮下述問題:
(1) 怎樣測試功能的有效性?
(2) 哪些類型的輸入可構(gòu)成好測試用例?
(3) 系統(tǒng)是否對特定的輸入值特別敏感?
(4) 怎樣劃定數(shù)據(jù)類的邊界?
(5) 系統(tǒng)能夠承受什么樣的數(shù)據(jù)率和數(shù)據(jù)量?
(6) 數(shù)據(jù)的特定組合將對系統(tǒng)運行產(chǎn)生什么影響?
?
應(yīng)用黑盒測試技術(shù),設(shè)計測試用例的標(biāo)準(zhǔn):
(1) 能夠減少為達到合理測試所需要設(shè)計的測試用例的總數(shù);
(2) 能夠告訴我們,是否存在某些類型的錯誤,而不是僅僅指出與特定測試相關(guān)的錯誤是否存在。
?
黑盒測試技術(shù):
?等價劃分
?邊界值分析
?
7.7.1? 等價劃分
等價劃分:把程序的輸入域劃分成若干個數(shù)據(jù)類,據(jù)此導(dǎo)出測試用例。
??? 一個理想的測試用例能獨自發(fā)現(xiàn)一類錯誤。
??? 窮盡的黑盒測試是不現(xiàn)實的。
??? 等價劃分法力圖設(shè)計出能發(fā)現(xiàn)若干類程序錯誤的測試用例,從而減少必須設(shè)計的測試用例的數(shù)目。
?等價類:是指某個輸入域的子集合。在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的。
?從等價類中選取一個數(shù)據(jù)進行測試,即可代表整個等價類中所有數(shù)據(jù)的測試結(jié)果,從而減少了測試時間和代價。
? 使用等價劃分法設(shè)計測試方案,首先需要劃分輸入數(shù)據(jù)的等價類。
?
等價類劃分規(guī)則:
(1) 如果規(guī)定了輸入值的范圍,則可劃分出一個有效的等價類(輸入值在此范圍內(nèi)),兩個無效的等價類(輸入值小于最小值或大于最大值);
???? ????100 < x < 999
(2) 如果規(guī)定了輸入數(shù)據(jù)的個數(shù),則可劃分出一個有效的等價類和兩個無效的等價類;
(3) 如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌斎胫底霾煌幚?#xff0c;則每個允許的輸入值是一個有效的等價類,此外還有一個無效的等價類(任一個不允許的輸入值);
???? X∈{1,3,5,7}
(4) 如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可以劃分出一個有效的等價類(符合規(guī)則)和若干個無效的等價類(從各種不同角度違反規(guī)則);
(5) 如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負(fù)整數(shù)等3個有效類;
(6)如果輸入條件是一個布爾量,則可定義一個有效等價類和一個無效等價類。
?????? X為布爾量
實際情況千變?nèi)f化,根本無法一一列出。
?
劃分出等價類以后,根據(jù)等價類設(shè)計測試方案時主要使用下面兩個步驟:
(1) 設(shè)計一個新的測試方案以盡可能多地覆蓋尚未被覆蓋的有效等價類,重復(fù)這一步驟直到所有有效等價類都被覆蓋為止;
(2) 設(shè)計一個新的測試方案,使它覆蓋一個而且只覆蓋一個尚未被覆蓋的無效等價類,重復(fù)這一步驟直到所有無效等價類都被覆蓋為止。
??? 因為程序發(fā)現(xiàn)一類錯誤后就不再檢查是否還有其他錯誤,因此,每個測試方案只覆蓋一個無效的等價類。
?
?
下面用等價劃分法設(shè)計一個簡單程序的測試方案。
假設(shè)有一個把數(shù)字串轉(zhuǎn)變成整數(shù)的函數(shù)。計算機字長16位,用二進制補碼表示整數(shù)。這個函數(shù)是用Pascal語言編寫的,它的說明如下:function strtoint (dstr:shortstr):integer;函數(shù)的參數(shù)類型是shortstr,它的說明是:type shortstr=array[1..6] of char;被處理的數(shù)字串是右對齊的,如果數(shù)字串比6個字符短,則在它的左邊補空格。如果數(shù)字串是負(fù)的,則負(fù)號和最高位數(shù)字緊相鄰(負(fù)號在最高位數(shù)字左邊一位)。
?
可以劃分出如下等價類:
?
? 有效輸入的等價類有:
(1) 1~6個數(shù)字字符組成的數(shù)字串(最高位數(shù)字不是零);
(2) 最高位數(shù)字是零的數(shù)字串;
(3) 最高位數(shù)字左鄰是負(fù)號的數(shù)字串;
?
? 無效輸入的等價類有:
(4) 空字符串(全是空格);
(5) 左部填充的字符既不是零也不是空格;
(6) 最高位數(shù)字右面由數(shù)字和空格混合組成;
(7) 最高位數(shù)字右面由數(shù)字和其他字符混合組成;
(8) 負(fù)號與最高位數(shù)字之間有空格;
?
? 合法輸出的等價類有:
(9) 在計算機能表示的最小負(fù)整數(shù)和零之間的負(fù)整數(shù);
(10) 零;
(11) 在零和計算機能表示的最大正整數(shù)之間的正整數(shù);
?
? 非法輸出的等價類有
(12) 比計算機能表示的最小負(fù)整數(shù)還小的負(fù)整數(shù);
(13) 比計算機能表示的最大正整數(shù)還大的正整數(shù)。
??? 因為所用計算機字長16位,能表示的最小負(fù)整數(shù)是-32 768,能表示的最大正整數(shù)是32 767。
?
7.7.2? 邊界值分析
??? 人們從長期的測試工作經(jīng)驗得知,大量的錯誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部。
? 針對各種邊界情況設(shè)計測試用例,可以查出更多的錯誤。
? 對等價類方法的補充
?
比如,在做三角形計算時,要輸入三角形的三個邊長:A、B和C。
這三個數(shù)值應(yīng)當(dāng)滿足:
??? A>0、B>0、C>0、
??? A+B>C、A+C>B、B+C>A,
但如果把 “>”錯寫成 “≥”,那就不能構(gòu)成三角形。問題恰出現(xiàn)在容易被疏忽的邊界附近。
?
使用邊界值分析方法設(shè)計測試方案:
?首先應(yīng)該確定邊界情況。
?應(yīng)該選取剛好等于、剛剛小于和剛剛大于邊界值的數(shù)據(jù)作為測試數(shù)據(jù),而不是選取每個等價類內(nèi)的典型值或任意值作為測試數(shù)據(jù)。
???????? 100 < x < 999
??? 通常設(shè)計測試方案時總是聯(lián)合使用等價劃分和邊界值分析兩種技術(shù)。
?
7.7.3? 錯誤推測
? 經(jīng)驗表明,在一段程序中已經(jīng)發(fā)現(xiàn)的錯誤數(shù)目往往和尚未發(fā)現(xiàn)的錯誤數(shù)成正比。
??? 例如,在IBM OS/370操作系統(tǒng)中,用戶發(fā)現(xiàn)的全部錯誤的47%只與該系統(tǒng)4%的模塊有關(guān)。
??? 因此,要著重測試那些已發(fā)現(xiàn)了較多錯誤的程序段。
? 等價劃分法和邊界值分析法都只孤立地考慮各個輸入數(shù)據(jù)的測試功效,而沒有考慮多個輸入數(shù)據(jù)的組合效應(yīng),可能會遺漏了輸入數(shù)據(jù)易于出錯的組合情況。
? 選擇輸入組合的一個有效途徑是利用判定表或判定樹為工具,列出輸入數(shù)據(jù)各種組合與程序應(yīng)作的動作(及相應(yīng)的輸出結(jié)果)之間的對應(yīng)關(guān)系,然后為判定表的每一列至少設(shè)計一個測試用例。
?
7.8? 調(diào)試
?調(diào)試也稱排錯。
?調(diào)試與測試的關(guān)系主要體現(xiàn)在以下幾個方面:
? (1)測試的目的是暴露錯誤;而調(diào)試的目的是發(fā)現(xiàn)錯誤,改正錯誤。
? (2)測試是揭示設(shè)計人員的過失,通常應(yīng)由非設(shè)計人員來承擔(dān);而調(diào)試是幫助設(shè)計人員糾正錯誤,可以由設(shè)計人員自己承擔(dān)。
? (3)測試發(fā)現(xiàn)錯誤后,立即進行調(diào)試并改正錯誤,然后進行再測試(回歸測試)。
? (4)調(diào)試用例與測試用例可以一致,也可以不一致。
7.8.1? 調(diào)試過程
調(diào)試總是發(fā)生在測試之后,如圖7.8所示。
??? 調(diào)試過程從執(zhí)行一個測試用例開始,評估測試結(jié)果,如果發(fā)現(xiàn)實際結(jié)果與預(yù)期結(jié)果不一致,表明在軟件中存在隱藏的問題。調(diào)試過程試圖找出問題的原因,以便改正錯誤。
調(diào)試過程總會有以下兩種結(jié)果之一:
?①找到了問題的原因并把問題改正和排除掉了;
?②沒找出問題的原因。此時,調(diào)試人員可以猜想一個原因,并設(shè)計測試用例附加測試,重復(fù)此過程直至找到原因并改正了錯誤。
?
圖7.8 調(diào)試過程
7.8.2? 調(diào)試途徑
調(diào)試的目標(biāo):是尋找軟件錯誤的原因并改正錯誤。一般說來,有下列途徑可以采用:
?試探法
?回溯法
?對分查找法
?歸納法
?演繹法
?
1.試探法
? 分析錯誤征兆,猜測發(fā)生錯誤的大概位置,然后利用有關(guān)的調(diào)試技術(shù)進一步獲得錯誤信息。這種策略往往是緩慢而低效的。
?
2. 回溯法
?首先檢查錯誤征兆,確定最先發(fā)現(xiàn)錯誤的位置,然后人工沿程序的控制流往回追蹤源程序代碼,直到找出錯誤根源或確定故障范圍為止。
?回溯法對于小程序而言是一種比較好的調(diào)試策略。但是對于大程序,其回溯的路徑數(shù)目會變得很大,以至使徹底回溯成為不可能。
?回溯法的另一種形式是正向追蹤,即使用插入打印語句的方法檢查一系列中間結(jié)果,以確定最先出現(xiàn)錯誤的地方。
?
3.對分查找法
? 在程序的中點附近輸入某些變量的正確值(如利用賦值語句或輸入語句),然后觀察程序的輸出。若輸出結(jié)果正確,則說明錯誤出現(xiàn)在程序的前半部分;否則,說明程序的后半部分有錯。對于程序中有錯的那部分再重復(fù)使用這個方法,直到把錯誤范圍縮小到容易診斷的程度為止。
?
4.歸納法
歸納法:是從個別推斷全體,即從線索(錯誤征兆)出發(fā),通過分析這些線索之間的關(guān)系而找出故障。這種方法主要有以下四個步驟:
①收集已有的使程序出錯與不出錯的所有數(shù)據(jù)。
②整理這些數(shù)據(jù),以便發(fā)現(xiàn)規(guī)律或矛盾。
③提出關(guān)于故障的若干假設(shè)。
④證明假設(shè)的合理性,根據(jù)假設(shè)排除故障
?
5.演繹法
?演繹法是從一般原理或前提出發(fā),經(jīng)過刪除和精化的過程,最后推導(dǎo)出結(jié)論。
?用演繹法排錯時,首先要列出所有可能造成出錯的原因和假設(shè),然后逐個排除,最后證明剩下的原因確實是錯誤的根源。演繹法排錯主要有以下四個步驟:
??? ①設(shè)想所有可能產(chǎn)生錯誤的原因。
??? ②利用已有的數(shù)據(jù)排除不正確的假設(shè)。
??? ③精化剩下的假設(shè)。
??? ④證明假設(shè)的合理性,根據(jù)假設(shè)排除故障。
?
7.9? 軟件可靠性 ?
7.9.1? 基本概念
1.? 軟件可靠性的定義
軟件可靠性:是程序在給定的時間間隔內(nèi),按照規(guī)格說明書的規(guī)定成功地運行的概率。
??? 隨著運行時間的增加,運行時出現(xiàn)程序故障的概率也將增加,可靠性隨著給定的時間間隔的加大而減少。
按照IEEE的規(guī)定
錯誤:是由開發(fā)人員造成的軟件差錯(bug)。
故障:是由錯誤引起的軟件的不正確行為。
?
2. 軟件的可用性
軟件可用性:是程序在給定的時間點,按照規(guī)格說明書的規(guī)定,成功地運行的概率。
可靠性和可用性之間的主要差別是:
? 可靠性意味著在0到t這段時間間隔內(nèi)系統(tǒng)沒有失效,
?可用性只意味著在時刻t,系統(tǒng)是正常運行的。
??? 因此,如果在時刻t系統(tǒng)是可用的,則有下述種種可能:
??? 在0到t這段時間內(nèi),系統(tǒng)一直沒失效(可靠);
??? 在這段時間內(nèi)失效了一次,但是又修復(fù)了;
??? 在這段時間內(nèi)失效了兩次修復(fù)了兩次;……
?
7.10? 小結(jié)
實現(xiàn)包括編碼和測試兩個階段。
??? 編碼是在對軟件進行了總體設(shè)計和詳細設(shè)計之后進行的,它只不過是把軟件設(shè)計的結(jié)果翻譯成用某種程序設(shè)計語言書寫的程序,因此,程序的質(zhì)量基本上取決于設(shè)計的質(zhì)量。
??? 但是,編碼使用的語言,特別是寫程序的風(fēng)格,也對程序質(zhì)量有相當(dāng)大的影響。
?
??? 軟件測試仍然是保證軟件可靠性的主要手段。
??? 測試階段的根本任務(wù)是發(fā)現(xiàn)并改正軟件中的錯誤。
??? 軟件測試是軟件開發(fā)過程中最艱巨最繁重的任務(wù),應(yīng)該分階段地進行,分為單元測試、集成測試和驗收測試3個基本階段。
??? 設(shè)計測試方案是測試階段的關(guān)鍵技術(shù)問題,基本目標(biāo)是選用最少量的高效測試數(shù)據(jù),做到盡可能完善的測試,從而盡可能多地發(fā)現(xiàn)軟件中的問題。
??? 兩種測試途徑:計算機進行測試,人工進行測試(例如,代碼審查)。兩種途徑各有優(yōu)缺點,互相補充,缺一不可。
?
??? 白盒測試和黑盒測試是軟件測試的兩類基本方法,這兩類方法各有所長,相互補充。
??? 在測試過程的早期階段主要使用白盒方法,而在測試過程的后期階段主要使用黑盒方法。
??? 設(shè)計白盒測試方案的技術(shù)主要有,邏輯覆蓋和控制結(jié)構(gòu)測試;
??? 設(shè)計黑盒測試方案的技術(shù)主要有,等價劃分、邊界值分析和錯誤推測。
?
??? 在測試過程中發(fā)現(xiàn)的軟件錯誤必須及時改正,這就是調(diào)試的任務(wù)。
??? 為了改正錯誤,首先必須確定錯誤的準(zhǔn)確位置,如需要修正原來的設(shè)計,必須通盤考慮統(tǒng)籌兼顧,而不能“頭疼醫(yī)頭、腳疼醫(yī)腳”,應(yīng)該盡量避免在調(diào)試過程中引進新錯誤。
??? 測試和調(diào)試是軟件測試階段中的兩個關(guān)系非常密切的過程,它們往往交替進行。
?
轉(zhuǎn)載于:https://www.cnblogs.com/ZanderZhao/p/11094742.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: markdown 中的一些 html 使
- 下一篇: etherum 常用命令及搭建私有链