軟件工程導論(第7章)
,,,,,,,,,,,,,,,,,,,,,,,,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,第7章:實現(xiàn),編碼和測試統(tǒng)稱為實現(xiàn)。,,編碼:把軟件設計結果翻譯成程序。,,測試:檢測程序并改正錯誤的過程。,,計算機程序設計語言基本上可以分為兩大類:,,,1.,匯編語言,;,,2.,高級語言。,,7.1,編碼,7.1.1 選擇程序設計語言,從應用特點看,高級語言可分為:,,1),基礎語言,,如,BASIC、FORTRAN、COBOL,等,,2),結構化語言,,如,PL/1、PASCAL、C、ADA,等,,3),專用語言,,如,APL、BLISS、FORTH、LISP、PROLOG,等,選擇一種編程語言的理論標準:,,1,)有理想的模塊化機制;,,2,)可讀性好的控制結構和數(shù)據(jù)結構;,,3,)便于調試和提高軟件可靠性;,,4,)編譯程序發(fā)現(xiàn)程序錯誤的能力強;,,5,)有良好的獨立編譯機制。,選擇語言時除了考慮理論上的標準,還必須同時考慮主要的實用標準:,,(1)系統(tǒng)用戶要求,,(2)可以使用的編譯程序,,(3)可以得到的軟件工具,,(4)工程規(guī)模,,(5)程序員知識,,(6)軟件可移植性要求,,(7)軟件的應用領域,1.程序內部的文檔,,選取含義鮮明的名字,如果使用縮寫,縮寫規(guī)則要一致,并給每個名字加注釋;,,通常在每個模塊開始處要有一段注釋,描述模塊功能、算法、接口特點等;,,程序清單布局應利用適當?shù)碾A梯形式,使程序的層次結構清晰明顯。,7.1.2 寫程序的風格,2.數(shù)據(jù)說明,,數(shù)據(jù)說明的次序應該標準化,如按數(shù)據(jù)類型確定說明的次序;,,多個變量名在一個語句中說明時,應該按字母順序排列這些變量;,,如果設計時使用了復雜的數(shù)據(jù)結構,應該用注釋說明實現(xiàn)該數(shù)據(jù)結構的方法和特點。,,3.語句構造:語句分行、分段、復雜條件語句規(guī)則、嵌套規(guī)則等等。,,,4.輸入/輸出:數(shù)據(jù)檢驗、格式、合法性等等,,5.效率,,,A.,程序運行時間,,,B.,存儲器效率,,C.,輸入/輸出效率,,程序設計工具實例:,Visual C++,運用,Visual C++,開發(fā)工具需要掌握:,,C++,語言特點、語法;,,Windows,編程基礎;,,MFC,相關知識;,,Visual C++,集成開發(fā)工具環(huán)境的使用;,一、,C++,語言特點、語法:,,C++,語言是在,C,語言的基礎是擴展而成的,兩種語言的基本語法和語義是相同。,C++,中加入了面向對象程序設計(,OOP),的特征:,,,封裝性,:通過“類”把屬性和函數(shù)組合在一起。,,,繼承性,:派生類可從先前定義的基類中繼承函數(shù)和屬性。,,,多態(tài)性,:一個函數(shù)名,由不同的對象解釋執(zhí)行,可得到不同的執(zhí)行效果。,二、,Windows,編程基礎:,,API,:,,API,是,Windows,應用程序編程接口。,,API,是一個程序內(或一組相關程序內)的一組函數(shù)調用,程序員用它創(chuàng)建其他程序。,,程序員不必知道函數(shù)內部,只要知道,API,的函數(shù)原型及返回值。,API,的函數(shù)原型及返回值形式可由相關的技術規(guī)范資料獲得。,現(xiàn)在的,Win32 API,中,核心部分依靠三個主要組件提供,Windows,的大部分函數(shù),這三個組件分別是:,,,USER32.DLL,;,,,GDI32.DLL,;,,,KERNEL32.DLL,。,,Windows,消息機制,:,,1)基于消息的事件驅動,,消息可以是由硬件發(fā)來的(存于系統(tǒng)隊列),,,也可以由,Windows,系統(tǒng)和應用程序發(fā)來(存于程序隊列中);,,每一個,Windows,程序在不停的捕捉各種消息,,,并進行處理;,,每個窗口都必須有一個窗口函數(shù),來負責消息的判斷與處理。,2)窗口函數(shù)對消息的處理,,,窗口函數(shù)是一個回調函數(shù),可以處理收到的消息,在程序中不需要用戶顯式調用。,,,該窗口函數(shù)的形式通常為:,WndProc(),,每個窗口類必須在初始化時指定一個窗口函數(shù)。,三、,MFC,:,,MFC,,即,Microsoft,基本類,該類庫封裝了,SDK(,軟件開發(fā)工具包)結構、功能及應用程序框架內部技術。,,它提供了許多可以重用的類,使得,Windows,程序員避免了許多重復性工作。,四、,Visual C++,集成開發(fā)工具環(huán)境,,1)開發(fā)工具的使用;,,2)掌握,Win32,程序開發(fā)流程 ;,,,,一個,win32,程序由兩大塊組成:,,,程序代碼,;,,,用戶接口資源,。,用戶接口資源,:菜單,對話框,圖標,光標等;,,這些資源的實際內容(二進制代碼)由各種工具產生,并以各種擴展名的文件存在;,資源描述文件(*,.,rc,),中對用戶接口資源進行描述;,,,RC,編輯器(,RC.exe,),根據(jù)該資源描述文件(*,.,rc,),將所有用戶接口資源集中構造一個*,.,RES,文件;,,*,.,RES,文件與程序代碼結合起來,構成一個,Win32,程序。,關于函數(shù)庫和頭文件,:,,動態(tài)鏈接庫,:應用程序調用的,API,函數(shù)在“執(zhí)行期間”才鏈接上的函數(shù)庫,,,擴展名可以是.,dll,,也可以是,.exe、 .fon、 .mod、.drv、,,.ocx,等。,,靜態(tài)連接庫,:.,lib,,頭文件,:如,windows.h,,它包含操作系統(tǒng)本身的三大模塊,gdi32.dll、user32.dll,和,kernel32.dll,中的所有,API,函數(shù)。,有關測試的一些規(guī)則:,,(1)測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程;,,(2)好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案;,,(,3,)成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試。,,7.2.1 軟件測試的目標,7.2 軟件測試基礎,測試的正確定義:“為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程?!?7.2.2 軟件測試準則,1,)所有測試都應該能追溯到用戶需求;,,2,)應該遠在測試前就制定出測試計劃;,,3,)把,Pareto,原理應用到軟件測試中;,Pareto,原理說明測試發(fā)現(xiàn)的錯誤中的,80%,很可能是由程序中,20%,的模塊造成的。,,4,)應該從“小規(guī)模”測試開始,并逐步進行“大規(guī)模”測試;,5,)窮舉測試是不可能的;,窮盡測試,:包含所有可能情況的測試稱為窮盡測試。,程序,main(),a2,a1,a3,b,輸入,輸出,a1、a2、a3 :,,Integer 16bits,輸入數(shù)據(jù)的窮盡測試組合:,2,16,×2,16,× 2,16,= 2,48,≈ 3 × 10,14,6,)為了達到最佳測試效果,應該由獨立的第三方從事測試工作。,黑盒測試,:,,如果已經知道軟件應該具有的功能,可以通過測試來檢驗是否每個功能都能正常使用,這種測試稱黑盒測試。也稱功能測試。,7.2.3 測試方法,白盒測試,:,,也稱結構測試。,,如果知道軟件內部工作過程,可以通過測試來檢驗軟件內部動作是否按照規(guī)格說明書的規(guī)定正常進行,這種測試稱為白盒測試。,1.,模塊測試,,模塊測試又稱單元測試,它把每個模塊作為單獨的實體來測試。,,2.,子系統(tǒng)測試,,子系統(tǒng)測試是把經過單元測試的模塊放在一起形成一個子系統(tǒng)來測試。,7.2.4 軟件測試的步驟,3.,系統(tǒng)測試,,系統(tǒng)測試是把經過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來測試。,,4.,驗收測試,,驗收測試把軟件系統(tǒng)作為單一的實體進行測試(利用用戶的實際數(shù)據(jù)測試)。,,5.,平行運行,,平行運行是同時運行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結果。,,7.2.5,測試階段的信息流,測試,評價,調試,可靠性模型,軟件配置,測試配置,測試結果,預期結果,錯誤,錯誤率數(shù)據(jù),正確,可靠性預測,圖7.1 測試階段的信息流,7.3 單元測試,單元測試的一般方法是:,,首先通過編譯系統(tǒng)檢查并改正程序中所有的語法錯誤;,,然后用詳細設計模塊說明為指南,對重要的控制路徑進行測試,以便發(fā)現(xiàn)模塊內部的錯誤。,,通常,單元測試使用白盒測試方法。,,1),模塊接口,,應該對穿過模塊接口的數(shù)據(jù)流進行檢測,以保證正確的輸入和輸出。,,2),局部數(shù)據(jù)結構,,這是錯誤的主要來源,應該設計相應的測試用例,以便發(fā)現(xiàn)數(shù)據(jù)結構方面的錯誤。,7.3.1 測試重點,3),重要的執(zhí)行路徑,,由于不可能進行窮盡測試,因此選擇測試路徑是非常關鍵的。,,4,),出錯處理通路,,5),邊界條件,審查小組:,,,1,)組長;,,2,)程序的設計者;,,3,)程序的編寫者;,,4,)程序的測試者。,,7.3.2 代碼審查,7.3.3 計算機測試,,,由于軟件模塊不是一個獨立的系統(tǒng),不能獨立運行,要依靠其他模塊調用,或需要調用其他模塊。,,因此,必須要為測試的單元開發(fā),驅動程序,或,存根程序,。,1),驅動程序,,相當于一個“主程序”,用來把測試數(shù)據(jù)傳送給被測試的模塊,并打印有關結果。,,2,),存根程序,,用來代替被測試模塊所調用的模塊,相當于,“,虛擬子程序,”,。,,如,測試,B,模塊,設計了,A,模塊和,C,模塊。,,由,A,負責傳送測試數(shù)據(jù),由,C,負責模擬被,B,調用的模塊。,C,模塊可能沒有,這取決于,B,有沒有調用其他程序。,,A、C,都是一次性程序,只在測試時臨時使用,應盡量設計得簡單一些,以節(jié)省費用和時間。,B,A,C,被測試模塊,驅動模塊,存根模塊,例:,正文加工系統(tǒng),輸入,,1.0,輸出,,2.0,編輯,,3.0,加標題,,4.0,存儲,,5.0,檢索,,6.0,編目錄,,7.0,格式化,,8.0,添加,,3.1,刪除,,3.2,插入,,3.3,修改,,3.4,合并,,3.5,列表,,3.6,圖7.2 正文加工系統(tǒng),TEST DRIVER,編輯,,3.0,TEST STUB,對“編輯”功能的測試:,7.4 集成測試,集成測試是組裝軟件的系統(tǒng)化技術,它將經過單元測試的模塊聯(lián)系在一起進行測試。,,由模塊組裝成程序時有兩種方法:,,1),非漸增式測試方法,,先分別測試每個模塊,再把所有模塊按設計要求放在一起結合成所要的程序。,2,),漸增式測試方法,,每次增加一個待測試模塊,把它同已經測試好的那些模塊結合起來進行測試,反復進行直到完成所有模塊測試的方法。,使用漸增式測試方法把模塊結合到軟件系統(tǒng)中去時,有,自頂向下,和,自底向上,兩種集成方法。,,,自頂向下,集成是一種遞增的裝配軟件結構的方法,這種方法應用非常廣泛。它需要存根程序,但是不需要驅動程序。,7.4.1 自頂向下集成,這種方法的思想是:從主控模塊(主程序)開始,沿軟件的控制層次向下移動,逐漸把各個模塊結合起來。,,在自頂向下結合方法中,如何將所有模塊組裝到軟件結構中,又有兩種方法:,1),深度優(yōu)先策略,,先組裝軟件結構的一條,主控制通路,上的所有模塊,選擇哪條主控制通路,具有較大的任意性。,,如圖,如果選取左通路,就先把模塊,M1、M2、M5,結合起來測試,然后結合模塊,M8、M6,,再構造中央和右側的控制通路。,M1,M2,M3,M4,M6,M5,M7,M8,圖7.3 自頂向下結合實例,2),寬度優(yōu)先策略,,沿著軟件結構水平地移動,把處于同一個層次的所有模塊組裝起來。,,如圖,首先結合,M2、M3、M4,和主控模塊,M1,,然后結合下一個控制層次中的模塊,M5、M6,和,M7,,最后結合模塊,M8。,M1,M2,M3,M4,M6,M5,M7,M8,圖7.3 自頂向下結合實例,自頂向下集成方法的基本過程如下:,,1)對主控模塊進行測試,測試時用存根程序代替所有直接被主控模塊調用的模塊;,M1,M2,M3,M4,M6,M5,M7,M8,圖7.3 自頂向下結合實例,M1,M2,M3,M4,M6,M5,M7,M8,圖7.3 自頂向下結合實例,2)根據(jù)選定的結合策略(深度優(yōu)先或寬度優(yōu)先),每次用一個實際模塊代替一個存根程序(新結合的模塊往往又需要新的存根程序);,3)每結合一個模塊,就測試一個;,,4)為保證不引入新的錯誤,需要進行回歸測試,即重復以前進行過的部分或全部測試;,,5,)重復回到第二步,直到構成整個軟件結構。,M1,M2,M3,M4,M6,M5,M7,M8,圖7.3 自頂向下結合實例,自底向上集成方法是從軟件結構最底層模塊開始進行組裝和測試,它與自頂向下結合方法相反,需要驅動程序,不需要存根程序。,,7.4.2 自底向上集成,自底向上集成方法的基本過程如下:,,1)把底層模塊組合成實現(xiàn)一個特定軟件子功能的族,如圖族1、2、3。,Mc,Ma,Mb,D2,D1,D3,,,,,,,,,,,,族1,族2,族3,圖7.4 自底向上實例,2)為每個模塊設計一個驅動程序,作為測試的控制程序,以協(xié)調測試用例的輸入和輸出。圖中,D1、D2、D3,分別是族1、2、3的驅動程序;,Mc,Ma,Mb,D2,D1,D3,,,,,,,,,,,,族1,族2,族3,圖7.4 自底向上實例,3)對模塊進行測試;,,4)用實際模塊代替驅動程序組裝成新的模塊族,在新加入的實際模塊上面加上新的驅動程序進行測試;,Mc,Ma,Mb,D2,D1,D3,,,,,,,,,,,,族1,族2,族3,圖7.4 自底向上實例,5)重復第二到第四步,逐漸向上加入實際模塊,直至構造出整個軟件結構。,Mc,Ma,Mb,D2,D1,D3,,,,,,,,,,,,族1,族2,族3,圖7.4 自底向上實例,7.4.3 不同集成測試策略的比較,1. 改進的自頂向下測試方法;少數(shù)關鍵模塊自底向上。,,2. 混合法。,M1,M2,M3,M4,M5,M6,,,7.4.4 回歸測試,,指重新執(zhí)行已經做過的部分測試。,,,回歸測試用于保證由于調試或其他原因引起的程序變化,不會導致額外錯誤的測試活動。,7.5 確認測試(驗收測試),,也稱為驗收測試,目標是驗證軟件的有效性。,,如果軟件的功能和性能符合用戶的期待,軟件就是有效的。,,軟件規(guī)格說明書是進行確認測試的基礎。,,7.5.1 確認測試的范圍,確認測試的主要特點及內容有:,,1)某些已經測試過的純粹技術性的測試項可能不需要再次測試,而對用戶特別感興趣的功能或性能,可能需要增加一些測試;,,2)通常確認測試主要使用實際生產中的數(shù)據(jù)來進行測試;,,3,)確認測試必須有用戶的積極參與,甚至以用戶為主,可能需要進行一些與用戶使用步驟有關的測試。,,確認測試一般使用黑盒測試法。,7.5.2 軟件配置復查,目的:保證軟件配置的所有成分都齊全,質量符合要求,文檔與程序完全一致,而且已經編好目錄。,7.5.3,Alpha,和,Beta,測試,Alpha,測試,:用戶在開發(fā)者的場所進行測試,并且在開發(fā)者的指導下進行,測試在受控環(huán)境中進行,開發(fā)者記錄發(fā)現(xiàn)的錯誤和問題;,,Beta,測試,:用戶在一個或多個客戶場所進行測試,不受開發(fā)者控制,測試者記錄發(fā)現(xiàn)的問題和錯誤,定期將問題報告發(fā)送給開發(fā)者。,7.6 白盒測試技術,1.,語句覆蓋,,語句覆蓋是指:設計的測試用例能使程序中每條語句至少執(zhí)行一次。,,7.6.1 邏輯覆蓋,例:一個被測試模塊的源程序為,(,PASCAL,語言),:,,PROCEDURE EXAMPLE (A , B : REAL ; VAR X : REAL) ;,,BEGIN,,IF (A>1) AND (B=0),,THEN X : = X / A;,,IF (A=2) OR (X>1),,THEN X : = X + 1,,END,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,選取測試用例:,A = 2 , B = 0 , X = 4,,,程序執(zhí)行路徑為:,sacbed,。,2.,判定覆蓋,,判定覆蓋是指:選取足夠的測試用例,使得程序中每個判斷的可能結果都至少執(zhí)行一次,也就是說使程序的每個判斷分支至少通過一次。,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,對于上例,選取如下測試用例:,,I.,A=3,B=0,X=3,(,覆蓋,sacbd),,II.,A=2,B=1,X=1,(,覆蓋,sabed),3.,條件覆蓋,,,條件覆蓋是指:選擇足夠的測試用例,使得程序中每個判定表達式的每個條件都取到各種可能的結果。,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,上例中,有兩個判定表達式,每個表達式有兩個條件,為了做到條件覆蓋,應該選取測試數(shù)據(jù)使得,a,點出現(xiàn)如下結果:,,,A>1,A≤1,B=0,B≠0,,在,b,點出現(xiàn)如下結果:,,,A=2,A≠2,X>1,X≤1,,選取如下測試用例:,,I.,A=2,B=0,X=4,(,滿足,A>1,B=0,A=2,和,X>1,,執(zhí)行路徑為,sacbed),,II.,A=1,B=1,X=1,(,滿足,A≤1,B≠0,A≠2,和,X≤1,,執(zhí)行路徑為,sabd),入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,條件覆蓋通常比判定覆蓋強,但是條件覆蓋不一定包含判定覆蓋。,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,如:,,I.,A=2,B=0,X=1,(,滿足,A>1,B=0,A=2,和,X≤1,,執(zhí)行路徑為,sacbed),,II.,A=1,B=1,X=2,(,滿足,A≤1,B≠0,A≠2,和,X>1,,執(zhí)行路徑為,sabed),,只滿足條件覆蓋,并不滿足判定覆蓋。,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,4.,判定/條件覆蓋,,判定/條件覆蓋是指:選取足夠的測試用例使得同時滿足判定覆蓋和條件覆蓋的要求。,對于上例,選取如下測試用例:,,I.,A=2,B=0,X=4,(,滿足,A>1,B=0,A=2,和,X>1,,執(zhí)行路徑為,sacbed),,II.,A=1,B=1,X=1,(,滿足,A≤1,B≠0,A≠2,和,X≤1,,執(zhí)行路徑為,sabd),入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,5.,條件組合覆蓋,,,條件組合覆蓋指:選取足夠的測試用例,使得每個判定表達式中條件的各種可能的組合都至少出現(xiàn)一次。,對于上例,共有8種可能的條件組合:,,1),A>1,B=0,,2)A>1,B≠0,,3)A≤1,B=0,,4)A≤1,B≠0,,,,5)A=2,X>1,,6)A=2,X≤1,,7)A≠2,X>1,,8)A≠2,X≤1,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,選取如下測試用例:,,I.,A=2,B=0,X=4,(,滿足1、5組合:,A>1,B=0,A=2,X>1,,執(zhí)行路徑,sacbed),,II.,A=2,B=1,X=1,(,滿足2、6組合:,A>1,B≠0,A=2,X≤1,,執(zhí)行路徑,sabed),入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,III.,A=1,B=0,X=2,(,滿足3、7組合:,A≤1,B=0,A≠2,X>1,,執(zhí)行路徑,sabed),,IV.,A=1,B=1,X=1,(,滿足4、8組合:,A≤1,B≠0,A≠2,X≤1,,執(zhí)行路徑,sabd),,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,如果從對程序路徑的覆蓋程度分析,可以提出下面一些邏輯覆蓋標準:,,6.,點覆蓋,,點覆蓋是指:選取足夠多的測試用例,使得程序執(zhí)行路徑至少經過程序圖中每個節(jié)點一次。,,,,,,,s,a,b,d,c,e,1,2,3,4,5,6,7,圖7.5 對應的程序圖,7.,邊覆蓋,,邊覆蓋是指:選取足夠多的測試用例,使得程序執(zhí)行路徑至少經過程序圖中每條邊一次。,,,,,,,s,a,b,d,c,e,1,2,3,4,5,6,7,圖7.5 對應的程序圖,選取如下測試用例:,,I.,A=3,B=0,X=3,,(,執(zhí)行路徑1—4—5—3),,II.,A=2,B=1,X=1,,(,執(zhí)行路徑1—2—6—7),8.,路徑覆蓋,,路徑覆蓋是指:選取足夠多的測試用例,使得程序的每條可能路徑都至少執(zhí)行一次。,,,,,,,s,a,b,d,c,e,1,2,3,4,5,6,7,圖7.5 對應的程序圖,選取如下測試用例:,,I.,A=1,B=1,X=1,,(,執(zhí)行路徑1—2—3),,II.,A=1,B=1,X=2,,(,執(zhí)行路徑1—2—6—7),,III.,A=3,B=0,X=1,,(,執(zhí)行路徑1—4—5—3),,IV.,A=2,B=0,X=4,,(,執(zhí)行路徑1—4—5—6—7),1),A=3,B=0,X=1,,,2),A=2,B=0,X=4,,3),A=2,B=1,X=1,,4),A=1,B=0,X=2,,5),A=1,B=1,X=1,更強的測試數(shù)據(jù),:滿足路徑覆蓋和條件組合覆蓋,,2,)-,5,)滿足條件組合覆蓋,執(zhí)行路徑分別是:,sacbed,、,sabed,、,sabed,、,sabd,入口,返回,A>1 and B=0,A=2 or X>1,X=X/A,X=X+1,s,a,b,d,c,e,T,T,F,F,1,2,3,4,5,6,7,圖7.5 被測試模塊的流程圖,,路徑:,sacbd,7.6.2 控制結構測試,,現(xiàn)有的很多白盒測試技術,是根據(jù)程序的控制結構設計測試的技術,常用的控制結構測試技術有:,,基本路經測試,,條件測試,,循環(huán)測試,,83,1,、基本路經測試,,基本路徑測試,首先計算程序的環(huán)形復雜度,并用該復雜度為指南定義執(zhí)行路徑的基本集合,從該基本集合導出的測試用例可以保證程序中的每條語句至少執(zhí)行一次,而且每個條件在執(zhí)行時都將分別取真、假兩種值。,84,步驟,第一步,根據(jù)過程設計結果畫出相應的流圖。,,第二步,計算流圖的環(huán)形復雜度。,,第三步,確立線性獨立路徑的基本集合,,所謂獨立路徑是指至少引入程序的一個新處理語句集合或一個新條件的路徑,也就是說,獨立路徑至少包含一條在定義該路徑之前不曾用過的邊。,,使用基本路徑測試法設計測試用例時,程序的環(huán)形復雜度決定了程序中獨立路徑的數(shù)量,而且這個數(shù)是確保程序中所有語句至少被執(zhí)行一次所需的測試數(shù)量的上界。,,第四步,設計可強制執(zhí)行基本集合中每條路徑的測試用例。,,85,分析例子,流圖,,環(huán)形復雜度,6,,基本集合,86,2.,條件測試,基本路徑測試簡單高效,但是只有這樣的技術還不夠,為了進一步提高白盒測試的質量,還需要使用其他控制結構技術。,,條件測試技術設計出的測試用例,能夠檢查程序模塊中包含的邏輯條件。,,條件測試基礎,,簡單條件格式:一個布爾變量或一個關系表達式,在布爾變量或關系表達式之前還可能有一個,NOT,算符。關系表達式的形式如下:,,,E1<,關系算符,>E2,關系算符,:>,<,≥≤≠=,,復合條件:復合條件由兩個或多個簡單條件、布爾算符和括弧組成。布爾算符有,OR,,,AND,和,NOT,。不包含關系表達式的條件稱為布爾表達式。,,條件成分類型:包括布爾算符、布爾變量、布爾括弧、關系算符及算術表達式。,87,條件錯誤類型,布爾算符錯,(,布爾算符不正確,遺漏布爾算符或有多余的布爾算符,),,布爾變量錯,,布爾括弧錯,,關系算符錯,,算術表達式錯,,88,3,.循環(huán)測試,,循環(huán)測試是一種白盒測試技術,它專注于測試循環(huán)結構的有效性。在結構化的程序中通常只有,3,種循環(huán),即:,,簡單循環(huán),,嵌套循環(huán),,串接循環(huán),89,(1),簡單循環(huán)測試法,跳過循環(huán)。,,只通過循環(huán)一次。,,通過循環(huán)兩次。,,通過循環(huán),m,次,其中,m <n,一,1,。,,通過循環(huán),n,一,1,,,n,,,n +1,次,,90,(2),嵌套循環(huán)測試法,,從最內層循環(huán)開始測試,把所有其他循環(huán)都設置為最小值。,,對最內層循環(huán)使用簡單循環(huán)測試方法,而使外層循環(huán)的迭代參數(shù),(,例如,循環(huán)計數(shù)器,),取最小值,并為越界值或非法值增加一些額外的測試。,,由內向外,對下一個循環(huán)進行測試,但保持所有其他外層循環(huán)為最小值,其他嵌套循環(huán)為“典型”值。,,繼續(xù)進行下去,直到測試完所有循環(huán)。,91,(3),串接循環(huán)測試法,各個循環(huán)彼此獨立:可以使用前述的簡單循環(huán)測試法。,,各個循環(huán)彼此不獨立: 采用嵌套循環(huán)測試法。,等價類劃分是一種黑盒測試技術。,,窮盡的黑盒測試需要使用所有可能的輸入數(shù)據(jù)(有效的和無效的)進行測試,通常是不現(xiàn)實的。因此產生了等價類劃分。,,7.7.1 等價劃分(等價類劃分),7.7 黑盒測試技術,等價類劃分的思想,:,,如果將所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分為若干個等價類,就可以假定用每一個等價類中的代表值作為測試用例來進行測試時,等價于用該類中所有值進行了測試。,用等價類劃分設計測試用例時,主要分兩步:劃分等價類、確定測試用例。,,1),等價類劃分,,劃分等價類需要經驗,以下給出一些規(guī)則:,,A.,如果某輸入條件規(guī)定了輸入的范圍,那么可以劃分為一個有效的等價類和兩個無效的等價類。如,X,的值的輸入范圍是[1,99],那么測試,X,時,可以這樣劃分:有效等價類為[1,99],無效等價類為(-∞,1)和(99,+∞)。,,B.,如果某個輸入條件規(guī)定了一組可能的值,且程序可以對不同的值作出不同的處理,那么可以為每種值確定一個有效的等價類,同時還有一個無效等價類。,如,“職稱”這個量可能的值是:教授、副教授、講師、助教。那么可以這樣劃分:四類有效等價類分別為教授、副教授、講師、助教,無效等價類為四種職稱以外的所有值。,2),確定測試用例,,A.,給每個等價類規(guī)定一個唯一的編號;,,B.,設計一個新的測試用例,使其盡可能多地覆蓋未被覆蓋過的有效等價類。重復此步,直至所有有效等價類被覆蓋;,C.,設計一個新的測試用例,使其覆蓋而且只覆蓋一個尚未被覆蓋的無效等價類。重復此步,直到所有無效等價類被覆蓋。,,通常程序發(fā)現(xiàn)一類錯誤后,就報出錯信息,不再檢查其它類錯誤,所以設計測試用例時,一次只覆蓋一個無效等價類。,實例:一個把數(shù)字串變成整數(shù)的函數(shù)。,,計算機字長:16,bits ,,函數(shù)由,PASCAL,語言編寫。,,,function strtoint ( dstr: shortstr ): integer,,type shortstr = array[1..6] of char; /,字符串,6,位,/,,,,(,16,位字長能表示的整型數(shù)范圍是,[-2,15,, 2,15,-1],,即,[,-32768,,,3276,7,,],,),有效輸入的等價類有:,,(1)1-6個數(shù)字字符組成的數(shù)字串(最高位數(shù)字不為零);,,如:[ 0 , 999999 ],,(2)最高位數(shù)字是零的數(shù)字串;,,如:“012345”,,(3)最高位數(shù)字左鄰是負號的數(shù)字串;,,如:“-12345”,無效輸入的等價類有:,,(4)空字符串(全是空格);如“ ”;,,(5)左部填充的字符既不是零,又不是空格;,,如:“,A12345”,,(6),最高位數(shù)字右面由數(shù)字和空格混合而成;,,如:“123 45”,,(7)最高位數(shù)字右面由數(shù)字和其他字符混合而成;,,如:“12,A345”,,(8),負號與最高位數(shù)字之間有空格;,,如:“- 1234”,合法輸出的等價類有:,,(9)在計算機能表示的最小負整數(shù)和零之間的負整數(shù);,,如:[ -32768 , 0 ),,(10)零;,,(11)在零和計算機能表示的最大正整數(shù)之間的正整數(shù);,,如: (0 , 32767 ],非法輸出的等價類有:,,(12)比計算機能表示的最小負整數(shù)還小的負整數(shù);,,如:“-32769”,,(13)比計算機能表示的最大正整數(shù)還大的正整數(shù);,,如:“123456”,根據(jù)劃分的等價類,設計出測試方案11個:,,(1)1-6個數(shù)字組成的字符串;,,輸入:‘ 1’,,預期的輸出:1,,(2),最高位數(shù)字是零的數(shù)字串;,,輸入:‘000001’,,預期的輸出:1,,(3)負號與最高位數(shù)字相鄰;,,輸入:‘-00001’,,預期的輸出:-1,(4)最高位數(shù)字是零的特例;,,輸入:‘000000’,,預期的輸出:0,,(5)太小的負整數(shù);,,輸入:‘-47561’,,預期的輸出:錯誤-無效輸入,,(6)太大的正整數(shù);,,輸入:‘132767’,,預期的輸出:錯誤-無效輸入,(7)空字符串;,,輸入:‘ ’,,預期的輸出:錯誤-沒有數(shù)字,,(8)字符串左部字符既不是零又不是空格;,,輸入:‘,AAAAA1’,,預期的輸出:錯誤-非數(shù)字,,(9)最高位數(shù)字后面有空格;,,輸入:‘1 2’,,預期的輸出:錯誤-無效輸入,(10)最高位數(shù)字后面有其他字符;,,輸入:‘1,AAA23’,,預期的輸出:錯誤-無效輸入,,(11),負號和最高位數(shù)字之間有空格;,,輸入:‘- 12’,,預期的輸出:錯誤-負號位置錯。,程序通常在處理邊緣情況時容易出現(xiàn)錯誤,如等價類與等價類之間的邊界值。,,所以在設計測試用例時,使用正好等于、正好大于、正好小于邊界值的數(shù)據(jù)進行測試,發(fā)現(xiàn)程序錯誤的概率較大。,7.7.2 邊界值分析,邊界值分析測試法屬黑盒測試。,,在實際設計測試方案時,常常結合使用等價劃分和邊界值分析兩種技術,把一些等價類的邊界值作為測試用例進行測試。,,,上例中設計了11個測試用例,還應該用邊界值分析補充測試用例:,,(12)使輸出剛好等于最小負整數(shù);,,輸入:‘-32768’,,預期的輸出:-32768,,(13)使輸出剛好等于最大的正整數(shù);,,輸入:‘ 32767’,,預期的輸出:32767,(14)使輸出剛剛小于最小的負整數(shù);,,輸入:‘-32769’,,預期的輸出:錯誤-無效輸入,,(15)使輸出剛剛大于最大正整數(shù);,,輸入:‘ 32768’,,預期的輸出:錯誤-無效輸入,錯誤推測法在很大程度上靠直覺和經驗進行。,,基本思想:列舉出程序中可能的錯誤和容易發(fā)生錯誤的特殊情況,且根據(jù)它們選擇測試方案。,,如:輸入、輸出為,0,時容易出錯;輸出記錄為,0,條時容易出錯;等等。,7.7.3 錯誤推測,對軟件系統(tǒng)進行實際測試時,應該聯(lián)合使用各種設計測試方案的方法,形成一種綜合策略。具體可以使用如下策略:,,1)在任何情況下都應該進行邊界值分析;,,2)必要時用等價劃分法補充測試方案;,7.7.4 實用測試策略,3)必要時再用錯誤推測法補充測試方案;,,4)對照程序邏輯,檢查已經設計出的測試方案??梢愿鶕?jù)對程序可靠性的要求采用不同的邏輯覆蓋標準。,實例,:程序,TRIANGLE,讀入三個整數(shù)值,這三個整數(shù)代表同一個三角形三條邊的長度,程序根據(jù)這三個值判斷三角形屬于不等邊、等腰或是等邊三角形。,開始,停止,A<B+C,B<A+C,C<A+B,A=B,A=C,B=C,B=C,輸出:等邊三角形,輸出:不等邊三角形,輸出:等腰三角形,輸出:不是三角形,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,T,F,T,F,T,F,T,T,F,F,F,T,T,F,圖,7.8,程序,TRIANGLE,的流程圖,綜合使用邊界值分析、等價值劃分和錯誤推測等技術,可以設計出11種應該測試的情況:,,(1)正常的不等邊三角形,;,,(2)正常的等邊三角形,;,,(3)正常的等腰三角形,包括兩條相等邊的三種不同排列方法,;,,(4)退化的三角形(即兩邊的和等于第三邊),包括三種不同排列方法;,(5)三條邊不能構成三角形(即兩邊之和小于第三邊),包括三種不同排列方法;,,(6)一條邊的長度為零,包括三種不同的排列方法;,,(7)兩條邊的長度為零,包括三種不同的排列方法;,,(8)三條邊的長度全為零;,,(9)輸入數(shù)據(jù)中包含負整數(shù);,,(10)輸入數(shù)據(jù)不全(不足三個正整數(shù));,,(11)輸入數(shù)據(jù)中包含非整數(shù)型的數(shù)據(jù)。,,,,,,,,,,,,,,,,,a,b,c,d,e,f,g,h,k,l,m,n,o,p,i,j,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,圖,7.9,對應的程序圖,程序,TRIANGLE,的測試數(shù)據(jù),測試功能,測試數(shù)據(jù),,,,a,b,c,1.等邊,,2.等腰,,3.不等邊,,4.非三角形,,5.退化情況,,6.零數(shù)據(jù),10,10,10,,10,10,17,,8,10,12,,10,10,21,,10,5,5,,0,0,0,,0,0,7,,0,10,12,-,-,-,,10,17,10,,8,12,10,,10,21,10,,5,10,5,,-,-,-,,0,17,0,,12,0,10,-,-,-,,17,10,10,,10,12,8,,21,10,10,,5,5,10,,-,-,-,,17,0,0,,12,10,0,測試功能,測試數(shù)據(jù),,,,a,b,c,7.負數(shù)據(jù),,,8.遺留數(shù)據(jù),,,9.無效輸入,,,,10.邊界值,-10,-10,-10,,-10,-10,17,,-8,10,17,,-,-,-,,10,- ,-,,8,10, -,,A,B,C,,=,+,*,,8,10,,A,,7,E3 , 10.5 , A,,32767,32766,8,,-32768,8,32766,,-32768,8,-32769,-,-,-,,-10,17,-10,,17,-8,10,,-,-,-,,-,10,-,,8,-,10,,-,-,-,,-,-,-,,8,,A,10,,10.5, 7,E3, A,,32766,8,32767,,32768,8,-32769,,8,-32767,-32768,-,-,-,,17,-10,-10,,10,12,8,,-,-,-,,-,-,10,,-,8,10,,-,-,-,,-,-,-,,A,10,8,,A , 10.5, 7E3,,32768,8,32767,,-32769,8,32767,,-32767,8,-32769,最后,檢查測試數(shù)據(jù)的覆蓋程度,通常應該做到邊覆蓋。,測試數(shù)據(jù)覆蓋程度檢驗表中列出的四種測試數(shù)據(jù)已經做到了邊覆蓋(覆蓋所有的22條邊)。,測試數(shù)據(jù)覆蓋程度檢驗表,編號,測試數(shù)據(jù),覆蓋的邊,1,,2,a,,2b,,2c,,3a,,3b,,3c,,4a,,4b,,4c,10,10,10,,10,10,17,,10,17,10,,17,10,10,,8,10,12,,8,12,10,,10,12,8,,10,10,21,,10,21,10,,21,10,10,1,2,3,4,5,6,7,8,,1,2,3,4,5,15,19,20,8,,1,2,3,4,14,18,19,20,8,,1,2,3,4,14,16,17,19,20,8,,1,2,3,4,14,16,21,22,8,,1,2,3,4,14,16,21,22,8,,1,2,3,4,14,16,21,22,8,,1,2,3,11,12,13,8,,1,2,10,12,13,8,,1,9,12,13,8,7.8 調試,7.8.1 調試過程,調試是在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程。,測試用例,結果,調試,附加測試,糾正且回歸測試,已識別原因,被懷疑原因,1.,蠻干法,:打印內存的內容,從中尋找錯誤的線索,是效率最低的程序調試方法。,,2.,回溯法,:從發(fā)現(xiàn)問題的程序段開始人工地往回追蹤分析程序代碼,直到找到錯誤。,,3.,原因排除法,,包括:對分查找法、歸納法、演繹法,7.8.2 調試途徑,7.9 軟件可靠性,1. 軟件可靠性定義,,,軟件可靠性,:是程序在給定的時間間隔內,按照規(guī)格說明書的規(guī)定成功地運行的概率。,7.9.1 基本概念,2. 軟件的可用性,,對故障可修復系統(tǒng),應同時使用可靠性和可用性來衡量。,,,軟件可用性,是:程序在給定的時間點,按照規(guī)格說明書的規(guī)定,成功地運行的概率。,,,可靠性和可用性的區(qū)別,是:可靠性是在0到,t,時間間隔內,系統(tǒng)沒有失效的概率。而可用性是在,t,時刻,系統(tǒng)是正常運行的概率。,如果在,t,時刻,系統(tǒng)是可用的,則有兩種可能:,,1)在0到,t,時刻這段時間內,系統(tǒng)一直沒有失效(可靠);,,2)在0到,t,時刻這段時間內失效過,但是系統(tǒng)修復后運行到,t,時刻時情況良好。,如果在一段時間內,軟件系統(tǒng)故障停機時間分別為:,t,d,1,, t,d,2,, … ,,正常運行時間分別為:,t,u,1,, t,u,2,, … ,,則系統(tǒng)的穩(wěn)態(tài)可用性定義為:,其中,T,up,=Σ t,ui,, T,down,=Σ t,di,,如果引入系統(tǒng)平均無故障時間,MTTF,和平均維修時間,MTTR,的概念,則上面公式的系統(tǒng)穩(wěn)態(tài)可用性變成:,,平均維修時間,MTTR,是修復一個故障平均需要用的時間,取決于維護人員的技術水平和對系統(tǒng)熟悉程度。,,,平均無故障時間,MTTF,是系統(tǒng)按照規(guī)格說明書規(guī)定成功地運行的平均時間,取決于系統(tǒng)中潛伏的錯誤數(shù)量。,1. 符號,,估算,MTTF,時使用到下列符號,,E,T,——,測試之前程序中故障總數(shù);,,I,T,——,程序長度(機器指令總數(shù));,,τ——,測試(包括調試)時間;,,E,d,(τ) ——,在0至,τ,期間發(fā)現(xiàn)的錯誤數(shù);,,E,c,(τ) ——,在0至,τ,期間改正的錯誤數(shù);,7.9.2 估算平均無故障時間,MTTF,的方法,2. 基本假定,,可作出下列假定:,,1),單位長度里的故障數(shù),E,T,/ I,T,近似為常數(shù),。一些統(tǒng)計數(shù)字表明,通常有:0.5×10,-2,≤,E,T,/ I,T,≤2×10,-2,。,,2),失效率正比于軟件中剩余的(潛藏的)故障數(shù),,,而平均無故障時間,MTTF,與剩余的故障數(shù)成反比,。,,3),調試過程沒有引入新的故障,,即,E,c,(τ)= E,d,(τ)。,由于系統(tǒng)剩余的故障數(shù)為:,,,E,r,(τ) = E,T,- E,c,(τ),,所以單位長度程序中剩余的故障數(shù)為:,,,ε,r,(τ) = E,T,/ I,T,- E,c,(τ)/ I,T,,3. 估算平均無故障時間,MTTF,,因為平均無故障時間與單位長度程序中剩余的故障數(shù),ε,r,(τ),成反比,所以:,其中:,K,為常數(shù),它的值根據(jù)經驗選取,經典值是,200,。,由上式變換后得到程序中改正的錯誤數(shù):,根據(jù)對軟件平均無故障時間的要求,可以估計需要改正多少個錯誤后,測試工作就可以結束。,4. 估計故障總數(shù),E,T,的方法,,1),植入故障法,,,假設人為地植入的故障數(shù)為,N,s,,,經過一段時間的測試之后發(fā)現(xiàn),n,s,個植入的故障,同時還發(fā)現(xiàn)了,n,個原有的故障,則可以估計出程序中原有的故障總數(shù):,其中: 是故障總數(shù),E,T,的估計值;,,植入錯誤法人為植入的錯誤與原有程序錯誤可能性質很不相同,發(fā)現(xiàn)它們的難度也不同,用此法估計的錯誤數(shù)有時可能不太準確。,,,2),分別測試法,,分別測試法隨機把程序中一部分原有錯誤加上標記,根據(jù)測試發(fā)現(xiàn)的有標記和無標記錯誤的比例,估計程序錯誤總數(shù)。,分別測試法使用兩個測試員,獨立地測試同一個程序的兩個副本,由另一名分析員分析他們的測試結果,把其中一個測試員發(fā)現(xiàn)的故障作為有標記的故障。用,τ,表示測試時間,假設,,τ= 0,時故障總數(shù)為,B,0,(即,E,T,);,,τ=τ,1,時測試員甲發(fā)現(xiàn)的故障數(shù)為,B,1,;,,τ=τ,1,時測試員乙發(fā)現(xiàn)的故障數(shù)為,B,2,;,,τ=τ,1,時兩個測試員發(fā)現(xiàn)的相同故障數(shù)為,b,c,。,如果認為測試員甲發(fā)現(xiàn)的故障是有標記的,即程序中有標記的故障總數(shù)為,B,1,,,那么測試員乙發(fā)現(xiàn)的,B,2,個故障中有,b,c,個是有標記的。所以可以估計出測試前程序中的故障總數(shù)為:,其中, 是故障總數(shù),E,T,的估計值。,,每隔一定時間,分析員分析兩名測試員的測試結果,來估計錯誤總數(shù)。幾次估計結果差不多時,用其平均值作為錯誤總數(shù)的估計值。,一種預測軟件可靠性和衡量軟件質量的方法。,,用測試完成率作為度量軟件質量的標準。,7.10 日立預測法,,7.10.1 測試完成率模型,50%,100%,測試時間使用率,,,,第一階段,第二階段,第三階段,100%,測試用例完成率,測試用例完成率隨測試時間變化的情況,日立的經驗表明,完成軟件測試通常需要經歷三個階段,第一階段故障多,測試完成慢,第二階段測試完成率提高快,第三階段錯誤難改正,完成率提高不快。,,測試時間使用率=測試所用時間,/,測試允許使用時間。,50%,100%,測試時間使用率,,,,第一階段,第二階段,第三階段,100%,測試用例完成率,測試用例完成率隨測試時間變化的情況,日立的經驗表明:,,1)第一個階段平均占總時間的22%;,,2)如果第一個階段占用的時間超過總時間的55%以上時,該項工程必然失??;,3)成功的工程第一個階段占用的時間平均為總時間的15%,失敗的工程第一個階段占用的時間高達總時間的97%左右;,,4)成功的工程第二階段占總時間的57%左右,失敗的工程第二個階段只占總時間的29%左右。,50%,100%,測試時間使用率,,,,第一階段,第二階段,第三階段,100%,測試用例完成率,測試用例完成率隨測試時間變化的情況,錯誤發(fā)現(xiàn)率:單位時間內發(fā)現(xiàn)的錯誤數(shù)。,,峰值時間,成功的工程,失敗的工程,極壞的工程,時間,錯誤發(fā)現(xiàn)率,錯誤發(fā)現(xiàn)率曲線,7.10.2 錯誤發(fā)現(xiàn)率模型,經驗表明,失敗工程的錯誤發(fā)現(xiàn)率曲線的斜率范圍是,-0.3,~,0,,成功的工程為,-1,~,-0.3,7.10.3 使用日立預測法的步驟,1)制訂測試計劃,設計測試方案,確定要完成的測試用例的總數(shù);,,2)從集成測試開始,記錄測試用例完成數(shù)和錯誤發(fā)現(xiàn)數(shù),繪制用例完成率曲線和錯誤發(fā)現(xiàn)率曲線;,,3)繪制曲線時,實際的數(shù)據(jù)是一串離散的點,如果工程不大周期不長的話,連接這些點得不到平滑的曲線時,作平滑處理;,4)每周至少檢查一次繪制的曲線,以判斷處于哪個階段,如果第二階段的到來比計劃時間推遲25%,就需要及時采取措施補救;,,5)嚴密注視錯誤發(fā)現(xiàn)率變化情況以確定其峰值,在錯誤發(fā)現(xiàn)率下降時,計算其斜率,如果大于-0.3就產生了嚴重的問題;,,6)每周至少檢驗一次,以修正上一周作出的階段性預測。,第7章小結,◇,測試計劃,,,為做好集成測試和驗收測試,需為如何組織測試制訂實施計劃。計劃應包括測試的內容、進度、條件、人員、測試用例的選取原則、測試結果允許的偏差范圍等。,,◇,測試分析報告,,,測試工作完成以后,應提交測試計劃執(zhí)行情況的說明,對測試結果加以分析,并提出測試的結論意見。,測試階段可能用到的軟件工具:,,,Bugfree,Bug,處理記錄工具。,,,Wiki,,知識共享工具。,,,LoadRunner,,負荷(載)測試軟件,預測系統(tǒng)行為和性能的負載測試工具,通過模擬多至上千萬用戶實施并發(fā)負載及實時性能監(jiān)測的方式來查找和確認問題。,練習題,填空題:,,1,、,大型軟件的測試應該分階段地進行,通常至少分為(,,)、(,,)和(,,)等,3,個基本階段。,,2,、,軟件測試的兩類基本方法是白盒測試和黑盒測試,通常在測試過程的早期階段主要使用(,,),而在后期階段主要使用(,,)。,,3,、,大型軟件系統(tǒng)的測試過程基本上由模塊測試、(,,)、系統(tǒng)測試、(,,)和平行運行等。,,4,、,一般說來,軟件調試途徑主要有以下,3,種即(,,)、(,,)和(,,)。,名詞解釋:,,1,、,軟件測試,,2,、,軟件可靠性,,3,、軟件可用性,,4,、,白盒測試,,5,、黑盒測試,,6,、,集成測試,,7,、,確認測試,,8,、測試驅動程序,,9,、測試存根程序,,,判斷題:,,1,、,軟件測試一般包括黑盒測試和白盒測試兩種方法,測試是為了竭力證明已經建造好的軟件系統(tǒng)的正確性和適用性。(,,),,2,、,在軟件系統(tǒng)開發(fā)中,選擇程序設計語言的主要實用標準是依據(jù)程序員的知識。(,,),,3,、,代碼審查方法沒有計算機測試方法好。,,(,,),,4,、,編碼風格由個人喜好決定,沒有固定格式。,(),,5,、,如果測試過程沒有發(fā)現(xiàn)任何錯誤,則說明軟件沒有錯誤。,(),,6,、,軟件測試是對軟件規(guī)格說明、軟件設計和編碼的最全面也是最后的審查。,(),,7,、,測試計劃、測試用例、出錯統(tǒng)計和有關的分析報告一般不用長期保存。,(),,8,、,用窮舉測試是較現(xiàn)實的測試方法。,(),,9,、,程序中的注解越少越好,。(),10,、,不同程序設計語言在程序的效率上的差異不大。(),,11,、,編碼的依據(jù)是詳細設計說明書。,(),,12,、,程序文檔應該包括代碼的功能、代碼的完成者等內容。,(),,13,、,判定覆蓋必然滿足語句覆蓋。,(),,14,、,編程中應采用統(tǒng)一的標準和約定,降低程序的復雜性。,(),,簡答題:,,1,、,軟件測試方法之黑盒測試力圖發(fā)現(xiàn)哪些類型的軟件錯誤?,,2,、,什么叫測試方案?請簡述軟件測試的基本準則,。,,3,、,簡述軟件測試的任務、目的與類型。,,4,、,什么是編碼風格,?,為什么要強調編碼風格,?,,5,、,為什么軟件測試不應該由程序的編寫人員來做,?,,6,、簡述選擇程序設計語言的實用標準?,,7,、簡述軟件測試的步驟?,