計算機軟件工程07-實現(xiàn)_第1頁
計算機軟件工程07-實現(xiàn)_第2頁
計算機軟件工程07-實現(xiàn)_第3頁
計算機軟件工程07-實現(xiàn)_第4頁
計算機軟件工程07-實現(xiàn)_第5頁
已閱讀5頁,還剩106頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

物件工程

岐兵

Email:qib@

軟件實現(xiàn)的任務

■軟件實現(xiàn)

一把編碼和測試統(tǒng)稱為實現(xiàn)

-編碼就是把軟件設計結(jié)果翻譯成用某種程序

設計語言書寫的程序

■所選用的程序設計語言的特點及編碼風格將對程

序的可靠性、可讀性、可測試性和可維護性產(chǎn)生

深遠的影響

軟件實現(xiàn)的任務

■軟件實現(xiàn)

-軟件測試在軟件生命周期中橫跨兩個階段

■編碼和單元測試屬于軟件生命周期的同一個階段

■對軟件系統(tǒng)還應該進行各種綜合測試,這是軟件

生命周期中的另一個獨立的階段

軟件測試的工作量往往占軟件開發(fā)總工作

量的40%以上

課程內(nèi)容督飆

■第7章:“實現(xiàn)”

一編碼

一軟件測試基礎

一單元測試、集成測試、確認測試

-白盒測試技術

一黑盒測試技術

一調(diào)試

一軟件可靠性

■程序設計語言

-是人和計算機通信的基本工具

一程序設計語言的特點

■影響人的思維和解題方法

■影響人和計算機通信的方式和質(zhì)量

■影響人月度和理解程序的難易程度

-由于軟件大部分成本在測試和維護,所以程

序容易測試和容易維護極端重要

■選擇程序設計語言

-程序員在相同時間內(nèi)可以寫出的高級語言語

句數(shù)和匯編語言指令數(shù)大體相同

一因此用高級語言寫程序比用匯編語言寫程序

生產(chǎn)率可以提高好幾倍

一用高級語言寫的程序易測試、易閱讀和維護

除了特殊的應用領域需要匯編語言,其他程序一律使

用高級語言編寫

■選擇程序設計語言的理想標準

一應該有理想的模塊化機制,以及可讀性好的

控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)

一語言特點應該使編譯程序能夠盡可能多地發(fā)

現(xiàn)程序中的錯誤

一選用的高級語言應該有良好的獨立編譯機制

■選擇程序設計語言的實用標準

一系統(tǒng)用戶的要求

■如果所開發(fā)的系統(tǒng)由用戶負責維護,用戶通常要

求用他們熟悉的語言書寫程序

一可以使用的編譯程序

■運行目標系統(tǒng)的環(huán)境中可以提供的編譯程序往往

限制了可以選用的語言的范圍

一可以得到的軟件工具

■如果某種語言有支持程序開發(fā)的軟件工具可以利

用,則目標系統(tǒng)的實現(xiàn)和驗證都變得比較容易

■選擇程序設計語言的實用標準

一工程規(guī)模

■如果工程規(guī)模很龐大,現(xiàn)有的語言又不完全適用,

那么設計并實現(xiàn)一種供這個工程項目專用的程序

設計語言,可能是一個正確的選擇

一程序員的知識

■如果和其他標準不矛盾,那么應該選擇一種已經(jīng)

為程序員所熟悉的語言

■選擇程序設計語言的實用標準

-軟件可移植性要求

■如果目標系統(tǒng)將在幾臺不同的計算機上運行,或者預期的

使用壽命很長,那么選擇一種標準化程度高、程序可移植

性好的語言就是很重要的

-軟件的應用領域

■FORTRAN語言特別適合于工程和科學計算

■COBOL語言適合于商業(yè)領域應用

■C語言和Ada語言適用于系統(tǒng)和實時應用領域

■LISP語言適用于組合問題領域

■PROLOG語言適于表達知識和推理

■編碼風格

-“好”程序的標準

■源程序代碼的邏輯簡明清晰、易讀易懂

一為寫出“好”程序應遵循的原則

■編碼風格

1程序內(nèi)部的文檔

■程序內(nèi)部的文檔包括:

一恰當?shù)臉俗R符

一適當?shù)淖⒔?/p>

一程序的視覺組織

■選取含義鮮明的名字,對幫助閱讀程序很重要;

■不必要的長標識符提供了出錯的潛在可能性;

■如果使用縮寫,縮寫規(guī)則在整個程序設計過程中

應保持一致,必要時應給縮寫名字加注解

■編碼風格

1程序內(nèi)部的文檔

■程序中的注解分為兩類

一序言性注解:位于每個模塊的開始,作用是簡要描述

模塊的功能、主要算法、接口和重要數(shù)據(jù)

一功能性注解:它插在程序中間,一般在源代碼的右邊,

其作用是解釋這段代碼的必要性

■程序清單的布局對于程序的可讀性有很大影響

-程序設計者應該遵循簡單語句一行寫一個語句

一對于選擇、循環(huán)等復雜語句采用逐層縮進的書寫原則,

保證程序具有良好的梯形結(jié)構(gòu)

■編碼風格

2數(shù)據(jù)說明

■數(shù)據(jù)說明的次序應該標準化

一例如,按照數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)類型確定說明的次序

一有次序就容易查閱,因此能夠加速測試、調(diào)試和維護

的過程。

■當多個變量名在一個語句中說明時,應該按字母

順序排列這些變量

■如果設計時使用了一個復雜的數(shù)據(jù)結(jié)構(gòu),則應該

用注解說明用程序設計語言實現(xiàn)這個數(shù)據(jù)結(jié)構(gòu)的

方法和特點

■編碼風格

3語句構(gòu)造

■構(gòu)造語句時應該遵循的原則是:

-每個語句都應該簡單而直接

一不能為了提高效率而使程序變得過分復雜

■不要為了節(jié)省空間而把多個語句寫在同一行

■盡量避免復雜的條件測試

■盡量減少對“非”條件的測試

■避免大量使用循環(huán)嵌套和條件嵌套

■用括號使邏輯或算術表達式的運算次序清晰直觀

■編碼風格

4輸入輸出風格的規(guī)則

■對所有輸入數(shù)據(jù)都進行檢驗

■檢查輸入項重要組合的合法性

■保持輸入格式簡單

■使用數(shù)據(jù)結(jié)束標記,不要要求用戶指定數(shù)據(jù)的數(shù)目

■提示交互式輸入的請求,說明可用的選擇或邊界數(shù)值

■程序語言對格式有嚴格要求時,應保持輸入格式一致

■設計良好的輸出報表

■編碼風格

5效率

■效率主要指處理機時間和存儲器容量兩個方面

■關于效率的三條原則

一第一,效率是性能要求,應該在需求分析階段確定效

率方面的要求;

一第二,效率是靠好設計來提高的;

一第三,程序的效率和程序的簡單度是一致的,不要犧

牲程序的清晰性和可讀性來不必要地提高效率

■編碼風格

5效率

■程序運行時間

-源程序的效率直接由詳細設計階段確定的算法的效率決定

-寫程序的風格也能對程序的執(zhí)行速度和存儲器要求產(chǎn)生影響

一把詳細設計翻譯成程序時,應使用的原則:

■寫程序之前先簡化算術的和邏輯的表達式

■研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)往外移

■盡量避免使用多維數(shù)組

■盡量避免使用指針和復雜的表

■使用執(zhí)行時間短的算術運算

■不要混合使用不同的數(shù)據(jù)類型

■盡量使用整數(shù)運算和布爾表達式

■編碼風格

5效率

■存儲器效率

-提高存儲器效率主要是指如何使程序占用存儲單元少,

存取時間短

一提高執(zhí)行效率的技術也能提高存儲器效率

-對于大型計算機要考慮操作系統(tǒng)頁式調(diào)度的特點

一對于微處理機應選用有緊縮存儲器特性的編譯程序,

必要時可使用匯編語言

■編碼風格

5效率

■輸人輸出的效率

-輸入輸出效率指人給計算機提供輸入或為了理解計算

機輸出,所需花費的腦力是否經(jīng)濟

-簡單清晰是提高輸入輸出效率的關鍵

一所有輸入輸出都應有緩沖,減少用于通信的額外開銷

一對二級存儲器(如磁盤)應選用最簡單的訪問方法

-如果“超高效的”輸入輸出很難被人理解,則不應采

用這種方法

課程內(nèi)容督飆

■第7章:“實現(xiàn)”

一編碼

?一軟件測試基礎

一單元測試、集成測試、確認測試

-白盒測試技術

一黑盒測試技術

一調(diào)試

一軟件可靠性

軟件測武基礎

■防不勝防的軟件錯誤

—案傷q

■1963年,美國飛往火星的火箭爆炸,損失$10million.

一原因

■FORTRAN循環(huán)DO5I=1,3誤寫為DO5I=1.3

■軟件測試的必要性

-軟件的復雜性

-成員之間的溝通和配合

一技術評審的不完整性

-編碼引入新的錯誤

軟件測武基礎

■軟件測試的目的

一軟件測試的目的與軟件工程其他階段的目的

都相反

■軟件工程的其他階段都是“建設性”的

■在測試階段測試人員努力設計一系列測試方案,

目的卻是為了“破壞”已經(jīng)建造好的軟件系統(tǒng)

——竭力證明程序中有錯誤不能按照預定要

求正確工作

一測試階段的根本目標是盡可能多地發(fā)現(xiàn)并排

除軟件中潛藏的錯誤,最終把一個高質(zhì)量的

軟件系統(tǒng)交給用戶使用

軟件測武基礎

■軟件測試的目標

-什么是測試?它的目標是什么?

-G.Myers給出了關于測試的一些規(guī)則:

■(1)測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的

過程;

■(2)好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)

現(xiàn)的錯誤的測試方案;

■(3)成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯

誤的測試。

軟件測武基礎

■軟件測試準則

一(1)所有測試都應該能追溯到用戶需求

—(2)應該在測試開始之前就制定出測試計劃

■完成了需求模型就可以著手制定測試計劃

■在建立了設計模型后就可以立即開始設計詳細的

測試方案

-(3)測試發(fā)現(xiàn)的錯誤中的80%很可能是由程

序中20%的模塊造成的。問題是怎樣找出這

些可疑的模塊并徹底地測試它們

軟件測武基礎

■軟件測試準則

-(4)應該從“小規(guī)?!睖y試開始,并逐步進

行“大規(guī)?!睖y試

■通常,首先重點測試單個程序模塊,然后把測試

重點轉(zhuǎn)向在集成的模塊簇中尋找錯誤,最后在整

個系統(tǒng)中尋找錯誤

-(5)窮舉測試是不可能的

■所謂窮舉測試就是把程序所有可能的執(zhí)行路徑都

檢查一遍的測試

一(6)為了達到最佳的測試效果,應該由獨立

的第三方從事測試工作

軟件測武基礎

主要問題:窮盡測試通常是不可能的。

例:(Black-box)程序要求輸入3個整形數(shù)據(jù)。若字長

16位,則各種可能輸入的排列組合共有

216X216X216?3X1014(種)

若程序執(zhí)行需UH秒,則對于所有合法輸入

的測試大約需用一萬年,而且還應測試輸入非法

數(shù)據(jù)的情況。

軟件測武基礎

■測試方法

一有關概念

■測試用例

——組用于測試的輸入數(shù)據(jù)和預期得出的正確輸出

■測試方案

-測試用例和用例預定要檢驗的功能

■測試計劃

-要進行的測試種類和進度安排

軟件測武基礎

■測試方法

一黑盒測試法

■把程序看作一個黑盒子,完全不考慮程序的內(nèi)部

結(jié)構(gòu)和處理過程

■黑盒測試是在程序接口進行的測試

-檢查程序功能是否能按照規(guī)格說明書的規(guī)定正常使用

-程序是否能適當?shù)亟邮蛰斎霐?shù)據(jù)產(chǎn)生正確的輸出信息

-程序運行過程中能否保持外部信息

■黑盒測試又稱為功能測試

測試過程后期使用的方法

軟件測武基礎

■測試方法

-白盒測試法

■把程序看成裝在一個透明的白盒子,測試者完全

知道程序的結(jié)構(gòu)和處理算法

■這種方法按照程序內(nèi)部的邏輯測試程序,檢測程

序中主要執(zhí)行通路是否都能按預定要求正確工作

■白盒測試又稱為結(jié)構(gòu)測試

測試過程早期使用的方法

軟件測武基礎

■測試步驟

1.模塊測試

■模塊測試的目的是保證每個模塊作為一個單元能正確運行

■模塊測試通常又稱為單元測試

■在這個測試步驟中所發(fā)現(xiàn)的往往是編碼和詳細設計的錯誤

2.子系統(tǒng)測試

■子系統(tǒng)測試是把經(jīng)過單元測試的模塊放在一起形成一個子

系統(tǒng)來測試

■模塊相互間的協(xié)調(diào)和通信是這個測試過程中的主要問題

■這個步驟著重測試模塊的接口

軟件測武基礎

■測試步驟

3.系統(tǒng)測試

■把經(jīng)過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來測試

■發(fā)現(xiàn)的往往是軟件設計中的錯誤,也可能發(fā)現(xiàn)需求說明中

的錯誤

■兼有檢測和組裝兩重含義,通常稱為集成測試

4.驗收測試

■驗收測試把軟件系統(tǒng)作為單一的實體進行測試,測試內(nèi)容

與系統(tǒng)測試基本類似,但是它是在用戶積極參與下進行的,

而且可能主要使用實際數(shù)據(jù)(系統(tǒng)將來要處理的信息)進行

測試

■驗收測試的目的是驗證系統(tǒng)確實能夠滿足用戶的需要,在

這個測試步驟中發(fā)現(xiàn)的往往是系統(tǒng)需求說明書中的錯誤

■驗收測試也稱為確認測試

軟件測武基礎

■測試步驟

5.平行運行

■所謂平行運行就是同時運行新開發(fā)出來的系統(tǒng)和將被

它取代的舊系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結(jié)果。

這樣做的具體目的有如下幾點:

-(1)可以在準生產(chǎn)環(huán)境中運行新系統(tǒng)而又不冒風險

-(2)用戶能有一段熟悉新系統(tǒng)的時間

-(3)可以驗證用戶指南和使用手冊之類的文檔

-(4,能夠以準生產(chǎn)模式對新系統(tǒng)進行全負荷測試,可以用

測試結(jié)果驗證性能指標

軟件測武基礎

■測試階段的信息流

一軟件配置:包括需求說明書、設計說明書和

源程序清單

一測試配置:包括測試計劃和測試方案

測試

結(jié)果錯誤正確

測試----?

______可靠性

可靠性\測試

模型

課程內(nèi)容督飆

■第7章:“實現(xiàn)”

一編碼

一軟件測試基礎

/-單元測試、集成測試、確認測試

-白盒測試技術

一黑盒測試技術

一調(diào)試

一軟件可靠性

單元測武

■單元測試集中檢測程序“模塊”

一單元測試主要使用白盒測試技術

一對多個模塊的測試可以并行地進行

一在編寫出源程序代碼并通過了編譯程序的語

法檢查后,就可以用詳細設計描述作指南,

對重要的執(zhí)行通路進行測試

一單元測試工作可用人工測試和計算機測試

單元測武

■測試重點

1模塊接口

■參數(shù)的數(shù)目、次序、屬性或單位系統(tǒng)與變元是否一致

■是否修改了只作輸入用的變元

■全局變量的定義和用法在各個模塊中是否一致

2局部數(shù)據(jù)結(jié)構(gòu)

■發(fā)現(xiàn)局部數(shù)據(jù)說明、初始化、默認值等方面的錯誤

3重要的執(zhí)行通路

■選擇最有代表性、最可能發(fā)現(xiàn)錯誤的執(zhí)行通路進行測試

■應該設計測試方案用來發(fā)現(xiàn)由于錯誤的計算、不正確的比

較或不適當?shù)目刂屏鞫斐傻腻e誤

單元測武

■測試重點

4出錯處理通路

■好的設計應該能預見出現(xiàn)錯誤的條件,并且設置

適當?shù)奶幚礤e誤的通路,以便在真的出現(xiàn)錯誤時

執(zhí)行相應的出錯處理通路或干凈地結(jié)束處理

■應該著重測試下述一些可能發(fā)生的錯誤:

-對錯誤的描述是難以理解的

一記下的錯誤與實際遇到的錯誤不同

一在對錯誤進行處理之前,錯誤條件已經(jīng)引起系統(tǒng)干預

-對錯誤的處理不正確

-描述錯誤的信息不足以幫助確定造成錯誤的位置

單元測武

n—

■測試重點

5邊界條件

■邊界測試是單元測試中最后的也是最重要的任務。

■軟件常常在它的邊界上失效

一例如,處理n元數(shù)組的第n個元素時,或做到i次循環(huán)中

的第i次重復時,往往會發(fā)生錯誤。

—使用剛好小于、剛好等于和剛好大于最大值或最小值

的數(shù)據(jù)結(jié)構(gòu)、控制量和數(shù)據(jù)值的測試方案,非常可能

發(fā)現(xiàn)軟件中的錯誤。

單元測武

■代碼審查

——種非常有效的程序驗證技術,對典型的程序來說,

可查出30%-70%的邏輯設計錯誤和編碼錯誤

-審查小組最好由下述4人組成:

■組長:一個很有能力的程序員,沒有直接參與這項工程

■程序的設計者

■程序的編寫者

■程序的測試者

-預演:由人模擬計算機執(zhí)行程序

-人工測試和計算機測試是互相補充,相輔相成的

單元測武

■計算機測試

-驅(qū)動程序(Driver)和存根程序(Stub)

-通常驅(qū)動程序也就是一個“主程序”,它接收測試

數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出

有關的結(jié)果

-“存根”程序代替被測試的模塊所調(diào)用的模塊

■存根程序也可以稱為“虛擬子程序”

■它使用被它代替的模塊的接口,做最少的數(shù)據(jù)操作,印出

對入口的檢驗或操作結(jié)果,并把控制歸還給調(diào)用它的模塊

-驅(qū)動程序和存根程序代表開銷

哀成測武

■集成測試是測試和組裝軟件的系統(tǒng)化技術

■由模塊組裝成程序的兩種方法

-非漸增式測試方法

■先分別測試每個模塊,再把所有模塊按設計要求放在一起

結(jié)合成所要的程序,這種方法稱為非漸增式測試方法

-漸增式測試方法

■把下一個要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來

進行測試,測試完以后再把下一個應該測試的模塊結(jié)合進

來測試。這種每次增加一個模塊的方法稱為漸增式測試,

■這種方法實際上同時完成單元測試和集成測試

東求洲武

■兩種方法的比較

-非漸增式測試

■一下子把所有模塊放在一起,并把龐大的程序作為一個整

體來測試,測試者面對的情況十分復雜

■改正錯誤是極端困難的

■想要診斷定位一個錯誤是非常困難的

■錯誤會連續(xù)不斷,沒有盡頭

-漸增式測試

■與“一步到位”的非漸增式測試相反,它把程序劃分成小

段來構(gòu)造和測試

■易定位和改正錯誤

■對接口可以進行更徹底的測試

■可以使用系統(tǒng)化的測試方法

東求洲武

■增量測試的兩種集成策略

一自頂向下集成

■從主控制模塊開始,沿著程序的控制層次向下移

動,逐漸把各個模塊結(jié)合起來

■可使用深度優(yōu)先的策略,或?qū)挾葍?yōu)先的策略

哀成測武

深度優(yōu)先策略

■例如,選取左通路,

首先結(jié)合模塊Ml、M2

和M5;其次,M8或M6

■然后構(gòu)造中央的和右

側(cè)的控制通路

M8

哀成測武

寬度優(yōu)先策略

■例如,首先結(jié)合模塊

M2、M3和M4(代替存

根程序S4),然后結(jié)合

下一個控制層次中的

模塊M5、M6和M7

■如此繼續(xù)進行下去,

直到所有模塊都被結(jié)

合進來為止

M8

哀成測武

(1)自頂向下測試

第1步:測試頂端模塊,用存根程序(stub)代替

直接附屬的下層模塊

Stub:模擬未測試模塊的活動.

M

集成測武

;2步:根據(jù)深度優(yōu)先或?qū)挾葍?yōu)先的策略,每次

用一個實際模塊代換一個stub。

第3步:在結(jié)合進一個模塊的同時進行測試。

第4步:回歸測試一全部或部分地重復以前做過

的測試。

哀成測武

優(yōu)點:在早期即對主要控制及關鍵的抉擇進行檢驗

問題:Stub只是對低層模塊的模擬,測試時沒有重

要的數(shù)據(jù)自下往上流,許多重要的測試須推

遲進行,而且在早期不能充分展開人力

集成洲武

才自底向上測試

第1步:把低層模塊組合成族,每族實現(xiàn)一個子功能

第2步:用驅(qū)動程序(Driver)協(xié)調(diào)測試數(shù)據(jù)的1\0,

測試子功能族。

:調(diào)用模塊細節(jié)逐個進行測試.了

M]M2

哀求洲武

第3步:去掉Driver,自下而上把子功能族合成

更大的子功能族。

注意:兩種策略

的優(yōu)、缺點剛好

互補,但單用其

中任一種都不實

際,通常根據(jù)軟

件的特點臀二者

混用。

n

t

哀成測武

■不同集成測試策略的比較

一在測試實際的軟件系統(tǒng)時,選用適當?shù)臏y試

策略,純粹自頂向下或純粹自底向上的策略

可能都不實用

-實踐中創(chuàng)造出許多混合策略:

■改進的自頂向下測試方法

一基本上使用自頂向下的測試方法,但是在早期使用自

底向上的方法測試軟件中的少數(shù)關鍵模塊

■混合法

-對軟件結(jié)構(gòu)中較上層使用的自頂向下方法與

-對軟件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合

東求洲武

■回歸測試

一回歸測試是指重新執(zhí)行已做過的測試的某個

子集,保證由于調(diào)試引起的變化,不會導致

非預期的軟件行為或額外錯誤的測試活動,

帶來非預期的副作用。

-回歸測試集包括下述3類不同的測試用例:

■檢測軟件全部功能的代表性測試用例

■針對可能受修改影響的軟件功能的附加測試

■針對被修改過的軟件成分的測試

確認洲武

■確認測試

-也稱為驗收測試,它的目標是驗證軟件的有效性

一驗證

■指的是保證軟件正確地實現(xiàn)了某個特定要求的一系列活動

一確認

■指的是為了保證軟件確實滿足了用戶需求而進行的一系列

活動

-軟件有效性的一個簡單定義是

■如果軟件的功能和性能如同用戶所合理期待的那樣,軟件

就是有效的

確認測武

■確認測試的范圍

-確認測試必須有用戶參加,或以用戶為主

-確認測試通常使用黑盒測試法

■應該仔細設計測試計劃和測試過程

-測試計劃包括要進行的測試的種類及進度安排

■測試過程規(guī)定了用來檢測軟件是否與需求一致的測試方案

■通過測試和調(diào)試要保證軟件能滿足所有功能要求,能達到

每個性能要求,文檔資料準確而完整、安全性、可移植性、

兼容性和可維護性等

-確認測試有下述兩種可能的結(jié)果:

(1)功能和性能與用戶要求一致,軟件是可以接受的

(2)功能和性能與用戶要求有差距。發(fā)現(xiàn)的軟件缺陷或錯誤

的策略,通常需要和用戶充分協(xié)商

確認測武

I■軟件配置復查

-目的是保證軟件配置的所有成分都齊全

一質(zhì)量符合要求

—文檔與程序完全一^致

一具有完成軟件維護所必須的細節(jié)

一已經(jīng)編好目錄

確認洲武

■Alpha和Beta測試(面向多個客戶的產(chǎn)品測試)

-Alpha測試

■由用戶在開發(fā)者的場所進行,并且在開發(fā)者對用戶的“指

導”下進行測試

■開發(fā)者負責記錄發(fā)現(xiàn)的錯誤和使用中遇到的問題

■Alpha是在“受控”狀態(tài)下進行的測試活動

-Beta測試

-由軟件的最終用戶們在一個或多個客戶場所進行

■用戶記錄在Beta測試過程中遇到的一切問題,并且定期把

這些問題報告給開發(fā)者

-開發(fā)者對軟件產(chǎn)品進行必要的修改,并準備向全體客戶發(fā)

布最終的軟件產(chǎn)品

■Beta測試是在“不受控”的狀態(tài)下進行的測試活動

課程內(nèi)容督飆

■第7章:“實現(xiàn)”

一編碼

一軟件測試基礎

一單元測試、集成測試、確認測試

?一白盒測試技術

一黑盒測試技術

一調(diào)試

一軟件可靠性

臼食測武技術

■設計測試方案是測試階段的關鍵技術

-測試方案包括具體的測試目的(例如,預定要測試的

具體功能),應該輸入的測試數(shù)據(jù)和預期的結(jié)果

-測試數(shù)據(jù)和預期的輸出結(jié)果稱為測試用例

-因為不可能進行窮盡的測試,選用少量“最有效的”

測試數(shù)據(jù),做到盡可能完備的測試就更重要了

-已研究出許多設計測試數(shù)據(jù)的技術,這些技術各有

優(yōu)缺點,通常需聯(lián)合使用多種設計測試數(shù)據(jù)的技術

臼金測武技術

■設計測試方案的任務

①預定要測試的功能

②設計輸入的測試數(shù)據(jù)(testcases)

③歹4出預期結(jié)果(expectedoutput)

■邏輯覆蓋

一邏輯覆蓋是對一系列測試過程的總稱,這組

測試過程逐漸進行越來越完整的通路測試

一適合于白盒測試覆蓋程度由弱到強次序是

■語句覆蓋,判定,條件,判定/條件,條件組合

百金測武技術

■邏輯覆蓋

1語句覆蓋

■語句覆蓋的含義:

-選擇足夠多的測試數(shù)據(jù),使被測程序中每個語句至少

執(zhí)行一次。

■語句覆蓋只關心判定表達式的值,而沒有分別測

試判定表達式中每個條件取不同值時的情況

■為了使每個語句都執(zhí)

行一次,程序的執(zhí)行

軍徑應該是sabcdes入口

■為此只需要輸入下面V

A>1

的測試數(shù)據(jù)(實際上X1X-X/Ab

aANDB=0

可以是任意實數(shù)):

■A=2,B=0,X=4

A=2,

——

問題:若AND錯寫cORX>1-XAX+1d

為OR,或X>1錯寫

為Xvl,則錯誤無法

e返回

由上例測出。

臼食測武技術

■邏輯覆蓋

2判定覆蓋

■判定覆蓋又叫分支覆蓋

■判定覆蓋的含義:

一不僅每個語句必須至少執(zhí)行一次,而且每個判定的每

種可能的結(jié)果都應該至少執(zhí)行一次

一在⑴的基礎上,每個判定的每個分支至少執(zhí)行一次

臼食測武技術

■邏輯覆蓋

3條件覆蓋

■條件覆蓋的含義是

一不僅每個語句至少執(zhí)行一次,而且使判定表達式中的

每個條件都取到各種可能的結(jié)果

一在⑴的基礎上,使每個判定表達式的每個條件都取到

各種可能的結(jié)果

■a點有下述各種結(jié)果出現(xiàn)

-A>1,A<1,B=0,BWO

■C點有下述各種結(jié)果出現(xiàn)

A=2,A彳2,X>1,X<1s入口

需要使用下面兩組測試數(shù)

據(jù)就可以達到上述覆蓋標荒:

I.A=2,B=0,X=4

(執(zhí)行路徑sabcde,滿足A>1,a天/X/Ab

B=0;A=2,X>1)

II.A=l,B=l,X=1

(執(zhí)行路徑sace,滿足Awl,

BwO;A.2,X<1)

A=2'

k'■—

cORX>1d

問:條件覆蓋?判定覆蓋

各:唆「邑eI返恒I

反例:①A=2,B=0,X=1sabcde^~

②A=l,B=l,X=2sacde

(滿足條件覆蓋,但不滿足判斷覆蓋)

臼食測武技術

■邏輯覆蓋

4.判定/條件覆蓋

■它的含義是

一選取足夠多的測試數(shù)據(jù),使得判定表達式中的每個條

件都取到各種可能的值,而且每個判定表達式也都取

到各種可能的結(jié)果。

臼食測武技術

■邏輯覆蓋

5.條件組合覆蓋

■條件組合覆蓋的含義

-它要求選取足夠多的測試數(shù)據(jù),使得每個判定表達式

中條件的各種可能組合都至少出現(xiàn)一次。

全部可能的條件組合為:

①A>1,B=0②A>1,BwO

③A<1,B=0④A<1,Bw0

=2,X>1⑥A=2,X<1

⑦Aw2,X>1⑧Aw2,X?l

ab

I.A=2,B=0,X=4

(1,5兩種組合,路徑sabcde)

II.A=2,B=I,X=1

(2,6兩種組合,執(zhí)行路徑sacde)

III.A=l,B=0,X=2Cd

(3,7兩種組合,執(zhí)行路徑sacde)

IV.A=1,B=1,X=1

(4,8兩種組合,執(zhí)行路徑sace)

從考察控制流或流圖的角度,還可考慮下述覆蓋:

(63覆蓋=語句覆蓋

⑺邊覆蓋=判定覆蓋

(8)路徑覆蓋(Pathcoverage):

每條可能的路徑都至少執(zhí)

行一次,若圖中有環(huán),則每

個環(huán)至少經(jīng)過一次。

Testcases:

①A=1,B=1,X=1(9)路徑覆蓋A條件組合覆蓋

②A=1,B=1,X=2

③A=3,B=0,X=1

④A=2,B=0,X=4

課程內(nèi)容督飆

■第7章:“實現(xiàn)”

一編碼

一軟件測試基礎

一單元測試、集成測試、確認測試

-白盒測試技術

"一黑盒測試技術

一調(diào)試

一軟件可靠性

黑金測武技術

■黑盒測試著重測試軟件功能

一黑盒測試并不能取代白盒測試,它是與白盒測試互

補的測試方法

-它很可能發(fā)現(xiàn)白盒測試不易發(fā)現(xiàn)的其他類型的錯誤

■黑盒測試力圖發(fā)現(xiàn)下述類型的錯誤:

-功能不正確或遺漏了功能

一界面錯誤

-數(shù)據(jù)結(jié)構(gòu)錯誤或外部數(shù)據(jù)庫訪問錯誤

一性能錯誤

一初始化和終止錯誤

黑金測武技術

■白盒測試在測試過程的早期階段進行

■而黑盒測試主要用于測試過程的后期

■設計黑盒測試方案時,應該考慮下述問題:

(1)怎樣測試功能的有效性?

(2)哪些類型的輸入可構(gòu)成好測試用例?

(3)系統(tǒng)是否對特定的輸入值特別敏感?

(4)怎樣劃定數(shù)據(jù)類的邊界?

(5)系統(tǒng)能夠承受什么樣的數(shù)據(jù)率和數(shù)據(jù)量?

(6)數(shù)據(jù)的特定組合將對系統(tǒng)運行產(chǎn)生什么影響?

黑金測武技術

■應用黑盒測試技術,能夠設計出滿足下

述標準的測試用例集:

-(1)所設計出的測試用例能夠減少為達到合

理測試所需要設計的測試用例的總數(shù);

-(2)所設計出的測試用例能夠告訴我們,是

否存在某些類型的錯誤,而不是僅僅指出與

特定測試相關的錯誤是否存在。

黑金測武技術

■等價劃分

-等價劃分是一種黑盒測試技術

-這種技術把程序的輸入域劃分成若干個數(shù)據(jù)類

-每類中的一個典型值在測試中的作用與這一類中所

有其他值的作用相同,據(jù)此導出測試用例

一劃分一^組等價類描繪一組輸入條件的有效或無效

條件,測試程序是否有設計方案中該有的輸出結(jié)果.

黑金測武技術

■劃分等價類的啟發(fā)式規(guī)則:

1如果規(guī)定了輸入值的范圍

■則可劃分出一個有效的等價類(輸入值在此范圍內(nèi))

-兩個無效的等價類(輸入值小于最小值或大于最大值)

2如果規(guī)定了輸入數(shù)據(jù)的個數(shù)

■則類似地也可以劃分出一個有效的等價類和兩個無效的等

價類;

3如果規(guī)定了輸入數(shù)據(jù)的一組值,而程序?qū)Σ煌斎?/p>

值做不同處理

■則每個允許的輸入值是一個有效的等價類

■此外還有一個無效的等價類(任一個不允許的輸入值)

黑金測武技術

■劃分等價類的啟發(fā)式規(guī)則:

4如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,

■則可以劃分出一個有效的等價類(符合規(guī)則)

■和若干個無效的等價類(從各種不同角度違反規(guī)

則)

5如果規(guī)定了輸入數(shù)據(jù)為整型

■則可以劃分出正整數(shù)、零和負整數(shù)等3個有效類;

6如果程序的處理對象是表格

■則應該使用空表,以及含一項或多項的表

黑金測武技術

■根據(jù)等價類設計測試方案時使用下面兩

個步驟

一設計一個新方案以盡可能多地覆蓋尚未被覆

蓋的有效等價類;重復這一步驟直到所有有

效類都被覆蓋為止。

—設計一個新方案以覆蓋一個且僅一個尚未被

覆蓋的無效等價類;重復這一步驟直到所有

無效類都被覆蓋為止。(通常程序執(zhí)行一個

錯誤后即不繼續(xù)檢測其它錯誤,故每次只測

一個無效類)。

黑金測武技術

■例:

一假設有一個把數(shù)字串轉(zhuǎn)變成整數(shù)的函數(shù)。運行程序

的計算機字長16位,用二進制補碼表示整數(shù).

■分析這個程序的規(guī)格說明,劃分出如下等價類:

-有效輸入的等價類有:

(1)1-6個數(shù)字字符組成的數(shù)字串;T23456'

(2)最高位數(shù)字是零的數(shù)字串;’000001,

(3)最高位數(shù)字左鄰是負號的數(shù)字串;'-12345,

黑金測武技術

■例:

一假設有一個把數(shù)字串轉(zhuǎn)變成整數(shù)的函數(shù)。運行程序

的計算機字長16位,用二進制補碼表示整數(shù).

■分析這個程序的規(guī)格說明,劃分出如下等價類:

-無效輸入的等價類有:

(4)空字符串(全是空格);''

(5)左部填充的字符既不是零也不是空格;,XXXXX1'

(6)最高位數(shù)字右面由數(shù)字和空格混合組成;T2'

(7)最高位數(shù)字右面由數(shù)字和其他字符混合組成;T3XX

(8)負號與最高位數(shù)字之間有空格;1234'

黑金測武技術

■例:

一假設有一個把數(shù)字串轉(zhuǎn)變成整數(shù)的函數(shù)。運行程序

的計算機字長16位,用二進制補碼表示整數(shù).

■分析這個程序的規(guī)格說明,劃分出如下等價類:

-合法輸出的等價類有

(9)在計算機能表示的最小負整數(shù)和零之間的負整數(shù)

-32768?0

(10)零;0

(11)在零和計算機能表示的最大正整數(shù)之間的正整數(shù)

0?32768

-非法輸出的等價類有

(12)比計算機能表示的最小負整數(shù)還小的負整數(shù)-32769

(13)比計算機能表示的最大正整數(shù)還大的正整數(shù)32768

黑金測武技術

■邊界值分析

一處理邊界情況時程序最容易發(fā)生錯誤

-設計使程序運行在邊界情況附近的測試方案,

暴露出程序錯誤的可能性更大一些

一邊界值分析法,應該選取剛好等于、稍小于

和稍大于等價類邊界值的數(shù)據(jù)作為測試數(shù)據(jù)

-通常設計測試方案時總是聯(lián)合使用等價劃分

和邊界值分析兩種技術

黑盒測武技術

■邊界值分析

-例如,為了測試前述的把數(shù)字串轉(zhuǎn)變成整數(shù)的程序,除

了上一小節(jié)已經(jīng)用等價劃分法設計出的測試方案外,還

應該用邊界值分析法再補充下述測試方案:

(12)使輸出剛好等于最小的負整數(shù)

輸入:'-32768'預期的輸出為:-32768

(13)使輸出剛好等于最大的正整數(shù)

輸入:'32767'預期的輸出:32767

(14)使輸出剛剛小于最小的負整數(shù)

輸入:'-32769'預期的輸出;“錯誤一無效輸入”

(15)使輸出剛剛大于最大的正整數(shù)

輸入:'32768'預期的輸出:“錯誤一無效輸入”

黑金測武技術

■錯誤推測

一錯誤推測法在很大程度上靠直覺和經(jīng)驗進行

一基本想法

■是列舉出程序中可能有的錯誤和容易發(fā)生錯誤的

特殊情況,并且根據(jù)它們選擇測試方案。

一經(jīng)驗表明,在一段程序中已經(jīng)發(fā)現(xiàn)的錯誤數(shù)

目往往和尚未發(fā)現(xiàn)的錯誤數(shù)成正比

-因此,在進一步測試時要著重測試那些已發(fā)

現(xiàn)了較多錯誤的程序段

黑盒測武技術

■錯誤推測

-思

■列出可能有的錯誤

■列出容易發(fā)生錯誤的特殊情況

■以此為基礎設計測試方案

-根據(jù)

■直覺、經(jīng)驗

一工具

■常見錯誤清單、判定表等

黑金測武技術

■實用策略:黑盒設計+白盒補充

-在任何情況下都應該使用邊界值分析的方法;

一必要時用等價劃分法補充;

一必要時再用錯誤推測法補充;

一對照程序邏輯,檢查測試方案。

■可根據(jù)對程序可靠性的要求采用不同的邏輯覆蓋標準,必

要時補充一些測試方案。

注:即使用上述綜合策略設計測試方案,仍不能保證

發(fā)現(xiàn)一切錯誤。例如Lucent公司經(jīng)過包括逐行檢查

源代碼在內(nèi)的多方面測試之后,其軟件能達標運行

的成功率為80%

課程內(nèi)容督飆

■第7章:“實現(xiàn)”

一編碼

一軟件測試基礎

一單元測試、集成測試、確認測試

-白盒測試技術

一黑盒測試技術

7-調(diào)試

一軟件可靠性

調(diào)武

■調(diào)試

-是在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程

-軟件錯誤的外部表現(xiàn)和它的內(nèi)在原因之間可能并沒

有明顯的聯(lián)系,調(diào)試就是把癥狀和原因聯(lián)系起來的

尚未被人深入認識的智力過程。

■調(diào)試過程

-調(diào)試過程從執(zhí)行一個測試用例開始

一評估測試結(jié)果,如果發(fā)現(xiàn)實際結(jié)果與預期結(jié)果不一

藪,則這種不一致就是一個癥狀,它表明在軟件中

存在著隱藏的問題

一調(diào)試過程試圖找出產(chǎn)生癥狀的原因,以便改正錯誤

調(diào)武

第1步:確定錯誤的位置(95%工作量);

第2步:改正錯誤。

Failure(外錯誤)通常是由系統(tǒng)設計產(chǎn)生的.

Fault(故障、內(nèi)錯誤、error>bug)起因于軟件生產(chǎn)

中的人為錯誤.

程序的failure通常有一個清晰的表現(xiàn)特征,但是fault往

往很難被發(fā)現(xiàn)。

調(diào)試過程

Debugging

調(diào)武

■調(diào)試過程總會有以下兩種結(jié)果之一:

-找到了問題的原因并把問題改正和排除掉

-沒找出問題的原因

■猜測一個原因一》用例驗證假設一》重復…

■調(diào)試困難與軟件錯誤的特征:

一癥狀和產(chǎn)生癥狀的原因可能在程序中相距甚遠,緊

耦合的程序結(jié)構(gòu)更加劇了這種情況

-當改正了另一個錯誤之后,癥狀可能暫時消失了。

-癥狀可能實際上并不是由錯誤引起的(例,舍入誤差)

調(diào)武

■調(diào)試困難與軟件錯誤的特征:

-癥狀可能是由不易跟蹤的人為錯誤引起的

-癥狀可能是由定時問題而不是由處理問題引起的。

一可能很難重新產(chǎn)生完全一樣的輸入條件(例如,輸入

順序不確定的實時應用系統(tǒng))

-癥狀可能時有時無,這種情況在硬件和軟件緊密地

耦合在一起的嵌入式系統(tǒng)中特別常見

一癥狀可能是由分布在許多任務中的原因引起的,這

些任務運行在不同的處理機上

調(diào)武

■調(diào)試技術

-輸出存儲器內(nèi)容(memorydump):

以八進制或十六進制的形式印出存儲器的內(nèi)容。

缺點:

?輸出信息量極大,

不易解讀且大多無用;

?輸出的是程序在某一

時刻的靜態(tài)情況,且

往往不是出錯時的狀態(tài)。

調(diào)武

■調(diào)試技術

一②插入awatchpoints”

(或稱“spypoints")

■人工插入打印

■缺點:

一改動源代碼,增加了出錯機會;

-打印信息可能太多。

■自動調(diào)試工具

一無須打印額外信息,且不改動源代碼

調(diào)武

■調(diào)試策略

一調(diào)試過程的關鍵不是調(diào)試技術,而是用來推斷錯誤

原因的基本策略。

-主要有:

■試探法,憑經(jīng)驗猜測。

■回溯法:由癥狀最先出現(xiàn)的地方,沿controlflow向回檢查

適用于小型程序。

■對分法:在關鍵點插入變量的正確值

錯誤在前半段

錯誤在后半段

④歸納法:從錯誤癥狀中找出規(guī)律,推斷根源

糾正錯誤

⑤演繹法:普通—特殊

從假設中逐步排除、精化,從而導出錯誤根源

調(diào)武

■在動手改正錯誤之前,軟件工程師應該仔細考

慮下述3個問題:

-是否同樣的錯誤也在程序其他地方存在?

■一個程序錯誤是由錯誤的邏輯思維模式造成的

■而這種邏輯思維模式也可能用在別的地方

■仔細分析這種邏輯模式,有可能發(fā)現(xiàn)其他錯誤

一要進行的修改可能引入的“下一個錯誤”是什么?

■在改正錯誤之前應該仔細研究源程序(最好也研究設計文

檔),以評估邏輯和數(shù)據(jù)結(jié)構(gòu)的耦合程度

-如果所要做的修改位于程序的高耦合段中,則修改時必須

特別小心謹慎

一為防止今后出現(xiàn)類似的錯誤,應該做什么?

課程內(nèi)容督飆

■第7章:“實現(xiàn)”

一編碼

一軟件測試基礎

一單元測試、集成測試、確認測試

-白盒測試技術

一黑盒測試技術

-調(diào)試

一軟件可靠性

軟件可靠嵯

■基本概念

一軟件可靠性

■軟件可靠性是程序在給定的時間間隔內(nèi),按照規(guī)

格說明書的規(guī)定成功地運行的概率。

-按照IEEE的規(guī)定

■術語“錯誤”的含義是由開發(fā)人員造成的軟件差

錯(bug)

■術語“故障”的含義是由錯誤引起的軟件的不正

確行為

軟件可靠嵯

■基本概念

-可靠性(Reliability):程序在給定的時間間隔

內(nèi),按照說明書的規(guī)定,成功地運行的概率。

-可用性(Usability):程序在給定的時間點,

按照說明書的規(guī)定,成功地運行的概率。

一正確性(Correctness):程序的功能正確。

軟件可靠性

設系統(tǒng)故障停機時間為tdl,td2,…;正常運行時間為

%"心…;則系統(tǒng)的“穩(wěn)態(tài)可用性”為

MTTF

Availability=MTTF+MTTR(Shooman

溫馨提示

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

最新文檔

評論

0/150

提交評論