軟件工程:第07章實(shí)現(xiàn)



《軟件工程:第07章實(shí)現(xiàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《軟件工程:第07章實(shí)現(xiàn)(164頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,,單擊此處編輯母版文本樣式,,第二級(jí),,第三級(jí),,第四級(jí),,第五級(jí),,1,第七章 實(shí)現(xiàn),(編碼與測試),,Implementation=Coding + Testing,,實(shí)現(xiàn):編碼與測試,問題定義,可行性研究,需求分析,總體設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼與單元測試,綜合測試,軟件維護(hù),軟件定義時(shí)期,軟件開發(fā)時(shí)期,軟件維護(hù)時(shí)期,編碼,,將軟件設(shè)計(jì)的結(jié)果轉(zhuǎn)化成程序設(shè)計(jì)語言編寫的計(jì)算機(jī)程序。,,開發(fā)人員對(duì)軟件的最小設(shè)計(jì)單位,-,模塊進(jìn)行單元測試。,測試,,熟悉軟件測試的步驟:單元測試、集成測試、確認(rèn)測試。,,掌握軟件測試的方法:白盒測試、黑盒測試、灰盒測試。,,掌握軟件調(diào)試(糾
2、錯(cuò))的方法:調(diào)試過程、調(diào)試方法。,,了解軟件可靠性基本概念及估算方法。,第七章,,實(shí)現(xiàn),(,編碼與測試,),7.1,編碼,,7.2,軟件測試基礎(chǔ),,7.3,單元測試,,7.4,集成測試,,7.5,確認(rèn)測試,,7.6,白盒測試技術(shù),,7.7,黑盒測試技術(shù),,7.8,調(diào)試,,7.9,軟件可靠性,,3,7.1,編碼,編碼就是把軟件設(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語言書寫的程序。,,,7.1.1,選擇程序設(shè)計(jì)語言,,7.1.2,編碼風(fēng)格,,1.,程序內(nèi)部的文檔,,2.,數(shù)據(jù)說明,,3.,語句構(gòu)造,,4.,輸入輸出,,5.,效率,7.1.1,選擇程序設(shè)計(jì)語言,為什么,,程序設(shè)計(jì)語言是人和計(jì)算機(jī)通信的最基本的
3、工具,它的特點(diǎn)必然會(huì)影響人的思維和解題方式,會(huì)影響人和計(jì)算機(jī)通信的方式和質(zhì)量,也會(huì)影響其他人閱讀和理解程序的難易程度。因此,編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)某绦蛟O(shè)計(jì)語言。,實(shí)用選擇標(biāo)準(zhǔn):,,用戶對(duì)編程語言的要求。,,可以使用的編譯程序。,,可以得到的軟件工具。,,工程規(guī)模。,,程序員的編程語言知識(shí)。,,軟件可移植性要求。,,軟件的應(yīng)用領(lǐng)域。,效率:閱讀理解、開發(fā)、測試、運(yùn)行、維護(hù),……,7.1.2,編碼風(fēng)格,程序?qū)嶋H上也是一種供人閱讀的文章,應(yīng)該使程序具有良好的風(fēng)格?!昂玫摹背绦驊?yīng)遵循的規(guī)則:,,,程序文檔:,,源程序文檔化,易于理解的標(biāo)識(shí)符命名、適當(dāng)?shù)淖⑨?、清晰的程序視覺組織等。,,
4、數(shù)據(jù)說明:,,易于理解,便于查閱。,,語句構(gòu)造:,,結(jié)構(gòu)化,簡單、直觀,技巧不過份。,,輸入輸出:,,遵循人機(jī)界面設(shè)計(jì)準(zhǔn)則。,,效率:,,效率滿足需求;不要為了追求效率而過份使用技巧,犧牲程序的清晰性、可讀性。,,(,1,)程序文檔,程序中的標(biāo)識(shí)符(名字),,程序中的注釋,,程序的視覺組織,,,★ 符號(hào)名的命名,符號(hào)名,,即標(biāo)識(shí)符,包括模塊名、變量名、常量名、標(biāo)號(hào)名、子程序名、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。,,名字的意義,,這些名字應(yīng)能反映它所代表的實(shí)際東西,應(yīng)有一定實(shí)際意義。例如,表示次數(shù)的量用,Times,,表示總量的用,Total,,表示平均值的用,Average,,表示和的量用,Sum,等。
5、,,名字的使用,,名字不是越長越好,應(yīng)當(dāng)選擇精煉的意義明確的名字。,,必要時(shí)可使用縮寫名字,但這時(shí)要注意縮寫規(guī)則要一致。,,要給每一個(gè)名字加注釋。,,在一個(gè)程序中,一個(gè)變量只應(yīng)用于一種用途。,夾在程序中的注釋是程序員與,日后,的程序讀者之間,通信的重要手段,。,,注釋,決不是可有可無,的。,,一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個(gè)源程序的,1/3,到,1/2,,甚至更多。,,注釋分為,序言性注釋,和,功能性注釋,。,★ 程序的注釋,序言性注釋通常置于每個(gè)程序模塊的開頭部分,,它應(yīng)當(dāng)給出程序的整體說明,,對(duì)于理解程序本身具有引導(dǎo)作用。,,序言性注釋包括:,,,程序標(biāo)題,;,,有關(guān)本模塊,功
6、能和目的,的,說明,;,,,主要算法說明:算法概要、大意,;,,,接口說明,:包括調(diào)用形式,參數(shù)描述,子程序清單;,,,有關(guān)數(shù)據(jù)描述,:重要的變量及其用途,約束或限制條件,以及其它有關(guān)信息;,,,模塊位置,:在哪一個(gè)源文件中,或隸屬于哪一個(gè)軟件包;,,,開發(fā)簡歷,:模塊設(shè)計(jì)者,復(fù)審者,復(fù)審日期,修改日期及有關(guān)說明等。,序言性注釋,功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會(huì)怎么樣,而不要解釋下面怎么做。,,要點(diǎn),,描述一段程序,而不是每一個(gè)語句;,,用縮進(jìn)和空行,使程序與注釋容易區(qū)別;,,注釋要正確。,,例如:,,,/* ADD AMOUNT TO
7、 TOTAL */ TOTAL = AMOUNT,+,TOTAL,,上面注視不清楚,如果注明把月銷售額計(jì)入年度總額,便使讀者理解了下面語句的意圖:,/* ADD MONTHLY-SALES TO ANNUAL-TOTAL */ TOTAL = AMOUNT,+,TOTAL,功能性注釋,恰當(dāng)?shù)乩?空格,,可以,突出運(yùn)算的優(yōu)先性,,避免發(fā)生運(yùn)算的錯(cuò)誤。例如 ,將表達(dá)式,(,A,<-,17),ANDNOT,(,B,<=,49),ORC,,寫成,(,A,<-,17),AND NOT,(,B,<=,49),OR C,,自然的程序段之間可用,空行,隔開;,,移行,也叫做,向右縮格
8、,。它是指程序中的各行不必都在左端對(duì)齊,都從第一格起排列。這樣做使程序完全分不清層次關(guān)系。,,對(duì)于,選擇語句,和,循環(huán)語句,,把其中的程序段語句向右做,階梯式移行,。使程序的邏輯結(jié)構(gòu)更加清晰。,例如,兩重選擇結(jié)構(gòu)嵌套寫成下面的移行形式,層次就清楚得多。,,,IF,(,…,),,THEN IF,(,…,),,THEN …… ELSE …… ENDIF …… ELSE …… ENDIF,,★ 視覺組織:使用空格、空行和移行,數(shù)據(jù)說明指程序中用到的常量、變量、文件等數(shù)據(jù)對(duì)象的定義。,,在
9、設(shè)計(jì)階段已經(jīng)確定了數(shù)據(jù)結(jié)構(gòu)的組織及其復(fù)雜性。在編寫程序時(shí),則,需要注意數(shù)據(jù)說明的風(fēng)格,。,,為了使程序中數(shù)據(jù)說明更易于理解和維護(hù),必須注意以下幾點(diǎn),:,,a.,數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化,。,有次序易查閱,能加速測試、調(diào)試和維護(hù)的過程。,,b.,當(dāng),多個(gè)變量名,在一個(gè)語句中說明時(shí),應(yīng)該,按字母順序排列,這些變量。,,c.,如果設(shè)計(jì)時(shí)使用了一個(gè),復(fù)雜的數(shù)據(jù)結(jié)構(gòu),,則應(yīng)該,用注解說明用程序設(shè)計(jì)語言實(shí)現(xiàn),這個(gè),數(shù)據(jù)結(jié)構(gòu),的方法和特點(diǎn)。,(2),數(shù)據(jù)說明,數(shù)據(jù)說明的次序,數(shù)據(jù)說明,,①,常量說明,,②,簡單變量類型說明,,③,數(shù)組說明,,④,公用數(shù)據(jù)塊說明,,⑤,所有的文件說明,,數(shù)據(jù)類型說明,,① 整
10、型量說明,,② 實(shí)型量說明,,③ 字符量說明,,④ 邏輯量說明,,數(shù)據(jù)說明,有次序易查閱,能加速測試、調(diào)試和維護(hù)的過程。,變量名按字母順序排列,,b.,,當(dāng),多個(gè)變量名,在一個(gè)語句中說明時(shí),,應(yīng)該按字母順序排列,這些變量,便于查找。,,,例如,把,,,integer,size,,,length,,,width,,,cost,,,price,,寫成,,,integer,,cost,,,length,,,price,,,size,,,width,,,,(,3,)語句構(gòu)造,A[I] = A[I],+,A[T];,,A[T] = A[I],-,A[T];,,A[I] = A[I],-,A[T],;,W
11、ORK = A[T];,,A[T] = A[I];,,A[I] = WORK,;,,構(gòu)造語句時(shí)應(yīng)該遵循的,原則,是,每個(gè)語句都應(yīng)該,簡單而直接,,不能為了提高效率而使程序變得過分復(fù)雜;也,不要刻意追求技巧性,使程序編寫得過于緊湊。,功能:,A[T],與,A[I],交換數(shù)據(jù)值,未使用中間變量,,難懂,使用中間變量,,清晰,例:語句構(gòu)造,int,i,,,j;,,for (,i,= 1;,i,<=,n,;,i,++ ) for (,j,= 1;,j,<=,n,;,j,++ ),V,[,i,][,j,],=,(,i,/,j,) * (,j,/,i,),for (,i,=,1;,i,<=
12、,n,;,i,++ ) for (,j,=,1;,j,<=,n,;,j,++ ) if (,i == j,),V,[,i,][,j,],=,1; else,V,[,i,][,j,],=,0;,,功能:初始化對(duì)角單位矩陣,1 0 0 … 0,,0 1 0 … 0,,0 0 1 … 0,,.. .. .. .. .. ..,,0 0 0 … 1,有助于使語句簡單明了的規(guī)則,不要為了節(jié)省空間而把多個(gè)語句寫在同一行;,,盡量避免復(fù)雜的條件測試;,,盡量減少對(duì)“非”條件的測試;,,避免大量使用循環(huán)嵌套和條件嵌套;,,利用括號(hào)使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算
13、次序清晰直觀。,例:使用,not(!),操作的例子,,將,,if ( !( char,<,0 || char,>,9 ) ),,改成,,if ( char >= 0 && char <= 9 ),,,不要讓讀者繞彎子想!,,(,4,)輸入輸出,在設(shè)計(jì)和編寫程序時(shí)應(yīng)該考慮下述有關(guān)輸入輸出風(fēng)格的規(guī)則:,,對(duì)所有輸入數(shù)據(jù)都要進(jìn)行,檢驗(yàn),,識(shí)別錯(cuò)誤輸入,以保證每個(gè)數(shù)據(jù)的有效性;,,檢查輸入項(xiàng)的各種重要組合的,合法性,,必要時(shí)報(bào)告輸入狀態(tài)信息;,,使得輸入的步驟和操作,盡可能簡單,,并保持簡單的輸入格式;,,輸入數(shù)據(jù)時(shí),應(yīng)允許使用,自由格式輸入,;,,應(yīng)允許,缺省,值;,,輸入一批數(shù)據(jù)時(shí)最好使用,輸入
14、結(jié)束標(biāo)志,,而不要由用戶指定輸入數(shù)據(jù)數(shù)目;,,在交互式輸入輸入時(shí),要在屏幕上使用,提示符,明確提示交互輸入的請(qǐng)求,指明可使用選擇項(xiàng)的種類和取值范圍。同時(shí),在數(shù)據(jù)輸入的過程中和輸入結(jié)束時(shí),也要在屏幕上給出狀態(tài)信息;,,當(dāng)程序設(shè)計(jì)語言對(duì)輸入/輸出格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式與輸入語句的要求的,一致性,;,,給所有的輸出加,注解,,并設(shè)計(jì),輸出報(bào)表,格式。,影響輸入輸出風(fēng)格的其它因素,輸入/輸出風(fēng)格還受到許多其它因素的影響。如輸入/輸出設(shè)備(例如終端的類型,圖形設(shè)備,數(shù)字化轉(zhuǎn)換設(shè)備等)、用戶的熟練程度、以及通信環(huán)境等。,(,5,)程序效率,程序效率,,程序的效率是指程序的執(zhí)行速度及程序所需占用的
15、內(nèi)存的存儲(chǔ)空間。程序編碼是最后提高運(yùn)行速度和節(jié)省存儲(chǔ)的機(jī)會(huì),因此在此階段不能不考慮程序的效率。,,效率準(zhǔn)則,,需求階段:效率是一個(gè)性能要求,應(yīng)當(dāng)在需求分析階段給出要求。,軟件效率以需求為準(zhǔn),,不應(yīng)以人力所及為準(zhǔn)。,,設(shè)計(jì)階段:,好的設(shè)計(jì)可以提高效率,。,,編碼階段:程序的,效率與程序的簡單性相關(guān),,不要犧牲程序的清晰性和可讀性來不必要地提高效率。,,效率問題,,程序運(yùn)行時(shí)間效率,,存儲(chǔ)器效率,,輸入輸出的效率,22,程序運(yùn)行時(shí)間效率,源程序的,效率直接由詳細(xì)設(shè)計(jì)階段確定的算法的效率決定,,但是,寫,程序的風(fēng)格,也能對(duì)程序的執(zhí)行速度和存儲(chǔ)器要求產(chǎn)生影響。,,在把,詳細(xì)設(shè)計(jì)結(jié)果翻譯成程序,時(shí),總可
16、以應(yīng)用下述規(guī)則:,,,√,寫程序之前先簡化算術(shù)的和邏輯的表達(dá)式;,,,√,仔細(xì)研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)層往外移;,,,√,盡量避免使用多維數(shù)組;,,,√,盡量避免使用指針和復(fù)雜的表;,,,√,使用執(zhí)行時(shí)間短的算術(shù)運(yùn)算;,,,√,不要混合使用不同的數(shù)據(jù)類型;,,,√,盡量使用整數(shù)運(yùn)算和布爾表達(dá)式。,,在效率是決定性因素的應(yīng)用領(lǐng)域,盡量使用有良好優(yōu)化特性的編譯程序,以自動(dòng)生成高效目標(biāo)代碼。,23,存儲(chǔ)器效率,在大中型計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)限制不再是主要問題。在這種環(huán)境下,對(duì),內(nèi)存采取基于操作系統(tǒng)的分頁功能的虛擬存儲(chǔ)管理,。,存儲(chǔ)效率與操作系統(tǒng)的分頁功能直接有關(guān),。,,采用結(jié)構(gòu)化程序設(shè)計(jì)
17、,將程序功能合理分塊,,使每個(gè)模塊或一組密切相關(guān)模塊的程序體積大小與每頁的容量相匹配,,可減少頁面調(diào)度,減少內(nèi)外存交換,提高存儲(chǔ)效率。,,在微型計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)器的容量對(duì)軟件設(shè)計(jì)和編碼的制約很大。因此,要選擇可生成較短目標(biāo)代碼且存儲(chǔ)壓縮性能優(yōu)良的編譯程序,,有時(shí)需采用匯編程序。,,提高存儲(chǔ)器效率的關(guān)鍵是程序的簡單性。,24,輸入輸出的效率,輸入/輸出可分為,兩種類型,:,,面向,人,(,操作員,),的輸入/輸出,,面向,設(shè)備,的輸入/輸出,,高效的輸入/輸出是,,如果操作員能夠十分,方便、簡單,地錄入輸入數(shù)據(jù),或者能夠十分,直觀、一目了然,地了解輸出信息,則可以說面向人的輸入/輸出是高效的。
18、,,關(guān)于提高,設(shè)備,輸入,/,輸出效率的指導(dǎo)原則:,,輸入,/,輸出的請(qǐng)求應(yīng)當(dāng)最小化;,,對(duì)于所有的輸入,/,輸出操作,,安排適當(dāng)?shù)木彌_區(qū),,以減少頻繁的信息交換。,,對(duì)輔助存儲(chǔ),(,例如磁盤,),,,選擇盡可能簡單的,可接受的存取方法,;對(duì)輔助存儲(chǔ)的輸入,/,輸出,應(yīng)當(dāng),成塊傳送,;,,對(duì)終端或打印機(jī)的輸入,/,輸出,應(yīng)考慮設(shè)備特性,,盡可能改善輸入,/,輸出的質(zhì)量和速度;,,任何不易理解的,對(duì)改善輸入,/,輸出效果關(guān)系不大的措施都是不可取的;,,任何不易理解的所謂,“,超高效,”,的輸入,/,輸出是毫無價(jià)值的。,7.2,軟件測試基礎(chǔ),7.2.1,軟件測試的目標(biāo),,7.2.2,軟件測試準(zhǔn)則,
19、,7.2.3,測試方法,,7.2.4,測試步驟,,7.2.5,測試階段的信息流,,7.2.1,軟件測試的目的,引子,,軟件錯(cuò)誤將造成工作的巨大損失,,例:,1963,年,,,美國,,,飛往火星的火箭爆炸,,,損失,$ 10 million,。原因,: ORTRAN,循環(huán):,DO 5 I = 1, 3,誤寫為,DO 5 I = 1.3,。,,軟件測試的工作量占整個(gè)項(xiàng)目工作量比重極大,,軟件測試的工作量約占整個(gè)項(xiàng)目工作量的,40,%左右,對(duì)于要求極高的系統(tǒng)測試工作量還要成倍增加。,,例:微軟,Exchange 2000,和,Windows 2000,中的人員結(jié)構(gòu)見下表,,Exchange
20、 2000,Windows 2000,項(xiàng)目經(jīng)理,25人,約 250人,開發(fā)人員,140人,約 1700人,測試人員,350人,約 3200人,測試人員/開發(fā)人員,2: 5,1: 9,軟件測試的目的:問題與觀點(diǎn),問題,:,,為什么需要這么多人、花這么多代價(jià)進(jìn)行測試?目的何在?,,觀點(diǎn):,,觀點(diǎn)一:軟件測試的目的是為了 “證明程序正確” 。,,觀點(diǎn)二:軟件測試的目的是為了“找出程序中的錯(cuò)誤”。,,定義:,,Myers,對(duì)軟件測試目的提出以下觀點(diǎn)和定義:,,(,1,)軟件測試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程。,,(,2,)一個(gè)好的測試用例能夠發(fā)現(xiàn)至今尚未發(fā)現(xiàn)的錯(cuò)誤。,,(,3,)一個(gè)成功的測試是發(fā)現(xiàn)了
21、至今尚未發(fā)現(xiàn)的錯(cuò)誤的測試。,,,測試只能證明程序中有錯(cuò)誤,不能證明程序中沒有錯(cuò)誤,正確!,28,軟件測試的目的,在測試階段測試人員努力設(shè)計(jì)出一系列測試方案,目的卻是為了“,破壞,”已經(jīng)建造好的軟件系統(tǒng),—,竭力證明程序中有錯(cuò)誤不能按照預(yù)定要求正確工作。,,暴露問題并不是軟件測試的最終目的,發(fā)現(xiàn)問題是為了解決問題,,測試階段的根本目標(biāo)是,盡可能多地發(fā)現(xiàn)并排除軟件中潛藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的軟件系統(tǒng)交給用戶使用。,,通常想象的“測試是為了表明程序是正確的”,“成功的測試是沒有發(fā)現(xiàn)錯(cuò)誤的測試”是不正確的。,,測試的目標(biāo)決定了測試方案的設(shè)計(jì)。如果為了表明程序是正確的而進(jìn)行測試,就會(huì)設(shè)計(jì)一些不易暴露
22、錯(cuò)誤的測試方案;相反,如果測試是為了發(fā)現(xiàn)程序中的錯(cuò)誤,就會(huì)力求設(shè)計(jì)出最能暴露錯(cuò)誤的測試方案。,測試決不能證明軟件是正確的,,也不能證明錯(cuò)誤的不存在,,它只能力求,證明錯(cuò)誤的存在。,29,軟件測試的有關(guān)問題,軟件缺陷是什么?,,誰執(zhí)行測試?,,開發(fā)者?,,單獨(dú)的測試人員?,,兩方面人員?,,測試什么?,,每個(gè)部分都測試?,,測試軟件中高風(fēng)險(xiǎn)部分?,,什么時(shí)候測試?,,怎樣測試?,,測試應(yīng)進(jìn)行到什么程度?,30,軟件缺陷,缺點(diǎn),(defect),,謬誤,(fault),,,問題,(problem),,錯(cuò)誤,(error),,異常,(anomaly),,偏差,(variance),,失敗,(fail
23、ure),,缺陷,(bug),這些缺陷都是,描述軟件失敗的術(shù)語!,SDE/T,,負(fù)責(zé)寫測試工具代碼,并利用測試工具對(duì)軟件進(jìn)行測試;或者開發(fā)測試工具為軟件測試工程師服務(wù)。,,負(fù)責(zé)理解產(chǎn)品的功能要求,然后對(duì)其進(jìn)行測試,檢查軟件有沒有錯(cuò)誤(,Bug,),,決定軟件是否具有穩(wěn)定性,并寫出相應(yīng)的測試規(guī)范和測試案例,STE,,測試工具軟件開發(fā)工程師,,(,Software Development Engineer in Test,,簡稱,SDE/T,),軟件測試有關(guān)人員,軟件測試工程師,,(,Software Test Engineer ,,簡稱,STE,),32,7.2.2,軟件測試準(zhǔn)則,(1),所有
24、測試都應(yīng)該能追溯到用戶需求。,,(2),應(yīng),“,盡早地規(guī)劃和不斷地進(jìn)行軟件測試,”,。,,(3),將,pareto,原則(,80%:20%,)應(yīng)用于軟件測試。,,(4),應(yīng)從,“,小規(guī)模,”,測試開始,,逐步進(jìn)行,“,大規(guī)模,”,測試。,,(5),窮舉測試是不可能的,。,,(6),應(yīng)由獨(dú)立的第三方從事測試工作。,,(7),測試用例應(yīng)由,輸入數(shù)據(jù),和,預(yù)期的輸出結(jié)果,兩部分組成。,,(8),程序修改后要回歸測試。,,(9),應(yīng)長期保留測試用例,直至系統(tǒng)廢棄。,軟件測試準(zhǔn)則,(1),所有測試都應(yīng)該能追溯到用戶需求,,軟件測試的目標(biāo)是發(fā)現(xiàn)錯(cuò)誤。從用戶的角度看,最嚴(yán)重的錯(cuò)誤是導(dǎo)致程序不能滿足用戶需求的
25、那些錯(cuò)誤。,,軟件中的問題,根源,可能在開發(fā)前期的各階段解決、糾正錯(cuò)誤也必須追 溯到前期工作。,可追溯性,軟件測試準(zhǔn)則(續(xù)),(2),盡早地規(guī)劃和不斷地進(jìn)行軟件測試,,把,“,盡早地和不斷地進(jìn)行軟件測試,”,作為軟件開發(fā)者的座右銘。概要設(shè)計(jì)時(shí)應(yīng)完成測試計(jì)劃,詳細(xì)的測試用例定義可在設(shè)計(jì)模型確定后開始,所有測試可在任何代碼被產(chǎn)生之前進(jìn)行計(jì)劃和設(shè)計(jì)。,,軟件測試不等于程序測試。,軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個(gè)期間;,,程序編寫的許多錯(cuò)誤是,“,先天的,”,。據(jù)統(tǒng)計(jì),查出的軟件錯(cuò)誤中,屬于,需求分析和軟件設(shè)計(jì)的錯(cuò)誤,約占,64%,,屬于,程序編寫的錯(cuò)誤,僅占,,36%,。,測試與開發(fā)前期工作的關(guān)
26、系,,決定軟件與系統(tǒng)的配合關(guān)系,,需求分析,,概要設(shè)計(jì),,詳細(xì)設(shè)計(jì),,編 碼,,單元測試,,集成測試,,確認(rèn)測試,,系統(tǒng)測試,,,,,,計(jì)劃,需求,,分析,設(shè),,計(jì),編,,碼,測,,試,錯(cuò)誤,A,錯(cuò)誤擴(kuò)展模型,早期錯(cuò)誤,中期錯(cuò)誤,后期錯(cuò)誤,錯(cuò)誤,B,錯(cuò)誤,B,36,軟件測試準(zhǔn)則(續(xù)),(3),在,軟件測試中應(yīng)用,pareto原則,,,pareto,原則指出:,測試發(fā)現(xiàn)的錯(cuò)誤中的,80%,很可能是由程序中,20%,的模塊造成的。當(dāng)然,問題是怎樣找出這些可疑的模塊并徹底地測試它們。,,(,4,)從“小規(guī)?!钡健按笠?guī)?!睖y試,,應(yīng)該從,“,小規(guī)模,”,測試開始,并,逐步進(jìn)行,“,大規(guī)模,”,測試。
27、,,通常,首先重點(diǎn)測試單個(gè)程序模塊,然后把測試重點(diǎn)轉(zhuǎn)向在集成的模塊簇中尋找錯(cuò)誤,最后在整個(gè)系統(tǒng)中尋找錯(cuò)誤。,軟件測試準(zhǔn)則(續(xù)),(,5,)注意測試用例的組成,,測試用例應(yīng)由,輸入數(shù)據(jù),和,預(yù)期的輸出結(jié)果,兩部分組成,并兼顧,合理,的輸入和,不合理,的輸入數(shù)據(jù),,(,6,)窮舉測試是不可能的,,所謂窮舉測試就是把程序所有可能的執(zhí)行路徑都檢查一遍的測試。由于程序的執(zhí)行路徑龐大(路徑組合爆炸),受時(shí)間、人力及其他資源的限制,窮舉法難以實(shí)施。,,經(jīng)精心設(shè)計(jì),,可用窮舉法覆蓋所有的程序邏輯,——,遍歷程序流圖的所有的邊(即每個(gè)語句都被執(zhí)行一次?。?,達(dá)到所要求的一定的測試可靠性。,窮舉測試?yán)?例,2,:
28、如圖,設(shè)程序含,4,個(gè)分支,,,循環(huán)次數(shù)≤,20,,從,A,到,B,的可能路徑有:,,5,1,+5,2,+,…,+5,20,≈,10,14,(條),,執(zhí)行時(shí)間,:,,設(shè)測試一次需,2ms,,則窮舉測試需,5,億年。,,,,,,,,,,,,,,A,B,例,1:,,輸入三角形的三條邊長,可采用的測試用例數(shù),(,設(shè)字長,16,位,),為(次),,2,16,X2,16,,X2,16,≈3X10,10,(次),,執(zhí)行時(shí)間,:,,設(shè)測試一次需,1ms,,約需一萬年。,a,b,c,軟件測試準(zhǔn)則(續(xù)),(,7,)為了達(dá)到最佳的測試效果,應(yīng)該由獨(dú)立的第三方從事測試工作。,,所謂,“,最佳效果,”,是指有最大可
29、能性發(fā)現(xiàn)錯(cuò)誤的測試。由于心理上的原因,開發(fā)軟件的軟件工程師并不是完成全部測試工作的最佳人選,通常他們主要承擔(dān)模塊測試工作。而其他測試應(yīng)由第三方承擔(dān)。,,(,8,)程序修改后要回歸測試,,程序正常修改或糾錯(cuò)修改之后,可能引入新的錯(cuò)誤,因此必須進(jìn)行回歸測試。,,(,9,)應(yīng)長期保留測試用例,直至系統(tǒng)廢棄。,,保留測試用例,可用于回歸測試、新版本測試。也可在程序出現(xiàn)錯(cuò)誤之后,進(jìn)行分析,尋找出錯(cuò)原因、漏測原因。,軟件測試的,,策略和方法,靜態(tài)測試方法,動(dòng)態(tài)測試方法,,人工測試方法,計(jì)算機(jī)輔助靜,,態(tài)分析方法,白盒測試方法,黑盒測試方法,,,,7.2.3,測試方法,靜態(tài)測試,靜態(tài)測試:,,基本特征是在對(duì)
30、軟件需求規(guī)格說明書、軟件設(shè)計(jì)說明書、源程序進(jìn)行,分析、檢查和審閱,,不實(shí)際運(yùn)行被測試的軟件。,,分析、檢查和審閱內(nèi)容:,,是否符合相關(guān)的標(biāo)準(zhǔn)和規(guī)范;,,通過結(jié)構(gòu)分析、流圖分析、符號(hào)執(zhí)行等,指出軟件缺陷。,,效果,,靜態(tài)測試約可找出,30,~,70%,的邏輯設(shè)計(jì)錯(cuò)誤,.,動(dòng)態(tài)測試:,,,通過運(yùn)行軟件來檢驗(yàn)軟件的動(dòng)態(tài)行為和運(yùn)行結(jié)果的正確性。,,,動(dòng)態(tài)測試的兩個(gè)基本要素:,,被測試程序,,測試數(shù)據(jù)(測試用例),,,動(dòng)態(tài)測試方法:,,(1),選取定義域有效值,,,或定義域外無效值;,,(2),對(duì)已選取值決定,預(yù)期的結(jié)果;,,(3),用選取值執(zhí)行程序;,,(4),執(zhí)行結(jié)果,與,預(yù)期的結(jié)果,相比,,,不吻
31、和則程序有錯(cuò),。,,測試用例,ID,,目的,,前提,,輸入,,預(yù)期輸出,,后果,,執(zhí)行歷史,,日期 結(jié)果 版本 執(zhí)行人,動(dòng)態(tài)測試,動(dòng)態(tài)測試技術(shù),白盒測試法,(White Box Testing),,把程序看成裝在一個(gè)透明的白盒子里,測試者完全知道程序的結(jié)構(gòu)和處理算法,用于檢測程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。,,如果知道軟件的內(nèi)部工作過程,可以通過測試來檢驗(yàn)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說明書的規(guī)定正常進(jìn)行。,,白盒測試又稱為結(jié)構(gòu)測試。,,黑盒測試法,(Black Box Testing),,把程序看作一個(gè)黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。只檢查程序功能是
32、否按照規(guī)格說明書的規(guī)定正常使用。,,如果已經(jīng)知道了軟件應(yīng)該具有的功能,可以通過測試來檢驗(yàn)是否每個(gè)功能都能正常使用。,,黑盒測試又稱為功能測試。,白盒測試也叫,玻璃盒測試,(,Glass Box Testing),,對(duì)軟件的過程性細(xì)節(jié)做細(xì)致的檢查。,,這一方法是把測試對(duì)象看作一個(gè)打開的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,來設(shè)計(jì)或選擇,測試用例,,對(duì)程序所有,邏輯路徑,進(jìn)行測試。,白盒測試,,的內(nèi)容,對(duì)程序模塊的所有,獨(dú)立,,執(zhí)行路徑,至少測試一次,對(duì)所有的,邏輯判定,,取,,“,真,”,與取,“,假,”,的兩種情況,,都能至少測試一次。,在循環(huán)的邊界和運(yùn)行邊,,界限內(nèi)執(zhí)行循環(huán)體
33、,測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有,,效性。,白盒測試,(White Box Testing),已知產(chǎn)品的功能設(shè)計(jì)規(guī)格,可以進(jìn)行測試證明每個(gè)實(shí)現(xiàn)了的功能是否符合要求。,,黑盒測試,,的內(nèi)容,,Alpha/Beta Testing,菜單/幫助測試,發(fā)行測試,回歸測試,,軟件,,黑盒測試,(Black Box Testing),7.2.4,測試步驟,1.,模塊測試,---,程序的單元,,把每個(gè)模塊作為一個(gè)單獨(dú)的實(shí)體來測試。模塊測試通常又稱為單元測試。在測試中所發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)計(jì)的錯(cuò)誤。,,2.,子系統(tǒng)測試,---,程序的局部,,把經(jīng)過單元測試的模塊放在一起形成一個(gè)子系統(tǒng)來測試。模塊相互間的協(xié)調(diào)和通信是
34、這個(gè)測試過程中的主要問題,著重測試模塊的接口。,,3.,系統(tǒng)測試,---,子系統(tǒng)的集成,,把經(jīng)過測試的子系統(tǒng)裝配成一個(gè)完整的系統(tǒng)來測試。驗(yàn)證系統(tǒng)能否提供需求說明書中指定的功能,動(dòng)態(tài)特性是否符合預(yù)定要求。其中發(fā)現(xiàn)的往往是軟件設(shè)計(jì)中的錯(cuò)誤,也可能是需求說明中的錯(cuò)誤。子系統(tǒng)測試和系統(tǒng)測試,都兼有檢測和組裝兩重含義,通常稱為集成測試。,,4.,驗(yàn)收測試,---,用戶參與系統(tǒng)整體測試,,把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測試,測試內(nèi)容與系統(tǒng)測試基本類似,但它是在用戶積極參與下進(jìn)行的,而且主要使用實(shí)際數(shù)據(jù)進(jìn)行測試。目的是驗(yàn)證系統(tǒng)確實(shí)能夠滿足用戶的需要,其中發(fā)現(xiàn)的往往是系統(tǒng)需求說明書中的錯(cuò)誤。驗(yàn)收測試也稱為確認(rèn)測
35、試。,,5.,平行運(yùn)行,---,新舊系統(tǒng)共存,,平行運(yùn)行:就是同時(shí)運(yùn)行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個(gè)系統(tǒng)的處理結(jié)果。,,這樣做的具體目的有如下幾點(diǎn):,,(1),可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(xiǎn);,,(2),用戶能有一段熟悉新系統(tǒng)的時(shí)間;,,(3),可以驗(yàn)證用戶指南和使用手冊(cè)之類的文檔;,?(4),能夠以準(zhǔn)生產(chǎn)模式對(duì)新系統(tǒng)進(jìn)行全負(fù)荷測試,進(jìn)一步驗(yàn)證性能指標(biāo)。,7.2.5,測試階段的信息流,測試階段的的輸入信息有兩類:,,(1),軟件配置,包括需求說明書、設(shè)計(jì)說明書和源程序清單等;,,(2),測試配置,包括測試計(jì)劃和測試方案。,,測試方案包括:測試用例:測試時(shí)使用的
36、輸入數(shù)據(jù); 每組輸入數(shù)據(jù)預(yù)定要檢驗(yàn)的功能,以及每組輸入數(shù)據(jù)預(yù)期應(yīng)該得到的正確輸出。,,測試結(jié)果和預(yù)期結(jié)果不一致時(shí),程序中有錯(cuò)誤,進(jìn)入調(diào)試階段。由程序的編寫者負(fù)責(zé)調(diào)試。,,如果經(jīng)常出現(xiàn)要求修改設(shè)計(jì)的嚴(yán)重錯(cuò)誤,那么軟件的質(zhì)量和可靠性是值得懷疑的。,,如果軟件功能完成得很正常,遇到的錯(cuò)誤也很容易改正,仍然應(yīng)該考慮兩種可能:,,(1),軟件的可靠性是可以接受的;,,(2),所進(jìn)行的測試尚不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤。,,如果經(jīng)過測試,一個(gè)錯(cuò)誤也沒有被發(fā)現(xiàn),則很可能是對(duì)測試配置思考不充分,以致不能暴露軟件中潛藏的錯(cuò)誤。,測試階段的信息流,測試,軟件配置,結(jié)果,,分析,,評(píng)價(jià),測試結(jié)果,調(diào)試,,排錯(cuò),改正的,,軟
37、件,預(yù)期結(jié)果,可靠性,,模型及,,分析,預(yù)測的,,可靠性,錯(cuò)誤,出錯(cuò)率,,數(shù)據(jù),測試配置,測試工具,,,需求規(guī)格說明書,,軟件設(shè)計(jì)說明書,,被測源程序,,測試計(jì)劃,,測試用例,,(,測試數(shù)據(jù),),,測試驅(qū)動(dòng)程序,測試數(shù)據(jù)自動(dòng)生成程序、靜態(tài)分析程序、動(dòng)態(tài)分析程序、測試結(jié)果分析程序、以及驅(qū)動(dòng)測試的測試數(shù)據(jù)庫等。,,圖,7.1,測試階段的信息流,49,軟件測試的對(duì)象,軟件測試并不等于程序測試。,軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個(gè)期間。,因此,需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)以及程序編碼等所得到的,文檔資料,,包括需求規(guī)格說明、概要設(shè)計(jì)說明、詳細(xì)設(shè)計(jì)規(guī)格說明以及源程序,都應(yīng)成為軟件測試的對(duì)象。,,,軟件
38、,=,程序,+,文檔!,7.3,單元測試,7.3.1,測試重點(diǎn),,7.3.2,(人工)代碼審查,,7.3.3,計(jì)算機(jī)測試,,7.3.1,測試重點(diǎn),1.,模塊接口,,對(duì)通過模塊接口的數(shù)據(jù)流進(jìn)行測試,如果數(shù)據(jù)不能正確地進(jìn)出,所有其他測試都是不切實(shí)際的。主要檢查下述幾個(gè)方面:參數(shù)的數(shù)目、次序、屬性或單位系統(tǒng)與變?cè)欠褚恢?;是否修改了只作輸入用的變?cè)?;全局變量的定義和用法在各個(gè)模塊中是否一致。,,2.,局部數(shù)據(jù)結(jié)構(gòu),,對(duì)模塊來說,局部數(shù)據(jù)結(jié)構(gòu)是常見的錯(cuò)誤來源。主要檢查內(nèi)容包括局部數(shù)據(jù)說明、初始化、默認(rèn)值等方面的錯(cuò)誤。,,3.,重要的執(zhí)行通路,,由于不可能進(jìn)行窮盡測試,在單元測試期間選擇最有代表性、最可
39、能發(fā)現(xiàn)錯(cuò)誤的執(zhí)行通路進(jìn)行測試就是十分關(guān)鍵的。應(yīng)該設(shè)計(jì)測試方案用來發(fā)現(xiàn)由于錯(cuò)誤的計(jì)算、不正確的比較或不適當(dāng)?shù)目刂屏鞫斐傻腻e(cuò)誤。,,4.,出錯(cuò)處理通路,,好的設(shè)計(jì)應(yīng)該能預(yù)見出現(xiàn)錯(cuò)誤的條件,并且設(shè)置適當(dāng)?shù)奶幚礤e(cuò)誤的通路。應(yīng)該著重測試下述一些可能發(fā)生的錯(cuò)誤:,,(1),對(duì)錯(cuò)誤的描述是難以理解的;,,(2),記下的錯(cuò)誤與實(shí)際遇到的錯(cuò)誤不同;,,(3),在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件已經(jīng)引起系統(tǒng)干預(yù);,,(4),對(duì)錯(cuò)誤的處理不正確;,,(5),描述錯(cuò)誤的信息不足以幫助確定造成錯(cuò)誤的位置。,,5.,邊界條件,,邊界測試在單元測試中非常重要。軟件常常在它的邊界上失效。 應(yīng)使用剛好小于、剛好等于和剛好大于最大
40、值或最小值的測試方案,非??赡馨l(fā)現(xiàn)軟件中的錯(cuò)誤。,7.3.2,代碼審查,代碼審查,,,由審查小組人工測試源程序稱為代碼審查。是一種非常有效的程序驗(yàn)證技術(shù),對(duì)于典型的程序來說,可以查出,30%,~,70%,的邏輯設(shè)計(jì)錯(cuò)誤和編碼錯(cuò)誤。,,審查小組組成:,,(1),組長,應(yīng)該是一個(gè)很有能力的程序員,而且沒有直接參與這項(xiàng)工程;,,(2),程序的設(shè)計(jì)者;,,(3),程序的編寫者;,,(4),程序的測試者。,審查的步驟:,,小組成員先研究設(shè)計(jì)說明書,力求理解這個(gè)設(shè)計(jì)。,,由設(shè)計(jì)者扼要地介紹他的設(shè)計(jì)。,,審查會(huì)上程序的編寫者逐個(gè)語句地解釋是怎樣用程序代碼實(shí)現(xiàn)這個(gè)設(shè)計(jì)的。,,審查會(huì)上對(duì)照程序設(shè)計(jì)常見錯(cuò)誤,分析
41、審查這個(gè)程序。,,當(dāng)發(fā)現(xiàn)時(shí),記錄錯(cuò)誤,繼續(xù)審查。,代碼審查的方法,討論:,,是由一些有經(jīng)驗(yàn)的測試人員閱讀程序文本及有關(guān)文檔,對(duì)程序的結(jié)構(gòu)與功能、數(shù)據(jù)的結(jié)構(gòu)、接口、控制流以及語法進(jìn)行討論和分析,從而揭示程序中的錯(cuò)誤。,,走查:,,是由測試人員用一些測試用例沿程序邏輯運(yùn)行,并隨時(shí)記錄程序的蹤跡;然后進(jìn)行分析,發(fā)現(xiàn)程序中的錯(cuò)誤。(人工模仿計(jì)算機(jī)執(zhí)行程序),7.3.3,計(jì)算機(jī)測試,模塊的“計(jì)算機(jī)測試”,,在這里是指使用計(jì)算機(jī)系統(tǒng)對(duì)“模塊”作為獨(dú)立測試對(duì)象進(jìn)行測試。,,由于模塊并不是一個(gè)獨(dú)立的程序,要運(yùn)行它就必須為其開發(fā),驅(qū)動(dòng)軟件,和,(,或,),存根(樁)軟件,。,,模塊測試的“驅(qū)動(dòng)程序”,,“驅(qū)動(dòng)程
42、序”也就是一個(gè)“主程序”,它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出有關(guān)的結(jié)果。,,模塊測試的“存根程序”,,存根程序(或稱為“樁程序”)代替被測試的模塊所調(diào)用的模塊,也稱為“虛擬子程序”。它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,印出對(duì)入口的檢驗(yàn)或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。,被測模塊,驅(qū)動(dòng)程序,樁程序,1,樁程序,2,……,測試用例,測試用例,測試用例,測試內(nèi)容:,,I/O,接口,,局部數(shù)據(jù)結(jié)構(gòu),,邊界條件,,程序路徑,,錯(cuò)誤處理路徑,結(jié)果,單元測試的環(huán)境,例:對(duì)正文加工系統(tǒng)的“編輯”模塊測試,測試任務(wù),:,,假定要測試正文加工系統(tǒng)中編號(hào)為,3.0,的“編
43、輯”模塊。,,驅(qū)動(dòng)程序,:TEST DRIVER,,說明必要的變量,,接收測試數(shù)據(jù),(,字符串,),,調(diào)用被測模塊“編輯”功能,,并且設(shè)置正文編輯模塊的編輯功能,(,如“修改”、“添加”等,),。,,存根程序,:TEST STUB,,簡化地模擬下層模塊,完成具體的編輯功能,(,如“修改”,CHANGE,、“添加”,APPEND,等,),。,,CHANGE,和,APPEND,可以做成二個(gè)存根程序,也可只用一個(gè)存根程序模擬正文編輯模塊的所有下層模塊。,圖,7.2,正文加工系統(tǒng)的層次圖,計(jì)算機(jī)測試:評(píng)述,代碼審查是人工測試,一次審查會(huì)上可以發(fā)現(xiàn)許多錯(cuò)誤,但難以發(fā)現(xiàn)編碼中的出錯(cuò)細(xì)節(jié),一般用于模塊的初步
44、測試。,,用計(jì)算機(jī)測試的方法發(fā)現(xiàn)錯(cuò)誤之后,通常需要先改正這個(gè)錯(cuò)誤才能繼續(xù)測試,因此錯(cuò)誤是一個(gè)一個(gè)地發(fā)現(xiàn)并改正的。,,計(jì)算機(jī)測試需要開發(fā)驅(qū)動(dòng)程序和存根程序,增加了一些系統(tǒng)開發(fā)工作量。可在集成測試中采用增量測試法來同時(shí)完成模塊測試。,,人工測試和計(jì)算機(jī)測試互相補(bǔ)充,相輔相成,缺少其中任何一種方法都會(huì)使查找錯(cuò)誤的效率降低。,7.4,集成測試,7.4.1,自頂向下集成,,7.4.2,自底向上集成,,7.4.3,不同集成測試策略的比較,,7.4.4,回歸測試,,,集成測試概念及目標(biāo),集成測試,,把模塊按照設(shè)計(jì)要求組裝起來的同時(shí)進(jìn)行測試,目的是發(fā)現(xiàn)模塊接口的錯(cuò)誤。集成測試是測試和組裝軟件的系統(tǒng)化技術(shù)。,,
45、集成測試的其主要目標(biāo)是,發(fā)現(xiàn)與接口有關(guān)的問題,如:,,數(shù)據(jù)穿過接口時(shí)可能丟失;,,一個(gè)模塊對(duì)另一個(gè)模塊可能由于疏忽而造成有害影響;,,把子功能組合起來可能不產(chǎn)生預(yù)期的主功能;,,個(gè)別看來是可以接受的誤差可能積累到不能接受的程度;,,全程數(shù)據(jù)結(jié)構(gòu)可能有問題等等。,模塊組裝成系統(tǒng)的方法,1.,非漸增式測試方法,,非漸增式測試(整體拼裝)先分別測試每個(gè)模塊,再把所有模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程序進(jìn)行測試,最終得到要求的軟件系統(tǒng)。,,,2.,漸增式測試,,把下一個(gè)要測試的模塊同已經(jīng)測試好的模塊結(jié)合起來進(jìn)行測試,測試完以后再把下一個(gè)應(yīng)該測試的模塊結(jié)合進(jìn)來測試。,,在組裝過程中邊連接邊測試,以發(fā)現(xiàn)
46、連接過程中產(chǎn)生的問題。,,通過增殖逐步組裝成為要求的軟件系統(tǒng)。這種每次增加一個(gè)模塊的方法實(shí)際上同時(shí)完成單元測試和集成測試,.,,,在進(jìn)行集成測試時(shí)普遍采用漸增式測試方法。,非漸增式測試,(a),軟件結(jié)構(gòu),(b),測試所有單個(gè)模塊,(c),測試整個(gè)系統(tǒng),驅(qū)動(dòng),樁,漸增方式集成測試的策略,漸增方式把模塊結(jié)合到程序中去時(shí),有兩種集成策略:,,自頂向下集成,,自底向上集成,,,在實(shí)踐中常采用混合的策略。,7.4.1,自頂向下集成,這種測試從“主控模塊”開始,沿著程序結(jié)構(gòu)的控制層次向下移動(dòng),逐漸將各個(gè)模塊結(jié)合(組裝)進(jìn)來,指導(dǎo)所有底層模塊。,,模塊組裝進(jìn)來的順序可有二種策略:“深度有限”和“寬度(或稱廣
47、度)優(yōu)先”。,,自頂向下測試需要開發(fā)“存根程序”。,深度(寬度)優(yōu)先組裝,需要存根程序,圖,7.3,自頂向下結(jié)合,7.4.2,自底向上集成,這種測試從“底層模塊”(即葉子模塊)開始,向上移動(dòng),逐步將其上層模塊組裝進(jìn)來,直到主控模塊。,,同樣,模塊組裝進(jìn)來的順序可有二種策略:“深度有限”和“寬度優(yōu)先”。,,自底向上測試需要開發(fā)“啟動(dòng)模塊”,,自底向上組裝,需要驅(qū)動(dòng)程序,圖,7.4,自底向上結(jié)合,64,7.4.3,回歸測試,任何成功的測試都會(huì)發(fā)現(xiàn)錯(cuò)誤,而且錯(cuò)誤必須被改正。每當(dāng),改正軟件錯(cuò)誤,的時(shí)候,,軟件配置的某些成分(程序、文檔或數(shù)據(jù))也被修改了,。,回歸測試就是用于保證由于調(diào)試或其他原因引起的
48、變化,不會(huì)導(dǎo)致非預(yù)期的軟件行為或額外錯(cuò)誤的測試活動(dòng)。,,即:,回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個(gè)子集,以保證修改變化沒有帶來非預(yù)期的副作用。,,回歸測試集(已執(zhí)行過的測試用例的子集)包括下述,3,類不同的測試用例:,,(,1,) 檢測軟件全部功能的代表性測試用例;,,(,2,) 專門針對(duì)可能受修改影響的軟件功能的附加測試;,,(,3,) 針對(duì)被修改過的軟件成分的測試。,7.5,確認(rèn)測試,7.5.1,確認(rèn)測試的范圍,,7.5.2,軟件配置復(fù)查,,7.5.3Alpha,和,Beta,測試,,66,7.5,確認(rèn)測試,確認(rèn),測試,,也稱為驗(yàn)收測試,它的目標(biāo)是,驗(yàn)證,軟件的,有效性,。,,確認(rèn)(,
49、validation,),:,,指的是為了保證軟件確實(shí)滿足了用戶需求而進(jìn)行的一系列活動(dòng)。,,驗(yàn)證(,verification,):,,指的是保證軟件正確地實(shí)現(xiàn)了某個(gè)特定要求的一系列活動(dòng)。,,有效性,:,,如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。,,,需求分析階段產(chǎn)生的,軟件需求規(guī)格說明書,,準(zhǔn)確地描述了用戶對(duì)軟件的合理期望,因此,是軟件有效性的標(biāo)準(zhǔn),也是進(jìn)行確認(rèn)測試的基礎(chǔ)。,67,7.5.1,確認(rèn)測試的范圍,確認(rèn)測試必須有用戶積極參與,或者以用戶為主進(jìn)行。,用戶應(yīng)該參與設(shè)計(jì)測試方案,使用用戶界面輸入測試數(shù)據(jù)并且分析評(píng)價(jià)測試的輸出結(jié)果。,,確認(rèn)測試通常使用黑盒測試法。,應(yīng)該
50、仔細(xì)設(shè)計(jì)測試計(jì)劃和測試過程,測試計(jì)劃包括要進(jìn)行的測試的種類及進(jìn)度安排,測試過程規(guī)定了用來檢測軟件是否與需求一致的測試方案。,,通過測試和調(diào)試要保證軟件能,滿足,所有,功能要求,,能達(dá)到每個(gè),性能要求,,,文檔資料是準(zhǔn)確而完整,的,此外,還應(yīng)該保證軟件能滿足其他,預(yù)定的要求,(例如,安全性、可移植性、兼容性和可維護(hù)性等)。,68,7.5.2,軟件配置復(fù)查,確認(rèn)測試的一個(gè)重要內(nèi)容是復(fù)查軟件配置。,軟件配置,指軟件需求規(guī)格說明、軟件設(shè)計(jì)規(guī)格說明、源代碼等。,,復(fù)查的目的,是保證軟件配置的所有成分都齊全,質(zhì)量符合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必須的細(xì)節(jié),而且已經(jīng)編好目錄。,,除了按合同規(guī)
51、定的內(nèi)容和要求,由人工審查軟件配置之外,在,確認(rèn)測試過程中還應(yīng)該嚴(yán)格遵循用戶指南及其他操作程序,,以便檢驗(yàn)這些使用手冊(cè)的完整性和正確性。必須仔細(xì)記錄發(fā)現(xiàn)的遺漏或錯(cuò)誤,并且適當(dāng)?shù)匮a(bǔ)充和改正。,69,7.5.3 Alpha,和,Beta,測試,Alpha,測試,,由用戶在開發(fā)者的場所進(jìn)行,,,并且在開發(fā)者對(duì)用戶的,“,指導(dǎo),”,下進(jìn)行測試。開發(fā)者負(fù)責(zé)記錄發(fā)現(xiàn)的錯(cuò)誤和使用中遇到的問題。該測試是在受控的環(huán)境中進(jìn)行的。,,Beta,測試,,由軟件的最終用戶們?cè)谝粋€(gè)或多個(gè)客戶場所進(jìn)行,。,Beta,測試是軟件在開發(fā)者不能控制的環(huán)境中的,“,真實(shí),”,應(yīng)用。用戶記錄在,Beta,測試過程中遇到的一切問
52、題(真實(shí)的或想像的),并且定期把這些問題報(bào)告給開發(fā)者。接收到在,Beta,測試期間報(bào)告的問題之后,開發(fā)者對(duì)軟件產(chǎn)品進(jìn)行必要的修改,并準(zhǔn)備向全體客戶發(fā)布最終的軟件產(chǎn)品。,70,如何實(shí)施測試?,關(guān)鍵技術(shù),,----,設(shè)計(jì)測試方案。,,測試方案,,----,包括:具體的測試目的,應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。,,通常又把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為,測試用例,。其中,最困難的問題是設(shè)計(jì)測試用例的輸入數(shù)據(jù),。,,不同的測試數(shù)據(jù)發(fā)現(xiàn)程序錯(cuò)誤的能力差別很大,為了提高測試效率降低測試成本,應(yīng)該選用高效的測試數(shù)據(jù)。因?yàn)椴豢赡苓M(jìn)行窮盡的測試,,選用少量,“,最有效的,”,測試數(shù)據(jù),做到盡可能完備的測試就更重要
53、了。,71,測試方案哪一種好呢?,設(shè)計(jì)測試方案的基本目標(biāo)是,確定一組最可能發(fā)現(xiàn)某個(gè)錯(cuò)誤或某類錯(cuò)誤的測試數(shù)據(jù)。,,現(xiàn)已經(jīng)研究出許多設(shè)計(jì)測試數(shù)據(jù)的技術(shù),這些技術(shù),各有優(yōu)缺點(diǎn),沒有哪一種是最好的,,更沒有哪一種可以代替其余所有技術(shù);同一種技術(shù)在不同的應(yīng)用場合效果可能相差很大,因此,,通常需要聯(lián)合使用多種設(shè)計(jì)測試數(shù)據(jù)的技術(shù)。,7.6,白盒測試技術(shù),7.6.1,邏輯覆蓋,,1.,語句覆蓋,,2.,判定覆蓋,,3.,條件覆蓋,,4.,判定,/,條件覆蓋,,5.,條件組合覆蓋,,6.,點(diǎn)覆蓋,,7.,邊覆蓋,,8.,路徑覆蓋,,7.6.2,控制結(jié)構(gòu)測試,,1.,基本路徑測試,,2.,條件測試,,3.,循環(huán)測
54、試,73,7.6.1,邏輯覆蓋,邏輯覆蓋,----,是以,程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ),的設(shè)計(jì)測試用例的技術(shù)。,,,(1),語句覆蓋,(2),判定覆蓋,,(3),條件覆蓋,(4),判定,/,條件覆蓋,,(5),條件組合覆蓋,(6),點(diǎn)覆蓋,,(7),邊覆蓋,(8),路徑覆蓋,74,發(fā)現(xiàn)錯(cuò)誤,,的能力,標(biāo) 準(zhǔn),含 義,1,語句覆蓋,每條,語,句,至少執(zhí)行一次,2,判定覆蓋,每一判定的每個(gè),分支,至少執(zhí)行一次,3,條件覆蓋,每一判定中的每個(gè),條件,,分別按,“,真,”,、,,“,假,”,至少各執(zhí)行一次,4,判定/條件覆蓋,同時(shí)滿足,判定覆蓋,和,條件覆蓋,的要求,5,條件組合覆蓋,求出判定
55、中,所有條件的各種可能組合,,值,每一可能的條件組合至少執(zhí)行一次,邏輯覆蓋測試的,5,種標(biāo)準(zhǔn),弱,,,,,,,,,,,強(qiáng),75,1.,語句覆蓋,使程序中每個(gè)語句至少執(zhí)行一次。,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,只需設(shè)計(jì)一個(gè)測試用例,:,,,輸入數(shù)據(jù):,A=2,,,,,B=0,,,,,X=4,,,即達(dá)到了語句覆蓋。,語句覆蓋是,最弱,的邏輯覆蓋,,(如:,AND,寫成,OR,,,X>1,,寫成,,X <1,,查不出來,),76,,2,、 判定覆蓋,(,分支覆蓋,),使每個(gè)判定的真假分支都至少執(zhí)行一
56、次。,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,可設(shè)計(jì)兩組測試用例,:,,A=3,,,B=0,,,X=3,,可覆蓋,c,、,d,分支,,,A=2,,,B=1,,,X=1,,可覆蓋,b,、,e,分支,,,兩組測試用例可覆蓋所有判定的真假分支,,判定覆蓋仍是,弱,的邏輯覆蓋,只覆蓋了全部路徑的一半。,77,3,、條件覆蓋,使每個(gè)判定的每個(gè)條件的可能取值至少執(zhí)行一次。,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,滿足條件
57、,:,T1,T1,,,T2,T2,,T3,T3,,T4,T4,第一判定表達(dá)式,:,,設(shè)條件,A>1,取真 記為,T1,,,,假,,T1,,,條件,B=0,取真 記為,T2,,,,假,,T2,,第二判定表達(dá)式,:,,設(shè)條件,A=2,取真 記為,T3,,,,假,,T3,,,條件,X>1,取真 記為,T4,,,,假,,T4,78,測試用例 通過 滿足的 覆蓋,,A B X,路徑 條件 分支,,1 0 3,abe,T1,T2,T3,T4,b,e,,2 1 1,abe,T1,T2,T3,T4,b,e,,,,,兩個(gè)測試用例
58、覆蓋了四個(gè)條件八種可能取值。,,未覆蓋,c,、,d,分支,不滿足判定覆蓋的要求,.,,,條件覆蓋不一定包含判定覆蓋,,判定覆蓋也不一定包含條件覆蓋,,(A>1) AND (B=0),(A=2) OR (X>1),X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,79,4.,判定,/,條件覆蓋,選取足夠多的測試用例,使判斷中的每個(gè)條件的所有可能取值至少執(zhí)行一次,同時(shí)每個(gè)判斷本身的所有可能判斷結(jié)果至少執(zhí)行一次,.,,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,滿足條件,:,T1,T1,,,T2,T2
59、,,T3,T3,,T4,T4,80,測試用例 通過 滿足的條件 覆蓋,,A B X,路徑 分支,,2 0 4 ace T1,T2,T3,T4,c,e,,1 1 1,abd,T1,T2,T3,T4,b,d,,能同時(shí)滿足判定、條件兩種覆蓋標(biāo)準(zhǔn)的取值,5,、條件組合覆蓋,,所有可能的條件取值組合至少執(zhí)行一次,,,A>1, B=0,,A>1, B≠0,,A≯1, B=0,,A≯1, B≠0,,A=2, X>1,,A=2, X≯1,,A≠2, X>1,,A≠2, X≯1,測試用例
60、通過 滿足的 覆蓋,,A B X,路徑 條件 分支,,2 0 4 ace T1,T2,T3,T4,c,e,,2 1 1,abe,T1,T2,T3,T4,b,e,,1 0 2,abd,T1,T2,T3,T4,b,d,,1 1 1,abd,T1,T2,T3,T4,b,d,,(A>1) AND (B=0),(A=2) OR (X>1),X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,82,以上根據(jù)測試數(shù)據(jù)對(duì)源程序,語句檢測,的詳盡程度,簡單討論了幾種邏輯覆蓋標(biāo)準(zhǔn)。在上面的分析過程中常常談到測試數(shù)據(jù)執(zhí)行的程序路
61、徑,顯然,測試數(shù)據(jù)可以檢測的程序路徑的多少,也反映了對(duì)程序測試的詳盡程度。從對(duì),程序路徑的覆蓋程度,分析,能夠提出下述一些主要的邏輯覆蓋標(biāo)準(zhǔn)。,語句覆蓋法評(píng)述,83,6.,點(diǎn)覆蓋,,圖論中點(diǎn)覆蓋的概念定義如下:,,如果連通圖,G,的子圖,G′,是連通的,而且包含,G,的所有結(jié)點(diǎn),則稱,G′,是,G,的點(diǎn)覆蓋。,,在第,5,章中已經(jīng)講述了從程序流程圖導(dǎo)出流圖的方法。在正常情況下流圖是連通的有向圖。滿足點(diǎn)覆蓋標(biāo)準(zhǔn)要求選取足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖的每個(gè)結(jié)點(diǎn)一次,由于流圖的每個(gè)結(jié)點(diǎn)與一條或多條語句相對(duì)應(yīng),顯然,,點(diǎn)覆蓋標(biāo)準(zhǔn)和語句覆蓋標(biāo)準(zhǔn)是相同的,。,84,7.,邊覆蓋,,圖論中邊
62、覆蓋的定義是:,,如果連通圖,G,的子圖,G″,是連通的,而且包含,G,的所有邊,則稱,G″,是,G,的邊覆蓋。,,為了滿足邊覆蓋的測試標(biāo)準(zhǔn),要求選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條邊一次。通常邊覆蓋和判定覆蓋是一致的。,,8.,路徑覆蓋,,路徑覆蓋的含義是,選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次,(,如果程序圖中有環(huán),則要求每個(gè)環(huán)至少經(jīng)過一次,),。,85,7.6.2,控制結(jié)構(gòu)測試,1.,基本路徑測試,,2.,條件測試,,3.,循環(huán)測試,1.,基本路徑測試,方法概要,,“基本路徑測試”是,McCabe,提出的基于“程序環(huán)形復(fù)雜度”來確定程序中路徑進(jìn)行測試的一
63、種控制結(jié)構(gòu)測試方法,屬于白盒測試技術(shù)。,,設(shè)計(jì)測試用例時(shí),先計(jì)算程序的環(huán)形復(fù)雜度,以環(huán)形復(fù)雜度為指南,定義執(zhí)行路徑的基本集合,然后從該基本集合導(dǎo)出測試用例。,,覆蓋能力,,所設(shè)計(jì)出的測試用例可保證程序中的每一條語句至少執(zhí)行一次(語句覆蓋),且每個(gè)條件語句在執(zhí)行時(shí)分別取真、假值至少一次(判定覆蓋、或條件覆蓋(如果拆成元條件))。,87,基本路徑測試步驟,,根據(jù)過程設(shè)計(jì)結(jié)果轉(zhuǎn)化成程序相應(yīng)的流圖,,按照教材,6.4,節(jié)中的方法。,,計(jì)算程序流圖的環(huán)路復(fù)雜度,,由于程序流圖的“環(huán)路復(fù)雜度”,>=,程序“獨(dú)立路徑基本集”中的獨(dú)立路徑條數(shù),這可確保程序中每個(gè)邊至少經(jīng)過一次測試所必需的測試用例數(shù)目的上界。,
64、,確定線性獨(dú)立路徑的基本集合,,按照?qǐng)D論,一條獨(dú)立路徑至少包含有一條在其他獨(dú)立路徑中從未有過的邊。,,在程序流圖中,一條獨(dú)立路徑至少包含有一條在其他獨(dú)立路徑中從未出現(xiàn)過的新語句或新條件。,,設(shè)計(jì)可強(qiáng)制執(zhí)行基本基本集合中每條路徑的測試用例,,根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證每一條路徑可以被測試到,—,用邏輯覆蓋(語句覆蓋、判定覆蓋、條件覆蓋、等,……,)的方法。,例,:,求平均值過程,——,第一步,:,畫流圖,PROCEDURE average,,/*,該過程計(jì)算不超過,100,個(gè)在規(guī)定值域內(nèi)的有效數(shù)字的平均值;,,同時(shí)計(jì)算有效數(shù)字的總和和個(gè)數(shù),;*/,,INTERFACE RETU
65、RES average,,total.input,,,total.valid,;,,INTERFACE ACCEPTS value, minimum, maximum;,,,,TYPE value[1…100] IS SCALAR ARRAY;,,TYPE average,,total.input,,,total.valid,;,,minimum, maximum, sum IS SCALAR;,,TYPE i IS INTERGE;,,,1 i=1;,,,total.input,=,total.valid,=0;,,sum=0;,,2,3 DO WHILE,value[i,]-99
66、9 AND,total.input,<100,,4 increment,total.input,by 1;,,5,6 IF,value[i,]>minimum AND,value[i,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題黨課講稿:以高質(zhì)量黨建保障國有企業(yè)高質(zhì)量發(fā)展
- 廉政黨課講稿材料:堅(jiān)決打好反腐敗斗爭攻堅(jiān)戰(zhàn)持久戰(zhàn)總體戰(zhàn)涵養(yǎng)風(fēng)清氣正的政治生態(tài)
- 在新錄用選調(diào)生公務(wù)員座談會(huì)上和基層單位調(diào)研座談會(huì)上的發(fā)言材料
- 總工會(huì)關(guān)于2025年維護(hù)勞動(dòng)領(lǐng)域政治安全的工作匯報(bào)材料
- 基層黨建工作交流研討會(huì)上的講話發(fā)言材料
- 糧食和物資儲(chǔ)備學(xué)習(xí)教育工作部署會(huì)上的講話發(fā)言材料
- 市工業(yè)園區(qū)、市直機(jī)關(guān)單位、市紀(jì)委監(jiān)委2025年工作計(jì)劃
- 檢察院政治部關(guān)于2025年工作計(jì)劃
- 辦公室主任2025年現(xiàn)實(shí)表現(xiàn)材料
- 2025年~村農(nóng)村保潔員規(guī)范管理工作方案
- 在深入貫徹中央8項(xiàng)規(guī)定精神學(xué)習(xí)教育工作部署會(huì)議上的講話發(fā)言材料4篇
- 開展深入貫徹規(guī)定精神學(xué)習(xí)教育動(dòng)員部署會(huì)上的講話發(fā)言材料3篇
- 在司法黨組中心學(xué)習(xí)組學(xué)習(xí)會(huì)上的發(fā)言材料
- 國企黨委關(guān)于推動(dòng)基層黨建與生產(chǎn)經(jīng)營深度融合工作情況的報(bào)告材料
- 副書記在2025年工作務(wù)虛會(huì)上的發(fā)言材料2篇
相關(guān)資源
更多