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