測試培訓(xùn)-單元測試課件_第1頁
測試培訓(xùn)-單元測試課件_第2頁
測試培訓(xùn)-單元測試課件_第3頁
測試培訓(xùn)-單元測試課件_第4頁
測試培訓(xùn)-單元測試課件_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

測試培訓(xùn)-單元測試測試培訓(xùn)-單元測試1軟件工程流程圖需求設(shè)計(jì)編碼和單元測試集成測試測試計(jì)劃(測試用例)詳細(xì)設(shè)計(jì)(測試記錄)測試報(bào)告確認(rèn)測試系統(tǒng)測試系統(tǒng)實(shí)施立項(xiàng)軟件工程流程圖需求設(shè)計(jì)編碼和單元測試集成測試測試計(jì)劃(測試記2概述單元測試的目標(biāo):確保模塊被正確地編碼。由誰去做:通常由編程人員執(zhí)行。怎樣去測試:功能測試可以用黑匣測試方法,代碼測試可用白匣測試方法。什么時(shí)候可以停止:當(dāng)程序員感到代碼沒有缺陷時(shí)。記錄:通常沒有記錄。概述單元測試的目標(biāo):確保模塊被正確地編碼。3名詞解釋模塊:程序組成部分的最小單元。黑盒測試:黑盒測試也稱功能測試或數(shù)據(jù)驅(qū)動測試,它是在已知產(chǎn)品所應(yīng)具有的功能,通過測試來檢測每個功能是否都能正常使用,在測試時(shí),把程序看作一個不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,測試者在程序接口進(jìn)行測試,它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息,并且保持外部信息(如數(shù)據(jù)庫或文件)的完整性。黑盒測試方法主要有等價(jià)類劃分、邊值分析、因—果圖、錯誤推測等,主要用于軟件確認(rèn)測試。白盒測試:白盒測試也稱結(jié)構(gòu)測試或邏輯驅(qū)動測試,它是知道產(chǎn)品內(nèi)部工作過程,可通過測試來檢測產(chǎn)品內(nèi)部動作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行,按照程序內(nèi)部的結(jié)構(gòu)測試程序,檢驗(yàn)程序中的每條通路是否都有能按預(yù)定要求正確工作,而不顧它的功能,白盒測試的主要方法有邏輯驅(qū)動、基路測試等,主要用于軟件驗(yàn)證。名詞解釋模塊:程序組成部分的最小單元。4軟件測試什么是軟件測試:定義1:軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。定義2:軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)的一批測試用例(即輸入數(shù)據(jù)和與其輸出結(jié)果),并利用這些測試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯誤的過程。軟件測試的對象:軟件測試不等于程序測試軟件測試貫穿于軟件定義和開發(fā)的整個周期。因此,需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明書、概要設(shè)計(jì)說明書、詳細(xì)設(shè)計(jì)規(guī)格說明書以及源程序,都是測試的對象。軟件測試什么是軟件測試:5軟件測試軟件測試分類按測試用例的設(shè)計(jì)方法,軟件測試分為白盒測試和黑盒測試。按測試策略和過程,軟件測試分為單元測試、集成測試、確認(rèn)測試和系統(tǒng)測試。按軟件系統(tǒng)工程,測試是軟件質(zhì)量保證的最后的一關(guān)。本培訓(xùn)文檔主要內(nèi)容將圍繞軟件開發(fā)編碼階段運(yùn)用的單元測試過程加以描述和討論軟件測試軟件測試分類6單元測試為什么要進(jìn)行單元測試(一)1單元測試是不是太浪費(fèi)時(shí)間了?不經(jīng)過單元測試,直接進(jìn)入集成測試,系統(tǒng)正常工作的可能性非常低,大量的時(shí)間被花費(fèi)在跟蹤那些簡單的Bug上,會導(dǎo)致集成為一個系統(tǒng)時(shí)增加額外的工期。編寫完整計(jì)劃的單元測試和編寫實(shí)際的代碼所花費(fèi)的精力大致相同。但是,一旦完成了這些單元測試工作,很多Bug將被糾正,在確信他們手頭擁有穩(wěn)定可靠的部件的情況下,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作,這才是真正意義上的進(jìn)步。調(diào)試人員的不受控和散漫的工作方式只會花費(fèi)更多的時(shí)間而取得很少的好處。2單元測試僅僅是為了證明這些代碼作了什么嗎?這是那些沒有首先為每個單元編寫一個詳細(xì)設(shè)計(jì)文檔而直接跳到編碼階段的開發(fā)人員提出的一條普遍的抱怨。這樣的測試完全基于已經(jīng)寫好的代碼,這無法證明任何事情。單元測試基于詳細(xì)設(shè)計(jì)文檔,這樣的測試可以找到更多的代碼錯誤,甚至是詳細(xì)設(shè)計(jì)的錯誤。因此,高質(zhì)量的單元測試需要高質(zhì)量的詳細(xì)設(shè)計(jì)文檔。單元測試為什么要進(jìn)行單元測試(一)7為什么要進(jìn)行單元測試(二)3我是一個很棒的程序員,是不是可以不進(jìn)行單元測試呢?每個人都可能犯錯誤。真正的完整的系統(tǒng)往往是非常復(fù)雜的,不能寄希望于沒有進(jìn)行廣泛的測試和Bug修改過程就可以正常工作。4有集成測試就夠了,集成測試將會抓住所有的Bug。系統(tǒng)規(guī)模愈來愈大,復(fù)雜度愈來愈高,沒有單元測試,開發(fā)人員很可能會花費(fèi)大量的時(shí)間僅僅是為了使該系統(tǒng)能夠運(yùn)行。任何實(shí)際的測試方案都無法執(zhí)行。在系統(tǒng)集成階段,對單元功能全面測試的負(fù)載程度遠(yuǎn)遠(yuǎn)的超過獨(dú)立進(jìn)行的單元測試過程。最后的結(jié)果是測試將無法達(dá)到它所應(yīng)該有的全面性,一些缺陷將被遺漏,并且很多Bug將被忽略過去。為什么要進(jìn)行單元測試(二)8單元測試為什么要進(jìn)行單元測試(三)5

單元測試的成本效率不高?無論什么時(shí)候做出修改都要進(jìn)行完整的回歸測試。在生命周期中盡早的對產(chǎn)品進(jìn)行測試將使效率和質(zhì)量得到最好的保證Bug修改越晚,費(fèi)用就越高,單元測試是一個在早期抓住Bug的機(jī)會。相比后階段的測試,單元測試的創(chuàng)建更簡單,維護(hù)更容易,并且可以更方便的進(jìn)行重復(fù)。從全程的測試費(fèi)用來考慮,相比復(fù)雜且曠日持久的集成測試,或是不穩(wěn)定的系統(tǒng),單元測試所需的費(fèi)用是最低的。單元測試為什么要進(jìn)行單元測試(三)9單元測試單元測試的重要性一個盡責(zé)的單元測試方法將會在產(chǎn)品開發(fā)的某個階段發(fā)現(xiàn)很多的Bug,并且修改它們的成本也很低。系統(tǒng)開發(fā)的后期階段,Bug的檢測和修改將會變得更加困難,并要消耗大量的時(shí)間和開發(fā)費(fèi)用。無論什么時(shí)候做出修改都要進(jìn)行完整的回歸測試,在生命周期中盡早的對產(chǎn)品代碼進(jìn)行測試將是效率和質(zhì)量得到最好的保證。在提供了經(jīng)過單元測試的情況下,系統(tǒng)集成過程將會大大的簡化。開發(fā)人員可以將精力集中在單元之間的交互作用和全局的功能實(shí)現(xiàn)上,而不會陷入充滿很多Bug的單元之中不能自拔。使測試工作的效率發(fā)揮到最大化的關(guān)鍵在于選擇正確的測試策略,這包含了完全的單元測試的概念,以及對測試過程的良好的管理,還有適當(dāng)?shù)氖褂煤霉ぞ邅碇С譁y試過程。單元測試單元測試的重要性10單元測試模塊接口的測試項(xiàng)目調(diào)用被測模塊的輸入?yún)?shù)與模塊的形式參數(shù)在個數(shù)、屬性、順序上是否匹配。被測模塊調(diào)用子模塊時(shí),它輸入給子模塊的參數(shù)與子模塊中的形式參數(shù)在個數(shù)、屬性、順序上是否匹配。是否修改了只做輸入用的形式參數(shù)。輸出給標(biāo)準(zhǔn)函數(shù)的參數(shù)在個數(shù)、屬性、順序上是否正確。全局變量的定義在各模塊中是否一致。限制是否通過形式參數(shù)來傳送。單元測試模塊接口的測試項(xiàng)目11單元測試局部數(shù)據(jù)結(jié)構(gòu)測試:模塊的局部數(shù)據(jù)結(jié)構(gòu)是最常見的錯誤來源,應(yīng)設(shè)計(jì)測試用例以檢查以下各種錯誤。檢察不正確或不一致的數(shù)據(jù)類型說明。使用尚未賦值或尚未初始化的變量。錯誤的初始值或錯誤的默認(rèn)值。變量名拼寫錯誤或書寫錯誤。不一致的數(shù)據(jù)類型。單元測試局部數(shù)據(jù)結(jié)構(gòu)測試:12單元測試路徑測試對基本執(zhí)行路徑和循環(huán)進(jìn)行測試會發(fā)現(xiàn)大量的錯誤。測試方法:白盒測試和黑盒測試相結(jié)合。常見的不正確計(jì)算有:1運(yùn)算的優(yōu)先次序不正確或誤解了運(yùn)算的優(yōu)先次序;2運(yùn)算的方式錯誤(即運(yùn)算的對象彼此在類型上不相容);3算法錯誤;

4初始化不正確;

5運(yùn)算精度不夠;6表達(dá)式的符號表示不正確等常見的比較和控制流錯誤有:

1不同數(shù)據(jù)類型的比較;2不正確的邏輯運(yùn)算符或優(yōu)先次序;3因浮點(diǎn)運(yùn)算精度問題而造成的兩值比較不等;4關(guān)系表達(dá)式中不正確的變量和比較符;5“差1錯”,即不正確的多循環(huán)或少循環(huán)一次;6當(dāng)遇到發(fā)散的迭代時(shí)不能終止的循環(huán);7不適當(dāng)?shù)男薷牧搜h(huán)變量等。單元測試路徑測試13單元測試錯誤處理測試概述:比較完善的模塊設(shè)計(jì)要求能預(yù)見出錯的條件,并設(shè)置適當(dāng)?shù)某鲥e處理對策,以便在程序出錯時(shí),能對出錯程序重新做安排,保證邏輯上的正確性。這種出錯處理也是模塊功能的一部分。出錯處理模塊有錯誤或缺陷的情況有:1出錯的描述難于理解;2出錯的描述不足以對錯誤定位和確定出錯的原因;3顯示的錯誤與實(shí)際的錯誤不符;4對錯誤條件的處理不正確;5在對錯誤進(jìn)行處理之前,錯誤條件已經(jīng)引起系統(tǒng)的干預(yù)等。單元測試錯誤處理測試14單元測試邊界測試概述:邊界上出現(xiàn)錯誤是常見的,必須設(shè)計(jì)測試用例檢查。出現(xiàn)邊界問題的情況:

1在n次循環(huán)的第0次、1次、n次是否有錯誤;2運(yùn)算或判斷中取最大最小值是否有

錯誤3數(shù)據(jù)流、控制流中剛好等于、大于、小于確定的比較之時(shí)是否出現(xiàn)錯誤。單元測試的內(nèi)容圖示:

模塊獨(dú)立路徑邊界條件出錯處理局部數(shù)據(jù)結(jié)構(gòu)模塊接口單元測試邊界測試模塊獨(dú)立路徑邊界條件出錯處理局部數(shù)據(jù)結(jié)構(gòu)模塊15單元測試何時(shí)進(jìn)行單元測試:單元測試在編碼階段進(jìn)行。何時(shí)設(shè)計(jì)測試用例:在源程序代碼編制完成、經(jīng)過評審和驗(yàn)證、確認(rèn)沒有語法錯誤之后,就可以開始進(jìn)行單元測試的測試用例設(shè)計(jì)。用例設(shè)計(jì)的依據(jù):軟件設(shè)計(jì)文檔。對于一組輸入,應(yīng)該有預(yù)期的正確結(jié)果。在單元測試時(shí),如果模塊不是獨(dú)立的程序,需要輔助測試模塊。輔助測試模塊種類:1驅(qū)動模塊(Driver)--所測模塊的主程序。他接受測試數(shù)據(jù),把這些數(shù)據(jù)傳遞給測試模塊,最后在輸出實(shí)測結(jié)果。當(dāng)被測試模塊能完成一定功能時(shí),也可以不要驅(qū)動模塊。2樁模塊(Stub):用來替代所測模塊調(diào)用的子模塊。單元測試何時(shí)進(jìn)行單元測試:單元測試在編碼階段進(jìn)行。16單元測試驅(qū)動模塊樁模塊被測模塊樁模塊樁模塊測試用例……測試結(jié)果單元測試驅(qū)動模塊樁模塊被測模塊樁模塊樁模塊測試用例測試結(jié)果17單元測試與單元測試相關(guān)聯(lián)的開發(fā)活動代碼走讀(codereview)代碼走讀主要是對程序的編程風(fēng)格如注釋、命名等以及編程時(shí)易出錯的內(nèi)容進(jìn)行檢查靜態(tài)分析(StaticAnalysis)靜態(tài)分析就是對模塊的源代碼進(jìn)行研讀,查找錯誤或收集一些度量數(shù)據(jù),并不需要對代碼進(jìn)行編譯和仿真運(yùn)行。動態(tài)分析(DynamicAnalysis)

動態(tài)分析就是通過觀察代碼運(yùn)行時(shí)的動作,來提供執(zhí)行跟蹤、時(shí)間分析,以及測試覆蓋度方面的信息。單元測試作為無錯編碼的一種輔助手段在一次性的開發(fā)過程中加以運(yùn)用。單元測試與單元測試相關(guān)聯(lián)的開發(fā)活動18單元測試單元測試的過程分為計(jì)劃、設(shè)計(jì)、實(shí)現(xiàn)、執(zhí)行、評審等幾個步驟計(jì)劃單元測試。確定測試所用資源(包括人力和設(shè)備資源),創(chuàng)建測試任務(wù)時(shí)間表。設(shè)計(jì)單元測試。設(shè)計(jì)單元測試模型,制定測試方案,確認(rèn)并結(jié)構(gòu)化測試過程。實(shí)現(xiàn)單元測試。參考測試模型和測試方案,制定具體的測試用例,創(chuàng)建可重用的測試腳本。執(zhí)行單元測試。根據(jù)單元測試的方案、用例對單元進(jìn)行測試,驗(yàn)證測試的結(jié)果并記錄測試過程中出現(xiàn)的缺陷。評審單元測試。對單元測試的結(jié)果進(jìn)行評審,主要從需求覆蓋和代碼覆蓋的角度進(jìn)行測試完備性的評估。單元測試單元測試的過程分為計(jì)劃、設(shè)計(jì)、實(shí)現(xiàn)、執(zhí)行、評審等幾個19單元測試分解軟件,寫測試需求反復(fù)檢查并理解各種信息,和用戶交流,理解他們的要求??梢园凑找韵虏襟E執(zhí)行:1確定軟件提供的主要商業(yè)任務(wù)。2對每個商業(yè)任務(wù),確定完成該任務(wù)所要進(jìn)行的交易。3確定從數(shù)據(jù)庫信息引出的計(jì)算結(jié)果。4對于對時(shí)間有要求的交易,確定所要的時(shí)間和條件。這些條件包括數(shù)據(jù)庫大小、機(jī)器配置、交易量、以及網(wǎng)絡(luò)擁擠情況。5確定會產(chǎn)生重大意外的壓力測試,包括:內(nèi)存、硬盤空間、高的交易率。6確定應(yīng)用需要處理的數(shù)據(jù)量。7確定需要的軟件和硬件配置。通常情況下,不可能對所有可能的配置都測試到,因此要選擇最有可能產(chǎn)生問題的情況進(jìn)行測試,包括:最低性能的硬件、幾個有兼容性問題的軟件并存、客戶端機(jī)器通過最慢的LAN/WANF連接訪問服務(wù)器。單元測試分解軟件,寫測試需求20單元測試單元測試21單元測試設(shè)計(jì)(一)單元測試模型的設(shè)計(jì)。測試項(xiàng)目的設(shè)計(jì)。單元測試模型設(shè)計(jì)構(gòu)造最小運(yùn)行調(diào)度系統(tǒng),即驅(qū)動模塊,用于模擬被測模塊的上一級模塊。模擬實(shí)現(xiàn)單元接口,即單元函數(shù)需調(diào)用的其他函數(shù)接口,即樁模塊。模擬生成測試數(shù)據(jù)或狀態(tài),為單元運(yùn)行準(zhǔn)備動態(tài)環(huán)境。對測試過程的支持,對測試結(jié)果的保留,對測試覆蓋率的記錄等。單元測試環(huán)境的示意圖如下:被測單元驅(qū)動模塊樁模塊測試用例測試結(jié)束樁模塊樁模塊單元測試設(shè)計(jì)(一)被測單元驅(qū)動模塊樁模塊測試用例測試結(jié)束樁模22單元測試設(shè)計(jì)(二)測試項(xiàng)目設(shè)計(jì)測試項(xiàng)目是測試用例的一個總則,主要是根據(jù)測試需求設(shè)計(jì)測試點(diǎn),不包含具體實(shí)踐的用例。在測試項(xiàng)目的設(shè)計(jì)中,主要從功能覆蓋和代碼覆蓋兩個角度進(jìn)行考慮。1功能覆蓋屬黑盒的范疇,用來指出測試用例是否已經(jīng)覆蓋了程序應(yīng)該提供的功能。邏輯覆蓋率是考核單元測試質(zhì)量的一個關(guān)鍵指標(biāo)。2代碼覆蓋也稱邏輯覆蓋,包括語句覆蓋、分支覆蓋、路徑覆蓋,是一種常用的白盒測試方法。(1)語句覆蓋:設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使得每一個可執(zhí)行語句至少執(zhí)行一次。(2)分支覆蓋:也稱判斷覆蓋,使得程序中每個判斷的取真分支和取假分支至少執(zhí)行一次。(3)條件覆蓋:設(shè)的程序中每個判斷的每條件的可能取值至少執(zhí)行一次。覆蓋率指標(biāo):核心代碼覆蓋率達(dá)到100%,共享資源庫的代碼覆蓋率達(dá)到100%,非核心代碼覆蓋率達(dá)到90%。單元測試設(shè)計(jì)(二)23單元測試單元測試用例的設(shè)計(jì)單元測試用例編寫原則之一測試用例設(shè)計(jì)的根據(jù)是詳細(xì)設(shè)計(jì)說明書。測試用例不僅要證明被測單元是否做了它應(yīng)該做的事情,同時(shí)需要證明它是否做了不希望它做的事,即是否滿足設(shè)計(jì)說明書中的要求。設(shè)計(jì)測試用例的5個步驟:1為系統(tǒng)運(yùn)行起來而設(shè)計(jì)的測試用例 如果用例可以正常運(yùn)行,至少可以知道測試環(huán)境和測試單元是可用的。2為正向測試而設(shè)計(jì)用例(1)用例的設(shè)計(jì)者應(yīng)該通讀相關(guān)的設(shè)計(jì)說明,每一個測試用例就是通過有針對的測試說明書中的一項(xiàng)或多項(xiàng)內(nèi)容來設(shè)計(jì)的。(2)當(dāng)設(shè)計(jì)到不止一個設(shè)計(jì)說明書時(shí),最好將測試方案中的測試用例與主要的設(shè)計(jì)說明中的描述順序相對應(yīng)。(3)正向測試用例驗(yàn)證設(shè)計(jì)說明書所對應(yīng)的功能項(xiàng)或性能指標(biāo)能否兌現(xiàn)。3為逆向測試而設(shè)計(jì)用例 用例用來驗(yàn)證被測的軟件單元有沒有做不應(yīng)該做的事情,可以依靠錯誤猜測的方法進(jìn)行測試用例的構(gòu)造。

單元測試單元測試用例的設(shè)計(jì)24單元測試單元測試用例的設(shè)計(jì)單元測試用例編寫原則之二 4為滿足特殊需求而設(shè)計(jì)用例 用戶的特殊要求包括系統(tǒng)的性能、安全性、保密性,尤其對安全和保密性要求較高。 5為代碼覆蓋而設(shè)計(jì)用例

設(shè)計(jì)好的測試用例是可以保證較高的代碼測試覆蓋率的。單元測試單元測試用例的設(shè)計(jì)25單元測試用例設(shè)計(jì)方法之一規(guī)范(規(guī)格)導(dǎo)出法是根據(jù)相干的規(guī)范描述來設(shè)計(jì)測試用例的。一個比較實(shí)際的方法是根據(jù)陳述規(guī)范所用語句的順序來相應(yīng)的為被測單元設(shè)計(jì)測試用例。例如,考慮一個計(jì)算平方根的函數(shù)的規(guī)范:輸入:實(shí)數(shù)輸出:實(shí)數(shù)規(guī)范:當(dāng)輸入一個0或者比0大的實(shí)數(shù)時(shí),返回其正的平方根;當(dāng)輸入一個小于0的實(shí)數(shù)時(shí),顯示錯誤信息“平方根非法—輸入之小于0”,并返回0;庫函數(shù)Print_Line可以用來輸出錯誤信息。在這個規(guī)范中有3個陳述,可以用兩個測試用例來對應(yīng):測試用例1:輸入4,輸出2。對應(yīng)規(guī)范中的第一句陳述(“當(dāng)輸入一個0或者比0大的實(shí)數(shù)時(shí),返回其正的平方根”)。測試用例2:輸入-1,輸出0。對應(yīng)規(guī)范中的第二、第三句陳述(“當(dāng)輸入一個小于0的實(shí)數(shù)時(shí),顯示錯誤信息“平方根非法—輸入之小于0”,并返回0;庫函數(shù)Print_Line可以用來輸出錯誤信息?!保?。規(guī)范導(dǎo)出測試可以應(yīng)用到保密分析、安全分析、軟件故障分析,或其他隊(duì)單元規(guī)范作出補(bǔ)充的文件上去。單元測試用例設(shè)計(jì)方法之一26單元測試單元測試用例設(shè)計(jì)方法之二等價(jià)類劃分法等價(jià)類劃分假定某一特定的等價(jià)類中的所有值對于測試目的來說是等價(jià)的。所以在每個等價(jià)類中找一個之作為測試用例。是一種正式的測試用例設(shè)計(jì)方法,基于對被測單元的輸入、輸出所做的劃分,對每一個劃分中的所有輸入、被測單元有等價(jià)的行為。劃分也可以根據(jù)軟件所能存取的數(shù)據(jù)確定,包括時(shí)間、輸入輸出順序、狀態(tài)。當(dāng)軟件復(fù)雜時(shí),等價(jià)類的區(qū)分以及相互之間的作用關(guān)系也相應(yīng)變復(fù)雜,不能方便的應(yīng)用這種方法。單元測試單元測試用例設(shè)計(jì)方法之二27單元測試邊界值分析法邊界值分析使用與等價(jià)類測試方法相同的等價(jià)類劃分,只是邊界值分析假定錯誤更多地存在于兩個劃分的邊界上。邊界值測試在軟件變得復(fù)雜的時(shí)候也會變得不實(shí)用。邊界值測試對于非向量類型的值(如枚舉類型的值)也沒有意義。以求平方根函數(shù)為例設(shè)計(jì)測試用例:用例輸入輸出描述1最小負(fù)實(shí)數(shù)“非法復(fù)制錯誤”對應(yīng)于劃分(i)的下邊界2恰比0小“非法復(fù)制錯誤”對應(yīng)于劃分(i)的上邊界300劃分(i)的上邊界之外,劃分(ii)的下界,劃分(a)的下界4恰比0大正的平方根劃分(ii)的下界5最大正實(shí)數(shù)正的平方根劃分(ii)的上界,劃分(a)的上界單元測試邊界值分析法用例輸入輸出描述1最小負(fù)實(shí)數(shù)“非法復(fù)制錯28單元測試分支測試法根據(jù)單元中的中止流分支或判斷點(diǎn)來設(shè)計(jì)測試用例。通常用來達(dá)到一定的判定覆蓋率。分支測試是白盒或結(jié)構(gòu)化測試用例設(shè)計(jì)技術(shù)。給定一個結(jié)構(gòu)的規(guī)格說明,說明單元中的控制流,就可以設(shè)計(jì)測試用例來測試其中分支。對于一個有結(jié)構(gòu)化說明的單元適合于作分支測試。但一個單純的單元功能規(guī)格說明可能導(dǎo)致覆蓋遺漏。需要當(dāng)心的是,當(dāng)集中注意力于分支上時(shí),測試設(shè)計(jì)則容易忽略單元功能的整體。分支測試只是基于單元中的判斷情況,對于復(fù)雜的邏輯表達(dá)的判斷也不容易使用。單元測試分支測試法29單元測試條件測試法條件測試的目標(biāo)是測試在每個邏輯條件的單個成分及他們組合情況下,程序都是正確的。條件測試包含了許多測試用例設(shè)計(jì)技術(shù),他們都致力于彌補(bǔ)在遇到復(fù)雜邏輯條件是分支測試的弱點(diǎn)。測試用例用來測試邏輯表達(dá)式的單個成分。在分支測試?yán)?,條件測試被用作一種“黑盒”技術(shù),測試設(shè)計(jì)者要根據(jù)單元的規(guī)格說明對單元的結(jié)構(gòu)作出猜測。條件測試更適合做“白盒”測試技術(shù)。條件測試最適合有結(jié)構(gòu)化規(guī)格說明的單元,它提供一個全面的測試,包括復(fù)雜的測試條件、編成和設(shè)計(jì)錯誤多發(fā)區(qū)與以及分支測試不能達(dá)到的區(qū)域。單元測試條件測試法30單元測試條件測試法一個單元也可能有內(nèi)部邊界,它們只能從單元的結(jié)構(gòu)化規(guī)格說明找到。如左側(cè)代碼事例,對該內(nèi)部邊界值分析包括了3個需要測試的條件:

用例1:誤差恰好大于期望精度用例2:誤差等于期望精度用例3:誤差恰好小于期望精度內(nèi)部邊界值測試可以用來發(fā)現(xiàn)一些內(nèi)部錯誤。如誤把‘<’寫作‘<=’。內(nèi)部邊界值測試應(yīng)作為一種補(bǔ)充方法,在其它方法的最后使用。單元測試條件測試法31單元測試單元測試的執(zhí)行測試的結(jié)論測試的結(jié)論與執(zhí)行被測試的單元中模擬目標(biāo)環(huán)境下的程序執(zhí)行精確性相關(guān)。保證在估計(jì)這些特征時(shí)所有的環(huán)境因素均被考慮。例如,所有的隱性輸入必須被考慮(即系統(tǒng)時(shí)鐘,文件狀態(tài),單元加載地點(diǎn)),還有實(shí)際環(huán)境的代表物(即相同的編譯器,加載者,操作系統(tǒng),計(jì)算機(jī),輸入分布)也是測試環(huán)境必須考慮的。自動測試自動測試可以大大提高測試效率,便于回歸測試。自動測試有兩種方式:商業(yè)化的測試工具和自行開發(fā)的工具。自動測試通過自定義的腳本文件將測試用例逐條放入,通過驅(qū)動模塊讀入腳本文件,驅(qū)動被測單元執(zhí)行每條用例,將相應(yīng)的結(jié)果返回驅(qū)動模塊,驅(qū)動模塊將結(jié)果保存在一個文本文件中,通過與預(yù)期的結(jié)果比較(也是一個文本文件),可以判斷是否所有的用例都通過測試。單元測試單元測試的執(zhí)行32測試培訓(xùn)-單元測試課件33單元測試測試模塊結(jié)構(gòu)化測試的原則是每個測試模塊有單個功能組成??芍赜眯?/p>

考慮到模塊的重用性,模塊不應(yīng)該被設(shè)計(jì)成包含多個功能。復(fù)雜性1多個功能的模塊容易變得復(fù)雜,復(fù)雜的模塊容易混亂。2大量的這樣的模塊有多個入口和多個出口。3多個標(biāo)志將被使用。這些標(biāo)志指出將使用哪個功能,在復(fù)雜的代碼中很容易出錯??删S護(hù)性

模塊需要修改時(shí),復(fù)雜的模塊要比簡單的模塊難以維護(hù)。測試用例(腳本)的設(shè)計(jì)也要按上面的原則,每個測試描述只測試單一功能。這是測試很集中,只有兩種輸出:成功和失敗。單元測試測試模塊34單元測試單元測試工具測試工具分為以下幾類:代碼檢測工具覆蓋率測試工具內(nèi)存檢查性能檢查質(zhì)量分析工具重用工具有以下幾種代碼檢查:LINT覆蓋率:TrueCoverage內(nèi)存檢查:BounderChecker性能檢查:TrueTime單元測試單元測試工具35結(jié)束測試目的是為了發(fā)現(xiàn)軟件的缺陷。目前軟件單元測試的狀況。培訓(xùn)的目標(biāo),讓更多的人了解測試、會做測試,讓更多的人參與測試。結(jié)束測試目的是為了發(fā)現(xiàn)軟件的缺陷。36飯卡打開巴士風(fēng)格反對廣泛的的非官是大蘇打發(fā)的發(fā)非官方共和國符合國家和國際撒的方大哥給飛得更高是個搜狗是歸屬感是搞后呵呵敢死隊(duì)敢死隊(duì)敢死隊(duì)好地方個地方豆腐花哈哈動畫的發(fā)揮和家具風(fēng)格就國防軍廣泛幾個房間房管局房管局法國加工費(fèi)交付給交付給交付給警方根據(jù)高房價(jià)法國警方交付給飯卡打開巴士風(fēng)格反對廣泛的的非官是大蘇打發(fā)的發(fā)非官方共和國37地方官梵蒂岡地方官方的說法暗室逢燈啊的非官是大蘇打發(fā)發(fā)射機(jī)的驕傲給大家仨個地方大師傅艱苦絕對是九回復(fù)肯定是解放后肯定是國防部換個風(fēng)格大富大貴士大夫但是發(fā)交付給地方官梵蒂岡地方官方的說法暗室逢燈啊的非官是大蘇打發(fā)發(fā)射機(jī)38地方大師傅大大規(guī)劃風(fēng)格化地方士大夫時(shí)的感到十分的官方電話獎和國家的驕傲還是看見好看的順豐單號健康博客程序客戶貸款空間很大防空識別的看不舒服的看不到看見對方看世界杯的咖啡酒吧的設(shè)備發(fā)的空降兵反抗波斯的反抗波斯的包括舍不得放開白色的反饋博客大巴是否看不上大夫開博客大巴發(fā)地方大師傅大大規(guī)劃風(fēng)格化地方士大夫時(shí)的感到十分的官方電話獎和39發(fā)的高科技恢復(fù)的很快就北方港口賓館飯店免費(fèi)感受到覅好的傷口縫合第三部分難道是擴(kuò)大解放和開始變得反抗集散地和反抗精神美女部門你先吃吧每年從小便考多少分可接受的反抗集散地和付款計(jì)劃的司法環(huán)境快遞費(fèi)還是給客服電話給客服電話高考加分梵蒂岡回復(fù)后可見風(fēng)華高科點(diǎn)擊返回高科技發(fā)的高科技恢復(fù)的很快就北方港口賓館飯店免費(fèi)感受到覅好的傷口縫40輔導(dǎo)功課變得瘋狂進(jìn)攻的傷口縫合可視電話的生命發(fā)表的但是發(fā)布的科級干部科技發(fā)達(dá)韓國可接受的和都是方面你身邊的負(fù)面報(bào)道隨便翻開基本上都李開復(fù)倒過來看發(fā)動了攻擊附加山東南面分別明尼蘇達(dá)白發(fā)魔女十點(diǎn)半分工合理分擔(dān)和管理費(fèi)的后果都是免費(fèi)表面蛋白和風(fēng)格和規(guī)范輔導(dǎo)功課變得瘋狂進(jìn)攻的傷口縫合可視電話的生命發(fā)表的但是發(fā)布的41我卻哦網(wǎng)球餓哦我去哦欸開始的方便快捷反對蒙蔽動漫被父母電腦設(shè)備方面你的身邊每年頒發(fā)的身份決定勝負(fù)看得十分愧疚和第三方?jīng)]辦法每個部門的婦女不敢面對瘋牛病而微軟微軟微軟為法國空軍東方科技很發(fā)達(dá)客戶給開發(fā)經(jīng)費(fèi)的士大夫大師傅似的犯得上廣泛的和廣泛化工艱苦戶籍科戶籍科我卻哦網(wǎng)球餓哦我去哦欸開始的方便快捷反對蒙蔽動漫被父母電腦設(shè)42飯卡打開巴士風(fēng)格反對廣泛的的非官是大蘇打發(fā)的發(fā)非官方共和國符合國家和國際撒的方大哥給飛得更高是個搜狗是歸屬感是搞后呵呵敢死隊(duì)敢死隊(duì)敢死隊(duì)好地方個地方豆腐花哈哈動畫的發(fā)揮和家具風(fēng)格就國防軍廣泛幾個房間房管局房管局法國加工費(fèi)交付給交付給交付給警方根據(jù)高房價(jià)法國警方交付給飯卡打開巴士風(fēng)格反對廣泛的的非官是大蘇打發(fā)的發(fā)非官方共和國43地方官梵蒂岡地方官方的說法暗室逢燈啊的非官是大蘇打發(fā)發(fā)射機(jī)的驕傲給大家仨個地方大師傅艱苦絕對是九回復(fù)肯定是解放后肯定是國防部換個風(fēng)格大富大貴士大夫但是發(fā)交付給地方官梵蒂岡地方官方的說法暗室逢燈啊的非官是大蘇打發(fā)發(fā)射機(jī)44地方大師傅大大規(guī)劃風(fēng)格化地方士大夫時(shí)的感到十分的官方電話獎和國家的驕傲還是看見好看的順豐單號健康博客程序客戶貸款空間很大防空識別的看不舒服的看不到看見對方看世界杯的咖啡酒吧的設(shè)備發(fā)的空降兵反抗波斯的反抗波斯的包括舍不得放開白色的反饋博客大巴是否看不上大夫開博客大巴發(fā)地方大師傅大大規(guī)劃風(fēng)格化地方士大夫時(shí)的感到十分的官方電話獎和45發(fā)的高科技恢復(fù)的很快就北方港口賓館飯店免費(fèi)感受到覅好的傷口縫合第三部分難道是擴(kuò)大解放和開始變得反抗集散地和反抗精神美女部門你先吃吧每年從小便考多少分可接受的反抗集散地和付款計(jì)劃的司法環(huán)境快遞費(fèi)還是給客服電話給客服電話高考加分梵蒂岡回復(fù)后可見風(fēng)華高科點(diǎn)擊返回高科技發(fā)的高科技恢復(fù)的很快就北方港口賓館飯店免費(fèi)感受到覅好的傷口縫46輔導(dǎo)功課變得瘋狂進(jìn)攻的傷口縫合可視電話的生命發(fā)表的但是發(fā)布的科級干部科技發(fā)達(dá)韓國可接受的和都是方面你身邊的負(fù)面報(bào)道隨便翻開基本上都李開復(fù)倒過來看發(fā)動了攻擊附加山東南面分別明尼蘇達(dá)白發(fā)魔女十點(diǎn)半分工合理分擔(dān)和管理費(fèi)的后果都是免費(fèi)表面蛋白和風(fēng)格和規(guī)范輔導(dǎo)功課變得瘋狂進(jìn)攻的傷口縫合可視電話的生命發(fā)表的但是發(fā)布的47我卻哦網(wǎng)球餓哦我去哦欸開始的方便快捷反對蒙蔽動漫被父母電腦設(shè)備方面你的身邊每年頒發(fā)的身份決定勝負(fù)看得十分愧疚和第三方?jīng)]辦法每個部門的婦女不敢面對瘋牛病而微軟微軟微軟為法國空軍東方科技很發(fā)達(dá)客戶給開發(fā)經(jīng)費(fèi)的士大夫大師傅似的犯得上廣泛的和廣泛化工艱苦戶籍科戶籍科我卻哦網(wǎng)球餓哦我去哦欸開始的方便快捷反對蒙蔽動漫被父母電腦設(shè)48測試培訓(xùn)-單元測試測試培訓(xùn)-單元測試49軟件工程流程圖需求設(shè)計(jì)編碼和單元測試集成測試測試計(jì)劃(測試用例)詳細(xì)設(shè)計(jì)(測試記錄)測試報(bào)告確認(rèn)測試系統(tǒng)測試系統(tǒng)實(shí)施立項(xiàng)軟件工程流程圖需求設(shè)計(jì)編碼和單元測試集成測試測試計(jì)劃(測試記50概述單元測試的目標(biāo):確保模塊被正確地編碼。由誰去做:通常由編程人員執(zhí)行。怎樣去測試:功能測試可以用黑匣測試方法,代碼測試可用白匣測試方法。什么時(shí)候可以停止:當(dāng)程序員感到代碼沒有缺陷時(shí)。記錄:通常沒有記錄。概述單元測試的目標(biāo):確保模塊被正確地編碼。51名詞解釋模塊:程序組成部分的最小單元。黑盒測試:黑盒測試也稱功能測試或數(shù)據(jù)驅(qū)動測試,它是在已知產(chǎn)品所應(yīng)具有的功能,通過測試來檢測每個功能是否都能正常使用,在測試時(shí),把程序看作一個不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,測試者在程序接口進(jìn)行測試,它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息,并且保持外部信息(如數(shù)據(jù)庫或文件)的完整性。黑盒測試方法主要有等價(jià)類劃分、邊值分析、因—果圖、錯誤推測等,主要用于軟件確認(rèn)測試。白盒測試:白盒測試也稱結(jié)構(gòu)測試或邏輯驅(qū)動測試,它是知道產(chǎn)品內(nèi)部工作過程,可通過測試來檢測產(chǎn)品內(nèi)部動作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行,按照程序內(nèi)部的結(jié)構(gòu)測試程序,檢驗(yàn)程序中的每條通路是否都有能按預(yù)定要求正確工作,而不顧它的功能,白盒測試的主要方法有邏輯驅(qū)動、基路測試等,主要用于軟件驗(yàn)證。名詞解釋模塊:程序組成部分的最小單元。52軟件測試什么是軟件測試:定義1:軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。定義2:軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)的一批測試用例(即輸入數(shù)據(jù)和與其輸出結(jié)果),并利用這些測試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯誤的過程。軟件測試的對象:軟件測試不等于程序測試軟件測試貫穿于軟件定義和開發(fā)的整個周期。因此,需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明書、概要設(shè)計(jì)說明書、詳細(xì)設(shè)計(jì)規(guī)格說明書以及源程序,都是測試的對象。軟件測試什么是軟件測試:53軟件測試軟件測試分類按測試用例的設(shè)計(jì)方法,軟件測試分為白盒測試和黑盒測試。按測試策略和過程,軟件測試分為單元測試、集成測試、確認(rèn)測試和系統(tǒng)測試。按軟件系統(tǒng)工程,測試是軟件質(zhì)量保證的最后的一關(guān)。本培訓(xùn)文檔主要內(nèi)容將圍繞軟件開發(fā)編碼階段運(yùn)用的單元測試過程加以描述和討論軟件測試軟件測試分類54單元測試為什么要進(jìn)行單元測試(一)1單元測試是不是太浪費(fèi)時(shí)間了?不經(jīng)過單元測試,直接進(jìn)入集成測試,系統(tǒng)正常工作的可能性非常低,大量的時(shí)間被花費(fèi)在跟蹤那些簡單的Bug上,會導(dǎo)致集成為一個系統(tǒng)時(shí)增加額外的工期。編寫完整計(jì)劃的單元測試和編寫實(shí)際的代碼所花費(fèi)的精力大致相同。但是,一旦完成了這些單元測試工作,很多Bug將被糾正,在確信他們手頭擁有穩(wěn)定可靠的部件的情況下,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作,這才是真正意義上的進(jìn)步。調(diào)試人員的不受控和散漫的工作方式只會花費(fèi)更多的時(shí)間而取得很少的好處。2單元測試僅僅是為了證明這些代碼作了什么嗎?這是那些沒有首先為每個單元編寫一個詳細(xì)設(shè)計(jì)文檔而直接跳到編碼階段的開發(fā)人員提出的一條普遍的抱怨。這樣的測試完全基于已經(jīng)寫好的代碼,這無法證明任何事情。單元測試基于詳細(xì)設(shè)計(jì)文檔,這樣的測試可以找到更多的代碼錯誤,甚至是詳細(xì)設(shè)計(jì)的錯誤。因此,高質(zhì)量的單元測試需要高質(zhì)量的詳細(xì)設(shè)計(jì)文檔。單元測試為什么要進(jìn)行單元測試(一)55為什么要進(jìn)行單元測試(二)3我是一個很棒的程序員,是不是可以不進(jìn)行單元測試呢?每個人都可能犯錯誤。真正的完整的系統(tǒng)往往是非常復(fù)雜的,不能寄希望于沒有進(jìn)行廣泛的測試和Bug修改過程就可以正常工作。4有集成測試就夠了,集成測試將會抓住所有的Bug。系統(tǒng)規(guī)模愈來愈大,復(fù)雜度愈來愈高,沒有單元測試,開發(fā)人員很可能會花費(fèi)大量的時(shí)間僅僅是為了使該系統(tǒng)能夠運(yùn)行。任何實(shí)際的測試方案都無法執(zhí)行。在系統(tǒng)集成階段,對單元功能全面測試的負(fù)載程度遠(yuǎn)遠(yuǎn)的超過獨(dú)立進(jìn)行的單元測試過程。最后的結(jié)果是測試將無法達(dá)到它所應(yīng)該有的全面性,一些缺陷將被遺漏,并且很多Bug將被忽略過去。為什么要進(jìn)行單元測試(二)56單元測試為什么要進(jìn)行單元測試(三)5

單元測試的成本效率不高?無論什么時(shí)候做出修改都要進(jìn)行完整的回歸測試。在生命周期中盡早的對產(chǎn)品進(jìn)行測試將使效率和質(zhì)量得到最好的保證Bug修改越晚,費(fèi)用就越高,單元測試是一個在早期抓住Bug的機(jī)會。相比后階段的測試,單元測試的創(chuàng)建更簡單,維護(hù)更容易,并且可以更方便的進(jìn)行重復(fù)。從全程的測試費(fèi)用來考慮,相比復(fù)雜且曠日持久的集成測試,或是不穩(wěn)定的系統(tǒng),單元測試所需的費(fèi)用是最低的。單元測試為什么要進(jìn)行單元測試(三)57單元測試單元測試的重要性一個盡責(zé)的單元測試方法將會在產(chǎn)品開發(fā)的某個階段發(fā)現(xiàn)很多的Bug,并且修改它們的成本也很低。系統(tǒng)開發(fā)的后期階段,Bug的檢測和修改將會變得更加困難,并要消耗大量的時(shí)間和開發(fā)費(fèi)用。無論什么時(shí)候做出修改都要進(jìn)行完整的回歸測試,在生命周期中盡早的對產(chǎn)品代碼進(jìn)行測試將是效率和質(zhì)量得到最好的保證。在提供了經(jīng)過單元測試的情況下,系統(tǒng)集成過程將會大大的簡化。開發(fā)人員可以將精力集中在單元之間的交互作用和全局的功能實(shí)現(xiàn)上,而不會陷入充滿很多Bug的單元之中不能自拔。使測試工作的效率發(fā)揮到最大化的關(guān)鍵在于選擇正確的測試策略,這包含了完全的單元測試的概念,以及對測試過程的良好的管理,還有適當(dāng)?shù)氖褂煤霉ぞ邅碇С譁y試過程。單元測試單元測試的重要性58單元測試模塊接口的測試項(xiàng)目調(diào)用被測模塊的輸入?yún)?shù)與模塊的形式參數(shù)在個數(shù)、屬性、順序上是否匹配。被測模塊調(diào)用子模塊時(shí),它輸入給子模塊的參數(shù)與子模塊中的形式參數(shù)在個數(shù)、屬性、順序上是否匹配。是否修改了只做輸入用的形式參數(shù)。輸出給標(biāo)準(zhǔn)函數(shù)的參數(shù)在個數(shù)、屬性、順序上是否正確。全局變量的定義在各模塊中是否一致。限制是否通過形式參數(shù)來傳送。單元測試模塊接口的測試項(xiàng)目59單元測試局部數(shù)據(jù)結(jié)構(gòu)測試:模塊的局部數(shù)據(jù)結(jié)構(gòu)是最常見的錯誤來源,應(yīng)設(shè)計(jì)測試用例以檢查以下各種錯誤。檢察不正確或不一致的數(shù)據(jù)類型說明。使用尚未賦值或尚未初始化的變量。錯誤的初始值或錯誤的默認(rèn)值。變量名拼寫錯誤或書寫錯誤。不一致的數(shù)據(jù)類型。單元測試局部數(shù)據(jù)結(jié)構(gòu)測試:60單元測試路徑測試對基本執(zhí)行路徑和循環(huán)進(jìn)行測試會發(fā)現(xiàn)大量的錯誤。測試方法:白盒測試和黑盒測試相結(jié)合。常見的不正確計(jì)算有:1運(yùn)算的優(yōu)先次序不正確或誤解了運(yùn)算的優(yōu)先次序;2運(yùn)算的方式錯誤(即運(yùn)算的對象彼此在類型上不相容);3算法錯誤;

4初始化不正確;

5運(yùn)算精度不夠;6表達(dá)式的符號表示不正確等常見的比較和控制流錯誤有:

1不同數(shù)據(jù)類型的比較;2不正確的邏輯運(yùn)算符或優(yōu)先次序;3因浮點(diǎn)運(yùn)算精度問題而造成的兩值比較不等;4關(guān)系表達(dá)式中不正確的變量和比較符;5“差1錯”,即不正確的多循環(huán)或少循環(huán)一次;6當(dāng)遇到發(fā)散的迭代時(shí)不能終止的循環(huán);7不適當(dāng)?shù)男薷牧搜h(huán)變量等。單元測試路徑測試61單元測試錯誤處理測試概述:比較完善的模塊設(shè)計(jì)要求能預(yù)見出錯的條件,并設(shè)置適當(dāng)?shù)某鲥e處理對策,以便在程序出錯時(shí),能對出錯程序重新做安排,保證邏輯上的正確性。這種出錯處理也是模塊功能的一部分。出錯處理模塊有錯誤或缺陷的情況有:1出錯的描述難于理解;2出錯的描述不足以對錯誤定位和確定出錯的原因;3顯示的錯誤與實(shí)際的錯誤不符;4對錯誤條件的處理不正確;5在對錯誤進(jìn)行處理之前,錯誤條件已經(jīng)引起系統(tǒng)的干預(yù)等。單元測試錯誤處理測試62單元測試邊界測試概述:邊界上出現(xiàn)錯誤是常見的,必須設(shè)計(jì)測試用例檢查。出現(xiàn)邊界問題的情況:

1在n次循環(huán)的第0次、1次、n次是否有錯誤;2運(yùn)算或判斷中取最大最小值是否有

錯誤3數(shù)據(jù)流、控制流中剛好等于、大于、小于確定的比較之時(shí)是否出現(xiàn)錯誤。單元測試的內(nèi)容圖示:

模塊獨(dú)立路徑邊界條件出錯處理局部數(shù)據(jù)結(jié)構(gòu)模塊接口單元測試邊界測試模塊獨(dú)立路徑邊界條件出錯處理局部數(shù)據(jù)結(jié)構(gòu)模塊63單元測試何時(shí)進(jìn)行單元測試:單元測試在編碼階段進(jìn)行。何時(shí)設(shè)計(jì)測試用例:在源程序代碼編制完成、經(jīng)過評審和驗(yàn)證、確認(rèn)沒有語法錯誤之后,就可以開始進(jìn)行單元測試的測試用例設(shè)計(jì)。用例設(shè)計(jì)的依據(jù):軟件設(shè)計(jì)文檔。對于一組輸入,應(yīng)該有預(yù)期的正確結(jié)果。在單元測試時(shí),如果模塊不是獨(dú)立的程序,需要輔助測試模塊。輔助測試模塊種類:1驅(qū)動模塊(Driver)--所測模塊的主程序。他接受測試數(shù)據(jù),把這些數(shù)據(jù)傳遞給測試模塊,最后在輸出實(shí)測結(jié)果。當(dāng)被測試模塊能完成一定功能時(shí),也可以不要驅(qū)動模塊。2樁模塊(Stub):用來替代所測模塊調(diào)用的子模塊。單元測試何時(shí)進(jìn)行單元測試:單元測試在編碼階段進(jìn)行。64單元測試驅(qū)動模塊樁模塊被測模塊樁模塊樁模塊測試用例……測試結(jié)果單元測試驅(qū)動模塊樁模塊被測模塊樁模塊樁模塊測試用例測試結(jié)果65單元測試與單元測試相關(guān)聯(lián)的開發(fā)活動代碼走讀(codereview)代碼走讀主要是對程序的編程風(fēng)格如注釋、命名等以及編程時(shí)易出錯的內(nèi)容進(jìn)行檢查靜態(tài)分析(StaticAnalysis)靜態(tài)分析就是對模塊的源代碼進(jìn)行研讀,查找錯誤或收集一些度量數(shù)據(jù),并不需要對代碼進(jìn)行編譯和仿真運(yùn)行。動態(tài)分析(DynamicAnalysis)

動態(tài)分析就是通過觀察代碼運(yùn)行時(shí)的動作,來提供執(zhí)行跟蹤、時(shí)間分析,以及測試覆蓋度方面的信息。單元測試作為無錯編碼的一種輔助手段在一次性的開發(fā)過程中加以運(yùn)用。單元測試與單元測試相關(guān)聯(lián)的開發(fā)活動66單元測試單元測試的過程分為計(jì)劃、設(shè)計(jì)、實(shí)現(xiàn)、執(zhí)行、評審等幾個步驟計(jì)劃單元測試。確定測試所用資源(包括人力和設(shè)備資源),創(chuàng)建測試任務(wù)時(shí)間表。設(shè)計(jì)單元測試。設(shè)計(jì)單元測試模型,制定測試方案,確認(rèn)并結(jié)構(gòu)化測試過程。實(shí)現(xiàn)單元測試。參考測試模型和測試方案,制定具體的測試用例,創(chuàng)建可重用的測試腳本。執(zhí)行單元測試。根據(jù)單元測試的方案、用例對單元進(jìn)行測試,驗(yàn)證測試的結(jié)果并記錄測試過程中出現(xiàn)的缺陷。評審單元測試。對單元測試的結(jié)果進(jìn)行評審,主要從需求覆蓋和代碼覆蓋的角度進(jìn)行測試完備性的評估。單元測試單元測試的過程分為計(jì)劃、設(shè)計(jì)、實(shí)現(xiàn)、執(zhí)行、評審等幾個67單元測試分解軟件,寫測試需求反復(fù)檢查并理解各種信息,和用戶交流,理解他們的要求??梢园凑找韵虏襟E執(zhí)行:1確定軟件提供的主要商業(yè)任務(wù)。2對每個商業(yè)任務(wù),確定完成該任務(wù)所要進(jìn)行的交易。3確定從數(shù)據(jù)庫信息引出的計(jì)算結(jié)果。4對于對時(shí)間有要求的交易,確定所要的時(shí)間和條件。這些條件包括數(shù)據(jù)庫大小、機(jī)器配置、交易量、以及網(wǎng)絡(luò)擁擠情況。5確定會產(chǎn)生重大意外的壓力測試,包括:內(nèi)存、硬盤空間、高的交易率。6確定應(yīng)用需要處理的數(shù)據(jù)量。7確定需要的軟件和硬件配置。通常情況下,不可能對所有可能的配置都測試到,因此要選擇最有可能產(chǎn)生問題的情況進(jìn)行測試,包括:最低性能的硬件、幾個有兼容性問題的軟件并存、客戶端機(jī)器通過最慢的LAN/WANF連接訪問服務(wù)器。單元測試分解軟件,寫測試需求68單元測試單元測試69單元測試設(shè)計(jì)(一)單元測試模型的設(shè)計(jì)。測試項(xiàng)目的設(shè)計(jì)。單元測試模型設(shè)計(jì)構(gòu)造最小運(yùn)行調(diào)度系統(tǒng),即驅(qū)動模塊,用于模擬被測模塊的上一級模塊。模擬實(shí)現(xiàn)單元接口,即單元函數(shù)需調(diào)用的其他函數(shù)接口,即樁模塊。模擬生成測試數(shù)據(jù)或狀態(tài),為單元運(yùn)行準(zhǔn)備動態(tài)環(huán)境。對測試過程的支持,對測試結(jié)果的保留,對測試覆蓋率的記錄等。單元測試環(huán)境的示意圖如下:被測單元驅(qū)動模塊樁模塊測試用例測試結(jié)束樁模塊樁模塊單元測試設(shè)計(jì)(一)被測單元驅(qū)動模塊樁模塊測試用例測試結(jié)束樁模70單元測試設(shè)計(jì)(二)測試項(xiàng)目設(shè)計(jì)測試項(xiàng)目是測試用例的一個總則,主要是根據(jù)測試需求設(shè)計(jì)測試點(diǎn),不包含具體實(shí)踐的用例。在測試項(xiàng)目的設(shè)計(jì)中,主要從功能覆蓋和代碼覆蓋兩個角度進(jìn)行考慮。1功能覆蓋屬黑盒的范疇,用來指出測試用例是否已經(jīng)覆蓋了程序應(yīng)該提供的功能。邏輯覆蓋率是考核單元測試質(zhì)量的一個關(guān)鍵指標(biāo)。2代碼覆蓋也稱邏輯覆蓋,包括語句覆蓋、分支覆蓋、路徑覆蓋,是一種常用的白盒測試方法。(1)語句覆蓋:設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使得每一個可執(zhí)行語句至少執(zhí)行一次。(2)分支覆蓋:也稱判斷覆蓋,使得程序中每個判斷的取真分支和取假分支至少執(zhí)行一次。(3)條件覆蓋:設(shè)的程序中每個判斷的每條件的可能取值至少執(zhí)行一次。覆蓋率指標(biāo):核心代碼覆蓋率達(dá)到100%,共享資源庫的代碼覆蓋率達(dá)到100%,非核心代碼覆蓋率達(dá)到90%。單元測試設(shè)計(jì)(二)71單元測試單元測試用例的設(shè)計(jì)單元測試用例編寫原則之一測試用例設(shè)計(jì)的根據(jù)是詳細(xì)設(shè)計(jì)說明書。測試用例不僅要證明被測單元是否做了它應(yīng)該做的事情,同時(shí)需要證明它是否做了不希望它做的事,即是否滿足設(shè)計(jì)說明書中的要求。設(shè)計(jì)測試用例的5個步驟:1為系統(tǒng)運(yùn)行起來而設(shè)計(jì)的測試用例 如果用例可以正常運(yùn)行,至少可以知道測試環(huán)境和測試單元是可用的。2為正向測試而設(shè)計(jì)用例(1)用例的設(shè)計(jì)者應(yīng)該通讀相關(guān)的設(shè)計(jì)說明,每一個測試用例就是通過有針對的測試說明書中的一項(xiàng)或多項(xiàng)內(nèi)容來設(shè)計(jì)的。(2)當(dāng)設(shè)計(jì)到不止一個設(shè)計(jì)說明書時(shí),最好將測試方案中的測試用例與主要的設(shè)計(jì)說明中的描述順序相對應(yīng)。(3)正向測試用例驗(yàn)證設(shè)計(jì)說明書所對應(yīng)的功能項(xiàng)或性能指標(biāo)能否兌現(xiàn)。3為逆向測試而設(shè)計(jì)用例 用例用來驗(yàn)證被測的軟件單元有沒有做不應(yīng)該做的事情,可以依靠錯誤猜測的方法進(jìn)行測試用例的構(gòu)造。

單元測試單元測試用例的設(shè)計(jì)72單元測試單元測試用例的設(shè)計(jì)單元測試用例編寫原則之二 4為滿足特殊需求而設(shè)計(jì)用例 用戶的特殊要求包括系統(tǒng)的性能、安全性、保密性,尤其對安全和保密性要求較高。 5為代碼覆蓋而設(shè)計(jì)用例

設(shè)計(jì)好的測試用例是可以保證較高的代碼測試覆蓋率的。單元測試單元測試用例的設(shè)計(jì)73單元測試用例設(shè)計(jì)方法之一規(guī)范(規(guī)格)導(dǎo)出法是根據(jù)相干的規(guī)范描述來設(shè)計(jì)測試用例的。一個比較實(shí)際的方法是根據(jù)陳述規(guī)范所用語句的順序來相應(yīng)的為被測單元設(shè)計(jì)測試用例。例如,考慮一個計(jì)算平方根的函數(shù)的規(guī)范:輸入:實(shí)數(shù)輸出:實(shí)數(shù)規(guī)范:當(dāng)輸入一個0或者比0大的實(shí)數(shù)時(shí),返回其正的平方根;當(dāng)輸入一個小于0的實(shí)數(shù)時(shí),顯示錯誤信息“平方根非法—輸入之小于0”,并返回0;庫函數(shù)Print_Line可以用來輸出錯誤信息。在這個規(guī)范中有3個陳述,可以用兩個測試用例來對應(yīng):測試用例1:輸入4,輸出2。對應(yīng)規(guī)范中的第一句陳述(“當(dāng)輸入一個0或者比0大的實(shí)數(shù)時(shí),返回其正的平方根”)。測試用例2:輸入-1,輸出0。對應(yīng)規(guī)范中的第二、第三句陳述(“當(dāng)輸入一個小于0的實(shí)數(shù)時(shí),顯示錯誤信息“平方根非法—輸入之小于0”,并返回0;庫函數(shù)Print_Line可以用來輸出錯誤信息?!保?。規(guī)范導(dǎo)出測試可以應(yīng)用到保密分析、安全分析、軟件故障分析,或其他隊(duì)單元規(guī)范作出補(bǔ)充的文件上去。單元測試用例設(shè)計(jì)方法之一74單元測試單元測試用例設(shè)計(jì)方法之二等價(jià)類劃分法等價(jià)類劃分假定某一特定的等價(jià)類中的所有值對于測試目的來說是等價(jià)的。所以在每個等價(jià)類中找一個之作為測試用例。是一種正式的測試用例設(shè)計(jì)方法,基于對被測單元的輸入、輸出所做的劃分,對每一個劃分中的所有輸入、被測單元有等價(jià)的行為。劃分也可以根據(jù)軟件所能存取的數(shù)據(jù)確定,包括時(shí)間、輸入輸出順序、狀態(tài)。當(dāng)軟件復(fù)雜時(shí),等價(jià)類的區(qū)分以及相互之間的作用關(guān)系也相應(yīng)變復(fù)雜,不能方便的應(yīng)用這種方法。單元測試單元測試用例設(shè)計(jì)方法之二75單元測試邊界值分析法邊界值分析使用與等價(jià)類測試方法相同的等價(jià)類劃分,只是邊界值分析假定錯誤更多地存在于兩個劃分的邊界上。邊界值測試在軟件變得復(fù)雜的時(shí)候也會變得不實(shí)用。邊界值測試對于非向量類型的值(如枚舉類型的值)也沒有意義。以求平方根函數(shù)為例設(shè)計(jì)測試用例:用例輸入輸出描述1最小負(fù)實(shí)數(shù)“非法復(fù)制錯誤”對應(yīng)于劃分(i)的下邊界2恰比0小“非法復(fù)制錯誤”對應(yīng)于劃分(i)的上邊界300劃分(i)的上邊界之外,劃分(ii)的下界,劃分(a)的下界4恰比0大正的平方根劃分(ii)的下界5最大正實(shí)數(shù)正的平方根劃分(ii)的上界,劃分(a)的上界單元測試邊界值分析法用例輸入輸出描述1最小負(fù)實(shí)數(shù)“非法復(fù)制錯76單元測試分支測試法根據(jù)單元中的中止流分支或判斷點(diǎn)來設(shè)計(jì)測試用例。通常用來達(dá)到一定的判定覆蓋率。分支測試是白盒或結(jié)構(gòu)化測試用例設(shè)計(jì)技術(shù)。給定一個結(jié)構(gòu)的規(guī)格說明,說明單元中的控制流,就可以設(shè)計(jì)測試用例來測試其中分支。對于一個有結(jié)構(gòu)化說明的單元適合于作分支測試。但一個單純的單元功能規(guī)格說明可能導(dǎo)致覆蓋遺漏。需要當(dāng)心的是,當(dāng)集中注意力于分支上時(shí),測試設(shè)計(jì)則容易忽略單元功能的整體。分支測試只是基于單元中的判斷情況,對于復(fù)雜的邏輯表達(dá)的判斷也不容易使用。單元測試分支測試法77單元測試條件測試法條件測試的目標(biāo)是測試在每個邏輯條件的單個成分及他們組合情況下,程序都是正確的。條件測試包含了許多測試用例設(shè)計(jì)技術(shù),他們都致力于彌補(bǔ)在遇到復(fù)雜邏輯條件是分支測試的弱點(diǎn)。測試用例用來測試邏輯表達(dá)式的單個成分。在分支測試?yán)?,條件測試被用作一種“黑盒”技術(shù),測試設(shè)計(jì)者要根據(jù)單元的規(guī)格說明對單元的結(jié)構(gòu)作出猜測。條件測試更適合做“白盒”測試技術(shù)。條件測試最適合有結(jié)構(gòu)化規(guī)格說明的單元,它提供一個全面的測試,包括復(fù)雜的測試條件、編成和設(shè)計(jì)錯誤多發(fā)區(qū)與以及分支測試不能達(dá)到的區(qū)域。單元測試條件測試法78單元測試條件測試法一個單元也可能有內(nèi)部邊界,它們只能從單元的結(jié)構(gòu)化規(guī)格說明找到。如左側(cè)代碼事例,對該內(nèi)部邊界值分析包括了3個需要測試的條件:

用例1:誤差恰好大于期望精度用例2:誤差等于期望精度用例3:誤差恰好小于期望精度內(nèi)部邊界值測試可以用來發(fā)現(xiàn)一些內(nèi)部錯誤。如誤把‘<’寫作‘<=’。內(nèi)部邊界值測試應(yīng)作為一種補(bǔ)充方法,在其它方法的最后使用。單元測試條件測試法79單元測試單元測試的執(zhí)行測試的結(jié)論測試的結(jié)論與執(zhí)行被測試的單元中模擬目標(biāo)環(huán)境下的程序執(zhí)行精確性相關(guān)。保證在估計(jì)這些特征時(shí)所有的環(huán)境因素均被考慮。例如,所有的隱性輸入必須被考慮(即系統(tǒng)時(shí)鐘,文件狀態(tài),單元加載地點(diǎn)),還有實(shí)際環(huán)境的代表物(即相同的編譯器,加載者,操作系統(tǒng),計(jì)算機(jī),輸入分布)也是測試環(huán)境必須考慮的。自動測試自動測試可以大大提高測試效率,便于回歸測試。自動測試有兩種方式:商業(yè)化的測試工具和自行開發(fā)的工具。自動測試通過自定義的腳本文件將測試用例逐條放入,通過驅(qū)動模塊讀入腳本文件,驅(qū)動被測單元執(zhí)行每條用例,將相應(yīng)的結(jié)果返回驅(qū)動模塊,驅(qū)動模塊將結(jié)果保存在一個文本文件中,通過與預(yù)期的結(jié)果比較(也是一個文本文件),可以判斷是否所有的用例都通過測試。單元測試單元測試的執(zhí)行80測試培訓(xùn)-單元測試課件81單元測試測試模塊結(jié)構(gòu)化測試的原則是每個測試模塊有單個功能組成??芍赜眯?/p>

考慮到模塊的重用性,模塊不應(yīng)該被設(shè)計(jì)成包含多個功能。復(fù)雜性1多個功能的模塊容易變得復(fù)雜,復(fù)雜的模塊容易混亂。2大量的這樣的模塊有多個入口和多個出口。3多個標(biāo)志將被使用。這些標(biāo)志指出將使用哪個功能,在復(fù)雜的代碼中很容易出錯??删S護(hù)性

模塊需要修改時(shí),復(fù)雜的模塊要比簡單的模塊難以維護(hù)。測試

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論