《軟件工程》課件-第6章 軟件編碼和測試_第1頁
《軟件工程》課件-第6章 軟件編碼和測試_第2頁
《軟件工程》課件-第6章 軟件編碼和測試_第3頁
《軟件工程》課件-第6章 軟件編碼和測試_第4頁
《軟件工程》課件-第6章 軟件編碼和測試_第5頁
已閱讀5頁,還剩220頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章

軟件編碼和測試XX大學(xué)XX系XXX軟件工程教程電子科技大學(xué)出版社學(xué)習(xí)目標(biāo)l

了解編程語言的發(fā)展與分類;l

了解選擇編程語言時所需考慮的因素;l

熟悉編程風(fēng)格;l

理解軟件測試的定義、目標(biāo)和原則;l

掌握軟件測試的各種分類;l

掌握軟件測試過程的四個階段;學(xué)習(xí)目標(biāo)l

理解測試用例的定義和原則;l

掌握等價類劃分、邊界值分析、因果圖等黑盒軟件測試用例設(shè)計(jì)方法;l

掌握邏輯覆蓋、基本路徑測試、程序插樁等白盒軟件測試用例設(shè)計(jì)方法;l

掌握黑盒和白盒測試方法應(yīng)用策略;l

熟悉軟件調(diào)試過程和策略。目錄01020304程序設(shè)計(jì)語言程序設(shè)計(jì)風(fēng)格軟件測試軟件測試分類0506軟件測試過程軟件測試用例定義目錄07080910黑盒測試用例設(shè)計(jì)白盒測試用例設(shè)計(jì)軟件測試方法應(yīng)用策略軟件調(diào)試11本章小結(jié)程序設(shè)計(jì)語言01程序設(shè)計(jì)語言◆

編碼的過程就是把軟件設(shè)計(jì)階段得到的解決方案轉(zhuǎn)化為可以在計(jì)算機(jī)上運(yùn)行的軟件產(chǎn)品的過程?!?/p>

選擇合適的編程語言是編碼過程的關(guān)鍵?!?/p>

編程語言是人與計(jì)算機(jī)交流的重要工具。對于軟件開發(fā)人員而言,編程語言是除了計(jì)算機(jī)本身之外的所有工具中最重要的?!?/p>

編程語言是定義了一組計(jì)算機(jī)的語法規(guī)則,通過這些語法規(guī)則可以把人的意圖、思想等轉(zhuǎn)化為計(jì)算機(jī)可以理解的指令,進(jìn)而讓計(jì)算機(jī)幫助人類完成某些任務(wù)。程序設(shè)計(jì)語言①

機(jī)器語言◆

最早的編程語言是機(jī)器語言,它是計(jì)算機(jī)可以識別和執(zhí)行的指令代碼?!?/p>

機(jī)器語言采用“0”和“1”為指令代碼來編寫程序,它可以直接被計(jì)算機(jī)的CPU識別,從而操縱計(jì)算機(jī)硬件的運(yùn)行。◆

因?yàn)闄C(jī)器語言直接操縱底層硬件,所以其執(zhí)行速度較快,但是程序員必須熟悉計(jì)算機(jī)的全部指令代碼和代碼的含義?!?/p>

機(jī)器語言具有“面向機(jī)器”的特點(diǎn),它不能直接在不同體系結(jié)構(gòu)的計(jì)算機(jī)間移植。程序設(shè)計(jì)語言②

匯編語言◆

像機(jī)器語言一樣,匯編語言也是一種“面向機(jī)器”的低級語言。它通常為特定的計(jì)算機(jī)或系列計(jì)算機(jī)專門設(shè)計(jì),可高效地訪問和控制計(jì)算機(jī)的各種硬件設(shè)備?!?/p>

匯編語言采用一組助記符來代替機(jī)器語言中晦澀、難懂的二進(jìn)制代碼,用地址符號或標(biāo)號來代替地址碼,使得代碼比較直觀,容易被程序員理解?!?/p>

匯編語言必須由特定的翻譯程序轉(zhuǎn)化為相應(yīng)的機(jī)器語言才能由計(jì)算機(jī)執(zhí)行,把匯編語言轉(zhuǎn)換為機(jī)器語言的過程稱為匯編,相應(yīng)的翻譯程序就是匯編程序。程序設(shè)計(jì)語言③

高級語言◆

高級語言采用類似英文的語句來表示語義,更加方便了軟件開發(fā)人員的理解和使用。◆

高級語言不再依賴于特定的計(jì)算機(jī)硬件,所以移植性較強(qiáng),同種高級語言可以用在多種型號的計(jì)算機(jī)上。◆

一些高級語言是面向過程的,比如FORTRAN、COBOL、ALCOL和BASIC。還有一些高級語言是面向?qū)ο蟮?,以C++語言為典型代表,這類語言與面向過程的高級語言有著本質(zhì)的區(qū)別。程序設(shè)計(jì)語言④

超高級語言第四代語言是超高級語言,它是對數(shù)據(jù)處理和過程描述的更高級的抽象,一般由特定的知識庫和方法庫支持,比如,與數(shù)據(jù)庫應(yīng)用相關(guān)的查詢語言、描述數(shù)據(jù)結(jié)構(gòu)和處理過程的圖形語言等,它們的目的在于直接實(shí)現(xiàn)各種應(yīng)用系統(tǒng)。程序設(shè)計(jì)語言在選擇編程語言時,通常需考慮以下七個因素。①待開發(fā)系統(tǒng)的應(yīng)用領(lǐng)域,即項(xiàng)目的應(yīng)用范圍。②用戶的要求。③將使用何種工具進(jìn)行軟件開發(fā)。④軟件開發(fā)人員的喜好和能力。⑤軟件的可移植性要求。⑥算法和數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性。⑦平臺支持。程序設(shè)計(jì)語言◆

軟件需求分析階段和系統(tǒng)設(shè)計(jì)階段所產(chǎn)生的文檔,都不能直接在計(jì)算機(jī)上執(zhí)行。只有完成了程序設(shè)計(jì)、產(chǎn)生可執(zhí)行代碼后,才能使系統(tǒng)的需求真正實(shí)現(xiàn)?!?/p>

軟件系統(tǒng)的分析和設(shè)計(jì)是程序設(shè)計(jì)(編碼)的前導(dǎo),實(shí)踐表明,編碼中出現(xiàn)的問題主要是由設(shè)計(jì)中存在的問題引起的。因而我們主張?jiān)诰幋a之前進(jìn)行分析、設(shè)計(jì),盡可能在編碼之前保證設(shè)計(jì)的正確性、高質(zhì)量。程序設(shè)計(jì)語言結(jié)構(gòu)化程序設(shè)計(jì)(Structured

Programming,SP)有三個基本特點(diǎn)。(1)結(jié)構(gòu)化程序設(shè)計(jì)采用自頂向下、逐步求精的程序設(shè)計(jì)方法。(2)結(jié)構(gòu)化程序設(shè)計(jì)的定義是:只使用順序、選擇和循環(huán)三種基本控制結(jié)構(gòu)來構(gòu)造程序。這三種基本結(jié)構(gòu)的共同特點(diǎn)是每個代碼塊只有一個入口和一個出口。結(jié)構(gòu)化程序設(shè)計(jì)主張以容易理解的形式和避免使用GOTO語句等原則進(jìn)行程序設(shè)計(jì)。(3)采用主程序員組的組織形式。用經(jīng)驗(yàn)多、能力強(qiáng)、技術(shù)好的程序員作為主程序員。程序設(shè)計(jì)風(fēng)格02程序設(shè)計(jì)風(fēng)格◆

程序不只是給機(jī)器執(zhí)行的,也是供人閱讀的。在軟件生存期中,人們經(jīng)常要閱讀程序。特別是在軟件”測試階段和維護(hù)階段,編寫程序的人和參與測試、維護(hù)的人都要閱讀程序?!?/p>

閱讀程序是軟件開發(fā)和維護(hù)過程中的一個重要組成部分,而且讀程序的時間比寫程序的時間還要多。程序設(shè)計(jì)風(fēng)格(1)源程序文檔化源程序文檔化包括標(biāo)識符的命名、安排注釋以及程序的視覺組織等。”1)標(biāo)識符的命名標(biāo)識符包括模塊名、變量名、常量名、標(biāo)號名、子程序名以及數(shù)據(jù)區(qū)名、緩沖區(qū)名等,這些名字應(yīng)能反映它所代表的實(shí)際東西,使其能夠見名知意,有助于對程序功能的理解。程序設(shè)計(jì)風(fēng)格2)程序的注釋正確的注釋能夠幫助讀者理解程序,為測試和維護(hù)提供明確的指導(dǎo),注釋絕不是可有可無的。注釋分為序言性注釋和功能性注釋?!毙蜓孕宰⑨屚ǔV糜诿總€程序模塊的開頭部分,它應(yīng)當(dāng)給出程序的整體說明,對于理解程序本身具有引導(dǎo)作用。功能性注釋嵌入在源程序體中,用以描述其后的語句或程序段,也就是解釋下面要“做什么”或是執(zhí)行了下面的語句會怎么樣。程序設(shè)計(jì)風(fēng)格序言性注釋做了明確而嚴(yán)格的規(guī)定,要程序編制者列出:①程序(模塊)標(biāo)題;②有關(guān)本模塊功能和目的的說明;③主要算法;”④

接口說明,包括調(diào)用形式、參數(shù)描述、子程序清單;程序設(shè)計(jì)風(fēng)格⑤

有關(guān)數(shù)據(jù)描述,包括重要的變量及其用途、約束或限制條件,以及其他有關(guān)信息;⑥

模塊位置,說明在哪一個源文件中,或隸”屬于哪一個軟件包;⑦

開發(fā)簡歷,包括模塊設(shè)計(jì)者、復(fù)審者、復(fù)審日期、修改日期及有關(guān)說明等。程序設(shè)計(jì)風(fēng)格書寫功能性注釋,要注意以下三點(diǎn)。①用于描述一段程序,而不是每一個語句;”②用縮進(jìn)和空行,使程序與注釋容易區(qū)別;③注釋要正確。程序設(shè)計(jì)風(fēng)格3)視覺組織——空格、空行和移行①

空格:恰當(dāng)?shù)乩每崭?,可以突出運(yùn)算的優(yōu)先性,避免發(fā)生運(yùn)算錯誤;”②空行:自然的程序段之間可用空行隔開;③

移行:移行也叫做向右縮格。它是指程序中的各行不必都左端對齊,都從第一格起排列。程序設(shè)計(jì)風(fēng)格序言性注釋做了明確而嚴(yán)格的規(guī)定,要程序編制者列出:①程序(模塊)標(biāo)題;②有關(guān)本模塊功能和目的的說明;③主要算法;”④

接口說明,包括調(diào)用形式、參數(shù)描述、子程序清單;程序設(shè)計(jì)風(fēng)格⑤

有關(guān)數(shù)據(jù)描述,包括重要的變量及其用途、約束或限制條件,以及其他有關(guān)信息;⑥

模塊位置,說明在哪一個源文件中,或隸”屬于哪一個軟件包;⑦

開發(fā)簡歷,包括模塊設(shè)計(jì)者、復(fù)審者、復(fù)審日期、修改日期及有關(guān)說明等。程序設(shè)計(jì)風(fēng)格(2)數(shù)據(jù)說明標(biāo)準(zhǔn)化為了使程序中數(shù)據(jù)說明更易于理解和維護(hù),在編寫程序時,需要注意數(shù)據(jù)說明的風(fēng)格。具”體需要注意以下幾點(diǎn):①

數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化,使數(shù)據(jù)屬性容易查找,也有利于測試、排錯和維護(hù)。程序設(shè)計(jì)風(fēng)格②

在類型說明中還可進(jìn)一步要求,例如,可按如下順序排列,整型量說明、實(shí)型量說明、字符量說明和邏輯量說明。”③

當(dāng)多個變量名用一個語句說明時,應(yīng)當(dāng)對這些變量按字母順序排列。④

對于復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)當(dāng)使用注釋對其進(jìn)行說明。程序設(shè)計(jì)風(fēng)格(3)語句結(jié)構(gòu)簡單化①

在一行內(nèi)只寫一條語句,并且采取適當(dāng)?shù)囊菩懈袷剑钩绦虻倪壿嫼凸δ茏兊谩备用鞔_②

程序編寫首先應(yīng)當(dāng)考慮清晰性,不要刻意追求技巧性,使程序編寫得過于緊湊;程序設(shè)計(jì)風(fēng)格③

程序編寫要簡單、清楚,直截了當(dāng)?shù)卣f明程序員的用意;④

除非對效率有特殊的要求,否則程序編寫”的原則是清晰第一,效率第二,不要為了追求效率而喪失了清晰性;⑤避免使用臨時變量而使可讀性下降;程序設(shè)計(jì)風(fēng)格⑥讓編譯程序做簡單的優(yōu)化;⑦盡可能使用庫函數(shù);”⑧

避免不必要的轉(zhuǎn)移,如果能保持程序的可讀性,則不必用GOTO語句;程序設(shè)計(jì)風(fēng)格⑨

盡量只采用3種基本的控制結(jié)構(gòu)來編寫程序,除順序結(jié)構(gòu)外,使用if

else來實(shí)現(xiàn)選擇結(jié)構(gòu);使用do-until或do-while來實(shí)現(xiàn)循環(huán)結(jié)構(gòu);”⑩避免使用空的else語句和ifthenif語句;?

避免采用過于復(fù)雜的條件測試。?

盡量減少使用“否定”條件的條件語句。程序設(shè)計(jì)風(fēng)格(4)輸入/輸出規(guī)范化輸入/輸出信息是與用戶的使用直接相關(guān)的。”輸入/輸出的方式和格式應(yīng)當(dāng)盡可能方便用戶使用,避免因設(shè)計(jì)不當(dāng)給用戶帶來麻煩。程序設(shè)計(jì)風(fēng)格在設(shè)計(jì)和程序編碼時都應(yīng)考慮下列原則。①

對所有的輸入數(shù)據(jù)都進(jìn)行檢驗(yàn),從而識別錯誤輸入,以保證每個數(shù)據(jù)的有效性;”②

檢查輸入項(xiàng)的各種重要組合的合理性,必要時報(bào)告輸入狀態(tài)信息;③

使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式;程序設(shè)計(jì)風(fēng)格④輸入數(shù)據(jù)時,應(yīng)允許使用自由格式輸入;⑤應(yīng)允許缺省值;”⑥

輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標(biāo)志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目;程序設(shè)計(jì)風(fēng)格⑦

在以交互式輸入/輸出方式進(jìn)行輸入時,要在屏幕上使用提示符明確提示交互輸入的請求,指明可使用選擇項(xiàng)的種類和取值范圍,同時,在數(shù)據(jù)輸入的過程中和輸入結(jié)束時,也要在屏幕上給出信息;”狀態(tài)⑧

當(dāng)程序設(shè)計(jì)語言對輸入/輸出格式有嚴(yán)格要求時,應(yīng)保持輸入格式與輸入語句的要求一致;⑨給所有的輸出加注解,并設(shè)計(jì)輸出報(bào)表格式。軟件測試03軟件測試◆

軟件測試(Software

Testing)是軟件工程過程的一個重要階段,在軟件投入運(yùn)行前,對軟件需求分析、設(shè)計(jì)和編碼各階段產(chǎn)品的最終檢查,是為了保證軟件開發(fā)產(chǎn)品的正確性、完全性和一致性,從而進(jìn)行檢測錯誤和修正錯誤的過程。◆

軟件開發(fā)的目的是開發(fā)出滿足用戶需求的高質(zhì)量、高性能的軟件產(chǎn)品,而軟件測試以檢查軟件產(chǎn)品內(nèi)容和功能特性為核心,是軟件質(zhì)量保證的關(guān)鍵步驟,也是成功實(shí)現(xiàn)軟件開發(fā)目標(biāo)的重要保障。◆

軟件測試的過程就是發(fā)現(xiàn)并改正軟件缺陷的過程。軟件測試在1990年頒布的軟件工程標(biāo)準(zhǔn)術(shù)語集中沿用了這一定義,它非常明確地提出了軟件測試是以檢驗(yàn)軟件是否滿足需求為目標(biāo),包含兩個方面的含義。(1)軟件是否滿足規(guī)定的需求;(2)軟件是否有差別。如果有差別,說明設(shè)計(jì)或?qū)崿F(xiàn)過程中存在故障,自然不滿足規(guī)定的需求。近年來,也有學(xué)者從軟件測試的不同階段定義軟件測試,如圖6.1所示。軟件測試從圖6.1可以看出,軟件測試歷經(jīng)了三個主要階段。第一階段,軟件測試是尋找產(chǎn)品中的Bug。Bug的定義很廣泛,在軟件使用過程中所出現(xiàn)的任何一個可疑問題,或者導(dǎo)致軟件不能符合設(shè)計(jì)要求或滿足消費(fèi)者需要的問題都是Bug,即使這個Bug在實(shí)踐中是可行的。第二階段,軟件測試是對軟件質(zhì)量的度量。第三階段,軟件測試是為了度量和提高被測試軟件的質(zhì)量,對軟件測試進(jìn)行設(shè)計(jì),使用和維護(hù)的過程。軟件測試◆

軟件測試貫穿于軟件生存周期的全過程。軟件交付后,軟件測試只是從軟件測試人員移到用戶,用戶每次使用程序都是一次軟件測試,軟件測試是一門技術(shù),是一個從實(shí)踐到理論再由理論到實(shí)踐循環(huán)往復(fù)的過程。◆

以下是G.J.Myers在《軟件測試技巧》一書中對測試提出的規(guī)則,可看作軟件測試的目標(biāo)。①測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程。②好的測試方案能夠發(fā)現(xiàn)尚未發(fā)現(xiàn)的錯誤。③成功的測試是發(fā)現(xiàn)了尚未發(fā)現(xiàn)的錯誤的測試。軟件測試綜合軟件測試的定義和目標(biāo),我們可以將軟件測試的主要作用總結(jié)如下:①測試是執(zhí)行一個系統(tǒng)或者程序的操作;②測試是帶著發(fā)現(xiàn)問題和錯誤的意圖來分析和執(zhí)行程序的;③測試結(jié)果可以檢驗(yàn)程序的功能和質(zhì)量;④測試可以評估軟件項(xiàng)目產(chǎn)品是否達(dá)到預(yù)期目標(biāo)和是否能被客戶接受;⑤測試不僅包括執(zhí)行代碼,還包括對需求等編碼以外東西的測試。軟件測試在軟件測試過程中,通常應(yīng)該遵循以下七個原則。①所有的測試都應(yīng)追溯到用戶需求。②應(yīng)盡早地和不斷地進(jìn)行軟件測試。③

在有限的時間和資源下進(jìn)行完全測試并找出軟件所有的錯誤和缺陷是不可能的,軟件測試不能無限進(jìn)行下去,應(yīng)適時終止。④

測試只能證明軟件存在錯誤,而不能證明軟件沒有錯誤。測試無法顯示潛在的錯誤和缺陷,繼續(xù)進(jìn)一步測試可能還會找到其它錯誤和缺陷。軟件測試⑤充分關(guān)注測試中的集群現(xiàn)象。在測試的程序段中,若發(fā)現(xiàn)的錯誤數(shù)目比較多,則殘存在該程序段中的錯誤數(shù)目也會比較多,因此應(yīng)當(dāng)花較多的時間和代價測試那些具有更多錯誤數(shù)目的程序模塊。⑥程序員應(yīng)避免檢查自己的程序。⑦盡量避免測試的隨意性。軟件測試是有組織、有計(jì)劃、有步驟的活動,要嚴(yán)格按照測試計(jì)劃進(jìn)行,要避免測試的隨意性。軟件測試分類04軟件測試分類◆

按測試方式分類:(1)靜態(tài)測試(Static

Testing)不運(yùn)行被測程序本身,僅通過分析或檢查源程序的語法、結(jié)構(gòu)、過程、接口等來檢查程序的正確性。(2)動態(tài)測試(Dynamic

Testing)通過運(yùn)行被測程序,檢查運(yùn)行結(jié)果與預(yù)期結(jié)果的差異,并分析運(yùn)行效率、正確性和健壯性等性能指標(biāo)。軟件測試分類◆

按測試方法分類:(1)白盒測試(White-box

Testing)白盒測試又稱結(jié)構(gòu)測試或邏輯驅(qū)動測試,指通過對程序內(nèi)部結(jié)構(gòu)的分析、檢測來尋找問題。白盒測試把程序看成裝在一個透明的白盒子里,也就是清楚了解程序結(jié)構(gòu)和處理過程,檢查是否所有的結(jié)構(gòu)及路徑都是正確的,檢查軟件的內(nèi)部動作是否按照設(shè)計(jì)說明的規(guī)定正常進(jìn)行。軟件測試分類(2)黑盒測試(Black-box

Testing)黑盒測試又稱功能測試或數(shù)據(jù)驅(qū)動測試,指通過軟件的外部表現(xiàn)來發(fā)現(xiàn)缺陷和錯誤。黑盒測試把測試對象看成一個黑盒子,完全不考慮程序內(nèi)部結(jié)構(gòu)和處理過程,測試者僅依據(jù)程序功能的需求規(guī)范考慮,確定測試用例和推斷測試結(jié)果的正確性,它是站在使用軟件或程序的角度,從輸入數(shù)據(jù)與輸出數(shù)據(jù)的對應(yīng)關(guān)系出發(fā)進(jìn)行的測試。軟件測試分類任何工程產(chǎn)品都可以使用以下兩種方法之一進(jìn)行測試:①

已知產(chǎn)品的內(nèi)部工作過程,可以通過測試證明每種內(nèi)部操作是否符合設(shè)計(jì)規(guī)格要求,所有內(nèi)部成分是否已經(jīng)過檢查。②

已知產(chǎn)品的功能設(shè)計(jì)規(guī)格,可以通過測試證明每個實(shí)現(xiàn)了的功能是否符合要求。前者是白盒測試,后者是黑盒測試。表6.2給出了兩種方法的一個基本比較:如表6.2所示,白盒測試和黑盒測試各有側(cè)重點(diǎn),不能相互取代,在實(shí)際測試活動中,這兩種測試方法不是截然分開的。通常在白盒測試中交叉著黑盒測試,黑盒測試中也交叉著白盒測試。軟件測試分類(3)灰盒測試(Grey-box

Testing)灰盒測試是介于白盒測試和黑盒測試之間的測試方法,它關(guān)注輸出對于輸入的正確性,同時也關(guān)注內(nèi)部表現(xiàn),但是不像白盒測試那樣詳細(xì)、完整,只是通過一些表征性的現(xiàn)象、事件和標(biāo)志來判斷內(nèi)部的運(yùn)行狀態(tài)。有時候輸出是正確的,但是程序內(nèi)部已經(jīng)是錯誤的,這種情況非常多,如果每次都通過白盒測試來操作,效率會很低,因此,可采取灰盒測試這種方法?;液袦y試結(jié)合了白盒測試和黑盒測試的要素,考慮了用戶端、特定的系統(tǒng)知識和操作環(huán)境。軟件測試分類◆

按測試過程分類(1)單元測試(Unit

Testing)單元測試又稱模塊測試、邏輯測試或結(jié)構(gòu)測試,是針對軟件設(shè)計(jì)的最小單位——程序模塊或功能模塊,進(jìn)行正確性檢驗(yàn)的測試工作。其目的在于檢驗(yàn)每個程序單元能夠正確實(shí)現(xiàn)詳細(xì)設(shè)計(jì)說明中的模塊功能、性能、接口和設(shè)計(jì)約束等要求,發(fā)現(xiàn)各個模塊內(nèi)部可能存在的各種錯誤。軟件測試分類(2)集成測試(Integration

Testing)集成測試又稱組裝測試、綜合測試或聯(lián)合測試。通常在單元測試的基礎(chǔ)上,將所有的程序模塊進(jìn)行有序的、遞增的測試。集成測試是檢驗(yàn)程序單元或部件的接口關(guān)系,逐步集成為符合概要設(shè)計(jì)要求的程序部件或整個系統(tǒng)。軟件測試分類(3)系統(tǒng)測試(System

Testing)系統(tǒng)測試為驗(yàn)證和確認(rèn)系統(tǒng)是否達(dá)到其原始目標(biāo),而對集成的硬件和軟件系統(tǒng)進(jìn)行的測試。系統(tǒng)測試是在真實(shí)或模擬系統(tǒng)運(yùn)行的環(huán)境下,檢查完整的程序系統(tǒng)能否和系統(tǒng)(包括計(jì)算機(jī)硬件、外設(shè)、網(wǎng)絡(luò)和系統(tǒng)軟件、支持平臺等)正確配置、連接,并滿足用戶需求。系統(tǒng)測試的主要依據(jù)是《系統(tǒng)需求規(guī)格說明書》文檔。軟件測試分類(4)驗(yàn)收測試(Acceptance

Testing)驗(yàn)收測試又稱交付測試,是軟件在完成了單元測試、集成測試、系統(tǒng)測試之后,產(chǎn)品發(fā)布之前進(jìn)行的軟件測試活動。驗(yàn)收測試又分為Alpha測試(α測試)和Beta測試(β測試),Alpha測試是由一個用戶在開發(fā)環(huán)境下進(jìn)行的測試,或者是公司內(nèi)部的用戶在模擬實(shí)際操作環(huán)境下進(jìn)行的受控測試,Beta測試是軟件的多個用戶在一個或多個用戶的實(shí)際使用環(huán)境下進(jìn)行的測試。軟件測試分類(1)功能測試(Functional

Testing)功能測試主要針對產(chǎn)品需求規(guī)格說明書對軟件進(jìn)行測試,逐項(xiàng)驗(yàn)證軟件功能是否符合要求,包括對原定功能的檢驗(yàn)以及測試軟件是否有冗余功能、遺漏功能。(2)接口測試(Interface

Testing)接口測試指對各個模塊進(jìn)行系統(tǒng)聯(lián)調(diào)的測試,包含程序內(nèi)接口和程序外接口測試。在接口測試中,測試人員在單元測試階段進(jìn)行一部分工作,大部分工作在集成測試階段完成。軟件測試分類(3)用戶界面測試(Interface

Testing)用戶界面測試主要檢查用戶界面的風(fēng)格是否滿足客戶的要求、界面是否友好、軟件是否方便易用、系統(tǒng)設(shè)計(jì)是否合理、界面位置是否正確等問題。(4)健壯性測試(Interface

Testing)健壯性測試側(cè)重于對程序容錯能力的測試,主要是驗(yàn)證程序在各種異常情況下是否能正確運(yùn)行,包括數(shù)據(jù)邊界測試、非法數(shù)據(jù)測試、異常中斷測試等。軟件測試分類(5)性能測試(Performance

Testing)性能測試主要測試系統(tǒng)的性能是否滿足用戶要求,即在特定的運(yùn)行條件下驗(yàn)證系統(tǒng)的能力狀況。性能測試主要是通過自動化測試工具模擬正常、峰值以及異常負(fù)載狀況,對系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測試,測試中得到的負(fù)荷和響應(yīng)時間等數(shù)據(jù)可以被用于驗(yàn)證軟件系統(tǒng)是否能夠達(dá)到用戶提出的性能指標(biāo)。軟件測試分類(6)強(qiáng)度測試(Strength

Testing)強(qiáng)度測試是一種性能測試,強(qiáng)度測試總是迫使系統(tǒng)在異常的資源配置下運(yùn)行,目的是找出因資源不足或資源爭用而導(dǎo)致的錯誤,例如,如果內(nèi)存或磁盤空間不足,測試對象就可能會表現(xiàn)出一些在正常條件下并不明顯的缺陷,這些缺陷可能由于爭用共享資源(如數(shù)據(jù)庫鎖或網(wǎng)絡(luò)帶寬)而顯現(xiàn)出來。軟件測試分類(7)壓力測試(Stress

Testing)壓力測試是一種性能測試,指在超負(fù)荷環(huán)境中,檢驗(yàn)程序是否能夠正常運(yùn)行,檢驗(yàn)系統(tǒng)的穩(wěn)定性。壓力測試的目的是檢測系統(tǒng)在資源超負(fù)荷情況下的表現(xiàn),是通過極限測試方法,發(fā)現(xiàn)系統(tǒng)在極限或惡劣環(huán)境中的自我保護(hù)能力。壓力測試的目標(biāo)是確定并確保系統(tǒng)在超出最大預(yù)期工作量的情況下仍能正常運(yùn)行。此外,壓力測試還要評估軟件的性能特征,例如響應(yīng)時間、事務(wù)處理速率和其他與時間相關(guān)的性能特征。軟件測試分類(8)負(fù)載測試(Load

Testing)負(fù)載測試是一種性能測試,是通過測試系統(tǒng)在資源超負(fù)荷情況下的表現(xiàn),以發(fā)現(xiàn)設(shè)計(jì)上的錯誤或驗(yàn)證系統(tǒng)的負(fù)載能力。在這種測試中,將使測試對象承擔(dān)不同的工作量,以評測和評估測試對象在不同工作量條件下的性能行為,以及持續(xù)正常運(yùn)行的能力。負(fù)載測試的目標(biāo)是確定并確保系統(tǒng)在超出最大預(yù)期工作量的情況下仍能正常運(yùn)行。軟件測試分類(9)安全性測試(Security

Testing)安全測試主要測試系統(tǒng)防止非法侵入的能力,例如,測試系統(tǒng)在沒有授權(quán)的內(nèi)部或者外部用戶對系統(tǒng)進(jìn)行攻擊或者惡意破壞時如何運(yùn)行,是否能夠保證數(shù)據(jù)的安全。軟件測試分類(10)可靠性測試(Reliability

Testing)可靠性測試是指在真實(shí)的或仿真的環(huán)境中,為了保證和驗(yàn)證軟件的可靠性水平是否滿足用戶的要求而進(jìn)行的測試,即確定軟件是否滿足軟件規(guī)格說明書中規(guī)定的可靠性指標(biāo)。軟件可靠性測試的目的是給出可靠性的定量估計(jì)值,通過對軟件可靠性測試中觀測到的失效數(shù)據(jù)進(jìn)行分析,可以評估當(dāng)前軟件可靠性的水平,驗(yàn)證軟件可靠性是否達(dá)到要求。軟件可靠性測試是一項(xiàng)高投入的測試工作,通常需要進(jìn)行大量的測試。軟件測試分類(11)恢復(fù)測試(Restore

Testing)恢復(fù)測試主要測試當(dāng)出現(xiàn)系統(tǒng)崩潰、硬件錯誤或其他災(zāi)難性問題時系統(tǒng)的表現(xiàn)情況,以及系統(tǒng)從故障中恢復(fù)的能力。(12)安裝/卸載測試(Install/Uninstall

Testing)安裝測試主要檢驗(yàn)軟件是否可以正確安裝,安裝過程是否符合安裝規(guī)程,安裝文件的各項(xiàng)設(shè)置是否有效,安裝后是否影響整個計(jì)算機(jī)系統(tǒng);卸載測試是逆過程,測試軟件是否被刪除干凈,刪除后軟件是否影響整個計(jì)算機(jī)系統(tǒng)等。軟件測試分類(13)兼容性測試(Compatibility

Testing)兼容性測試主要測試軟件產(chǎn)品在不同的平臺、不同的工具軟件或相同工具軟件的不同版本下的兼容性,其目的是測試系統(tǒng)與其他軟件、硬件兼容的能力。(14)文檔測試(Documentation

Testing)文檔測試主要檢查內(nèi)部/外部文檔的清晰性和準(zhǔn)確性,對外部文檔而言,測試工作主要針對用戶的文檔,以需求說明、用戶手冊、安裝手冊等為主,檢驗(yàn)文檔是否和實(shí)際應(yīng)用存在差別,而且還必須考慮文檔是否簡單明了,相關(guān)的技術(shù)術(shù)語是否解釋清楚等問題。軟件測試過程05軟件測試過程◆

根據(jù)軟件測試過程分類,軟件測試工作可以分為單元測試、集成測試、系統(tǒng)測試和驗(yàn)收測試。這些測試工作是按照圖6.2中所示的順序逐項(xiàng)進(jìn)行的?!?/p>

單元測試是對軟件中的基本組成單位進(jìn)行的測試,驗(yàn)證每個模塊是否滿足系統(tǒng)設(shè)計(jì)說明書的要求?!?/p>

集成測試是將已測試過的模塊組合成子系統(tǒng),重點(diǎn)測試各模塊之間的接口和聯(lián)系。軟件測試過程◆

系統(tǒng)測試是對已經(jīng)集成好的軟件系統(tǒng)進(jìn)行徹底的測試,以驗(yàn)證軟件系統(tǒng)的正確性和性能等是否滿足其規(guī)約所指定的要求?!?/p>

驗(yàn)收測試是根據(jù)需求規(guī)格說明書中定義的全部功能和性能要求,確認(rèn)軟件是否達(dá)到了要求。軟件測試過程◆

單元測試也稱模塊測試,其目的是集中檢驗(yàn)軟件設(shè)計(jì)的最小單元--模塊,檢查每個模塊是否能獨(dú)立、正確地運(yùn)行?!?/p>

在這個階段所發(fā)現(xiàn)的錯誤往往是在編碼和詳細(xì)設(shè)計(jì)時產(chǎn)生的,通常在編碼階段就應(yīng)該進(jìn)行單元測試?!?/p>

單元測試通常采用白盒測試方法,而且對多個模塊的測試可以并行地進(jìn)行。軟件測試過程(1)單元測試的主要任務(wù)①程序語法檢查通過編譯語言對程序進(jìn)行檢查;人工檢查。②程序邏輯檢查檢查程序的邏輯結(jié)構(gòu)是否正確;程序中所使用的循環(huán)語句的上下項(xiàng)以及循環(huán)次數(shù)是否有問題;函數(shù)或子模塊是否有自我調(diào)用問題。軟件測試過程③模塊接口測試模塊接口測試是單元測試的第一步,前兩個任務(wù)只是程序走查。模塊接口是模塊內(nèi)與模塊外聯(lián)系的關(guān)鍵部位,是保證模塊間高內(nèi)聚低耦合的關(guān)鍵。④局部數(shù)據(jù)結(jié)構(gòu)測試局部數(shù)據(jù)結(jié)構(gòu)測試是為了保證臨時存儲模塊在模塊內(nèi)的數(shù)據(jù)。模塊錯誤的根源往往是局部數(shù)據(jù)結(jié)構(gòu)。軟件測試過程⑤路經(jīng)測試對模塊中的重要執(zhí)行路徑進(jìn)行測試,路徑錯誤主要是由錯誤的計(jì)算,不正確的比較或不正常的控制流導(dǎo)致。⑥邊界條件測試邊界測試執(zhí)行的好,可以大大提高程序的質(zhì)量。⑦錯誤處理。利用測試,查找錯誤。⑧代碼書寫規(guī)范檢查。軟件測試過程(2)單元測試特點(diǎn)①它是一種驗(yàn)證行為②它是一種設(shè)計(jì)行為③它是一種編寫文檔的行為④它具有回歸性⑤提升反饋速度,減少重復(fù)工作,提高開發(fā)效率⑥保證最后的代碼修改不會破壞之前代碼的功能⑦讓代碼維護(hù)更容易⑧有助于改進(jìn)代碼質(zhì)量和設(shè)計(jì)軟件測試過程單元測試常常和代碼編寫同步進(jìn)行,在完成了程序編寫、復(fù)查和語法正確性驗(yàn)證后,就應(yīng)進(jìn)行單元測試用例設(shè)計(jì)。輔助模塊有兩種,一種是驅(qū)動模塊(

Driver),用以模擬被測模塊的上級模塊。驅(qū)動模塊在單元測試中接受測試數(shù)據(jù),把相關(guān)的數(shù)據(jù)傳送給被測模塊,啟動被測模塊,并打印出相應(yīng)的結(jié)果。另一種是被調(diào)用模擬子模塊(Sub),用以模擬被測模塊工作過程中所調(diào)用的模塊。被調(diào)用模擬子模塊由被測模塊調(diào)用,它們一般只進(jìn)行很少的數(shù)據(jù)處理。軟件測試過程◆

集成測試的目的是確保各單元組合在一起后能夠按既定意圖協(xié)作運(yùn)行,并確保增量的行為正確。它所測試的內(nèi)容包括單元間的接口以及集成后的功能。一般使用黑盒測試方法測試集成的功能,并且對以前的集成進(jìn)行回歸測試。◆

集成測試關(guān)注的是組裝系統(tǒng)或者子系統(tǒng)的各個軟件單元之間的交互,測試的主要任務(wù)是發(fā)現(xiàn)軟件單元之間的接口、接口之間的數(shù)據(jù)傳遞關(guān)系和其它與接口有關(guān)的各種錯誤,以及各個軟件單元組合后是否實(shí)現(xiàn)預(yù)期的功能。軟件測試過程(1)集成測試任務(wù)①將各個軟件單元組裝起來時,各個軟件單元在通過接口進(jìn)行數(shù)據(jù)交互的時候,數(shù)據(jù)是否會發(fā)生丟失的情況;②將各個軟件單元組裝成系統(tǒng)或者子系統(tǒng)時,能否達(dá)到預(yù)期設(shè)計(jì)的各項(xiàng)功能要求;③某一個軟件單元的功能會不會對其它的軟件模塊產(chǎn)生不良的影響;④全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問題,是否會被不正常修改;⑤每個軟件單元所產(chǎn)生的誤差累積起來,是否會被放大,從而造成整個系統(tǒng)的誤差達(dá)到不能接受的程度。軟件測試過程為了保證在進(jìn)行集成測試的時候,能夠很好地完成測試工作,應(yīng)該遵循以下11個基本原則:①所有的公共接口都要被測試到;②所有的關(guān)鍵模塊必須進(jìn)行充分的測試;③集成測試應(yīng)當(dāng)按照一定的層次進(jìn)行;④

集成測試的策略選擇應(yīng)當(dāng)綜合考慮質(zhì)量、成本和進(jìn)度之間的關(guān)系;⑤集成測試應(yīng)當(dāng)盡早開始,并以總體設(shè)計(jì)為基礎(chǔ);⑥

在模塊和接口的劃分上,測試人員應(yīng)當(dāng)和開發(fā)人員進(jìn)行充分的溝通;軟件測試過程⑦

當(dāng)測試計(jì)劃中的結(jié)束標(biāo)準(zhǔn)滿足時,集成測試才能結(jié)束;⑧

當(dāng)接口發(fā)生修改時,涉及的相關(guān)接口必須進(jìn)行再次的測試;⑨

集成測試應(yīng)該根據(jù)集成測試計(jì)劃和方案進(jìn)行,不能隨意測試;⑩項(xiàng)目管理者應(yīng)該保證測試用例經(jīng)過審核;?

測試執(zhí)行結(jié)果應(yīng)當(dāng)如實(shí)記錄。軟件測試過程(3)集成測試方法一般集成測試有兩種方法,一種方法是分別測試各個模塊,再把這些模塊組合起來進(jìn)行整體測試,這種方法稱為非增量集成。另一種方法是把一個要測試的模塊組合到已測試好的模塊中,測試完后再將一個需要測試的模塊組合進(jìn)來測試,逐步把所有模塊組合在一起,并完成測試,該方法稱為增量集成。軟件測試過程1)非增量集成非增量集成可以對模塊進(jìn)行并行測試,能充分利用人力,加快工程進(jìn)度。但這種方法容易混亂,且錯誤不容易被查找和定位。增量集成測試的范圍是一步步擴(kuò)大的,因此,錯誤容易定位,而且已測試的模塊可在新的條件下進(jìn)行測試,程序測試得更徹底。軟件測試過程例6.1:圖6.4所示為采用非增量集成測試的一個實(shí)例,被測試程序的結(jié)構(gòu)如圖6.4a)所示,它由七個模塊組成。在進(jìn)行單元測試時,根據(jù)它們在結(jié)構(gòu)圖中的位置,對模塊C和D配備了驅(qū)動模塊和被調(diào)用模擬子模塊。對模塊B、E、F、C配備了驅(qū)動模塊。主模塊A由于處于結(jié)構(gòu)圖的頂端,無其他模塊調(diào)用它,因此僅為它配備了三個被調(diào)用模擬子模塊,以模擬被它調(diào)用的3個模塊B、C、D,如圖6.4b)至圖6.4h)所示,分別進(jìn)行單元測試后,再按圖6.4a)所示的結(jié)構(gòu)圖形式連接起來進(jìn)行集成測試。軟件測試過程非增量集成測試的優(yōu)點(diǎn)如下。①

非增量集成測試可以并行地測試所有的軟件單元,能夠加快測試工作的速度,充分利用了人力和物力資源;②

非增量集成測試需要用到測試用例數(shù)量較少,因此,對設(shè)計(jì)測試用例的工作量相對較??;③

非增量集成測試的測試方法較為簡單,容易執(zhí)行。軟件測試過程非增量集成測試的缺點(diǎn)如下。①

非增量集成測試是將軟件單元一次性集成起來,如果集成的軟件單元數(shù)量較多,集成測試過程中可能會出現(xiàn)較多的錯誤,而且因?yàn)橐淮涡约?,很難判斷出現(xiàn)錯誤的位置。而且,在對某個軟件單元的某處錯誤進(jìn)行修改之后,可能會在系統(tǒng)的其它地方帶來新的錯誤,這樣給整個系統(tǒng)的修正會帶來較大的難度;②

非增量集成測試因?yàn)槭且淮涡约桑鱾€軟件單元之間的接口沒有進(jìn)行充分的測試,因此,有可能會遺漏一些潛在的接口錯誤,即使在集成測試通過,這些接口可能也會存在問題。軟件測試過程2)增量集成測試①

自頂向下的增量集成測試方式自頂向下的增量集成測試是模塊按程序的控制結(jié)構(gòu),從上到下的組合方式。在增量集成測試時,有深度優(yōu)先和廣度優(yōu)先兩種策略。深度優(yōu)先策略首先集成在結(jié)構(gòu)中的一個主控路徑下的所有模塊,主控路徑的選擇是任意的,一般根據(jù)問題的特性來確定。廣度優(yōu)先策略首先沿著水平方向,把每層中所有直接隸屬于上一層的模塊集成起來,直至最底層。圖6.5為自頂向下的深度優(yōu)先增量集成測試過程。軟件測試過程自頂向下的增量集成測試的優(yōu)點(diǎn)如下。①

在集成測試的過程當(dāng)中,可以首先驗(yàn)證主要的控制和判斷點(diǎn),即主控軟件單元,在功能劃分合理的程序模塊結(jié)構(gòu)中,對于較高層次中的主控軟件單元,可以首先做出測試,能夠提前發(fā)現(xiàn)問題,以便及時對程序作出相應(yīng)的修改,減少人力資源消耗;②

選擇深度優(yōu)先的集成方式,可以首先實(shí)現(xiàn)和驗(yàn)證一個完整的軟件功能,能夠首先對邏輯輸入的分支進(jìn)行組裝和測試,檢測出潛在的錯誤和缺陷,驗(yàn)證其功能的正確性,為之后的主要分支的組裝和測試提供保證③

能夠較早的驗(yàn)證軟件功能的可用性,給軟件的開發(fā)者和軟件的用戶奠定了信心;軟件測試過程自頂向下的增量集成測試的缺點(diǎn)如下。①

采用自頂向下的增量集成測試方法,在測試時需要給每個軟件單元的下層軟件單元設(shè)計(jì)開發(fā)測試用被調(diào)用模擬子模塊,對于被調(diào)用模擬子模塊的開發(fā)以及維護(hù)成本較大;②

在當(dāng)?shù)讓拥能浖卧陌l(fā)生變更時,可能會需要修改整個軟件系統(tǒng)中的多個上層軟件單元,進(jìn)而容易破壞之前已經(jīng)構(gòu)造好的測試包;③

隨著自頂向下增量集成測試的進(jìn)行,新的底層軟件單元不斷加入,這會讓整個系統(tǒng)的會變得越來越復(fù)雜,這可能會導(dǎo)致之后加入的底層軟件單元的測試不夠充分。軟件測試過程②

自底向上的增量集成測試方式自底向上的增量集成測試方式是從最底層的功能模塊開始,邊組合邊測試,從下向上地完成整個程序結(jié)構(gòu)的測試。在單元測試的基礎(chǔ)上,從最底層模塊開始,按功能組合模塊,從下而上地進(jìn)行測試。這樣的測試方式可以較早地發(fā)現(xiàn)底層關(guān)鍵性模塊出現(xiàn)的錯誤。在測試時不需要編寫被調(diào)用模擬子模塊,但需要驅(qū)動模塊。另外,對程序中的主要控制錯誤發(fā)現(xiàn)較晚。圖6.6所示為自底向上的增量集成測試過程。軟件測試過程自底向上的增量集成測試的優(yōu)點(diǎn)如下。①能夠盡早驗(yàn)證底層軟件單元的功能。任何一個底層軟件單元通過單元測試之后,就可以開始進(jìn)行集成測試;②在集成測試開始時,可以同時對系統(tǒng)層次結(jié)構(gòu)中的每個分支集成測試,這樣較大提高了測試的效率;③減少了設(shè)計(jì)開發(fā)測試用被調(diào)用模擬子模塊的工作量;④更容易對被測系統(tǒng)的錯誤進(jìn)行定位。軟件測試過程自底向上的增量集成測試的缺點(diǎn)如下。①

只有在被測系統(tǒng)的最頂層的最后一個軟件單元組裝起來之后才能看到整個系統(tǒng)的框架;②測試用驅(qū)動模塊的開發(fā)以及維護(hù)工作量大;③

由于頂層的軟件單元要到集成測試的最后階段才能進(jìn)行測試,因此不能及時發(fā)現(xiàn)高層模塊設(shè)計(jì)上的錯誤,對于那些在整個體系結(jié)構(gòu)中控制結(jié)構(gòu)非常關(guān)鍵的產(chǎn)品來說,受到的影響就更大。軟件測試過程3)“三明治”集成測試方法“三明治”集成(也稱為混合測試方法)是一種混合增量集成測試方法,綜合了自頂向下和自底向上兩種集成方法的優(yōu)點(diǎn)。“三明治”集成測試方法的基本步驟如下:①確定以哪一層作為運(yùn)用“三明治”集成測試方法的分界層②

對分界層及其所在層下面的各個層次使用自底向上的集成測試方法③對分界層上面的各個層次使用自頂向下的集成測試方法④對被測系統(tǒng)進(jìn)行整體測試。軟件測試過程“三明治”集成測試的優(yōu)點(diǎn)如下。①

同時具有自頂向下集成測試和自底向上集成策略的優(yōu)點(diǎn);②

通過一定集成技巧,可以減少被調(diào)用模擬子模塊和驅(qū)動模塊的開發(fā)?!叭髦巍奔蓽y試的缺點(diǎn)如下:在被集成之前,中間層不能夠盡早得到充分的測試。軟件測試過程系統(tǒng)測試是在真實(shí)系統(tǒng)工作環(huán)境下或系統(tǒng)仿真環(huán)境下檢驗(yàn)完整的軟件配置項(xiàng)能否和系統(tǒng)正確連接,并滿足系統(tǒng)設(shè)計(jì)文檔的要求。系統(tǒng)測試原則表現(xiàn)在如下兩個方面。(1)獨(dú)立性原則(2)全面性原則軟件測試過程(1)功能測試功能測試是系統(tǒng)測試中最基本的測試,它不管軟件內(nèi)部是如何實(shí)現(xiàn)的,而只是根據(jù)需求規(guī)格說明書和測試需求列表,驗(yàn)證產(chǎn)品的功能是否符合需求規(guī)格。(2)性能測試性能測試用來測試軟件系統(tǒng)在實(shí)際的集成系統(tǒng)中的運(yùn)行性能。(3)安裝測試安裝測試用來確保軟件在正常情況和異常情況的不同條件下都不丟失數(shù)據(jù)或者功能,具體測試活動包括首次安裝、升級、完整安裝、自定義安裝和卸載等。軟件測試過程(4)可用性測試所謂可用性測試,即是對軟件的“可用性”進(jìn)行測試,檢驗(yàn)其是否達(dá)到可用性標(biāo)準(zhǔn)。(5)壓力測試壓力測試是一種基本的質(zhì)量保證行為,它是每個重要軟件測試工作的一部分。壓力測試的基本思路很簡單,不是在常規(guī)條件下運(yùn)行手動或自動測試,而是長時間或超大負(fù)荷地運(yùn)行測試軟件來測試被測系統(tǒng)的性能、可靠性和穩(wěn)定性等。軟件測試過程(6)容量測試在進(jìn)行壓力測試時,如果發(fā)現(xiàn)了被測系統(tǒng)在可接受的性能范圍內(nèi)的極限負(fù)載,則在一定程度上完成了容量測試。容量測試的完成標(biāo)準(zhǔn)可以定義為:所計(jì)劃的測試已全部執(zhí)行,而且達(dá)到或超出指定的系統(tǒng)限制時沒有出現(xiàn)任何軟件故障。(7)安全性測試安全性測試的目的是驗(yàn)證系統(tǒng)的保護(hù)機(jī)制是否能夠在實(shí)際的環(huán)境中抵御非法入侵、惡意攻擊等非法行為。軟件測試過程(8)健壯性測試健壯性是指在故障存在的情況下,軟件還能正常運(yùn)行的能力。(9)圖形用戶界面測試圖形化用戶接口(GraphicUser

Interface,GUI)測試包含兩方面內(nèi)容,一是界面實(shí)現(xiàn)與界面設(shè)計(jì)是否吻合;二是界面功能是否正確。(10)文檔測試文檔的種類包括開發(fā)文檔、管理文檔和用戶文檔。這三類文檔中,一般主要測試的是用戶文檔。軟件測試過程◆

驗(yàn)收測試應(yīng)檢查軟件能否按合同要求進(jìn)行工作,即是否滿足需求規(guī)格說明書中的驗(yàn)收標(biāo)準(zhǔn)。驗(yàn)收測試包括功能確認(rèn)測試、安全可靠性測試、易用性測試、可擴(kuò)充性測試、兼容性測試、資源占用率測試、用戶文檔資料驗(yàn)收等一些測試工作。通過驗(yàn)收測試后,才能成為可交付的軟件?!?/p>

驗(yàn)收測試的結(jié)果有兩種可能,一種是功能和性能指標(biāo)滿足需求規(guī)格說明書的要求,用戶可以接受;另一種是軟件不滿足需求規(guī)格說明書的要求,用戶無法接受。項(xiàng)目進(jìn)行到這個階段才發(fā)現(xiàn)嚴(yán)重錯誤和偏差一般很難在預(yù)定的工期內(nèi)改正,因此,必須與用戶協(xié)商,尋求一個妥善解決問題的方法。軟件測試過程(2)配置評審確認(rèn)測試的另一個重要環(huán)節(jié)是配置評審。評審的目的在于保證軟件配置齊全、分類有序,并且包括軟件維護(hù)所必需的細(xì)節(jié)。(3)α、β測試事實(shí)上,軟件開發(fā)人員不可能完全預(yù)見用戶實(shí)際使用軟件情況。軟件是否真正滿足最終用戶的要求,應(yīng)由用戶進(jìn)行一系列“驗(yàn)收測試”。一個軟件產(chǎn)品可能擁有眾多用戶,不可能由每個用戶驗(yàn)收,此時多采用稱為α、β測試的過程,以期發(fā)現(xiàn)那些似乎只有最終用戶才能發(fā)現(xiàn)的問題。軟件測試過程◆

α測試是由一個用戶在開發(fā)環(huán)境下進(jìn)行的測試,也可以是公司內(nèi)部人員模擬各類用戶行為對即將面市的軟件產(chǎn)品(稱為α版本)進(jìn)行測試,試圖發(fā)現(xiàn)錯誤并修正。α測試的關(guān)鍵在于盡可能逼真地模擬實(shí)際運(yùn)行環(huán)境和用戶對軟件產(chǎn)品的操作,并盡最大努力涵蓋所有可能的用戶操作方式。經(jīng)過α測試調(diào)整的軟件產(chǎn)品稱為α版本。◆

β測試是指軟件開發(fā)公司組織各方面的典型用戶在日常工作中實(shí)際使用β版本,并要求用戶報(bào)告異常情況、提出批評意見。然后,軟件開發(fā)公司再對β版本進(jìn)行改錯和完善。軟件測試過程回歸測試(Regression

Testing)是指修改了舊代碼后,重新進(jìn)行測試以確認(rèn)修改沒有引入新的錯誤或?qū)е缕渌a產(chǎn)生錯誤。雖然已發(fā)現(xiàn)的程序缺陷被修復(fù)了,但可能在其他受影響的區(qū)域出現(xiàn)新的軟件缺陷,這樣的缺陷稱為回歸缺陷。如果這時沒有回歸測試,產(chǎn)品就帶著這樣的回歸缺陷被發(fā)布出去了,就會造成嚴(yán)重的后果?;貧w測試就是為了發(fā)現(xiàn)回歸缺陷而進(jìn)行的測試。軟件測試過程回歸測試是在程序有修改的情況下,保證原有功能正常的一種測試策略和方法,因?yàn)檫@時的測試不一定要進(jìn)行全面測試,而是根據(jù)修改的情況進(jìn)行有效測試。(1)回歸測試的測試目的①

測試軟件變更之后,變更部分的正確性和對變更需求和符合性;②

測試軟件變更之后,軟件原有的、正確的功能、性能和其他規(guī)定的要求的不損害性。軟件測試過程(2)回歸測試的對象①

未通過軟件單元測試的軟件,在變更之后,應(yīng)對其進(jìn)行單元測試;②

未通過軟件配置項(xiàng)測試的軟件,在變更之后,首先應(yīng)對變更的軟件進(jìn)行單元測試,然后再進(jìn)行相關(guān)的集成測試和配置項(xiàng)測試;③

未通過系統(tǒng)測試的軟件,在變更之后,首先應(yīng)對變更的軟件進(jìn)行單元測試,然后再進(jìn)行相關(guān)的集成測試、軟件配置項(xiàng)和系統(tǒng)測試;④

因其他原因進(jìn)行變更之后的軟件單元,首先應(yīng)對變更的軟件進(jìn)行單元測試,然后再進(jìn)行相關(guān)的軟件測試。軟件測試用例定義06軟件測試用例定義◆

測試用例作為測試工作的指導(dǎo),是軟件測試必須遵守的準(zhǔn)則,是軟件測試質(zhì)量穩(wěn)定的根本保障。◆

比較通常的說法是:指對一項(xiàng)特定的軟件產(chǎn)品進(jìn)行測試任務(wù)的描述,體現(xiàn)測試方案、方法、技術(shù)和策略,內(nèi)容包括測試目標(biāo)、測試環(huán)境、輸入數(shù)據(jù)、測試步驟、預(yù)期結(jié)果、測試腳本等,并形成文檔?!?/p>

測試用例將軟件測試的行為活動做了一個科學(xué)化的組織歸納,目的是將軟件測試的行為轉(zhuǎn)化成可管理的模式,同時測試用例也是將測試具體量化的方法之一。軟件測試用例定義設(shè)計(jì)測試用例時,應(yīng)遵循以下原則。(1)基于測試需求的原則按照測試類別的不同要求設(shè)計(jì)測試用例。(2)用成熟測試用例設(shè)計(jì)方法來指導(dǎo)設(shè)計(jì)在設(shè)計(jì)測試用例時,不能只憑借一些主觀或直觀的想法來設(shè)計(jì)測試用例,應(yīng)該要以一些比較成熟的測試用例設(shè)計(jì)方法為指導(dǎo),再加上設(shè)計(jì)人員個人的經(jīng)驗(yàn)積累來設(shè)計(jì)測試用例,將測試設(shè)計(jì)思想與豐富的實(shí)踐經(jīng)驗(yàn)相融合才能設(shè)計(jì)出高品質(zhì)的測試用例。軟件測試用例定義(3)兼顧測試充分性和效率的原則測試用例集應(yīng)兼顧測試的充分性和測試的效率;測試用例的內(nèi)容都應(yīng)完整,具有可操作性。(4)測試執(zhí)行的可再現(xiàn)性原則應(yīng)保證測試用例執(zhí)行的可再現(xiàn)性。(5)足夠詳細(xì)、準(zhǔn)確和清晰的步驟即使是一個對所要測試的內(nèi)容根本不了解的新手,也能準(zhǔn)確的按照所寫的測試用例完成測試。軟件測試用例定義在設(shè)計(jì)測試用例時應(yīng)避免如下五個方面的問題。(1)把測試用例設(shè)計(jì)等同于測試輸入數(shù)據(jù)的設(shè)計(jì)。(2)強(qiáng)調(diào)測試用例設(shè)計(jì)的越詳細(xì)越好。(3)追求測試用例設(shè)計(jì)“一步到位”。(4)將多個測試用例混在一個用例中。(5)讓沒有測試經(jīng)驗(yàn)的人員設(shè)計(jì)測試用例。黑盒測試用例設(shè)計(jì)07黑盒測試用例設(shè)計(jì)等價類劃分法是一種重要的、典型的黑盒測試方法,用這一方法設(shè)計(jì)測試用例完全不考慮程序的內(nèi)部結(jié)構(gòu),而是只根據(jù)程序規(guī)格說明書對輸入范圍進(jìn)行劃分。等價類劃分法的原理是把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干互不相交的子集,稱為等價類。所有子集的并集則構(gòu)成整個輸入域。然后,從每一個子集中選取少量具有代表性的數(shù)據(jù)作為測試用例。因此,等價類對于測試有完備性和無冗余性兩個重要的意義。黑盒測試用例設(shè)計(jì)等價類按照其有效性可以分為兩種,有效等價類和無效等價類。①

有效等價類。對于程序規(guī)格說明而言,由合理的、有意義的輸入數(shù)據(jù)構(gòu)成的集合。利用有效等價類可檢驗(yàn)程序是否實(shí)現(xiàn)了規(guī)格說明中預(yù)先規(guī)定的功能和性能。②

無效等價類。對于程序規(guī)格說明而言,由不合理的、無意義的輸入數(shù)據(jù)構(gòu)成的集合。利用無效等價類可檢驗(yàn)程序是否有不符合規(guī)格說明中預(yù)先規(guī)定的功能和性能。對于具體的問題,無效等價類至少應(yīng)有一個,也可能有多個。黑盒測試用例設(shè)計(jì)常見的劃分原則如下:①

在輸入條件規(guī)定了取值范圍或值的個數(shù)的情況下,可以確立一個有效等價類和兩個無效等價類。②

輸入條件規(guī)定了輸入值的集合或者規(guī)定了“必須如何”的條件的情況下,可確立一個有效等價類和一個無效等價類。③

在輸入條件是一個布爾量的情況下,可確定一個有效等價類和一個無效等價類。④

在規(guī)定了輸入數(shù)據(jù)的一組值(假定n個),并且程序要對每一個輸入值分別處理的情況下,可確立n個有效等價類和一個無效等價類。黑盒測試用例設(shè)計(jì)⑤

在規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則的情況下,可確立一個有效等價類(符合規(guī)則)和若干個無效等價類(從不同角度違反規(guī)則)。⑥

在確知已劃分的等價類中各元素在程序處理中的方式不同的情況下,則應(yīng)再將該等價類進(jìn)一步劃分為更小的等價類。在確立了等價類后,可建立等價類表,列出所有劃分出的等價類,如表6.5所示。同時,也可以根據(jù)輸出條件,列出輸出域值的等價類,如表6.6所示。表6.6等價類表(輸出條件)表6.5等價類表(輸入條件)黑盒測試用例設(shè)計(jì)等價類劃分法設(shè)計(jì)測試用例的步驟如下:1)分析并確定等價類2)建立等價類表,列出所有劃分出的等價類3)根據(jù)列出的等價類表,按照以下三個步驟設(shè)計(jì)測試用例①為每一個等價類規(guī)定一個唯一的編號。②

設(shè)計(jì)一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價類。重復(fù)這一步驟,直到所有的有效等價類都被覆蓋為止。③

設(shè)計(jì)一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類。重復(fù)這一步驟,直到所有的無效等價類都被覆蓋為止。黑盒測試用例設(shè)計(jì)等價類劃分法設(shè)計(jì)測試用例的步驟如下

:1)分析并確定等價類2)建立等價類表,列出所有劃分出的等價類3)根據(jù)列出的等價類表,按照以下三個步驟設(shè)計(jì)測試用例①為每一個等價類規(guī)定一個唯一的編號。②

設(shè)計(jì)一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價類。重復(fù)這一步驟,直到所有的有效等價類都被覆蓋為止。③

設(shè)計(jì)一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類。重復(fù)這一步驟,直到所有的無效等價類都被覆蓋為止。黑盒測試用例設(shè)計(jì)例6.2:城市的電話號碼由兩部分組成。這兩部分的名稱和內(nèi)容分別如下。地區(qū)碼:以0開頭的3位或者4位數(shù)字(包括0)。電話號碼:以非O、非1開頭的7位或者8位數(shù)字。設(shè)被調(diào)試的程序能接受一切符合上述規(guī)定的電話號碼,拒絕所有不符合規(guī)定的號碼,就可用等價類劃分法來設(shè)計(jì)測試用例。(1)劃分等價類并編號,如表6.7所示。(2)為有效等價類設(shè)計(jì)測試用例,如表6.8所示。(3)為每個無效等價類至少設(shè)計(jì)一個測試用例,如表6.9所示。黑盒測試用例設(shè)計(jì)邊界值分析方法是對輸入或輸出的邊界值進(jìn)行測試的一種黑盒測試方法。在測試過程中,邊界值分析方法是等價類劃分方法的補(bǔ)充,通過選擇等價類邊界的測試用例進(jìn)行測試。邊界值分析方法與等價類劃分方法的區(qū)別是:邊界值分析不是從某等價類中隨便挑一個作為代表,而是使這個等價類的每個邊界都要作為測試條件;另外,邊界值分析不僅考慮輸入條件邊界,還要考慮輸出域邊界產(chǎn)生的測試情況。黑盒測試用例設(shè)計(jì)按照測試數(shù)據(jù)的有效性,將邊界值分析法分為標(biāo)準(zhǔn)邊界值測試和健壯邊界值測試。(1)標(biāo)準(zhǔn)邊界值測試只考慮有效數(shù)據(jù)范圍內(nèi)的邊界值。對于一個有n個變量的程序,保留其中一個變量,其取值為最小值(Min)、略高于最小值(Min+)、正常值(Normal)、略低于最大值(Max-)、最大值(Max),讓其余變量取正常值,標(biāo)準(zhǔn)邊界值分析測試程序會產(chǎn)生4n+1個測試用例。黑盒測試用例設(shè)計(jì)(2)健壯邊界值測試會考慮有效和無效數(shù)據(jù)范圍內(nèi)的邊界值。因此,對于一個含有n個變量的程序,保留其中一個變量,其取值為,其取值為略低于最小值(Min-)、最小值(Min)、略高于最小值(Min+)、正常值(Normal)、略低于最大值(Max-)、最大值(Max),略高于最大值(Max+),讓其余變量取正常值,健壯邊界值分析測試程序會產(chǎn)生6n+1個測試用例。黑盒測試用例設(shè)計(jì)(2)邊界值分析法設(shè)計(jì)原則使用邊界值分析方法設(shè)計(jì)測試用例,首先應(yīng)確定邊界情況。通常輸入等價類與輸出等價類的邊界,就是應(yīng)著重測試的邊界情況。應(yīng)當(dāng)選取正好等于,剛剛大于,或剛剛小于邊界的值作為測試數(shù)據(jù),而不是選取等價類中的典型值或任意值作為測試數(shù)據(jù)。邊界值分析方法設(shè)計(jì)測試用例具有如下原則。①

如果輸入條件規(guī)定了值的范圍,則應(yīng)選取剛達(dá)到范圍邊界的值,以及剛剛超越邊界的值作為測試輸入數(shù)據(jù)。黑盒測試用例設(shè)計(jì)②如果輸入條件規(guī)定了值的個數(shù),則用略低于最小值(Min-)、最小值(Min)、略高于最小值(Min+)、正常值(Normal)、略低于最大值(Max-)、最大值(Max)、略高于最大值(Max+)作為測試數(shù)據(jù)。③將原則①和②應(yīng)用于輸出條件,即設(shè)計(jì)測試用例使輸出值達(dá)到邊界值及其左右的值。④如果程序的規(guī)格說明給出的輸入域或輸出域是有序集合(如有序表、順序文件等),則應(yīng)選取集合的第一個和最后一個元素作為測試用例。⑤如果程序用了一個內(nèi)部結(jié)構(gòu),應(yīng)取這個內(nèi)部數(shù)據(jù)結(jié)構(gòu)的邊界值作為測試用例。⑥分析規(guī)格說明,找出其他可能的邊界條件。黑盒測試用例設(shè)計(jì)例6.3:使用邊界值分析法對學(xué)生成績管理系統(tǒng)中的學(xué)生成績錄入模塊設(shè)計(jì)測試用例。解:本例中成績的取值范圍在0-100之間的整數(shù)。成績的邊界為0或者100。按照標(biāo)準(zhǔn)邊界值分析,成績標(biāo)準(zhǔn)邊界值測試用例表如表6.10所示。按照健壯性邊界值分析,成績健壯性邊界值測試用例表如表6.11所示黑盒測試用例設(shè)計(jì)因果圖法是一種利用圖解法分析輸入的各種組合情況,從而設(shè)計(jì)測試用例的方法,它適合于檢查程序輸入條件的各種組合情況,適合于描述多種輸入條件的組合、相應(yīng)產(chǎn)生多個動作的方法。(1)因果圖的優(yōu)點(diǎn)①考慮多個輸入之間的相互組合、相互制約關(guān)系;②

指導(dǎo)測試用例的選擇,能夠指出需求規(guī)格說明描述中存在的問題;黑盒測試用例設(shè)計(jì)③

能夠幫助測試人員按照一定的步驟,高效率地開發(fā)測試用例;④

因果圖法是將自然語言規(guī)格說明轉(zhuǎn)化成形式語言規(guī)格說明的一種嚴(yán)格的方法,可以指出規(guī)格說明存在的不完整性和二義性。黑盒測試用例設(shè)計(jì)(2)因果圖的基本關(guān)系圖6.7描述了因果圖的四種基本關(guān)系。圖中左節(jié)點(diǎn)ci表示輸入狀態(tài)(或稱原因),右節(jié)點(diǎn)ei表示輸出狀態(tài)(或稱結(jié)果)。ci與ei取值0或1,0表示某狀態(tài)不出現(xiàn),1則表示某狀態(tài)出現(xiàn)。(1)恒等:若c1是1,則e1也為1,否則e1為0。(2)非(~):若c1是1,則e1為0,否則e1為1。(3)或(∨):若c1或c2或c3是1,則e1為1,否則e1為0。(4)與(∧):若c1和c2都是1,則e1為1,否則e1為0。黑盒測試用例設(shè)計(jì)(3)因果圖的約束輸入狀態(tài)相互之間還可能存在某些依賴關(guān)系,稱為約束。比如,某些輸入條件本身不可能同時出現(xiàn),輸出狀態(tài)之間也往往存在約束。在因果圖中,用特定的符號標(biāo)明這些約束,如圖6.8所示:因果圖的約束又分為輸入條件的約束和輸出條件的約束。1)輸入條件的約束有以下4種。①E約束(異,Exclusive):a和b中至多有一個可能為1,即a和b不能同時為1。②

約束(或,Inclusive):a、b和c中至少有一個必須是1,即a、b、和c不能同時為0。③O約束(唯一,Only):a和b必須有一個,且有且僅有1個為1。④

R約束(要求,Request):a是1時,b必須是1。即不可能a是1時b是0。2)輸出條件約束類型輸出條件的約束只有M約束(Masks,強(qiáng)制):若結(jié)果a是1,則結(jié)果b強(qiáng)制為0。黑盒測試用例設(shè)計(jì)因果圖設(shè)計(jì)測試用例需要如下五個步驟。①確定軟件規(guī)格中的原因和結(jié)果。②確定原因和結(jié)果之間的邏輯關(guān)系。③

確定因果圖中的各個約束,由于語法或環(huán)境的限制,有些原因與原因之間、原因與結(jié)果之間的組合情況不可能出現(xiàn)。④把因果圖轉(zhuǎn)換為決策表。⑤根據(jù)決策表設(shè)計(jì)測試用例。黑盒測試用例設(shè)計(jì)例6.4:有一個處理單價為1元5角錢的盒裝飲料的自動售貨機(jī)軟件,若投入1元5角硬幣,按下“可樂”、“雪碧”或“紅茶”按鈕,相應(yīng)的飲料就送出來。若投入的是2元硬幣,在送出飲料的同時退換5角硬幣,試應(yīng)用因果圖法設(shè)計(jì)測試用例。解:(1)根據(jù)題意。原因和結(jié)果如下。原因:c1:投入1元5角硬幣;c2:投入2元硬幣;c3:按“可樂”按鈕;c4:按“雪碧”按鈕;c5:按“紅茶”按鈕。黑盒測試用例設(shè)計(jì)中間狀態(tài):11:已投幣;12:已按鈕。結(jié)果:e1:退還5角硬幣;e2:送出“可樂”飲料;e3:送出“雪碧”飲料;e4:送出“紅茶”飲料。(2)根據(jù)原因和結(jié)果,設(shè)計(jì)因果圖,如圖6.9所示:將因果圖轉(zhuǎn)換為判定表,如表6.12所示,每一列可作為確定測試用例的依據(jù)。黑盒測試用例設(shè)計(jì)◆

決策表(Decision

Table)也叫判定表,決策表是最具邏輯性的測試方法,和因果圖法有重疊的地方。◆

決策表可以用來分析和表達(dá)多邏輯條件下執(zhí)行不同操作的情況的工具。在程序設(shè)計(jì)發(fā)展初期,決策表就已被用作編寫程序的輔助工具了。它可以把復(fù)雜的邏輯關(guān)系和多種條件組合的情況表達(dá)得比較明確。◆

(1)決策表組成決策表由四個部分組成,如圖6.10所示:黑盒測試用例設(shè)計(jì)①

條件樁:列出了問題得所有條件,通常認(rèn)為列出的條件次序無關(guān)緊要。②

動作樁:列出了問題規(guī)定可能采取的操作,這些操作的排列順序沒有約束。③

條件項(xiàng):列出針對它條件樁的取值,在所有可能情況下的真假值。④

動作項(xiàng):列出在條件項(xiàng)的各種取值情況下應(yīng)該采取的動作。黑盒測試用例設(shè)計(jì)(2)決策表構(gòu)造步驟一般來說,構(gòu)造決策表分為五個步驟。①

確定規(guī)則的個數(shù),假如有n個條件,每個條件有兩個取值(0,1),故有2n種規(guī)則;②列出所有的條件樁和動作樁;③填入條件項(xiàng);④填入動作項(xiàng),等到初始判定表;⑤簡化,合并相似規(guī)則(相同動作)。黑盒測試用例設(shè)計(jì)例6.5:如圖6.11(a)所示,兩規(guī)則動作項(xiàng)一樣,條件項(xiàng)類似,在1、2條件項(xiàng)分別取Y、N時,無論條件3取何值,都執(zhí)行同一操作。即要執(zhí)行的動作與條件3無關(guān)。于是可合并?!?”表示與取值無關(guān)。與6.11(a)類似,在6.11(b)圖中,無關(guān)條件項(xiàng)“一”可包含其他條件項(xiàng)取值,具有相同動作的規(guī)則可合并。黑盒測試用例設(shè)計(jì)(3)適合使用決策表設(shè)計(jì)測試用例的情況在簡化或最后的決策表給出之后,只需要選擇恰當(dāng)?shù)妮斎耄沟脹Q策表每一列的輸入條件值得到滿足即可生成相應(yīng)的測試用例。同其它軟件測試一樣,決策表測試法適用于具有以下特征的應(yīng)用程序。適用于ifelse成者switchcase的程序,輸入變量之間存在邏輯關(guān)系,涉及輸入變量子集的計(jì)算,以及輸入與輸出之間存在因果關(guān)系的程序。黑盒測試用例設(shè)計(jì)B.Beizer指出了適合于使用判定表設(shè)計(jì)測試用例的條件如下。①

規(guī)格說明以判定表形式給出,或是很容易轉(zhuǎn)換成判定表;②條件的排列順序不會也不應(yīng)影響執(zhí)行哪些操作;③規(guī)則的排列順序不會也不應(yīng)影響執(zhí)行哪些操作;④

當(dāng)某一規(guī)則的條件已經(jīng)滿足,并確定要執(zhí)行的操作后,不必檢驗(yàn)別的規(guī)則;⑤

如果某一規(guī)則得到滿足要執(zhí)行多個操作,這些操作的執(zhí)行順序無關(guān)緊要;黑盒測試用例設(shè)計(jì)例6.6:一個軟件的規(guī)格說明指出:①

當(dāng)條件1和條件2滿足,并且條件3和條件4不滿足,或者當(dāng)條件1、條件3和條件4滿足時,要執(zhí)行操作1;②在任個條件都不滿足時,要執(zhí)行操作2;③在條件1不滿足,而條件4被滿足時,要執(zhí)行操作3。試根據(jù)規(guī)格說明建立決策表。解:確定規(guī)則的個數(shù):軟件規(guī)格說明中有4個條件,每個條件有2個取值,因此,有2*2*2*2=16種規(guī)則。根據(jù)規(guī)格說明,得到如表6.13所示的決策表。黑盒測試用例設(shè)計(jì)這里,決策表只給出了16種規(guī)則中的8種。事實(shí)上,除這8種以外的一些規(guī)則是指當(dāng)不能滿足指定的條件,執(zhí)行這些條件時,要執(zhí)行1個默許的操作。在無必要時,決策表通??陕匀ミ@些規(guī)則。但如果用決策表來設(shè)計(jì)測試用例,就必須列出這些默許規(guī)則,如表6.14所示:黑盒測試用例設(shè)計(jì)有經(jīng)驗(yàn)的測試人員往往可以根據(jù)自己的工作經(jīng)驗(yàn)和直覺推測出程序可能存在的錯誤,從而有針對性地進(jìn)行測試,這就是錯誤推測法(Error

Guess

Method),或叫探索性測試方法(Exploratory

Test)。錯誤推測法是測試者根據(jù)經(jīng)驗(yàn)、知識和直覺來發(fā)現(xiàn)軟件錯誤,來推測程序中可能存在的各種錯誤,從而有針對性地進(jìn)行測試。“只可意會,不能言傳”,就是表明這樣一個道理。錯誤推測法的優(yōu)點(diǎn)是測試者能夠快速且容易地切入,并能夠體會到程序的易用與否;缺點(diǎn)是難以知道測試的覆蓋率,可能丟失大量未知的區(qū)域,這種測試行為帶有主觀性,且難以復(fù)制。黑盒測試用例設(shè)計(jì)例6.7:測試一個對線性表(如數(shù)組)進(jìn)行排序的程序,應(yīng)用錯誤推測法推測出需要特別測試的情況。解:根據(jù)經(jīng)驗(yàn),對于排序程序,下面一些情況可能使軟件發(fā)生錯誤或容易發(fā)生錯誤,需要特別測試。(1)輸入的線性表為空表;(2)表中只含有1個元素;(3)輸入表中所有元素已排好序;(4)輸入表已按逆序排好;(5)輸入表中部分或全部元素相同。黑盒測試用例設(shè)計(jì)◆

軟件系統(tǒng)中流程的控制由事件觸發(fā)決定,事件不同的觸發(fā)順序和處理結(jié)果形成事件流,每個事件流觸發(fā)時的情景便形成了場景?!?/p>

通過運(yùn)用場景來對系統(tǒng)的功能點(diǎn)或業(yè)務(wù)流程的描述,可以提高測試效果。場景法的測試思想的是Rational公司提出的,并在RUP

2000中文版中有詳盡的解釋和應(yīng)用,能夠比較生動地描繪出事件觸發(fā)時的情景,有利于測試設(shè)計(jì)者設(shè)計(jì)測試用例,同時使測試用例更容易理解和執(zhí)行。黑盒測試用例設(shè)計(jì)(1)基本流和備選流場景法一般包含基本流和備用流,從一個流程開始,通過描述經(jīng)過的路徑來確定的過程,經(jīng)過遍歷所有的基本流和備用流來完成整個場景。對于場景法中基本流和備用流的描述如圖6.12所示:在圖6.12中,經(jīng)過用例的每條路徑都用基本流和備選流來表示,直黑線表示基本流,是經(jīng)過用例的最簡單的路徑。備選流用不同的色彩表示,一個備選流可能從基本流開始,在某個特定條件下執(zhí)行,然后重新加入基本流中(如備選流1和3);也可能起源于另一個備選流(如備選流2),或者終止用例而不再重新加入到某個流(如備選流2和4)。黑盒測試用例設(shè)計(jì)(2)場景法設(shè)計(jì)測試用例步驟場景法設(shè)計(jì)測試用例的步驟如下所示:①根據(jù)說明,描述程序的基本流及各項(xiàng)備選流;②根據(jù)基本流和各項(xiàng)備選流生成不同的場景;③對每一個場景生成相應(yīng)的測試用例;④

對生成的所有測試用例重新復(fù)審,去掉多余的測試用例,測試用例確定后,對每一個測試用例確定測試數(shù)據(jù)值。白盒測試用例設(shè)計(jì)08白盒測試用例設(shè)計(jì)◆

測試覆蓋率用于確定測試所執(zhí)行到的覆蓋項(xiàng)的百分比。其中的覆蓋項(xiàng)是指作為測試基礎(chǔ)的一個入口或?qū)傩?,比如語句、分支、條件等。測試覆蓋率可以表示出測試的充分性,在測試分析報(bào)告中可以作為量化指標(biāo)的依據(jù),測試覆蓋率越高效果越好?!?/p>

測試覆蓋率包括功能點(diǎn)覆蓋率和結(jié)構(gòu)覆蓋率,功能點(diǎn)覆蓋率大致用于表示軟件已經(jīng)實(shí)現(xiàn)的功能與軟件需要實(shí)現(xiàn)的功能之間的比例關(guān)系。結(jié)構(gòu)覆蓋率包括語句覆蓋率、分支覆蓋率、循環(huán)覆蓋率、路徑覆蓋率等。白盒測試用例設(shè)計(jì)◆

邏輯覆蓋法是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的用例設(shè)計(jì)方法,它通過對程序邏輯結(jié)構(gòu)的遍歷實(shí)現(xiàn)程序的覆蓋。◆

根據(jù)覆蓋目標(biāo)的不同,邏輯覆蓋分為語句覆蓋、判定覆蓋(分支覆蓋)、條件覆蓋、判定-條件覆蓋(分支-條件覆蓋)、條件組合覆蓋、路徑覆蓋六種覆蓋測試方法。下面舉例說明六種覆蓋測試方法。例6.9:示例程序源代碼。IntlogicExample(intx,inty){intmagic=0;if(x>0&&y>0)magic=x+y+10;

//語句塊1elsemagic=x+y-10;

//語句塊2if(magic<0)magic=0;

//語句塊3return

magic;

//語句塊4}一般邏輯覆蓋測試不會直接根據(jù)源代碼,而是根據(jù)流程圖來設(shè)計(jì)測試用例,根據(jù)例6.9示例程序源代碼畫出流程圖,如圖6.14所示。白盒測試用例設(shè)計(jì)(1)語句覆蓋語句覆蓋要求設(shè)計(jì)足夠多的測試用例,運(yùn)行被測程序,使得程序中每條語句至少被執(zhí)行一次。在本例中,可執(zhí)行語句是指語句塊1到語句塊4中的語句。例6.9的語句覆蓋測試用例如表6.17所示:白盒測試用例設(shè)計(jì)白盒測試用例設(shè)計(jì)(2)判定覆蓋判定覆蓋,又稱分支覆蓋,要求設(shè)計(jì)足夠多的測試用例,運(yùn)行被測程序,使得程序中的每個判斷的“真”和“假”分支都至少被執(zhí)行一次。在本例中共有兩個判斷if(x>0&&y>0)和if(magic<0)。例6.9的判定覆蓋測試用例如表6.18所示:白盒測試用例設(shè)計(jì)白盒測試用例設(shè)計(jì)(3)條件覆蓋條件覆蓋要求設(shè)計(jì)足夠多的測試用例,運(yùn)行被測程序,使得判定中的每個條件獲得各種可能的結(jié)果,即每個條件至少有一次為真值,有一次為假值。在本例中有兩個判斷if(x>0&&y>0)和if(magic<0),共計(jì)三個條件x>0、y>0和magic<0。例6.9的條件覆蓋測試用例如表6.19所示:白盒測試用例設(shè)計(jì)白盒測試用例設(shè)計(jì)(4)判定-條件覆蓋判定-條件覆蓋要求設(shè)計(jì)足夠多的測試用例,運(yùn)行被測程序,使得被測試程序中的每個判斷本身的判定結(jié)果(真/假)至少滿足一次,同時,每個邏輯條件的可能值也至少被滿足一次。即同時滿足100%判定覆蓋和100%條件覆蓋的標(biāo)準(zhǔn)。例6.9的判定-條件覆蓋測試用例如表6.20所示:白盒測試用例設(shè)計(jì)白盒測試用例設(shè)計(jì)(5)條件組合覆蓋條件組合覆蓋要求設(shè)計(jì)足夠多的測試用例,運(yùn)行被測程序,使得被測試程序中每個判定中條件結(jié)果的所有可能組合至少執(zhí)行一次。應(yīng)該注意如下三點(diǎn)。①

條件組合只針對同一個判斷語句內(nèi)存在多個條件的情況,讓這些條件的取值進(jìn)行笛卡爾乘積組合;②不同的判斷語句內(nèi)的條件取值之間無需組合;③

對于單條件的判斷語句,只需要滿足自己的所有取值即可。例6.9的條件組合覆蓋測試用例如表6.21所示:白盒測試用例設(shè)計(jì)白盒測試用例設(shè)計(jì)(6)路徑覆蓋路徑覆蓋要求設(shè)計(jì)足夠的測試用例,運(yùn)行被測程序,覆蓋程序中所有可能的路徑。例6.9的路徑覆蓋測試用例如表6.22所示:白盒測試用例設(shè)計(jì)白盒測試用例設(shè)計(jì)◆

從上例可知,單獨(dú)采用任何一種邏輯覆蓋方法都不能完全覆蓋所有的測試用例,任何一個高效的測試用例,都是針對具體測試場景的?!?/p>

邏輯測試不是片面的測試正確的結(jié)果或是測試錯誤的結(jié)果,而是盡可能全面地覆蓋每一個邏輯路徑。所以在實(shí)際測試用例設(shè)計(jì)中,就要先從代碼分析入手,根據(jù)不同的代碼邏輯規(guī)則、語句執(zhí)行情況,選用適合的覆蓋方法。要根據(jù)不同需要和不同測試用例設(shè)計(jì)特征,將不同的設(shè)計(jì)方法組合起來,交叉使用,以實(shí)現(xiàn)最佳的測試用例輸出。白盒測試用例設(shè)計(jì)◆

基本路徑測試法是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測試用例的方法。設(shè)計(jì)出的測試用例要保證被測程序的每個可執(zhí)行語句至少被執(zhí)行一次。白盒測試用例設(shè)計(jì)◆

采用基本路徑測試法設(shè)計(jì)測試用例,主要包括以下四個步驟:(1)以詳細(xì)設(shè)計(jì)或源代碼作為基礎(chǔ),導(dǎo)出程序控制流圖。◆

程序控制流圖是描述程序控制流的一種圖示方法,可以用圖6.15的基本符號來描述程序結(jié)構(gòu)。白盒測試用例設(shè)計(jì)◆

控制流圖由結(jié)點(diǎn)和控制流線(弧)兩種圖形符號組成。結(jié)點(diǎn)以標(biāo)有編號的圓圈表示,用于表示程序流程圖中矩形框、菱形框的功能,是一個或多個五分支的語句或源程序語句?!?/p>

控制流線(弧)也稱控制流圖的邊或鏈接,以箭頭表示,與程序流程圖中的流線功能一致,需注意以下情況。①

分支的匯聚處應(yīng)有一個匯聚結(jié)點(diǎn),即使該結(jié)點(diǎn)并不代表任何語句;②

由邊和結(jié)點(diǎn)限定的范圍稱為區(qū)域。需要注意,圖形外的區(qū)域也應(yīng)記為一個區(qū)域。例6.10:程序的源代碼。白盒測試用例設(shè)計(jì)(2)計(jì)算程序控制流圖的環(huán)路復(fù)雜度。通過對程序控制流圖的分析和判斷,來計(jì)算程序控制流圖的環(huán)路復(fù)雜度。環(huán)路復(fù)雜度用V(G)表示,有三種計(jì)算方法。①將環(huán)路復(fù)雜度定義為控制流圖中的區(qū)域數(shù)。如圖6.17所示,程序控制流圖將整個平面分成四個區(qū)域,R1、R2、R3和R4,因此V(G)=4。②設(shè)定E為控制流圖的邊數(shù),N為圖的結(jié)點(diǎn)數(shù),則定義環(huán)路的復(fù)雜度為V(G)=E?N+2。如圖6.17所示,E=10,N=8,V(G)=10-8+2=4。③設(shè)定P為控制流圖中的判定結(jié)點(diǎn)數(shù),則有V(G)=P+1。如圖6.17所示,圖中的判定結(jié)點(diǎn)數(shù)P=3,V(G)=3+1=4。白盒測試用例設(shè)計(jì)(3)確定獨(dú)立路徑集合。從程序的環(huán)路復(fù)雜度可導(dǎo)出程序的獨(dú)立路徑條數(shù)。獨(dú)立路徑,是指和其他的路徑相比,至少引進(jìn)一個新的處理語句集合或一個新判斷條件的程序通路,即獨(dú)立路徑必須至少包含一條在定義之前不曾使用的邊。如果只是已有路徑的簡單合并,并未包含任何新邊,則不是獨(dú)立路徑。獨(dú)立路徑集合中的每一條路徑都是唯一的,但獨(dú)立路徑集合不是唯一的,可以有多組不同的獨(dú)立路徑集合。白盒測試用例設(shè)計(jì)如圖6.17所示,可確定獨(dú)立路徑為如下四條。1)①-⑧2)①-②-③-⑧3)①-②-④-⑤-⑦-①-⑧4)①-②-④-⑥-⑦-①-⑧白盒測試用例設(shè)計(jì)(4)根據(jù)獨(dú)立路徑,設(shè)計(jì)測試用例,

確?;韭窂郊现忻織l路徑的執(zhí)行。為了確保獨(dú)立路徑集中的每一條路徑的執(zhí)行,根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證每一條路徑都被測試到。依據(jù)步驟3)中的獨(dú)立路徑,結(jié)合程序源代碼,設(shè)計(jì)測試用例如表6.23所示:白盒測試用例設(shè)計(jì)◆

在軟件動態(tài)測試中,程序插樁是一種基本的測試手段,有著廣泛的應(yīng)用。◆

簡單來說,程序插樁技術(shù)是借助往被測程序中插入操作來實(shí)現(xiàn)測試目的的方法,即向源程序中添加一些語句,實(shí)現(xiàn)對程序語句的執(zhí)行、變量的變化等情況進(jìn)行檢查。例如,想要了解一個程序在某次運(yùn)行中所有可執(zhí)行語句被覆蓋的情況,或是每個語句的實(shí)際執(zhí)行次數(shù),就可以利用程序插樁技術(shù)。白盒測試用例設(shè)計(jì)在程序的特定部位插入記錄動態(tài)特性的語句,最終是為了把程序執(zhí)行過程中發(fā)生的一些重要?dú)v史事件記錄下來。例如,記錄在程序執(zhí)行過程中某些變量值的變化情況、變化的范圍等。白盒測試用例設(shè)計(jì)◆

設(shè)計(jì)程序插裝程序時需要考慮的問題包括如下三個。(1)探測哪些信息;(2)在程序的什么部位設(shè)置探測點(diǎn);(3)需要設(shè)置多少個探測點(diǎn)。白盒測試用例設(shè)計(jì)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論