版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、軟件測試,軟件測試的目的和原則軟件測試的重要性錯誤的分類軟件測試用例設(shè)計軟件測試的過程與策略軟件測試種類程序的靜態(tài)測試程序調(diào)試,GUI測試文檔測試面向?qū)ο笙到y(tǒng)的測試客戶/服務(wù)器系統(tǒng)的測試WEB系統(tǒng)的測試RUP中的測試工作流,軟件測試的目的和原則,軟件測試的目的軟件測試的原則軟件測試的對象測試信息流測試與軟件開發(fā)各階段的關(guān)系,,軟件測試的目的,基于不同的立場,存在著兩種完全不同的測試目的。從用戶的角度出發(fā)
2、,普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯誤的過程,驗證該軟件已正確地實現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。,Myers軟件測試目的,(1) 測試是程序的執(zhí)行過程,目的在于發(fā)現(xiàn)錯誤;(2) 一個好的測試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯誤;(3) 一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤的測試。,換言之,測試的目的是 想以最少的時間和人力,
3、系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。如果我們成功地實施了測試,我們就能夠發(fā)現(xiàn)軟件中的錯誤。 測試的附帶收獲是,它能夠證明軟件的功能和性能與需求說明相符合。 實施測試收集到的測試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。 測試不能表明軟件中不存在錯誤,它只能說明軟件中存在錯誤。,,軟件測試的原則,1. 測試計劃可以在需求模型一完成就開始,詳細的測試用例定義可以在設(shè)計模型被確定后立刻開始。因此所有測試可以在任何代碼被產(chǎn)生前進行計劃和設(shè)計。 應(yīng)
4、當(dāng)把“盡早地和不斷地進行軟件測試”作為軟件開發(fā)者的座右銘。2. 所有的測試都應(yīng)追溯到用戶需求。軟件測試的目標(biāo)在于揭示錯誤,而最嚴重的錯誤(從用戶角度看)是那些導(dǎo)致程序無法滿足需求的錯誤。,3. 測試用例應(yīng)由測試輸入數(shù)據(jù)和對應(yīng)的預(yù)期輸出結(jié)果這兩部分組成。4. 程序員應(yīng)避免檢查自己的程序。5. 在設(shè)計測試用例時,應(yīng)包括合理的輸入條件和不合理的輸入條件。6. 測試應(yīng)從“小規(guī)?!遍_始,逐步轉(zhuǎn)向“大規(guī)模”。從單元測試到組裝測試再到系統(tǒng)測試
5、7。窮舉測試是不可能的,然而充分覆蓋程序邏輯,并確保程序設(shè)計中使用的所有條件是有可能的。,,軟件測試的原則,8. Pareto原則應(yīng)用于軟件測試。Pareto原則暗示著測試發(fā)現(xiàn)的錯誤中80%很可能起源于程序模塊中20%。因此應(yīng)集中精力孤立有疑點的模塊,對其進行徹底測試,這對測試的安排很重要。9. 充分注意測試中的群集現(xiàn)象。經(jīng)驗表明,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯誤數(shù)目成正比。10. 嚴格執(zhí)行測試計劃,排除測試的隨
6、意性。應(yīng)當(dāng)對每一個測試結(jié)果做全面檢查。妥善保存測試計劃,測試用例,出錯統(tǒng)計和最終分析報告,為維護提供方便。,,軟件測試的原則,軟件測試的對象,軟件測試并不等于程序測試。軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間。需求分析、概要設(shè)計、詳細設(shè)計以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明、概要設(shè)計規(guī)格說明、詳細設(shè)計規(guī)格說明以及源程序,都應(yīng)成為軟件測試的對象。,為把握軟件開發(fā)各個環(huán)節(jié)的正確性,需要進行各種確認和驗證工作。確認(Vali
7、dation),是一系列的活動和過程,目的是想證實在一個給定的外部環(huán)境中軟件的邏輯正確性。 需求規(guī)格說明確認 程序確認 (靜態(tài)確認、動態(tài)確認) 驗證(Verification),試圖證明在軟件生存期各個階段,以及階段間的邏輯協(xié)調(diào)性、完備性和正確性。,,測試信息流,測試信息流,軟件配置:軟件需求規(guī)格說明、軟件設(shè)計規(guī)格說明、源代碼等;測試配置:測試計劃、測試用例、測試程序等;測試工具:測試數(shù)據(jù)自動生成程序、靜態(tài)分析程序、動態(tài)分析程
8、序、測試結(jié)果分析程序、以及驅(qū)動測試的測試數(shù)據(jù)庫等等。,測試結(jié)果分析:比較實測結(jié)果與預(yù)期結(jié)果,評價錯誤是否發(fā)生。排錯(調(diào)試):對已經(jīng)發(fā)現(xiàn)的錯誤進行錯誤定位和確定出錯性質(zhì),并改正這些錯誤,同時修改相關(guān)的文檔。修正后的文檔再測試:直到通過測試為止。,通過收集和分析測試結(jié)果數(shù)據(jù),對軟件建立可靠性模型利用可靠性分析,評價軟件質(zhì)量: 軟件的質(zhì)量和可靠性達到可以接受的程度; 所做的測試不足以發(fā)現(xiàn)嚴重的錯誤;如果測試發(fā)現(xiàn)不了錯誤,可以肯定,
9、測試配置考慮得不夠細致充分,錯誤仍然潛伏在軟件中。這些錯誤最終不得不由用戶在使用中發(fā)現(xiàn),并在維護時由開發(fā)者去改正。但那時改正錯誤的費用將比在開發(fā)階段改正錯誤的費用要高出40倍到60倍。,,測試與軟件開發(fā)各階段的關(guān)系,軟件開發(fā)過程是一個自頂向下,逐步細化的過程軟件計劃階段定義軟件作用域軟件需求分析建立軟件信息域、功能和性能需求、約束等軟件設(shè)計把設(shè)計用某種程序設(shè)計語言轉(zhuǎn)換成程序代碼,測試過程是依相反順序安排的自底向上,逐步集成的過程
10、。,,返,傳統(tǒng)測試過程,,建立,設(shè)計,測試,,,測試生命周期,建立 1,,建立 2,建立 3,建立 4,用戶改進迭代,測試,測試,測試,測試,,,,測試需要盡早的開始,,設(shè)計,無須 “凍結(jié)” 規(guī)格,測試生命周期,,測試生命周期,測試生命周期,測試生命周期,測試生命周期,測試計劃定義測試項目的過程,以便測試項目能被正確的度量和控制。包括測試需求,測試策略,測試資源和測試計劃,測試生命周期,測試設(shè)計為了最有效的驗證測試需求被覆蓋,
11、定義自動的測試,測試生命周期,測試開發(fā)在測試設(shè)計期間已被定義,創(chuàng)建或獲得自動的測試過程.,測試生命周期,測試執(zhí)行運行與被測試應(yīng)用的軟件構(gòu)造相對應(yīng)的測試過程集,并記錄結(jié)果日志,包括缺陷報告和測試日志。,測試生命周期,測試評估分析測試結(jié)果,確定是否測試標(biāo)準被覆蓋的過程.,測試生命周期,缺陷跟蹤初始記錄測試故障或用戶問題,檢查測試故障以及提供解決它們的結(jié)構(gòu)的過程。,,測試人員,項目持續(xù)時間,測試人員,代碼實現(xiàn),消除缺陷,維護的費用1
12、x 10x 100x,軟件測試重要性,,項目持續(xù)時間,消除缺陷,消除缺陷,軟件測試重要性,100%,軟件測試重要性,,越早測試越好自動的測試測試每一個版本,傳統(tǒng)的測試是在代碼實現(xiàn)之后進行,軟件測試重要性,程序錯誤分類,(1) 按錯誤的影響和后果分類較小錯誤:只對系統(tǒng)輸出有一些非實質(zhì)性影響。如,輸出的數(shù)據(jù)格式不合要求等。中等錯誤:對系統(tǒng)的運行有局部影響。如輸出的某些數(shù)據(jù)有錯誤或出現(xiàn)冗余。較嚴重錯誤:系統(tǒng)的
13、行為因錯誤的干擾而出現(xiàn)明顯不合情理的現(xiàn)象。比如開出了0.00元的支票,系統(tǒng)的輸出完全不可信賴。嚴重錯誤:系統(tǒng)運行不可跟蹤,一時不能掌握其規(guī)律,時好時壞。非常嚴重的錯誤:系統(tǒng)運行中突然停機,其原因不明,無法軟啟動。最嚴重的錯誤:系統(tǒng)運行導(dǎo)致環(huán)境破壞,或是造成事故,引起生命、財產(chǎn)的損失。,(2) 按錯誤的性質(zhì)和范圍分類。B.Beizer從軟件測試觀點出發(fā),把軟件錯誤分為5類。① 功能錯誤 規(guī)格說明錯誤:規(guī)格說明可能不完全,有二義性
14、或自身矛盾。功能錯誤:程序?qū)崿F(xiàn)的功能與用戶要求的不一致。這常常是由于規(guī)格說明中包含錯誤的功能、多余的功能或遺漏的功能所致。測試錯誤:軟件測試的設(shè)計與實施發(fā)生錯誤。軟件測試自身也可能發(fā)生錯誤。測試標(biāo)準引起的錯誤:對軟件測試的標(biāo)準要選擇適當(dāng),若測試標(biāo)準太復(fù)雜,則導(dǎo)致測試過程出錯的可能就大。,② 系統(tǒng)錯誤外部接口錯誤:外部接口指如終端、打印機、通信線路等系統(tǒng)與外部環(huán)境通信的手段。所有外部接口之間,人與機器之間的通信都使用形式的或非形式
15、的專門協(xié)議。如果協(xié)議有錯,或太復(fù)雜,難以理解,致使在使用中出錯。此外還包括對輸入/輸出格式錯誤理解,對輸入數(shù)據(jù)不合理的容錯等等。內(nèi)部接口錯誤:內(nèi)部接口指程序之間的聯(lián)系。它所發(fā)生的錯誤與程序內(nèi)實現(xiàn)的細節(jié)有關(guān)。例如,設(shè)計協(xié)議錯、輸入/輸出格式錯、數(shù)據(jù)保護不可靠、子程序訪問錯等。硬件結(jié)構(gòu)錯誤:這類錯誤在于不能正確地理解硬件如何工作。例如,忽視或錯誤地理解分頁機構(gòu)、地址生成、通道容量、I/O指令、中斷處理、設(shè)備初始化和啟動等而導(dǎo)致的出錯。,
16、操作系統(tǒng)錯誤:這類錯誤主要是由于不了解操作系統(tǒng)的工作機制而導(dǎo)致出錯。當(dāng)然,操作系統(tǒng)本身也有錯誤,但是一般用戶很難發(fā)現(xiàn)這種錯誤。軟件結(jié)構(gòu)錯誤:由于軟件結(jié)構(gòu)不合理或不清晰而引起的錯誤。這種錯誤通常與系統(tǒng)的負載有關(guān),而且往往在系統(tǒng)滿載時才出現(xiàn)。這是最難發(fā)現(xiàn)的一類錯誤。例如,錯誤地設(shè)置局部參數(shù)或全局參數(shù);錯誤地假定寄存器與存儲器單元初始化了;錯誤地假定不會發(fā)生中斷而導(dǎo)致不能封鎖或開中斷;錯誤地假定程序可以繞過數(shù)據(jù)的內(nèi)部鎖而導(dǎo)致不能關(guān)閉或打開內(nèi)
17、部鎖;錯誤地假定被調(diào)用子程序常駐內(nèi)存或非常駐內(nèi)存等等,都將導(dǎo)致軟件出錯??刂婆c順序錯誤:這類錯誤包括:忽視了時間因素而破壞了事件的順序;猜測事件出現(xiàn)在指定的序列中;等待一個不可能發(fā)生的條件;漏掉先決條件;規(guī)定錯誤的優(yōu)先級或程序狀態(tài);漏掉處理步驟;存在不正確的處理步驟或多余的處理步驟等。資源管理錯誤:這類錯誤是由于不正確地使用資源而產(chǎn)生的。例如,使用未經(jīng)獲準的資源;使用后未釋放資源;資源死鎖;把資源鏈接在錯誤的隊列中等等。,③ 加工錯
18、誤算術(shù)與操作錯誤:指在算術(shù)運算、函數(shù)求值和一般操作過程中發(fā)生的錯誤。包括:數(shù)據(jù)類型轉(zhuǎn)換錯;除法溢出;錯誤地使用關(guān)系比較符;用整數(shù)與浮點數(shù)做比較等。初始化錯誤:典型的錯誤有:忘記初始化工作區(qū),忘記初始化寄存器和數(shù)據(jù)區(qū);錯誤地對循環(huán)控制變量賦初值;用不正確的格式,數(shù)據(jù)或類型進行初始化等等。 控制和次序錯誤:這類錯誤與系統(tǒng)級同名錯誤類似,但它是局部錯誤。包括:遺漏路徑;不可達到的代碼;不符合語法的循環(huán)嵌套;循環(huán)返回和終止的條件不正確;漏
19、掉處理步驟或處理步驟有錯等。靜態(tài)邏輯錯誤:這類錯誤主要包括:不正確地使用CASE語句;在表達式中使用不正確的否定(例如用“>”代替“<”的否定);對情況不適當(dāng)?shù)胤纸馀c組合;混淆“或”與“異或”等。,④ 數(shù)據(jù)錯誤動態(tài)數(shù)據(jù)錯誤:動態(tài)數(shù)據(jù)是在程序執(zhí)行過程中暫時存在的數(shù)據(jù)。各種不同類型的動態(tài)數(shù)據(jù)在程序執(zhí)行期間將共享一個共同的存儲區(qū)域,若程序啟動時對這個區(qū)域未初始化,就會導(dǎo)致數(shù)據(jù)出錯。由于動態(tài)數(shù)據(jù)被破壞的位置可能與出錯的位置在距離上相差很遠,
20、因此要發(fā)現(xiàn)這類錯誤比較困難。靜態(tài)數(shù)據(jù)錯誤:靜態(tài)數(shù)據(jù)在內(nèi)容和格式上都是固定的。它們直接或間接地出現(xiàn)在程序或數(shù)據(jù)庫中。由編譯程序或其它專門程序?qū)λ鼈冏鲱A(yù)處理。這是在程序執(zhí)行前防止靜態(tài)錯誤的好辦法,但預(yù)處理也會出錯。數(shù)據(jù)內(nèi)容錯誤:數(shù)據(jù)內(nèi)容是指存儲于存儲單元或數(shù)據(jù)結(jié)構(gòu)中的位串、字符串或數(shù)字。數(shù)據(jù)內(nèi)容本身沒有特定的含義,除非通過硬件或軟件給予解釋。數(shù)據(jù)內(nèi)容錯誤就是由于內(nèi)容被破壞或被錯誤地解釋而造成的錯誤。數(shù)據(jù)結(jié)構(gòu)錯誤:數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)元素的
21、大小和組織形式。在同一存儲區(qū)域中可以定義不同的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)錯誤主要包括結(jié)構(gòu)說明錯誤及把一個數(shù)據(jù)結(jié)構(gòu)誤當(dāng)做另一類數(shù)據(jù)結(jié)構(gòu)使用的錯誤。這是更危險的錯誤。數(shù)據(jù)屬性錯誤:數(shù)據(jù)屬性是指數(shù)據(jù)內(nèi)容的含義或語義。例如,整數(shù)、字符串、子程序等等。數(shù)據(jù)屬性錯誤主要包括:對數(shù)據(jù)屬性不正確地解釋,比如錯把整數(shù)當(dāng)實數(shù),允許不同類型數(shù)據(jù)混合運算而導(dǎo)致的錯誤等。,⑤ 代碼錯誤,主要包括語法錯誤打字錯誤對語句或指令不正確理解所產(chǎn)生的錯誤。,(3) 按軟件
22、生存期階段分類,Gerhart分類方法把軟件的邏輯錯誤按生存期不同階段分為4類。① 問題定義(需求分析)錯誤:它們是在軟件定義階段,分析員研究用戶的要求后所編寫的文檔中出現(xiàn)的錯誤。換句話說,這類錯誤是由于問題定義不滿足用戶的要求而導(dǎo)致的錯誤。② 規(guī)格說明錯誤:這類錯誤是指規(guī)格說明與問題定義不一致所產(chǎn)生的錯誤。它們又可以細分成:不一致性錯誤:規(guī)格說明中功能說明與問題定義發(fā)生矛盾。冗余性錯誤:規(guī)格說明中某些功能說明與問題定義相比是
23、多余的。不完整性錯誤:規(guī)格說明中缺少某些必要的功能說明。不可行錯誤:規(guī)格說明中有些功能要求是不可行的。 不可測試錯誤:有些功能的測試要求是不現(xiàn)實的。,③ 設(shè)計錯誤:這是在設(shè)計階段產(chǎn)生的錯誤,它使系統(tǒng)的設(shè)計與需求規(guī)格說明中的功能說明不相符。它們又可以細分為:設(shè)計不完全錯誤:某些功能沒有被設(shè)計,或設(shè)計得不完全。算法錯誤:算法選擇不合適。主要表現(xiàn)為算法的基本功能不滿足功能要求、算法不可行或者算法的效率不符合要求。模塊接口錯誤:模塊
24、結(jié)構(gòu)不合理;模塊與外部數(shù)據(jù)庫的界面不一致,模塊之間的界面不一致??刂七壿嬪e誤:控制流程與規(guī)格說明不一致;控制結(jié)構(gòu)不合理。數(shù)據(jù)結(jié)構(gòu)錯誤:數(shù)據(jù)設(shè)計不合理;與算法不匹配;數(shù)據(jù)結(jié)構(gòu)不滿足規(guī)格說明要求。,④ 編碼錯誤:編碼過程中的錯誤是多種多樣的,大體可歸為以下幾種:數(shù)據(jù)說明錯、數(shù)據(jù)使用錯、計算錯、比較錯、控制流錯、界面錯、輸入/輸出錯,及其它的錯誤。在不同的開發(fā)階段,錯誤的類型和表現(xiàn)形式是不同的,故應(yīng)當(dāng)采用不同的方法和策略來進行檢測。,
25、測試用例設(shè)計,兩種常用的測試方法 黑盒測試 白盒測試,,黑盒測試,這種方法是把測試對象看做一個黑盒子,測試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求規(guī)格說明書,檢查程序的功能是否符合它的功能說明。黑盒測試又叫做功能測試或數(shù)據(jù)驅(qū)動測試。,黑盒測試方法是在程序接口上進行測試,主要是為了發(fā)現(xiàn)以下錯誤: 是否有不正確或遺漏了的功能? 在接口上,輸入能否正確地接受? 能否輸出正確的結(jié)果? 是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息
26、(例如數(shù)據(jù)文件)訪問錯誤? 性能上是否能夠滿足要求? 是否有初始化或終止性錯誤?,用黑盒測試發(fā)現(xiàn)程序中的錯誤,必須在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),來檢查程序是否都能產(chǎn)生正確的輸出。但這是不可能的。,假設(shè)一個程序P有輸入量X和Y及輸出量Z。在字長為32位的計算機上運行。若X、Y取整數(shù),按黑盒方法進行窮舉測試:可能采用的 測試數(shù)據(jù)組: 232×232 =264 如果測試一組數(shù)據(jù)
27、需要1毫秒,一年工作365× 24小時,完成所有測試需5億年。,白盒測試,此方法把測試對象看做一個透明的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。,軟件人員使用白盒測試方法,主要想對程序模塊進行如下的檢查: 對程序模塊的所有獨立的執(zhí)行路徑至少測試一次; 對所
28、有的邏輯判定,取“真”與取“假”的兩種情況都至少測試一次; 在循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體; 測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等。,對一個具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。給出一個小程序的流程圖,它包括了一個執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達520條,對每一條路徑進行測試需要1毫秒,假定一年工作365 × 24小時,要想把所有路徑測試完,需3170年。,為什么進行白盒測試?,一個合理的問題:
29、“我們應(yīng)該更注重于保證程序需求的實現(xiàn),為什么要花費時間和精力來擔(dān)心(和測試)邏輯細節(jié)?”,換一種說法,我們?yōu)槭裁床粚⑺械木τ糜诤诤袦y試呢?答案在于軟件的自身缺陷:邏輯錯誤和不正確的假設(shè)與一條程序路徑被運行的可能性成反比。當(dāng)我們設(shè)計和實現(xiàn)主流之外的功能、條件或控制時,錯誤往往開始出現(xiàn)在我們的工作中。我們經(jīng)常相信某邏輯路徑不可能被執(zhí)行,而事實上,它可能在正常的基礎(chǔ)上被執(zhí)行。程序的邏輯流有時是違反直覺的,這意味著我們關(guān)于控制流和數(shù)據(jù)
30、流的一些無意識的假設(shè)可能導(dǎo)致設(shè)計錯誤,只有路徑測試能發(fā)現(xiàn)這種錯誤。;印刷上的錯誤是隨機的。程序員可能會產(chǎn)生某些拼寫錯誤,絕大多數(shù)可以在編譯時被發(fā)現(xiàn),但是,有些在測試時才會被發(fā)現(xiàn)。黑盒測試,不管它多全面,都可能忽略前面提到的某些類型的錯誤,“錯誤潛伏在角落里,聚集在邊界上”。白盒測試更可能發(fā)現(xiàn)它們!,邏輯覆蓋,語句覆蓋 判定覆蓋 條件覆蓋,判定-條件覆蓋 條件組合覆蓋 路徑覆蓋。,邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計測
31、試用例的技術(shù)。它屬白盒測試。,,,,,例,,,(A>1) and (B=0),(A=2) or (X>1),,,,,X=X/A,,,,,,,X=X+1,,,T,T,F,F,a,b,d,c,e,L1 ( a ? c ? e )= {(A>1) and (B=0)} and {(A=2) or (X/A>1)}= (A>1) and (B=0) and (A=2) or
32、 (A>1) and (B=0) and (X/A>1)= (A=2) and (B=0) or (A>1) and (B=0) and (X/A>1),L2 ( a? b ? d )= not{(A>1) and (B=0)} and not{(A=2) or (X>1)}= { not (A>1) or not (B=0) } and
33、 { not (A=2) and not (X>1) }= not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1),L3 ( a? b? e)= not {(A>1) and (B=0)} and {(A=2
34、) or (X>1)}= { not (A>1) or not (B=0)} and {(A=2) or (X>1)}= not (A>1) and (A=2) or not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1),,L4 ( a? c ?
35、d )= {(A>1) and (B=0)} and not {(A=2) or (X/A>1)}= (A>1) and (B=0) and not (A=2) and not (X/A>1),語句覆蓋,語句覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。這種覆蓋又稱為點覆蓋,它使得程序中每個可執(zhí)行語句都得到執(zhí)行,但它是最弱的邏輯覆蓋準,效果有
36、限,必須與其它方法交互使用。在圖例中,正好所有的可執(zhí)行語句都在路徑L1上,所以選擇路徑 L1設(shè)計測試用例,就可以覆蓋所有的可執(zhí)行語句。,測試用例的設(shè)計格式如下【輸入的(A, B, X),輸出的(A, B, X)】為圖例設(shè)計滿足語句覆蓋的測試用例是:【(2, 0, 4),(2, 0, 3)】 覆蓋 ace【L1】,,(A=2) and (B=0) or (A>1) and (B=0) and (X/A&
37、gt;1),,判定覆蓋,判定覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。判定覆蓋只比語句覆蓋稍強一些,但實際效果表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯誤。因此,還需要更強的邏輯覆蓋準則去檢驗判斷內(nèi)部條件。 對于圖例,如果選擇路徑L1和L2,就可得滿足要求的測試用例:,【(2, 0, 4),(2, 0, 3)】覆蓋 ace【L1】【(
38、1, 1, 1),(1, 1, 1)】覆蓋 abd【L2】,(A=2) and (B=0) or (A>1) and (B=0) and (X/A>1),not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1),,,如果選擇
39、路徑L3和L4,還可得另一組可用的測試用例:【(2, 1, 1),(2, 1, 2)】覆蓋 abe【L3】【(3, 0, 3),(3, 1, 1)】覆蓋 acd【L4】,,not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1),(A>1) and (B=0) and not (A=2) and no
40、t (X/A>1),,,條件覆蓋,條件覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。條件覆蓋深入到判定中的每個條件,但可能不能滿足判定覆蓋的要求。 在圖例中,我們事先可對所有條件的取值加以標(biāo)記。例如,對于第一個判斷: 條件 A>1 取真為 ,取假為 條件 B=0 取真為 ,取假為,對于第二個判斷: 條件A=2 取真為 ,取假為 條件X>1 取真為
41、 ,取假為 測試用例 覆蓋分支 條件取值【(2, 0, 4),(2, 0, 3)】 L1(c, e) 【(1, 0, 1),(1, 0, 1)】 L2(b, d) 【(2, 1, 1),(2, 1, 2)】 L3(b, e)或,測 試 用 例覆蓋分支 條件取值【(1, 0, 3),(1, 0, 4)】 L3(b, e) 【(2, 1, 1),(2, 1, 2)】 L3(b
42、, e),,判定-條件覆蓋,判定-條件覆蓋就是設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,每個判斷中的每個條件的可能取值至少執(zhí)行一次。換言之,即是要求各個判斷的所有可能的條件取值組合至少執(zhí)行一次。 判定-條件覆蓋有缺陷。從表面上來看,它測試了所有條件的取值。但是事實并非如此。往往某些條件掩蓋了另一些條件。會遺漏某些條件取值錯誤的情況。為徹底地檢查所有條件的取值,需要將判定語句中給出的復(fù)合條件表達式進行分解,形成由
43、多個基本判定嵌套的流程圖。這樣就可以有效地檢查所有的條件是否正確了。,測 試 用 例覆蓋分支 條件取值【(2, 0, 4),(2, 0, 3)】L1(c, e)【(1, 1, 1),(1, 1, 1)】L2(b, d),(A=2) and (B=0) or (A>1) and (B=0) and (X/A>1),,,not (A>1) and not (A=2) and not
44、 (X>1) or not (B=0) and not (A=2) and not (X>1),,,,and,or,,A>1,,T,B=0,,T,,X=X/A,,T,,,,,,F,F,A=2,,T,,F,X>1,F,,,X=X+1,,,,,改為單個條件判定的嵌套結(jié)構(gòu),條件組合覆蓋,條件組合覆蓋就是設(shè)計足夠的測試用例,運行被測程序,使得每個判斷的所有可能的條件取
45、值組合至少執(zhí)行一次。這是一種相當(dāng)強的覆蓋準則,可以有效地檢查各種可能的條件取值的組合是否正確。它不但可覆蓋所有條件的可能取值的組合,還可覆蓋所有判斷的可取分支,但可能有的路徑會遺漏掉。測試還不完全。 記 ① A>1, B=0 作 ② A>1, B≠0 作 ③ A≯1, B=0 作 ④ A≯1, B≠0 作,,⑤ A=2, X>1
46、 作 ⑥ A=2, X≯1 作 ⑦ A≠2, X>1 作 ⑧ A≠2, X≯1 作 測 試 用 例 覆蓋條件 覆蓋組合【(2, 0, 4), (2, 0, 3)】(L1) ①, ⑤【(2, 1, 1), (2, 1, 2)】(L3) ②, ⑥【(1,
47、0, 3), (1, 0, 4)】(L3) ③, ⑦【(1, 1, 1), (1, 1, 1)】(L2) ④, ⑧,,L4被漏掉了!,路徑測試,路徑測試就是設(shè)計足夠的測試用例,覆蓋程序中所有可能的路徑。這是最強的覆蓋準則。但在路徑數(shù)目很大時,真正做到完全覆蓋是很困難的,必須把覆蓋路徑數(shù)目壓縮到一定限度。 測 試 用 例 通過路徑
48、 覆蓋條件【(2, 0, 4), (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2) 【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)】 acd (L4),,條件測試路徑選擇,當(dāng)程序中判定多于一個時,形成的分支結(jié)構(gòu)可以分為兩類:嵌套型
49、分支結(jié)構(gòu)和連鎖型分支結(jié)構(gòu)。對于嵌套型分支結(jié)構(gòu),若有n個判定語句,需要n+1個測試用例;對于連鎖型分支結(jié)構(gòu), 若有n個判定語句,需要有2n個測試用例,覆蓋它的2n條路徑。,條件測試路徑選擇,為減少測試用例的數(shù)目,可采用試驗設(shè)計法,抽取部分路徑進行測試。由于抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻抽樣。如果明確了各條路徑的重要性,還可以采取加權(quán)的辦法,篩選掉部分路徑,再用如下的措
50、施進行抽樣。具體步驟如下:?。┰O(shè)連鎖型分支結(jié)構(gòu)中有n個判定,計算滿足關(guān)系式 n+1≤2m 的最小自然數(shù)m;ⅱ)設(shè)t = 2m,取正交表Lt,并利用它設(shè)計測試數(shù)據(jù)。,條件測試路徑選擇,例如,一個連鎖型分支結(jié)構(gòu)中有三個判定語句P1,P2,P3。它全部路徑是23=8 條。先計算3+1≤2m = t的t,得t = 4。取正交表L4,如圖 所示把每一列當(dāng)做一個判定,每一行當(dāng)做可取的測試用例,則正交表L4最多可取三個判定,分別代之以P1,P2
51、,P3。判定P1,P2,P3的取假分支和取真分支分別記作S1、S2;S3、S4;S5、S6,用各個判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一個測試路徑矩陣,如圖 所示。測試路徑數(shù)目從23=8條減少到3+1=4條。,條件測試路徑選擇,,正交表L4,路徑抽樣矩陣,條件測試的策略,程序中的條件分為簡單條件和復(fù)合條件。簡單條件是一個布爾變量或一個關(guān)系表達式(可加前綴NOT)復(fù)合條件由簡單條件通過邏輯
52、運算符(AND、OR、NOT)和括號連接而成。如果條件出錯,至少是條件中某一成分有錯。條件中可能的出錯類型有:布爾運算符錯、布爾變量錯、布爾括號錯、關(guān)系運算符錯、算術(shù)表達式錯。如果在一個判定的復(fù)合條件表達式中每個布爾變量和關(guān)系運算符最多只出現(xiàn)一次,而且沒有公共變量,應(yīng)用一種稱之為BRO(分支與關(guān)系運算符)的測試法可以發(fā)現(xiàn)多個布爾運算符或關(guān)系運算符錯,以及其它錯誤。,條件測試的策略,BRO策略引入條件約束的概念。設(shè)有n個簡單條件的復(fù)合
53、條件C,其條件約束為D =(D1, D2, …, Dn),其中Di(1≤i≤n)是條件C中第i個簡單條件的輸出約束。如果在C的執(zhí)行過程中,其每個簡單條件的輸出都滿足D中對應(yīng)的約束,則稱條件C的條件約束D由C的執(zhí)行所覆蓋。特別地,布爾變量或布爾表達式的輸出約束必須是真(t)或假(f);關(guān)系表達式的輸出約束為符號>、=、<。設(shè)條件為 C1 : B1 & B2,其中B1、B2是布爾變量,C1的輸出約束為(D1, D2),
54、在此,D1和D2或為t或為f。則(t, f)是C1可能的一個約束。覆蓋此約束的測試(一次運行)將令B1為t,B2為f。,條件測試的策略,BRO策略要求對C1的可能約束集合 { ( t, t ), ( f, t ), ( t, f ) } 中的每一個,分別設(shè)計一組測試用例。如果布爾運算符有錯,這三組測試用例的運行結(jié)果必有一組導(dǎo)致C1失敗。設(shè)條件為C2 : B1 & ( E3 = E4 ),其中B1是布爾表達式,E3和E4是算
55、術(shù)表達式,C2 的輸出約束為(D1, D2),在此,D1或為t或為f;D2則是 。因此,只有D2與C1中D2的不同,可以修改C1的約束集合 { ( t, t ), ( f, t ), ( t, f ) },導(dǎo)出C2的約束集合。因為在 ( E3 = E4 ) 中,"t" 相當(dāng)于 "=","f" 相當(dāng)于 "",則C2的約束集合為 { ( t, = ), ( f,
56、 = ), ( t, ) }。據(jù)此設(shè)計4組測試用例,檢查C2中可能的布爾或關(guān)系運算符中的錯誤。,條件測試的策略,設(shè)條件為C3 : ( E1 > E2 ) & ( E3 = E4 ),其中E1、E2、E3、E4都是算術(shù)表達式,C3的輸出約束為(D1, D2),在此,D1和D2的約束均為 。C3 中只有D1與C2中的D1不同,可以修改C2的約束集合 { ( t, = ), ( f, = ), ( t, ) },導(dǎo)出C3的
57、約束集合。因為在 ( E1 > E2 ) 中,"t" 相當(dāng)于 ">","f" 相當(dāng)于 ", = ), ( , , > ) }。根據(jù)這個約束集合設(shè)計測試用例,就能夠檢測C3中的關(guān)系運算符中的錯誤。,循環(huán)測試路徑選擇,循環(huán)分為4種不同類型:簡單循環(huán)連鎖循環(huán)嵌套循環(huán)非結(jié)構(gòu)循環(huán)。,(1) 簡單循環(huán),對于簡單循環(huán),測試應(yīng)包括以下幾種。其中的 n 表示循
58、環(huán)允許的最大次數(shù)。 ① 零次循環(huán):從循環(huán)入口到出口② 一次循環(huán):查找循環(huán)初始值方面的錯誤 ③ 二次循環(huán):檢查在多次循環(huán)時才能暴露的錯誤。④ m次循環(huán):此時的m<n,也是檢查在多次循環(huán)時才能暴露的錯誤。⑤ 最大次數(shù)循環(huán)、比最大次數(shù)多一次、少一次的循環(huán)。,例:求最小值,k = i;for ( j = i+1; j <= n; j++ ) if ( A[j] < A[k] ) k = j;,k = i
59、; j = i+1;,,,,,j <= n?,,,,,,A[j]<A[k]?,,,,,k = j,,,j ++,,,,,,,,,f,d,c,a,b,e,測試用例選擇,,對于嵌套循環(huán),不能將簡單循環(huán)的測試方法簡單地擴大到嵌套循環(huán),因為可能的測試數(shù)目將隨嵌套層次的增加呈幾何倍數(shù)增長。這可能導(dǎo)致一個天文數(shù)字的測試數(shù)目。下面給出一種有助于減少測試數(shù)目的測試方法。 ① 對最內(nèi)層循環(huán)做簡單循環(huán)的全部測試。所有其它層的循環(huán)變量置為最小
60、值;② 逐步外推,對其外面一層循環(huán)進行測試。測試時保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。③ 反復(fù)進行,直到所有各層循環(huán)測試完畢。④ 對全部各層循環(huán)同時取最小循環(huán)次數(shù),或者同時取最大循環(huán)次數(shù),(2) 嵌套循環(huán),要區(qū)別兩種情況:如果各個循環(huán)互相獨立,則連鎖循環(huán)可以用與簡單循環(huán)相同的方法進行測試。例如,有兩個循環(huán)處于連鎖狀態(tài),則前一個循環(huán)的循環(huán)變量的值就可以做為后一個循環(huán)的初值。但如果幾個循
61、環(huán)不是互相獨立的,則需要使用測試嵌套循環(huán)的辦法來處理。對于非結(jié)構(gòu)循環(huán),應(yīng)該使用結(jié)構(gòu)化程序設(shè)計方法重新設(shè)計測試用例。,(3) 連鎖循環(huán),基本路徑測試,基本路徑測試方法把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),程序中的循環(huán)體最多只執(zhí)行一次。它是在程序控制流圖的基礎(chǔ)上,分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,設(shè)計測試用例的方法。設(shè)計出的測試用例要保證在測試中,程序的每一個可執(zhí)行語句至少要執(zhí)行一次。,1. 程序的控制流圖,符號○為控制流
62、圖的一個結(jié)點,表示一個或多個無分支的PDL語句或源程序語句。箭頭為邊,表示控制流的方向。,在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個匯聚結(jié)點。邊和結(jié)點圈定的區(qū)域叫做區(qū)域,當(dāng)對區(qū)域計數(shù)時,圖形外的區(qū)域也應(yīng)記為一個區(qū)域。如果判斷中的條件表達式是由一個或多個邏輯運算符 (OR, AND, ...) 連接的復(fù)合條件表達式,則需改為 一系列只有單個條件的嵌套的判斷。,,2. 程序環(huán)路復(fù)雜性,程序的環(huán)路復(fù)雜性給出了程序基本路徑集中的獨立路徑
63、條數(shù),這是確保程序中每個可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界。從控制流圖來看,一條獨立路徑是至少包含有一條在其它獨立路徑中從未有過的邊的路徑。,例如,在圖示的控制流圖中,一組獨立的路徑是path1:1 - 11path2:1 - 2 - 3 - 4 - 5 - 10 - 1 - 11path3:1 - 2 - 3 - 6 - 8 - 9 - 10 - 1 - 11path4:1 - 2 - 3 - 6 - 7 -
64、9 - 10 - 1 - 11路徑 path1,path2,path3,path4組成了控制流圖的一個基本路徑集。只要設(shè)計出的測試用例能夠確保這些基本路徑的執(zhí)行,就可以使得程序中的每個可執(zhí)行語句至少執(zhí)行一次,每個條件的取真和取假分支也能得到測試。基本路徑集不是唯一的,對于給定的控制流圖,可以得到不同的基本路徑集。,,通常環(huán)路復(fù)雜性可用以下三種方法求得:將環(huán)路復(fù)雜性定義為控制流圖中的區(qū)域數(shù)。設(shè)E為控制流圖的邊數(shù),N為圖的結(jié)點數(shù)
65、,則定義環(huán)路復(fù)雜性為 V(G)=E-N+2。若設(shè)P為控制流圖中的判定結(jié)點數(shù),則有 V(G)=P+1。因為圖所示控制流圖有4個區(qū)域。其環(huán)路復(fù)雜性為4。它是構(gòu)成基本路徑集的獨立路徑數(shù)的上界??梢該?jù)此得到應(yīng)該設(shè)計的測試用例的數(shù)目。,3. 導(dǎo)出測試用例,導(dǎo)出測試用例,確保基本路徑集中的每一條路徑的執(zhí)行。 根據(jù)判斷結(jié)點給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測試到 — 用邏輯覆蓋方法。,每個測試用例執(zhí)行之后,與預(yù)期結(jié)果進行比較。如
66、果所有測試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語句至少被執(zhí)行了一次。必須注意,一些獨立的路徑(如例中的路徑1),往往不是完全孤立的,有時它是程序正常的控制流的一部分,這時,這些路徑的測試可以是另一條路徑測試的一部分。,黑盒測試的測試用例設(shè)計,等價類劃分 邊界值分析 錯誤推測法 因果圖,等價類劃分,等價類劃分是一種典型的黑盒測試方法,使用這一方法時,完全不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說明來設(shè)計測試用例。由于不可能用
67、所有可以輸入的數(shù)據(jù)來測試程序,而只能從全部可供輸入的數(shù)據(jù)中選擇一個子集進行測試。如何選擇適當(dāng)?shù)淖蛹?,使其盡可能多地發(fā)現(xiàn)錯誤。解決的辦法之一就是等價類劃分。首先把數(shù)目極多的輸入數(shù)據(jù)(有效的和無效的)劃分為若干等價類。所謂等價類是指某個輸入域的子集合。在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的。并合理地假定:測試某等價類的代表值就等價于對這一類其它值的測試。因此,我們可以把全部輸入數(shù)據(jù)合理劃分為若干等價類,在每一個等價
68、類中取一個數(shù)據(jù)做為測試的輸入條件,就可用少量代表性測試數(shù)據(jù),取得較好的測試效果。,使用這一方法設(shè)計測試用例要經(jīng)歷劃分等價類(列出等價類表)和選取測試用例兩步。劃分等價類等價類是指某個輸入域的子集合。在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的。測試某等價類的代表值就等價于對這一類其它值的測試。,等價類的劃分有兩種不同的情況:① 有效等價類:是指對于程序的規(guī)格說明來說,是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。 ② 無
69、效等價類:是指對于程序的規(guī)格說明來說,是不合理的,無意義的輸入數(shù)據(jù)構(gòu)成的集合。在設(shè)計測試用例時,要同時考慮有效等價類和無效等價類的設(shè)計。軟件不能都只接收合理的數(shù)據(jù),還要經(jīng)受意外的考驗,接受無效的或不合理的數(shù)據(jù),這樣獲得的軟件才能具有較高的可靠性。,劃分等價類等價類的原則。(1)按區(qū)間劃分:如果輸入條件規(guī)定了取值范圍,或值的個數(shù),則可以確立一個有效等價類和兩個無效等價類。,例如,在程序的規(guī)格說明中,對輸入條件有一句話: “…… 項數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 論軟件軟件測試方法和工具選擇
- 軟件測試理論
- 軟件測試方法和技術(shù) - ch11軟件測試自動化
- 軟件詳細設(shè)計文檔模板(最全面)資料
- 軟件測試基本方法
- 軟件測試方法和技術(shù) - ch12 組建測試隊伍
- 軟件測試方法和技術(shù)重點和試題與答案解讀
- 測試軟件快速安裝及測試方法
- 測試軟件快速安裝及測試方法
- 政府投資項目全面投資控制理論和方法研究.pdf
- 巖土熱物性測試方法和軟件開發(fā).pdf
- gis軟件測試方法研究
- 超全面-自考”人員素質(zhì)測評理論與方法“復(fù)習(xí)資料
- 軟件測試的基礎(chǔ)理論
- 基于Par方法和Par平臺的軟件測試.pdf
- 協(xié)議安全測試理論和方法的研究.pdf
- 建設(shè)工程全面信息管理理論和方法研究.pdf
- 基于最優(yōu)搜索理論的軟件測試資源分配方法研究.pdf
- 基于UML的面向?qū)ο筌浖y試方法和測試工具研究.pdf
- 軟件測試方法的流程分析
評論
0/150
提交評論