第7章+實現(xiàn)教材_第1頁
第7章+實現(xiàn)教材_第2頁
第7章+實現(xiàn)教材_第3頁
第7章+實現(xiàn)教材_第4頁
第7章+實現(xiàn)教材_第5頁
已閱讀5頁,還剩105頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件工程信電工程學院王小磊swxl121@第1章軟件工程學概述第2章可行性研究第3章需求分析第4章形式化說明技術第5章總體設計第6章詳細設計第7章實現(xiàn)第8章維護第9章面向對象方法學引論第10章面向對象分析第11章面向對象設計第12章面向對象實現(xiàn)第13章軟件項目管理編碼測試實現(xiàn)階段的工作包括:

編碼

軟件測試基礎調試軟件可靠性教學內容:單元測試集成測試確認測試白盒測試技術黑盒測試技術編碼什么是編碼?選擇程序設計語言的重要性選擇程序設計語言時應考慮哪些因素?編碼階段應交付的文檔是什么?把軟件設計結果翻譯成用某種程序設計語言書寫的程序選擇程序設計語言時應考慮的因素:1、系統(tǒng)用戶的要求2、可以使用的編譯程序3、可以得到的軟件工具4、工程規(guī)模5、程序員的知識6、軟件可移植性要求7、軟件的應用領域軟件測試基礎測試階段的根本目標軟件測試準則軟件測試方法軟件測試步驟軟件測試階段的信息流

軟件測試的根本目標盡可能多地發(fā)現(xiàn)并排除軟件中潛藏的錯誤,最終把一個高質量的軟件系統(tǒng)交給用戶使用。什么是測試?為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程測試的根本目標?軟件測試準則1、所有測試都應該能追溯到用戶需求;2、應該遠在測試開始之前就制定出測試計劃;3、把Pareto原理應用到軟件測試中;4、應該從“小規(guī)模”測試開始,并逐步進行“大規(guī)?!睖y試;5、窮舉測試是不可能的6、應該由獨立的第三方從事測試工作測試方法如果知道產(chǎn)品應該具有的功能如果知道產(chǎn)品的內部工作過程情況1:情況2:黑盒測試白盒測試測試步驟1.模塊測試2.子系統(tǒng)測試3.系統(tǒng)測試4.驗收測試5.平行運行集成測試單元測試確認測試測試階段的信息流軟件配置測試配置測試測試結果預期結果評價錯誤調試正確可靠性模型可靠性預測7.3

單元測試單元測試集中檢測軟件設計的最小單元——模塊。通常,單元測試和編碼屬于軟件過程的同一個階段。可以應用人工測試和計算機測試這樣兩種不同類型的測試方法,完成單元測試工作。單元測試主要使用白盒測試技術,而且對多個模塊的測試可以并行地進行。7.3.1測試重點模塊接口在對模塊接口進行測試時主要檢查下述幾個方面:參數(shù)的數(shù)目、次序、屬性或單位系統(tǒng)與變元是否一致;是否修改了只作輸入用的變元;全局變量的定義和用法在各個模塊中是否一致。2.局部數(shù)據(jù)結構對于模塊來說,局部數(shù)據(jù)結構是常見的錯誤來源。應該仔細設計測試方案,以便發(fā)現(xiàn)局部數(shù)據(jù)說明、初始化、默認值等方面的錯誤。3.重要的執(zhí)行通路由于通常不可能進行窮盡測試,因此,在單元測試期間必需選擇最有代表性、最可能發(fā)現(xiàn)錯誤的執(zhí)行通路進行測試。應該設計測試方案用來發(fā)現(xiàn)由于錯誤的計算、不正確的比較或不適當?shù)目刂屏鞫斐傻腻e誤。4.出錯處理通路好的設計應該能預見出現(xiàn)錯誤的條件,并且設置適當?shù)奶幚礤e誤的通路;當評價出錯處理通路時,應該著重測試下述一些可能發(fā)生的錯誤:(1)對錯誤的描述是難以理解的;(2)記下的錯誤與實際遇到的錯誤不同;(3)在對錯誤進行處理之前,錯誤條件已經(jīng)引起系統(tǒng)干預;(4)對錯誤的處理不正確;(5)描述錯誤的信息不足以幫助確定造成錯誤的位置。5.邊界條件邊界測試是單元測試中最后的也可能是最重要的任務。軟件常常在它的邊界上失效,例如,處理n元數(shù)組的第n個元素時,或做到i次循環(huán)中的第i次重復時,往往會發(fā)生錯誤。使用剛好小于、剛好等于和剛好大于最大值或最小值的數(shù)據(jù)結構、控制量和數(shù)據(jù)值的測試方案,非??赡馨l(fā)現(xiàn)軟件中的錯誤。7.3.2

代碼審查代碼審查:由審查小組正式進行的人工測試源程序的程序驗證技術。審查小組最好由下述4人組成:(1)組長,應該是一個很有能力的程序員,而且沒有直接參與這項工程;(2)程序的設計者;(3)程序的編寫者;(4)程序的測試者;兩種常見的代碼審查方法:(1)一般方法(2)預排采用代碼審查的方法可以減少系統(tǒng)驗證的總工作量。人工測試和計算機測試是互相補充,相輔相成的,缺少其中任何一種方法都會使查找錯誤的效率降低。7.3.3

計算機測試模塊并不是一個獨立的程序,因此必須為每個單元測試開發(fā)驅動軟件和(或)存根軟件。驅動程序是一個“主程序”,它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出有關的結果;存根程序代替被測試的模塊所調用的模塊,即“虛擬子程序”。它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,印出對入口的檢驗或操作結果,并且把控制歸還給調用它的模塊。圖7.2正文加工系統(tǒng)的層次圖Ⅰ.TESTSTUB(*測試正文編輯模塊用的存根程序*) 初始化; 輸出信息“進入了正文編輯程序”; 輸出“輸入的控制信息是”CFUNCT; 輸出緩沖區(qū)中的字符串; IFCFUNCT=CHANGE THEN 把緩沖區(qū)中第二個字改為*** ELSE 在緩沖區(qū)的尾部加??? END IF; 輸出緩沖區(qū)中的新字符串;ENDTESTSTUBⅡ.TESTDRIVER(*測試正文編輯模塊用的驅動程序*) 說明長度為2500個字符的一個緩沖區(qū); 把CFUNCT置為希望測試的狀態(tài); 輸入字符串; 調用正文編輯模塊; 停止或再次初啟;ENDTESTDRIVER7.4集成測試集成測試是根據(jù)設計的軟件結構,把經(jīng)過單元測試檢驗的模塊按照某種選定的策略裝配起來,在裝配的過程中對程序進行測試。它是一種測試和組裝軟件的系統(tǒng)化技術。由模塊組裝成程序時有兩種方法:非漸增式測試方法漸增式測試方法自頂向下集成自底向上集成7.4.1自頂向下集成自頂向下集成:從主控制模塊開始,沿著程序的控制層次向下移動,逐漸把各個模塊結合起來。自頂向下集成需要設計存根程序,而不需要驅動程序。在把附屬于(及最終附屬于)主控制模塊的那些模塊組裝到程序結構中去時,或者使用深度優(yōu)先的策略,或者使用寬度優(yōu)先的策略。圖7.3自頂向下結合把模塊結合進軟件結構的具體過程由下述4個步驟完成:對主控制模塊進行測試,測試時用存根程序代替所有直接附屬于主控制模塊的模塊;根據(jù)選定的結合策略(深度優(yōu)先或寬度優(yōu)先),每次用一個實際模塊代換一個存根程序(新結合進來的模塊往往又需要新的存根程序);在結合進一個模塊的同時進行測試;為了保證加入模塊沒有引進新的錯誤,可能需要進行回歸測試(即,全部或部分地重復以前做過的測試)。從第二步開始不斷地重復進行上述過程,直到構造起完整的軟件結構為止。自頂向下集成的優(yōu)點:不需要驅動程序;能夠在測試的早期對主要的控制或關鍵的抉擇進行檢驗,而且能發(fā)現(xiàn)上層模塊的接口錯誤;如果選擇深度優(yōu)先的結合方法,可以在早期實現(xiàn)軟件的一個完整的功能并且驗證這個功能,這樣也可以增強開發(fā)人員和用戶雙方的信心。自頂向下集成的缺點:使用存根程序,導致在軟件結構中沒有重要的數(shù)據(jù)自下往上流,低層關鍵模塊中的錯誤發(fā)現(xiàn)較晚。7.4.2

自底向上集成自底向上集成:從“原子”模塊(即在軟件結構最低層的模塊)開始組裝和測試。自底向上集成需要設計驅動程序,而不需要存根程序。圖7.4自底向上結合用下述步驟可以實現(xiàn)自底向上的結合策略:把低層模塊組合成實現(xiàn)某個特定的軟件子功能的族;寫一個驅動程序(用于測試的控制程序),協(xié)調測試數(shù)據(jù)的輸入和輸出;對由模塊組成的子功能族進行測試;去掉驅動程序,沿軟件結構自下向上移動,把子功能族組合起來形成更大的子功能族。上述第二步到第四步實質上構成了一個循環(huán)。自底向上集成的優(yōu)點:不需要存根程序;能夠在測試的早期發(fā)現(xiàn)低層關鍵模塊中的錯誤;由于測試在低層是從分族進行,因此在早期就可以充分展開人力。自底向上集成的缺點:使用驅動程序代替高層控制模塊,使得高層關鍵模塊中錯誤發(fā)現(xiàn)較晚,系統(tǒng)的主要功能也不能盡早得到驗證。7.4.3

不同集成測試策略的比較自底向上測試方法的優(yōu)缺點與自頂向下測試方法的優(yōu)缺點剛好相反,在測試實際的軟件系統(tǒng)時,應該根據(jù)軟件的特點以及工程進度安排,選用適當?shù)臏y試策略。一般說來,純粹自頂向下或純粹自底向上的策略可能都不實用,常用的是一些混合策略:改進的自頂向下測試方法?;旧鲜褂米皂斚蛳碌臏y試方法,但是在早期使用自底向上的方法測試軟件中的少數(shù)關鍵模塊;混合法。對軟件結構中較上層使用的自頂向下方法與對軟件結構中較下層使用的自底向上方法相結合。7.4.4

回歸測試在集成測試的范疇中,所謂回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個子集,以保證上述這些變化沒有帶來非預期的副作用。更廣義地說,回歸測試就是用于保證由于調試或其他原因引起的變化,不會導致非預期的軟件行為或額外錯誤的測試活動。回歸測試可以通過重新執(zhí)行全部測試用例的一個子集人工地進行,也可以使用自動化的捕獲回放工具自動進行?;貧w測試集(已執(zhí)行過的測試用例的子集)包括下述3類不同的測試用例:(1)檢測軟件全部功能的代表性測試用例;(2)專門針對可能受修改影響的軟件功能的附加測試;(3)針對被修改過的軟件成分的測試。在集成測試過程中,回歸測試用例的數(shù)量可能變得非常大。因此,應該把回歸測試集設計成只包括可以檢測程序每個主要功能中的一類或多類錯誤的那樣一些測試用例。7.5確認測試確認測試也稱為驗收測試,它的目標是驗證軟件的有效性。驗收測試的任務是:測試軟件的功能和性能是否如同用戶所合理期待的那樣;檢查文檔資料是否準確而完整;測試軟件的安全性、可移植性、兼容性和可維護性是否達到預定的要求;7.5.1確認測試的范圍確認測試必須有用戶參與。為了使得用戶能夠積極主動地參與確認測試,通常在驗收之前由開發(fā)單位對用戶進行培訓。確認測試通常使用黑盒測試法。仔細設計測試計劃和測試過程:測試計劃包括要進行的測試的種類及進度安排測試過程規(guī)定了用來檢測軟件是否與需求一致的測試方案確認測試有下述兩種可能的結果:(1)功能和性能與用戶要求一致,軟件是可以接受的;(2)功能和性能與用戶要求有差距。在這個階段發(fā)現(xiàn)的問題往往和需求分析階段的差錯有關,解決起來也比較困難。為了制定解決確認測試過程中發(fā)現(xiàn)的軟件缺陷或錯誤的策略,通常需要和用戶充分協(xié)商。7.5.2

軟件配置復查確認測試的一個重要內容是復查軟件配置。復查的目的是保證軟件配置的所有成分都齊全,質量符合要求,文檔與程序完全一致,具有完成軟件維護所必須的細節(jié),而且已經(jīng)編好目錄。7.5.3Alpha和Beta測試如果軟件是專為某個客戶開發(fā)的,可以進行一系列驗收測試,以便用戶確認所有需求都得到滿足了;如果一個軟件是為許多客戶開發(fā)的,可以使用Alpha測試或Beta測試,來發(fā)現(xiàn)那些看起來只有最終用戶才能發(fā)現(xiàn)的錯誤。Alpha測試由用戶在開發(fā)者的場所進行,并且在開發(fā)者對用戶的“指導”下進行測試。開發(fā)者負責記錄發(fā)現(xiàn)的錯誤和使用中遇到的問題。Beta測試由用戶在一個或多個客戶場所進行,開發(fā)者通常不在現(xiàn)場,用戶記錄在Beta測試過程中遇到的一切問題(真實的或想像的),并且定期把這些問題報告給開發(fā)者。接收到在Beta測試期間報告的問題之后,開發(fā)者對軟件產(chǎn)品進行必要的修改,并準備向全體客戶發(fā)布最終的軟件產(chǎn)品。7.6

白盒測試技術測試方案包括具體的測試目的,應該輸入的測試數(shù)據(jù)和預期的結果。通常又把測試數(shù)據(jù)和預期的輸出結果稱為測試用例。設計測試方案的基本目標:確定一組最可能發(fā)現(xiàn)某個錯誤或某類錯誤的測試數(shù)據(jù)。白盒測試法按照程序內部的邏輯測試程序,檢測程序中的主要執(zhí)行通路是否都能按預定要求正確工作。本節(jié)講述在用白盒方法測試軟件時設計測試數(shù)據(jù)的典型技術。7.6.1邏輯覆蓋邏輯覆蓋是以程序內部邏輯為基礎的測試技術,它根據(jù)數(shù)據(jù)覆蓋程序內部邏輯的程度來設計測試用例。根據(jù)測試數(shù)據(jù)對源程序語句檢測的詳盡程度,主要有五種邏輯覆蓋標準:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋。根據(jù)測試數(shù)據(jù)對程序路徑的覆蓋程度,主要有三種邏輯覆蓋標準:點覆蓋、邊覆蓋、路徑覆蓋。軟件人員使用白盒測試方法,主要想對程序模塊進行如下的檢查:對程序模塊的所有獨立的執(zhí)行路徑至少測試一次;對所有的邏輯判定,取“真”與取“假”的兩種情況都至少測試一次;在循環(huán)的邊界和運行界限內執(zhí)行循環(huán)體;測試內部數(shù)據(jù)結構的有效性,等對一個具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。給出一個小程序的流程圖,它包括了一個執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達520條,對每一條路徑進行測試需要1毫秒,假定一年工作365×24小時,要想把所有路徑測試完,需3170年1.語句覆蓋語句覆蓋的含義是,選擇足夠多的測試數(shù)據(jù),使被測程序中每個語句至少執(zhí)行一次。為了使每個語句都執(zhí)行一次,只需使兩個判定都取真:A>1,B=0,A=2,X>1測試數(shù)據(jù):

A=2,B=0,X=4程序的執(zhí)行路徑:

sacbed2.判定覆蓋判定覆蓋又叫分支覆蓋,它的含義是,選擇足夠多的測試數(shù)據(jù),不僅每個語句必須至少執(zhí)行一次,而且每個判定的每個分支都至少執(zhí)行一次。若選擇覆蓋路徑sacbed和sabd,測試數(shù)據(jù)可設計成:A=2,B=0,X=4和A=1,B=0,X=1若選擇覆蓋路徑sacbd和sabed,測試數(shù)據(jù)可設計成:A=3,B=0,X=1和A=2,B=1,X=13.條件覆蓋條件覆蓋的含義是,選擇足夠多的測試用例,不僅每個語句至少執(zhí)行一次,而且使判定表達式中的每個條件都取到各種可能的結果。為了做到條件覆蓋,應選擇測試數(shù)據(jù)使得在a點有下述結果:

A>1,A≤1,B=0,B≠0在b點有下述結果: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.判定/條件覆蓋判定/條件覆蓋的含義是,選擇足夠多的測試數(shù)據(jù),使得判定表達式中的每個條件都取到各種可能的值,而且每個判定表達式也都取到各種可能的結果。使用兩組測試數(shù)據(jù):

A=2,B=0,X=4(sacbed)

A=1,B=1,X=1(sabd)判定/條件覆蓋不一定就比條件覆蓋更強。5.條件組合覆蓋條件組合覆蓋的含義是,選擇足夠多的測試數(shù)據(jù),使得每個判定表達式中條件的各種可能組合都至少出現(xiàn)一次。此例中共有8種可能的條件組合使用以下4組測試用例即可保證條件組合覆蓋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)

6.點覆蓋點覆蓋的含義是,選擇足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖的每個結點一次。通常點覆蓋和語句覆蓋是一致的。7.邊覆蓋邊覆蓋的含義是,要求選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條邊一次。通常邊覆蓋和判定覆蓋是一致的。8.路徑覆蓋路徑覆蓋的含義是,選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個環(huán)至少經(jīng)過一次)。練習:設計下列偽碼程序的語句覆蓋和路徑覆蓋測試用例:STARTINPUT(A,B,C)IFA>5THENX=10ELSEX=1ENDIFIFB>10THENY=20ELSEY=2ENDIFIFC>15THENZ=30ELSEZ=3ENDIFPRINT(X,Y,Z)STOP序號判定輸入預期的輸出123ABCXYZ1FFF1111232TTT204060102030語句覆蓋的測試用例序號判定輸入預期的輸出123ABCXYZ1FFF1111232FFT116012303FTF140112034FTFF201110236TFT20160102307TTF20401102038TTT204060102030路徑覆蓋的測試用例設計下列偽碼程序的分支覆蓋

和條件組合覆蓋測試用例STARTINPUT(A,B,C,D)IF(A>0)AND(B>0)THENX=A+BELSEX=A-BENDIF(C>A)AND(D<B)THENY=C-DELSEY=C+DENDPRINT(X,Y)STOP分支覆蓋序號判定輸入預期的輸出12ABCDXY1FF-1-2-311-22TT123132條件組合覆蓋本題中共有兩個判定表達式,每個判定表達式中有兩個簡單條件,因此,總共有8種可能的條件組合,它們是:A>0,B>0A>0,B≤0A≤0,B>0A≤0,B≤0C>A,D<BC>A,D≥BC≤A,D<BC≤A,D≥B序號輸入預期的輸出ABCDXY1,51120222,61021113,701-10-1-14,800-11007.6.2

控制結構測試1.基本路徑測試使用這種技術設計測試用例時,首先計算程序的環(huán)形復雜度,并用該復雜度為指南定義執(zhí)行路徑的基本集合,從該基本集合導出的測試用例可以保證程序中的每條語句至少執(zhí)行一次,而且每個條件在執(zhí)行時都將分別取真、假兩種值。使用基本路徑測試技術設計測試用例的步驟如下:根據(jù)過程設計結果畫出相應的流圖;計算流圖的環(huán)形復雜度;確定線性獨立路徑的基本集合;獨立路徑是指至少引入程序的一個新處理語句集合或一個新條件的路徑,用流圖術語描述,即獨立路徑至少包含一條在定義該路徑之前不曾用過的邊;設計可強制執(zhí)行基本集合中每條路徑的測試用例。PROCEDUREaverage;/*這個過程計算不超過100個在規(guī)定值域內的有效數(shù)字的平均值;同時計算有效數(shù)字的總和及個數(shù)。*/ INTERFACERETURNSaverage,total.input,total.valid;INTERFACEACCEPTSvalue,minimum,maximum;TYPEvalue[1…100]ISSCALARARRAY;TYPEaverage,total.input,total.valid;

minimum,maximum,sumISSCALAR;TYPEiISINTEGER;1: i=1;

total.input=total.valid=0; sum=0;2: DOWHILEvalue[i]<>-9993: ANDtotal.input<1004: incrementtotal.inputby1;5: IFvalue[i]>=minimum6: ANDvalue[i]<=maximum7: THENincrementtotal.validby1; sum=sum+value[i];8: ENDIF incrementiby1;9: ENDDO10: IFtotal.valid>011: THENaverage=sum/total.valid;12: ELSEaverage=-999;13: ENDIF ENDaverage1.根據(jù)過程設計結果畫出相應的流圖2.計算流圖的環(huán)形復雜度可以用第6.5.1小節(jié)講述的3種方法之一計算環(huán)形復雜度。經(jīng)計算,圖7.6所示流圖的環(huán)形復雜度為6。3.確定獨立路徑的基本集合程序的環(huán)形復雜度決定了程序中獨立路徑的數(shù)量,而且這個數(shù)是確保程序中所有語句至少被執(zhí)行一次所需的測試數(shù)量的上界。由于例中環(huán)形復雜度為6,因此共有6條獨立路徑:路徑1:1-2-10-11-13路徑2:1-2-10-12-13路徑3:1-2-3-10-11-13路徑4:1-2-3-4-5-8-9-2-……路徑5:1-2-3-4-5-6-8-9-2-……路徑6:1-2-3-4-5-6-7-8-9-2-……4.設計可強制執(zhí)行基本集合中每條路徑的測試用例路徑:1-2-10-11-131-2-10-12-131-2-3-10-11-131-2-3-4-5-8-9-2-……1-2-3-4-5-6-8-9-2-……1-2-3-4-5-6-7-8-9-2-……value[i]

<>-999total.valid>0total.input<100value[i]>=minimumvalue[i]<=maximumFFFFFTTTTT練習:使用基本路徑測試方法,設計測試下面列出的偽碼程序的測試用例1:STARTINPUT(A,B,C,D)2:IF(A>0)3:AND(B>0)4:THENX=A+B5:ELSEX=A-B6:END7:IF(C>A)8:OR(D<B)9:THENY=C-D10:ELSEY=C+D11:END12:PRINT(X,Y)STOP1、根據(jù)過程設計的結果畫出流圖1234679111258102、計算流圖的環(huán)形復雜度三種計算方法:均得到相同結果,V(G)=53、確定線性獨立路徑的基本集合路徑1:1-2-3-4-6-7-9-11-12路徑2:1-2-5-6-7-9-11-12路徑3:1-2-3-5-6-7-9-11-12路徑4:1-2-3-4-6-7-8-9-11-12路徑5:1-2-3-4-6-7-8-10-11-124、設計可強制執(zhí)行基本路徑

集合中每條路徑的測試用例序號輸入預期的輸出ABCDXY路徑1(TT)1122(任意)20路徑2(FT)01(任意)20(任意)-12路徑3(FT)1020(任意)12路徑4(TT)110-121路徑5(TF)1102222.條件測試用條件測試技術設計出的測試用例,能夠檢查程序模塊中包含的邏輯條件。簡單條件:是一個布爾變量或一個關系表達式,在布爾變量或關系表達式之前還可能有一個NOT算符。關系表達式的形式:E1<關系算符>E2,其中,E1和E2是算術表達式,而<關系算符>是下列算符之一:“<”,“≤”,“=”,“≠”,“>”或“≥”。不包含關系表達式的條件稱為布爾表達式。復合條件:由兩個或多個簡單條件、布爾算符和括弧組成。布爾算符有OR(“|”),AND(“&”)和NOT。條件成分的類型包括布爾算符、布爾變量、括弧、關系算符及算術表達式。如果條件不正確,則至少條件的一個成分不正確。因此,條件錯誤的類型如下:布爾算符錯布爾變量錯布爾括弧錯關系算符錯算術表達式錯條件測試方法著重測試程序中的每個條件。常用條件測試策略:分支測試:對于復合條件C來說,C的真分支和假分支以及C中的每個簡單條件,都應該至少執(zhí)行一次。域測試:要求對一個關系表達式執(zhí)行3個或4個測試,例如,對于形式為E1<關系算符>E2的關系表達式來說,需要3個測試分別使E1的值大于、等于或小于E2的值。BRO測試:利用條件C的條件約束來設計測試用例。3.循環(huán)測試在結構化的程序中通常只有3種循環(huán):即簡單循環(huán)、串接循環(huán)和嵌套循環(huán)。(1)簡單循環(huán)。應該使用下列測試集來測試簡單循環(huán),其中n是允許通過循環(huán)的最大次數(shù)。跳過循環(huán)。只通過循環(huán)一次。通過循環(huán)兩次。通過循環(huán)m次,其中m<n-1。通過循環(huán)n-1,n,n+1次。(2)嵌套循環(huán)。B.Beizer提出了一種能減少測試數(shù)的方法:從最內層循環(huán)開始測試,把所有其他循環(huán)都設置為最小值。對最內層循環(huán)使用簡單循環(huán)測試方法,而使外層循環(huán)的迭代參數(shù)(例如,循環(huán)計數(shù)器)取最小值,并為越界值或非法值增加一些額外的測試。由內向外,對下一個循環(huán)進行測試,但保持所有其他外層循環(huán)為最小值,其他嵌套循環(huán)為“典型”值。繼續(xù)進行下去,直到測試完所有循環(huán)。(3)串接循環(huán)。如果串接循環(huán)的各個循環(huán)都彼此獨立,則可以使用前述的測試簡單循環(huán)的方法來測試串接循環(huán)。如果兩個循環(huán)串接且并不獨立,使用測試嵌套循環(huán)的方法來測試串接循環(huán)。7.7

黑盒測試技術黑盒測試著重測試軟件功能。黑盒測試力圖發(fā)現(xiàn)下述類型的錯誤:①功能不正確或遺漏了功能;②界面錯誤;③數(shù)據(jù)結構錯誤或外部數(shù)據(jù)庫訪問錯誤;④性能錯誤;⑤初始化和終止錯誤。白盒測試在測試過程的早期階段進行,而黑盒測試主要用于測試過程的后期。7.7.1

等價劃分等價劃分是一種黑盒測試技術。窮盡的黑盒測試通常是不現(xiàn)實的,只能選取少量最有代表性的輸入數(shù)據(jù)作為測試數(shù)據(jù),以期用較小的代價暴露出較多的程序錯誤。如果一個程序有2個輸入數(shù)據(jù),每個輸入數(shù)據(jù)都是一個32位的二進制整數(shù),那么這個程序有多少個可能的輸入?如果每微秒可進行一次測試,那么對所有可能的輸入進行測試需要多長時間?至少需要10萬年。等價劃分技術把程序的輸入域劃分成若干個數(shù)據(jù)類,據(jù)此導出測試用例。一個理想的測試用例能獨自發(fā)現(xiàn)一類錯誤。如果把所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分成若干個等價類,則可以合理地做出下述假定:每類中的一個典型值在測試中的作用與這一類中所有其他值的作用相同。因此,可以從每個等價類中只取一組數(shù)據(jù)作為測試數(shù)據(jù)。這樣選取的測試數(shù)據(jù)最有代表性,最可能發(fā)現(xiàn)程序中的錯誤。幾條啟發(fā)式規(guī)則可能有助于等價類的劃分:(1)如果規(guī)定了輸入值的范圍,則可劃分出一個有效的等價類(輸入值在此范圍內),兩個無效的等價類(輸入值小于最小值或大于最大值);(2)如果規(guī)定了輸入數(shù)據(jù)的個數(shù),則類似地也可以劃分出一個有效的等價類和兩個無效的等價類;(3)如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序對不同輸入值做不同處理,則每個允許的輸入值是一個有效的等價類,此外還有一個無效的等價類(任一個不允許的輸入值);(4)如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可以劃分出一個有效的等價類(符合規(guī)則)和若干個無效的等價類(從各種不同角度違反規(guī)則);(5)如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負整數(shù)等3個有效類;(6)如果程序的處理對象是表格,則應該使用空表,以及含一項或多項的表。以上列出的啟發(fā)式規(guī)則只是測試時可能遇到的情況中的很小一部分,為了正確劃分等價類,一是要注意積累經(jīng)驗,二是要正確分析被測程序的功能。劃分出等價類以后,根據(jù)等價類設計測試方案時主要使用下面兩個步驟:設計一個新的測試方案以盡可能多地覆蓋尚未被覆蓋的有效等價類,重復這一步驟直到所有有效等價類都被覆蓋為止;(2)設計一個新的測試方案,使它覆蓋一個而且只覆蓋一個尚未被覆蓋的無效等價類,重復這一步驟直到所有無效等價類都被覆蓋為止。例子:一個把數(shù)字串轉變成整數(shù)的函數(shù),這個函數(shù)是用Pascal語言編寫的,它的說明如下:functionstrtoint(dstr:shortstr):integer;其中,函數(shù)的參數(shù)類型是shortstr,它的說明是:typeshortstr=array[1..6]ofchar;被處理的數(shù)字串是右對齊的,如果數(shù)字串比6個字符短,則在它的左邊補空格。如果數(shù)字串是負的,則負號和最高位數(shù)字緊相鄰(負號在最高位數(shù)字左邊一位)。運行程序的計算機字長16位,用二進制補碼表示整數(shù)。有效輸入的等價類有:(1)1~6個數(shù)字字符組成的數(shù)字串(最高位數(shù)字不是零);(2)最高位數(shù)字是零的數(shù)字串;(3)最高位數(shù)字左鄰是負號的數(shù)字串;無效輸入的等價類有:(4)空字符串(全是空格);(5)左部填充的字符既不是零也不是空格;(6)最高位數(shù)字右面由數(shù)字和空格混合組成;(7)最高位數(shù)字右面由數(shù)字和其他字符混合組成;(8)負號與最高位數(shù)字之間有空格;合法輸出的等價類有(9)在計算機能表示的最小負整數(shù)和零之間的負整數(shù);(10)零;(11)在零和計算機能表示的最大正整數(shù)之間的正整數(shù);非法輸出的等價類有(12)比計算機能表示的最小負整數(shù)還小的負整數(shù);(13)比計算機能表示的最大正整數(shù)還大的正整數(shù)。根據(jù)上面劃分出的等價類,可以設計出測試方案。每個測試方案包含三部分內容:要檢測的功能(對應覆蓋的等價類);輸入數(shù)據(jù);預期的輸出。練習三角形問題的等價類測試:輸入3個整數(shù)a、b、c分別作為三角形的3條邊,通過程序判斷由這3條邊構成的三角形類型是:等邊三角形、等腰三角形、一般三角形或非三角形。輸入的3個整數(shù)在1-100之間取值。輸入的3個整數(shù)必須滿足以下條件:Con1:1≤a≤100Con2:1≤b≤100Con3:1≤c≤100Con4:a<b+cCon5:b<a+cCon6:c<a+b7.7.2

邊界值分析經(jīng)驗表明,處理邊界情況時程序最容易發(fā)生錯誤。通常設計測試方案時總是聯(lián)合使用等價劃分和邊界值分析兩種技術。按照邊界值分析法,應該選取剛好等于、稍小于和稍大于等價類邊界值的數(shù)據(jù)作為測試數(shù)據(jù),而不是選取每個等價類內的典型值或任意值作為測試數(shù)據(jù)。課本165頁:應用邊界值分析法后補充和修改的測試方案7.7.3

錯誤推測錯誤推測法:依靠測試人員的經(jīng)驗和直覺,推測程序中可能存在的各種錯誤,有針對性的設計檢查這些錯誤的測試用例。錯誤推測法在很大程度上靠測試人員的直覺和經(jīng)驗進行的。7.8

調試調試是在測試發(fā)現(xiàn)錯誤之后定位并改正錯誤的過程。在調試中,首先是從表示程序中存在錯誤的某些跡象出發(fā),確定錯誤的準確位置。這部分工作大約占到調試總工作量的95%左右;然后來研究被測的程序代碼,確定產(chǎn)生問題的原因,并設法改正錯誤。這部分工作大約占到調試總工作量的5%左右。7.8.1

調試過程調試是軟件開發(fā)過程中最艱巨的腦力勞動!軟件錯誤具有一些特征令調試工作非常困難:(1)癥狀和產(chǎn)生癥狀的原因可能在程序中相距甚遠;(2)當改正了另一個錯誤之后,癥狀可能暫時消失了;(3)癥狀可能實際上并不是由錯誤引起的;(4)癥狀可能是由不易跟蹤的人為錯誤引起的。(5)癥狀可能是由定時問題而不是由處理問題引起的。(6)可能很難重新產(chǎn)生完全一樣的輸入條件;(7)癥狀可能時有時無;(8)癥狀可能是由分布在許多任務中的原因引起的,這些任務運行在不同的處理機上。7.8.2

調試途徑通常需要把系統(tǒng)地分析、直覺和運氣組合起來,才能實現(xiàn)調試的目標。一般說來,有下列3種調試途徑可以采用:1.蠻干法按照“讓計算機自己尋找錯誤”的策略,這種方法印出內存的內容,激活對運行過程的跟蹤,并在程序中到處都寫上輸出語句,希望在這樣生成的信息海洋的某個地方發(fā)現(xiàn)錯誤原因的線索。2.回溯法具體做法是,從發(fā)現(xiàn)癥狀的地方開始,人工沿程序的控制流往回追蹤分析源程序代碼,直到找出錯誤原因為止。當調試小程序時這種方法是有效的。3.原因排除法對分查找法:用賦值語句或輸入語句在程序中點附近“注入”變量的正確值,然后運行程序并檢查所得到的輸出;如果輸出結果是正確的,則錯誤原因在程序的前半部分;反之,錯誤原因在程序的后半部分。歸納法:首先把和錯誤有關的數(shù)據(jù)組織起來進行分析,以便發(fā)現(xiàn)可能的錯誤原因。然后導出對錯誤原因的一個或多個假設,并利用已有的數(shù)據(jù)來證明或排除這些假設。演繹法:首先設想出所有可能的出錯原因,然后試圖用測試來排除每一個假設的原因。7.9軟件可靠性軟件可靠性是軟件質量最重要的一個度量標準,測試階段的根本目標是消除錯誤,保證軟件的可靠性。7.9.1

基本概念軟件可靠性:是程序在給定的時間間隔內,按照規(guī)格說明書的規(guī)定成功地運行的概率。軟件可用性:是程序在給定的時間點,按照規(guī)格說明書的規(guī)定,成功地運行的概率??煽啃院涂捎眯灾g的主要差別是:可靠性意味著在0到t這段時間間隔內系統(tǒng)沒有失效,而可用性只意味著在時刻t,系統(tǒng)是正常運行的。一般說來,對于任何其故障是可以修復的系統(tǒng),都應該同時使用可靠性和可用性衡量它的優(yōu)劣程度。如果在一段時間內,軟件系統(tǒng)故障停機時間分別為td1,td2,…,正常運行時間分別為tu1,tu2,…,則系統(tǒng)的穩(wěn)態(tài)可用性為:Ass=Tup/(Tup+Tdown) 其中,Tup=∑tui,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論