軟件的實現(xiàn)與測試-2014-第三章2教材_第1頁
軟件的實現(xiàn)與測試-2014-第三章2教材_第2頁
軟件的實現(xiàn)與測試-2014-第三章2教材_第3頁
軟件的實現(xiàn)與測試-2014-第三章2教材_第4頁
軟件的實現(xiàn)與測試-2014-第三章2教材_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

通信軟件設(shè)計路兆銘網(wǎng)絡(luò)體系構(gòu)建與融合北京市重點實驗室lzy_0372@163.com第三章軟件工程3.1軟件需求分析3.2軟件的設(shè)計3.3軟件的實現(xiàn)3.4軟件的測試3.3軟件的實現(xiàn)-軟件實現(xiàn)的過程與任務(wù)

做為軟件工程過程的一個階段,軟件實現(xiàn)是軟件設(shè)計的繼續(xù)。實際上,程序編碼就是將軟件設(shè)計的結(jié)果翻譯成為用某種程序設(shè)計語言描述的源代碼。其中涉及到方法、工具和過程。軟件實現(xiàn)階段也稱為程序編碼階段,通常包括編程實現(xiàn)和單元測試。本章只講編程實現(xiàn)。軟件實現(xiàn)是軟件產(chǎn)品由概念到實體的一個關(guān)鍵過程,它將詳細設(shè)計的結(jié)果翻譯成用某種程序設(shè)計語言編寫的并且最終可以運行的程序代碼。

軟件實現(xiàn)的過程軟件實現(xiàn)與軟件設(shè)計、軟件測試密不可分。軟件設(shè)計為軟件實現(xiàn)提供輸入,軟件實現(xiàn)的輸出是軟件測試的輸入。按照現(xiàn)代軟件開發(fā)過程的要求,軟件需求分析、設(shè)計、實現(xiàn)、測試等活動貫穿于每一個軟件開發(fā)周期,多個開發(fā)周期迭代實施,構(gòu)成一個完整的開發(fā)過程。因此軟件實現(xiàn)與其他軟件工程活動交織在一起,不能完全孤立地執(zhí)行。3.3軟件的實現(xiàn)-軟件實現(xiàn)的過程與任務(wù)

程序編碼階段的任務(wù)是將軟件詳細設(shè)計轉(zhuǎn)換成用編程語言實現(xiàn)的程序代碼,即把用PDL偽碼寫成的程序,翻譯成計算機能接受的諸如FORTRAN、C、匯編之類編程語言的程序。因此,編程語言的性能和設(shè)計風(fēng)格對于程序設(shè)計的效能和質(zhì)量有著直接的關(guān)系。3.3軟件的實現(xiàn)-編程語言編程語言特性的比較

編程語言是人機對話的媒介。編寫程序的過程(用編程語言和計算機對話)是一項人類特定的智力活動。因此,一種語言的心理特性對“對話”的質(zhì)量會產(chǎn)生重要的影響。軟件實現(xiàn)的過程也是軟件過程中的一個步驟,語言的工程特性對軟件開發(fā)項目的成功與否也有著重要的影響。此外,語言的技術(shù)特性會影響設(shè)計的質(zhì)量,它既關(guān)系到人也關(guān)系到軟件項目。3.3軟件的實現(xiàn)-編程語言編程語言的分類程序設(shè)計語言有多種分類法按照語言的抽象級別,有低級語言和高級語言。低級語言包括機器語言(第一代語言)和匯編語言(第二代語言),它們都是與特定計算機硬件密切相關(guān)的程序設(shè)計語言。高級語言是不反映特定計算機體系結(jié)構(gòu)的程序設(shè)計語言,其表示方法更接近待解決問題的表示方法,包括FORTRAN、ALGOL等,即第三代語言。C語言兼有高級語言和匯編語言某些特性,屬于2代半語言。按照應(yīng)用的范圍,有通用語言和專用語言。通用語言可適用于多種應(yīng)用,包括COBOL、FORTRAN、C等。專用語言是為特殊應(yīng)用而設(shè)計的語言。通常具有自己特殊的語法形式,面對特定問題,輸入結(jié)構(gòu)及詞匯表與該問題的相應(yīng)范圍密切相關(guān)。例如Lisp、PROLOG、FORTH等。按照用戶要求,有過程性語言和非過程性語言。3.3軟件的實現(xiàn)-編程語言3.按照語言所包含成分的性質(zhì),有過程性語言、面向?qū)ο笳Z言,面向因特網(wǎng)語言等。面向?qū)ο笳Z言是基于對象概念,以對象為中心,以類和繼承為構(gòu)造機制,認識、理解、刻畫客觀世界并構(gòu)建相應(yīng)軟件的語言隨著因特網(wǎng)的出現(xiàn)和萬維網(wǎng)的普及,出現(xiàn)了面向因特網(wǎng)的語言。典型的語言有HTML(超文本標(biāo)記語言)、XML(可擴展標(biāo)記語

語言)、XML(標(biāo)記語言)、Java(解釋執(zhí)行)、C#(編譯執(zhí)行)等。3.3軟件的實現(xiàn)-編程語言編程語言的選擇在構(gòu)造軟件系統(tǒng)時,必須首先確定要使用哪種編程語言來實現(xiàn)這個系統(tǒng)??偟脑瓌t是選擇的語言能使編碼容易實現(xiàn),減少測試的工作量,容易閱讀和維護程序。由于軟件系統(tǒng)的絕大部分成本用在測試和維護階段,所以易于測試和易于維護是非常重要的。軟件開發(fā)人員在進行決策時經(jīng)常面臨的是矛盾的選擇。例如,所有的技術(shù)人員都同意采用某種高級編程語言,但所選擇的計算機卻沒有這種語言,因此選擇就不切實際了,不得不做出某種合理的折衷。選擇編程語言的切入點,首先還是要從問題入手,確定它的要求是什么?這些要求的相對重要性如何?再根據(jù)這些要求和相對重要性來衡量能采用的語言。3.3軟件的實現(xiàn)-編程語言從技術(shù)上要考慮的因素有:項目的應(yīng)用范圍;算法和計算復(fù)雜性;軟件執(zhí)行的環(huán)境;性能上的考慮與實現(xiàn)的條件;數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性;軟件開發(fā)人員的知識水平和心理因素等。其中,項目的應(yīng)用范圍是最關(guān)鍵的因素。針對計算機的4個主要應(yīng)用領(lǐng)域,為候選的語言做了粗略的分類。在科學(xué)與工程計算領(lǐng)域內(nèi),F(xiàn)ortran、C、C++語言得到了廣泛的應(yīng)用;在商業(yè)數(shù)據(jù)處理領(lǐng)域中,通常采用COBOL,Java語言編寫程序,當(dāng)然也可選用SQL語言或其他專用語言。在系統(tǒng)程序設(shè)計和實時應(yīng)用領(lǐng)域中,匯編語言或一些新的派生語言,如Ada、C++等得到了廣泛的應(yīng)用。在人工智能領(lǐng)域以及問題求解,組合應(yīng)用領(lǐng)域,采用LISP和PROLOG語言。3.3軟件的實現(xiàn)-編程語言程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的存儲空間。程序編碼是最后提高運行速度和節(jié)省存儲的機會,因此在此階段不能不考慮程序的效率。讓我們首先明確討論程序效率的幾條準(zhǔn)則:效率是一個性能要求,應(yīng)當(dāng)在需求分析階段給出。軟件效率以需求為準(zhǔn),不應(yīng)以人力所及為準(zhǔn)。好的設(shè)計可以提高效率。(3)

程序的效率與程序的簡單性相關(guān)。(4)

一般說來,任何對效率無重要改善,且對程序的簡單性、可讀性和正確性不利的程序設(shè)計方法都是不可取的。3.3軟件的實現(xiàn)-程序效率與性能分析源程序的效率與詳細設(shè)計階段確定的算法的效率直接有關(guān)。在詳細設(shè)計翻譯轉(zhuǎn)換成源程序代碼后,算法效率反映為程序的執(zhí)行速度和存儲容量的要求。算法對效率的影響3.3軟件的實現(xiàn)-程序效率與性能分析設(shè)計向程序轉(zhuǎn)換過程中的指導(dǎo)原則:在編程序前,盡可能化簡有關(guān)的算術(shù)表達式和邏輯表達式;仔細檢查算法中的嵌套的循環(huán),盡可能將某些語句或表達式移到循環(huán)外面;盡量避免使用多維數(shù)組;盡量避免使用指針和復(fù)雜的表;采用“快速”的算術(shù)運算;不要混淆數(shù)據(jù)類型,避免在表達式中出現(xiàn)類型混雜;盡量用整數(shù)算術(shù)表達式和布爾表達式;選用等效的高效率算法;3.3軟件的實現(xiàn)-程序效率與性能分析程序復(fù)雜性主要指模塊內(nèi)程序的復(fù)雜性。它直接關(guān)聯(lián)到軟件開發(fā)費用的多少,開發(fā)周期的長短和軟件內(nèi)部潛伏錯誤的多少。同時它也是軟件可理解性的另一種度量。減少程序復(fù)雜性,可提高軟件的簡單性和可理解性,并使軟件開發(fā)費用減少,開發(fā)周期縮短,軟件內(nèi)部潛藏錯誤減少。為了度量程序復(fù)雜性,要求復(fù)雜性度量滿足以下假設(shè):3.3軟件的實現(xiàn)-程序復(fù)雜性度量它可用來計算任何一個程序的復(fù)雜性;對于不合理的程序,如對于長度動態(tài)增長的程序,或?qū)τ谠瓌t上無法排錯的程序,不應(yīng)使用它進行復(fù)雜性計算;如果程序中指令條數(shù)、附加存儲量、計算時間增多,不會減少程序的復(fù)雜性。度量程序復(fù)雜性,最簡單的方法就是統(tǒng)計程序源代碼行數(shù)。代碼行度量法3.3軟件的實現(xiàn)-程序效率與性能分析源代碼行數(shù)度量法基于兩個前提:程序復(fù)雜性隨著程序規(guī)模的增加不均衡地增長;控制程序規(guī)模的方法最好是采用分而治之的辦法。將一個大程序分解成若干個簡單的可理解的程序段。方法的基本考慮是統(tǒng)計一個程序模塊的源代碼行數(shù),并以源代碼行數(shù)做為程序復(fù)雜性度量。設(shè)每行代碼的出錯率為每100行源程序中可能有的錯誤數(shù)目。3.3軟件的實現(xiàn)-程序效率與性能分析Lipow指出,對于小程序,每行代碼出錯率為1.3%~1.8%;對于大程序,每行代碼的出錯率增加到2.7%~3.2%之間,這只是考慮了程序的可執(zhí)行部分,沒有包括程序中的說明部分。Lipow及其他研究者得出一個結(jié)論:對于少于100個語句的小程序,源代碼行數(shù)與

出錯率是線性相關(guān)的。隨著程序的增大,出錯率以非線性方式增長。所以,代碼行度量法只是一個簡單的,估計得很粗糙的方法3.3軟件的實現(xiàn)-程序效率與性能分析McCabe度量法McCabe度量法,又稱圈復(fù)雜性度量,是一種基于程序控制流的復(fù)雜性度量方法。它基于一個程序模塊的程序圖中環(huán)路的個數(shù),因此計算它先要畫出程序控制流圖??刂屏鲌D是退化的程序流程圖。它把程序流程圖中每個處理符號都退化成一個結(jié)點,原來聯(lián)結(jié)不同處理符號的流線變成連接不同結(jié)點的有向弧??刂屏鲌D僅描述程序內(nèi)部的控制流程,完全不表現(xiàn)對數(shù)據(jù)的具體操作,以及分支和循環(huán)的具體條件。3.3軟件的實現(xiàn)-程序效率與性能分析A開始BC輸入DEFGJH輸入K輸出L結(jié)束ABCDEFGJKLH程序流程圖程序圖3.3軟件的實現(xiàn)-程序效率與性能分析這種度量的缺點是:不能區(qū)分不同種類的控制流的復(fù)雜性;簡單IF語句與循環(huán)語句的復(fù)雜性相同;嵌套IF語句與簡單CASE語句的復(fù)雜性相同;模塊間接口當(dāng)成一個簡單分支一樣處理;一個具有1000行的順序程序與一行語句的復(fù)雜性相同。盡管此度量法有許多缺點,但它容易使用,且在選擇方案和估計排錯費用等方面都很有效。3.3軟件的實現(xiàn)-程序效率與性能分析Henry-Kafura的信息流度量

Henry-Kafura提出過一個基于程序行數(shù)估計程序復(fù)雜度的信息流方法:

P=長度×(輸入數(shù)據(jù)個數(shù)×輸出數(shù)據(jù)個數(shù))2其中,P是程序的復(fù)雜度。此度量法主要針對模塊化程序。它認為功能模塊與其外部環(huán)境之間的信息流數(shù)目或通道數(shù)目有聯(lián)系。此外,模塊的內(nèi)部復(fù)雜性度量可基于模塊規(guī)模(如代碼行數(shù)LOC)或環(huán)路復(fù)雜性估計。3.3軟件的實現(xiàn)-程序效率與性能分析當(dāng)一個模塊能影響另一個模塊時,就定義它們之間有聯(lián)系,這種聯(lián)系或稱為通道,或稱為信息流。Henry和Kafura將信息流度量用于UNIX操作系統(tǒng),并成功地找出一些問題。他們在信息流和程序修改數(shù)之間發(fā)現(xiàn)有高度相關(guān)(0.95),并將它作為衡量出錯的表征。信息流度量是少數(shù)經(jīng)過實驗考察的設(shè)計度量之一。3.3軟件的實現(xiàn)-程序效率與性能分析Thayer復(fù)雜性度量

Thayer認為程序復(fù)雜性可分為如下五個方面。邏輯復(fù)雜性,同程序的分支和循環(huán)有關(guān)。接口復(fù)雜性,涉及程序同其他應(yīng)用程序和系統(tǒng)程序的關(guān)系。計算復(fù)雜性,同程序中的賦值操作、所包含的操作數(shù)和操作符有關(guān)。I/O復(fù)雜性,同程序中的輸入/輸出有關(guān)。程序可讀性,同程序中的注釋有關(guān)。以下分別給出它們的度量公式。3.3軟件的實現(xiàn)-程序效率與性能分析邏輯復(fù)雜性令Ltotal表示每個模塊的邏輯復(fù)雜性,可將Ltotal定義為:

Ltotal=LS/EX+Lloop+Lif

+Lbranch

其中,LS

是邏輯語句數(shù),EX

是可執(zhí)行語句數(shù),Lloop

是循環(huán)語句復(fù)雜性度量,Lif是條件語句復(fù)雜性度量,Lbranch是分支復(fù)雜性度量。循環(huán)語句復(fù)雜性度量Lloop的計算公式為:3.3軟件的實現(xiàn)-程序效率與性能分析

其中,mi

是模塊在第i

層嵌套中的循環(huán)次數(shù);wi

是權(quán)值,是對第

i層的加權(quán);Ω是模塊中的最大嵌套層數(shù);因子1000是按邏輯復(fù)雜性在Ltotal中的重要性而加的權(quán)值。條件語句復(fù)雜性度量

Lif的計算公式為

其中,ni是模塊在第i層嵌套中條件語句數(shù);因子1000是按條件語句復(fù)雜性在Ltotal中的重要3.3軟件的實現(xiàn)-程序效率與性能分析

重要性而加的權(quán)值,其他成分同上。分支復(fù)雜性度量Lbranch

的計算公式為:

Lbranch=0.001Nbranch其中,Nbranch是模塊中的分支數(shù);因子0.001是按分支復(fù)雜性在Ltotal中的重要性加的權(quán)值。接口復(fù)雜性令Cinterface表示每個模塊的接口復(fù)雜性,則將Cinterface定義為:

Cinterface=AP+0.5×SYS3.3軟件的實現(xiàn)-程序效率與性能分析其中,AP是模塊與應(yīng)用程序的接口數(shù);SYS是模塊與系統(tǒng)程序的接口數(shù);因子0.5是按模塊與系統(tǒng)程序的接口的重要性而加的權(quán)值。計算復(fù)雜性令CC表示每個模塊的計算復(fù)雜性,則將CC定義為:其中,CS是一個模塊中的計算語句數(shù);∑CS是系統(tǒng)中各個模塊的計算語句數(shù)之和。3.3軟件的實現(xiàn)-程序效率與性能分析Ltotal是模塊的邏輯復(fù)雜性;Lsystem=∑Ltotal

是系統(tǒng)中各個模塊的邏輯復(fù)雜性之和。I/O復(fù)雜性令CI/O

表示每個模塊的I/O復(fù)雜性,則CI/O

定義為:其中SI/O

是一個模塊中的輸入/輸出語句數(shù);∑SI/O

是系統(tǒng)中各個模塊中的輸入/輸出語句數(shù)之和。3.3軟件的實現(xiàn)-程序效率與性能分析5.程序可讀性令Uread表示程序的可讀性,則將Uread

定義為

Uread

=COM/(TS+COM)其中,COM是注釋語句數(shù);TS是一個模塊中可執(zhí)行語句和非可執(zhí)行語句數(shù)之和,但不包括注釋語句。模塊的復(fù)雜性令Ctotal表示模塊的復(fù)雜性,則將Ctotal定義為:

Ctotal=Ltotal+0.1×Cinterface+

0.2×CC+0.4×CI/O

-0.1×Uread

其中,在賦值語句右部出現(xiàn)的系數(shù)反映各項的相對重要性。最后一項說明可讀性好,可降低程序的復(fù)雜性。Thayer假設(shè)軟件錯誤與他定義的程序復(fù)雜性線性相關(guān),并做過一些實驗。3.3軟件的實現(xiàn)-程序效率與性能分析

Halstead度量

Halstead軟件科學(xué)研究確定計算機軟件開發(fā)中的一些定量規(guī)律,它采用以下一組基本的度量值。這些度量值通常在程序產(chǎn)生之后得出,或者在設(shè)計完成之后估算出。3.3軟件的實現(xiàn)-程序效率與性能分析1.程序長度(預(yù)測的Halstead長度)令n1表示程序中不同運算符(包括保留字)的個數(shù),令n2表示程序中不同運算對象的個數(shù),令

H

表示“程序長度”,則有

H=n1

log2n1+n2

log2n2這里,H是程序長度的預(yù)測值,它不等于程序中語句個數(shù)。在定義中,運算符包括:算術(shù)運算符,賦值符(=或:=),數(shù)組操作符,邏輯運算符,分界符(,或;或:),子程序調(diào)用符,關(guān)系運算符,括號運算符,循環(huán)操作符等。特別地,成對的運算符,例如“begin…end”、“for…to”、“repeat…until”、“while…do”、“if…then…else”、“(…)”

、“{…}”等都當(dāng)做單一運算符。運算對象包括變量名和常數(shù)。3.3軟件的實現(xiàn)-程序效率與性能分析實際的Halstead長度設(shè)N1為程序中實際出現(xiàn)的運算符總個數(shù),N2為程序中實際出現(xiàn)的運算對象總個數(shù),N為實際的Halstead長度,則有

N=N1+N2程序的詞匯表Halstead定義程序的詞匯表為不同的運算符種類數(shù)n1和不同的運算對象種類數(shù)n2的總和。若令n為程序的詞匯表,則有

n=n1+n23.3軟件的實現(xiàn)-程序效率與性能分析程序量程序量V

可用下式得到

V=N

log2n它表明程序在詞匯上的復(fù)雜性。其最小值為

V*=(2+n2*)

log2(2+n2*)這里,2表明程序中至少有兩個運算符:賦值符

=

和函數(shù)調(diào)用符

f()

,n2*表示輸入/輸出變量個數(shù)。用C語言寫出的交換排序的例子。3.3軟件的實現(xiàn)-程序效率與性能分析voidSort(intX[],intn){if(n<2)return;

for(inti=1;i<n;i=i+1)

for(intj=0;j<n-i;j=j+1)

if(X[j+1]>X[j]){

intsave=X[j];

X[j]=X[j+1];

X[j+1]=save;}

}3.3軟件的實現(xiàn)-程序效率與性能分析軟件工程35運算符計數(shù)運算對象計數(shù)可執(zhí)行語句結(jié)束7X6數(shù)組下標(biāo)[]6i5=5j10if()2n3for()221;7save2return116<301>1n2=8N2=34-1+5{}2n1=12N1=423.3軟件的實現(xiàn)-程序效率與性能分析對于上面的例子,利用n1,N1,n2,N2,可以計算得

H=12

log212+8

log28=67N=42+34=76V=(42+34)

log2(12+8)=328等效的匯編語言程序的V=328。這說明匯編語言比C語言需要等量的信息量(以bit表示)。程序量比率(語言的抽象級別)

L=V*/V

或L=(2/n1)(n2/N2)

它表明了一個程序的最緊湊形式的程序量與實際程序量之比,反映了程序的效率。其倒數(shù)

D=1/L

表明了實現(xiàn)算法的困難程度。3.3軟件的實現(xiàn)-程序效率與性能分析程序員工作量

E=V/L程序的潛在錯誤Halstead度量可以用來預(yù)測程序中的錯誤。預(yù)測公式為

B=(N1+N2)log2(n1+n2)/3000

=

V/3000其中,B為該程序的錯誤數(shù)。它表明程序中可能存在的差錯。B

應(yīng)與程序量V

成正比。例如,一個程序?qū)?5個數(shù)據(jù)庫項共訪問1300次,對150個運算符共使用了1200次,那么預(yù)測該程序的錯誤數(shù)B:

B=(1200+1300)log2(75+150)/30006.5即預(yù)測該程序中可能包含6~7個錯誤。3.3軟件的實現(xiàn)-程序效率與性能分析Halstead的重要結(jié)論程序的實際Halstead長度N可由詞匯表n算出。即使程序還未編制完成,也能預(yù)先算出程序的實際Halstead長度N,雖然它沒有明確指出程序中到底有多少個語句。這個結(jié)論非常有用。經(jīng)過多次驗證,預(yù)測的Halstead長度與實際的Halstead長度是非常接近的。Halstead度量的缺點沒有區(qū)別自己編的程序與別人編的程序。沒有考慮非執(zhí)行語句。補救辦法:在統(tǒng)計n1、n2、N1、N2時,可以把非執(zhí)行語句中出現(xiàn)的運算對象,運算符統(tǒng)計在內(nèi)。在允許混合運算的語言中,每種運算符與它的運算對象相關(guān)。一種語言有整型、實型、雙精度型三種不同類型的運算對象,因此,任何一種基本算術(shù)運算符(+、-、×、/)在計算時應(yīng)考慮這種因數(shù)據(jù)類型而引起差異的情況。3.3軟件的實現(xiàn)-程序效率與性能分析沒有把不同類型的運算對象,運算符與不同的錯誤發(fā)生率聯(lián)系起來,而是把它們同等看待。例如,對簡單if語句與while語句就沒有區(qū)別。注意調(diào)用的深度。Halstead公式應(yīng)當(dāng)對調(diào)用子程序的不同深度區(qū)別對待。在計算嵌套調(diào)用的運算符和運算對象時,應(yīng)乘上一個調(diào)用深度因子。這樣可以增大嵌套調(diào)用時的錯誤預(yù)測率。忽視了嵌套結(jié)構(gòu)(嵌套的循環(huán)語句、嵌套IF語句、括號結(jié)構(gòu)等)。一般地,運算符的嵌套序列,總比具有相同數(shù)量的運算符和運算對象的非嵌套序列要復(fù)雜得多。解決的辦法是對嵌套結(jié)果乘上一個嵌套因子。3.3軟件的實現(xiàn)-程序效率與性能分析3.4軟件的測試3.4軟件的測試3.4軟件的測試1、軟件測試的心理學(xué)2、軟件測試的經(jīng)濟學(xué)軟件測試的目的和定義

基于不同的立場,有兩種完全不同的測試目的。從用戶的角度出發(fā),普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中錯誤可接受的過程,驗證該軟件已正確地實現(xiàn)了用戶的要求。1973年,軟件測試領(lǐng)域的先驅(qū)BillHetzel博士首先給軟件測試的定義:“測試就是建立一種信心,確信程序能夠按預(yù)期的設(shè)想運行?!?983年他又將軟件測試的定義修改為:“評價一個程序和系統(tǒng)的特性或能力,并確定它是否達到預(yù)期的結(jié)果。軟件測試就是以此為目的的任何行為?!?.4軟件的測試-軟件測試的任務(wù)而GlenfordJ.Myers則認為應(yīng)該首先認定軟件是有錯誤的,然后用測試去發(fā)現(xiàn)盡可能多的錯誤。他于1979年提出了對軟件測試的定義:“測試是為發(fā)現(xiàn)錯誤而執(zhí)行的一個程序或者系統(tǒng)的過程?!?/p>

Myers認為,一個成功的測試必須是發(fā)現(xiàn)程序錯誤的測試,不然就沒有價值。他提出的“測試的目的是證偽”這一概念得到很多業(yè)內(nèi)人士的認可。鑒于以上觀點,IEEE在其軟件工程術(shù)語標(biāo)準(zhǔn)中給軟件測試下的定義是“用人工或自動的手段來執(zhí)行和評價系統(tǒng)或系統(tǒng)部件的過程,以檢驗它是否滿足規(guī)定的需求,或識別期望的結(jié)果和實際的結(jié)果之間有無差別”。在以上兩個目的中,通常測試專家更側(cè)重后一個。他們普遍將軟件測試視為“根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計一批測試用例,并利用這些測試用例去執(zhí)行檢查并發(fā)現(xiàn)軟件錯誤的過程”。3.4軟件的測試-軟件測試的任務(wù)軟件測試的原則應(yīng)當(dāng)把“盡早地和不斷地進行軟件測試”作為軟件開發(fā)者的座右銘。測試用例應(yīng)由測試輸入數(shù)據(jù)、執(zhí)行條件和對應(yīng)的預(yù)期輸出結(jié)果這兩部分組成。程序員應(yīng)避免檢查自己的程序。在設(shè)計測試用例時,應(yīng)包括合理的輸入條件和不合理的輸入條件。所有的測試都應(yīng)當(dāng)追溯到用戶要求,導(dǎo)致程序不能滿足用戶要求的錯誤是嚴重錯誤。充分注意測試中的群集現(xiàn)象。經(jīng)驗表明,測試發(fā)現(xiàn)錯誤的80%很可能出自20%的模塊,換句話說,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯誤數(shù)目成正比。嚴格執(zhí)行測試計劃,排除測試的隨意性。應(yīng)當(dāng)對每一個測試結(jié)果做全面檢查。妥善保存測試計劃,測試用例,出錯統(tǒng)計和最終分析報告,為維護提供方便。3.4軟件的測試-軟件測試的任務(wù)軟件測試的對象軟件測試并不等于程序測試。軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間。需求分析、概要設(shè)計、詳細設(shè)計以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明、概要設(shè)計規(guī)格說明、詳細設(shè)計規(guī)格說明以及源程序,都應(yīng)成為軟件測試的對象。測試的兩個方面:缺陷測試V&V(驗證和確認)Boehm給出兩者的區(qū)分:驗證:我們是否在正確地建造一個產(chǎn)品確認:我們是否在建成一個正確的產(chǎn)品3.4

軟件的測試-軟件測試的任務(wù)用戶要求用戶:我要什么?需求說明書分析員我可以提供什么?運行結(jié)果計算機:程序運行得到的結(jié)果相符嗎?

源程序程序員我要讓計算機怎么做?設(shè)計說明書設(shè)計員我要讓軟件做什么?理解正確性表達正確性理解正確性設(shè)計正確性表達正確性理解正確性編碼正確性運行正確性輸入正確性

3.4軟件的測試-軟件測試的任務(wù)在整個生存周期中各個階段都必須應(yīng)用V&V技術(shù)。兩個主要目標(biāo)是:發(fā)現(xiàn)系統(tǒng)中的缺陷;判斷在給定的操作環(huán)境下系統(tǒng)是否可用;V&V技術(shù)分為兩種:軟件檢查:對系統(tǒng)的各種表示進行靜態(tài)分析,以發(fā)現(xiàn)問題。這些檢查可以借助工具進行文檔和代碼分析。軟件測試:通過執(zhí)行測試數(shù)據(jù)觀察系統(tǒng)的操作特征(行為)是否符合要求。3.4軟件的測試-軟件測試的任務(wù)測試的生存周期模型?確定測試需求?制定測試策略?明確測試準(zhǔn)則?明確資源和進度?評審測試計劃制定測試計劃?設(shè)計測試用例(輸入、輸出、環(huán)境配置)?定義測試過程(規(guī)定測試步驟、驗證方法,評審并完善測試過程)測試設(shè)計?建立測試腳本實施測試?執(zhí)行單元測試?記錄測試結(jié)果?回歸測試單元測試?執(zhí)行集成測試?記錄測試結(jié)果?回歸測試集成測試?執(zhí)行系統(tǒng)測試?記錄測試結(jié)果?回歸測試系統(tǒng)測試?分析測試結(jié)果,提出變更請求?分析測試情況,建立測試分析報告評估測試3.4軟件的測試-軟件測試的任務(wù)從不同的角度有不同的分類。同一個錯誤可能有多個征兆,因而它可以被歸入不同的類。下面從不同角度對錯誤分類。按錯誤的性質(zhì)和范圍分類(1)功能錯誤規(guī)格說明錯誤:規(guī)格說明未反映用戶需求,不完全,有二義性或自身矛盾。功能錯誤:程序?qū)崿F(xiàn)的功能與規(guī)格說明及用戶要求的不一致。測試錯誤:軟件測試設(shè)計與實施發(fā)生錯誤。測試標(biāo)準(zhǔn)引起的錯誤:對軟件測試的標(biāo)準(zhǔn)要選擇適當(dāng),若測試標(biāo)準(zhǔn)太復(fù)雜,則可能導(dǎo)致測試過程出錯。(2)系統(tǒng)錯誤外部接口錯誤:外部接口協(xié)議有錯或太復(fù)雜,致使在使用中出錯。還包括對輸入/輸出格式錯誤理解,對輸入數(shù)據(jù)不合理的容錯等。內(nèi)部接口錯誤:內(nèi)部接口協(xié)議錯、輸入/輸出格式錯、數(shù)據(jù)保護不可靠、子程序訪問錯等。3.4軟件的測試-軟件錯誤硬件結(jié)構(gòu)錯誤:與硬件結(jié)構(gòu)有關(guān)的軟件錯誤與誤用硬件工作機制有關(guān)。操作系統(tǒng)錯誤:與操作系統(tǒng)有關(guān)的軟件錯誤與誤用操作系統(tǒng)工作機制有關(guān)。軟件結(jié)構(gòu)錯誤:由于軟件結(jié)構(gòu)不合理或不清晰而引起的錯誤。控制與順序錯誤:與事件時序、執(zhí)行條件、處理優(yōu)先級及步驟錯誤有關(guān)。資源管理錯誤:由于不正確地使用資源而產(chǎn)生的錯誤。(3)加工錯誤算術(shù)與操作錯誤:在算術(shù)運算、函數(shù)求值和一般操作過程中發(fā)生的錯誤。初始化錯誤:初始化工作區(qū),寄存器和數(shù)據(jù)區(qū)有錯,或數(shù)據(jù)初始化有錯。控制和次序錯誤:與執(zhí)行路徑、循環(huán)嵌套、返回和終止條件、處理步驟有關(guān)。靜態(tài)邏輯錯誤:語句和表達式中的邏輯不正確。3.4軟件的測試-軟件錯誤控制和次序錯誤:與執(zhí)行路徑、循環(huán)嵌套、返回和終止條件、處理步驟有關(guān)。靜態(tài)邏輯錯誤:語句和表達式中的邏輯不正確。(4)數(shù)據(jù)錯誤動態(tài)數(shù)據(jù)錯誤:動態(tài)數(shù)據(jù)是在程序執(zhí)行過程中暫時存在的數(shù)據(jù)。各種不同類型的動態(tài)數(shù)據(jù)在程序執(zhí)行期間將共享一個共同的存儲區(qū)域,若程序啟動時對這個區(qū)域未初始化,就會導(dǎo)致數(shù)據(jù)出錯。靜態(tài)數(shù)據(jù)錯誤:靜態(tài)數(shù)據(jù)在內(nèi)容和格式上都是固定的。由編譯程序或其它專門程序?qū)λ鼈冏鲱A(yù)處理。但預(yù)處理也會出錯。數(shù)據(jù)內(nèi)容、結(jié)構(gòu)和屬性錯誤:數(shù)據(jù)內(nèi)容錯誤是由于內(nèi)容被破壞或被錯誤地解釋而造成的錯誤。數(shù)據(jù)結(jié)構(gòu)錯誤是指結(jié)構(gòu)說明錯誤及誤用數(shù)據(jù)結(jié)構(gòu)的錯誤。數(shù)據(jù)屬性錯誤是指對數(shù)據(jù)屬性不正確地解釋而導(dǎo)致的錯誤。3.4軟件的測試-軟件錯誤(5)代碼錯誤代碼錯誤主要包括:語法錯誤;打字錯誤;對語句或指令不正確理解所產(chǎn)生的錯誤。按軟件生存周期階段分類需求錯誤:需求定義不合理或不正確;需求不完全;需求中含有邏輯錯誤;需求分析的文檔有錯誤等。功能與性能錯誤:功能或性能規(guī)定有錯誤;遺漏了某些功能;規(guī)定了某些冗余的功能;為用戶提供的信息有錯;信息不確切;對異常情況處理有錯誤等。程序結(jié)構(gòu)錯誤:程序控制流或控制順序有錯誤;處理過程有錯誤等。數(shù)據(jù)錯誤:數(shù)據(jù)定義或數(shù)據(jù)結(jié)構(gòu)有錯誤;數(shù)據(jù)訪問或數(shù)據(jù)操作有錯誤等。實現(xiàn)和編碼錯誤:編碼時違反編碼風(fēng)格要求或編碼標(biāo)準(zhǔn),包括語法錯誤、數(shù)據(jù)名錯誤、3.4軟件的測試-軟件錯誤

局部變量與全局變量混淆,或程序邏輯錯誤等。集成錯誤:程序的內(nèi)部接口、外部接口有錯誤;程序各相關(guān)部分在時間配合、數(shù)據(jù)吞吐量等方面不協(xié)調(diào)。系統(tǒng)結(jié)構(gòu)錯誤:操作系統(tǒng)調(diào)用錯誤或使用錯誤;恢復(fù)錯誤;診斷錯誤;分割及覆蓋錯誤,以及引用環(huán)境的錯誤等。測試定義與測試執(zhí)行錯誤。3.4軟件的測試-軟件錯誤錯誤統(tǒng)計在軟件測試過程中,對查找出來的所有錯誤應(yīng)當(dāng)進行統(tǒng)計和分類,為可靠性分析提供依據(jù)。B.Beizer曾對一個有126,000個語句的程序做過一個錯誤統(tǒng)計表,該程序的錯誤總數(shù)是2,070個。每100個語句的平均錯誤數(shù)是1.63個。由于錯誤中有一些可以歸入這一類,也可以歸入另一類,例如,在系統(tǒng)錯誤和功能錯誤這兩類錯誤之間有許多錯誤就很難區(qū)分,所以錯誤分類的數(shù)字并不是非常準(zhǔn)確的。3.4軟件的測試-軟件錯誤B.Beizer的錯誤統(tǒng)計規(guī)格說明書404算術(shù)114功能功能147初始化15錯誤測試7加工控制與次序271總計55827%錯誤靜態(tài)邏輯13內(nèi)部接口29其他120硬件63總計53326%系統(tǒng)操作系統(tǒng)2類型36錯誤軟件結(jié)構(gòu)193數(shù)據(jù)結(jié)構(gòu)34控制與順序43錯誤初始值51資源8其他120總計33816%總計24112%程序編寫錯誤784%文檔和其他錯誤32216%3.4軟件的測試-軟件錯誤經(jīng)驗表明,人工測試能相當(dāng)有效地查找缺陷,因此,為了有效的保證軟件質(zhì)量,在一個軟件的開發(fā)過程中應(yīng)至少使用一種或多種人工測試技術(shù)。所謂人工測試,就是不用在計算機上動態(tài)執(zhí)行的測試。有統(tǒng)計表明,在查找缺陷方面人工測試方法是非常有效的,它能夠有效地發(fā)現(xiàn)30%到70%的邏輯設(shè)計和編碼缺陷。人工測試方法主要包括桌面檢查、走查、代碼檢查和同行評審技術(shù)。3.4軟件的測試-人工測試桌面檢查(DeskChecking)桌面檢查由程序員自己檢查自己編寫的程序。程序員在程序通過編譯之后,進行單元測試設(shè)計之前,對源程序代碼進行分析,對照缺陷列表進行檢查,對程序推演測試數(shù)據(jù),并補充相關(guān)的文檔。目的是發(fā)現(xiàn)程序中的缺陷。3.4軟件的測試-人工測試代碼檢查(CodeInspection)所謂代碼檢查,是以小組為單位閱讀代碼,使用一系列規(guī)程和缺陷檢查技術(shù),檢查實際的產(chǎn)品,包括文檔和程序代碼,發(fā)現(xiàn)存在缺陷和缺陷的過程。代碼檢查小組的組織

代碼檢查小組的規(guī)模很小,是由設(shè)計、開發(fā)、測試、質(zhì)量保證等不同工作性質(zhì)的相關(guān)人員組成,用戶也可作為小組成員。規(guī)模小的代碼檢查小組的人數(shù)是3個人,一般代碼檢查小組的人數(shù)4~7人不等。最佳組合的檢查小組應(yīng)當(dāng)具有不同技術(shù)領(lǐng)域的經(jīng)驗,每個檢查者都從他們自己的觀點出發(fā)檢查產(chǎn)品,發(fā)現(xiàn)很隱蔽的缺陷。代碼檢查的過程一個代碼檢查小組有一個人擔(dān)任協(xié)調(diào)人,他應(yīng)是個稱職的程序員,但不是該程序的編程者,不需要對程序的細節(jié)了解得很清楚。3.4軟件的測試-人工測試

協(xié)調(diào)人的職責(zé)包括:為代碼檢查分發(fā)材料、安排進程;主導(dǎo)代碼檢查過程;記錄發(fā)現(xiàn)的缺陷;確保所有缺陷隨后得到改正。代碼檢查小組中第二個成員應(yīng)是該程序的編程者,其他成員有該程序的設(shè)計者(如果設(shè)計者不是編程者的話)和一名測試專家。在代碼檢查之前的幾天,協(xié)調(diào)人將程序清單和設(shè)計規(guī)范分發(fā)給其他成員。所有成員應(yīng)在檢查之前熟悉這些材料。在檢查進行時,主要進行兩項活動:由編程者逐條語句講述程序的邏輯結(jié)構(gòu)。在講述的過程當(dāng)中,小組的其他成員應(yīng)提問題、判斷是否存在缺陷。在講述中,很可能是編程者本人而不是其他小組成員發(fā)現(xiàn)了大部分缺陷。對照常見編碼缺陷列表分析程序。協(xié)調(diào)人負責(zé)檢查會議的討論高效地進行,每個參與者都將注意力集中于查找缺陷而不是修正缺陷(缺陷的修正由程序員在檢查會議后完成)。會議結(jié)束后,程序員會得到一份已發(fā)現(xiàn)缺陷的清單。如果發(fā)現(xiàn)的缺陷太多,或某個缺陷涉及對程序做根本的改動,協(xié)調(diào)人可在缺陷修正后安排對程序再次檢查。3.4軟件的測試-人工測試走查(Walkthroughs)走查與代碼檢查類似,都是以小組為單位進行的。走查的過程與代碼檢查的過程大體相同,但是規(guī)程稍微有所不同,采用的缺陷檢查技術(shù)也不一樣。走查的目的是要評價一個產(chǎn)品,通常針對用場景和程序邏輯。目標(biāo)是發(fā)現(xiàn)缺陷、遺漏和矛盾的地方,改進產(chǎn)品,考慮可替換的實現(xiàn)方法。走查除用于檢查程序代碼以外,還可以用于檢查其他階段的文檔。走查小組由3~5人組成,其中一個人擔(dān)任協(xié)調(diào)人,一個人擔(dān)任記錄員(負責(zé)記錄所有查出的缺陷),還有一個人擔(dān)任測試員,此外還有一人是程序編寫者。走查小組的每個成員需要在走查前審查相關(guān)資料,在走查期間參與審查以保證目標(biāo)被滿足。在走查的過程中,審查者對程序進行模擬,一步一步地展示程序如何處理由審查者提供的測試數(shù)據(jù)。3.4軟件的測試-人工測試軟件開發(fā)生存周期由確認軟件需求開始,到確認所開發(fā)軟件滿足需求結(jié)束。軟件測試包含3個層次的測試活動:單元測試、集成測試、系統(tǒng)測試和接受測試。單元測試是針對軟件設(shè)計的最小單位――程序模塊,以模塊詳細設(shè)計為依據(jù),對輸入、輸出和處理進行測試,用以發(fā)現(xiàn)各模塊可能存在(主要是邏輯設(shè)計上)的各種錯誤。集成測試是在單元測試通過的基礎(chǔ)上,以概要設(shè)計為依據(jù),按照模塊之間的調(diào)用關(guān)系將模塊組裝起來進行的測試,用以發(fā)現(xiàn)功能(主要在接口上)的各種錯誤。系統(tǒng)測試和接受測試的對象是整個軟件系統(tǒng),以需求規(guī)格說明為依據(jù),檢查軟件的功能、性能、接口及其可靠性是否與用戶需求說明書的要求一致,以保證各組成部分不僅能單獨地受到檢驗,而且在系統(tǒng)各部分協(xié)調(diào)工作時也能正常工作。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動測試計劃和測試設(shè)計應(yīng)當(dāng)在執(zhí)行測試用例之前完成,也就是軟件測試過程的活動與軟件開發(fā)過程應(yīng)并行起來進行。需求分析開發(fā)測試概要設(shè)計詳細設(shè)計編程集成系統(tǒng)單元測試集成測試系統(tǒng)測試與接受測試各層次的測試計劃和測試設(shè)計3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動軟件需求分析階段的測試活動在軟件需求分析階段,與測試相關(guān)的工作是進行需求評審、制訂系統(tǒng)測試計劃。需求階段測試的任務(wù)在需求分析階段,測試的對象是分析人員的構(gòu)想,不是程序代碼。測試者(即評審者)應(yīng)包括營銷人員、產(chǎn)品經(jīng)理、設(shè)計人員和人類工程分析師。評審者首先閱讀需求文檔和分析模型草稿,然后用產(chǎn)品對照評價法做任務(wù)分析、收集數(shù)據(jù)。產(chǎn)品對照評價和任務(wù)分析采用產(chǎn)品對照評價,應(yīng)考慮:待開發(fā)的新軟件與市場上現(xiàn)有的其他類似產(chǎn)品不同的地方在哪里?競爭對手在哪些方面做得更好?那些類似產(chǎn)品中哪些特性在本產(chǎn)品中必須要實現(xiàn)?評審者盡可能收集競爭產(chǎn)品的正式版本、演示版本或印刷宣傳品。在評審產(chǎn)品時,列舉出它們的特性、長處和短處,以及它們受到人們關(guān)注的地方(受到贊揚或批評的),從中得出競爭產(chǎn)品在功能上的詳細輪廓,據(jù)此為規(guī)劃中的產(chǎn)品建立相似的輪廓。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動基于產(chǎn)品對照評價和征求相關(guān)人員的意見,評審者開始任務(wù)分析,搞清楚每個任務(wù)的各個方面:任務(wù)究竟是什么?在沒有使用該軟件時,現(xiàn)在人們是如何完成這項工作的?子任務(wù)是按什么順序完成的?在何時需要何種信息,為什么?工作流程中瓶頸是什么,為何還沒能解決?任務(wù)分析的結(jié)論往往會挑戰(zhàn)已成文的產(chǎn)品需求,會促使分析人員簡化、合并或取消產(chǎn)品特性。系統(tǒng)測試計劃的編制需求規(guī)格說明初步完成后就可以開始制訂系統(tǒng)測試計劃。在系統(tǒng)開發(fā)早期就制訂測試計劃有利于明確設(shè)計目標(biāo)、保證設(shè)計正確。需求評審工作結(jié)束以后,完成評審總結(jié)報告,并得到改正過的、被用戶和開發(fā)人員雙方共同接受的需求規(guī)格說明。軟件需求分析階段的測試活動的流程如圖所示。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動軟件需求分析階段的測試活動需求變更記錄進入下一階段需求描述需求規(guī)格說明需求評審需求變更不變更軟件開發(fā)計劃變更接受測試計劃計劃項目測試工作系統(tǒng)測試計劃過程系統(tǒng)測試計劃3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動軟件設(shè)計階段的測試活動軟件設(shè)計階段與測試有關(guān)的活動包括設(shè)計評審、系統(tǒng)測試設(shè)計、集成測試計劃和設(shè)計以及單元測試計劃。軟件設(shè)計階段測試的對象還是構(gòu)想。這些構(gòu)想通過設(shè)計文檔,即設(shè)計規(guī)格說明給出,內(nèi)容包括外部設(shè)計(用戶界面設(shè)計,與其他系統(tǒng)元素,如硬件設(shè)備、相關(guān)軟件、數(shù)據(jù)庫、構(gòu)件庫的接口設(shè)計、系統(tǒng)構(gòu)建部署設(shè)計);內(nèi)部設(shè)計(功能設(shè)計、系統(tǒng)體系結(jié)構(gòu)設(shè)計、數(shù)據(jù)設(shè)計);邏輯設(shè)計(模塊算法與數(shù)據(jù)結(jié)構(gòu)設(shè)計)。設(shè)計階段是軟件生存周期中的一個階段。在此階段中,修改設(shè)計中的錯誤會大大減少后續(xù)程序編碼階段錯誤的發(fā)生率,降低軟件生存周期中產(chǎn)品和項目的風(fēng)險。軟件設(shè)計階段的測試活動的流程如圖所示。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動詳細設(shè)計文檔詳細設(shè)計設(shè)計評審修改未通過通過需求相關(guān)文檔概要設(shè)計文檔概要設(shè)計設(shè)計評審修改未通過通過進入下一階段系統(tǒng)測試設(shè)計過程系統(tǒng)測試計劃系統(tǒng)測試用例、腳本集成測試用例、腳本單元測試計劃集成測試計劃過程集成測試設(shè)計過程集成測試計劃軟件設(shè)計階段的測試活動單元測試計劃過程3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動編程及單元測試階段的測試活動一般認為單元測試和編程屬于軟件工程的同一個階段。在此階段將系統(tǒng)測試設(shè)計、集成測試設(shè)計最終確定下來。同時,根據(jù)單元測試計劃完成單元測試設(shè)計。編程及單元測試階段的測試活動如圖所示。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動已通過評審的詳細設(shè)計模塊編程桌面檢查審查單元測試評價單元測試報告進入集成測試是否通過程序修改未通過未通過未通過通過通過通過單元測試計劃單元測試設(shè)計過程單元測試用例、腳本執(zhí)行單元測試多個模塊反復(fù)執(zhí)行這個流程每個模塊執(zhí)行一遍這個流程

3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動集成測試階段的測試活動在集成測試階段中,按照集成測試計劃和設(shè)計,運行測試用例,并對結(jié)果進行相應(yīng)的處理,完成測試報告。集成測試階段的測試活動如圖所示。集成測試是要將那些已完成單元測試,并且已經(jīng)置于軟件配置管理之下的軟件模塊集成為目標(biāo)系統(tǒng),在此過程中,一邊集成,一邊按照集成測試設(shè)計,執(zhí)行集成測試。子系統(tǒng)的集成測試稱為部件測試,它是要找出組裝后的子系統(tǒng)與系統(tǒng)需求規(guī)格說明間的不一致。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動是是執(zhí)行集成測試已通過單元測試的模塊集成測試用例、腳本是否通過全部模塊都已集成集成測試評價集成測試報告進入系統(tǒng)測試集成下一個模塊修改(程序、設(shè)計或需求)回到相應(yīng)階段否否集成測試階段的測試活動3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動系統(tǒng)測試階段的測試活動對于已經(jīng)通過集成測試而得到的軟件系統(tǒng),在實際使用環(huán)境下或在模擬的環(huán)境下,由測試小組執(zhí)行系統(tǒng)測試。在采用增量式迭代開發(fā)的情況下,也可以對已集成的部分系統(tǒng)進行系統(tǒng)測試,不必待全部集成后再開始系統(tǒng)測試。系統(tǒng)測試的任務(wù)是確認已集成軟件系統(tǒng)的有效性,即確認軟件系統(tǒng)的功能、性能和其他質(zhì)量屬性是否與用戶的要求一致。因為對軟件的功能、性能和其他質(zhì)量屬性的需求,包括其驗證標(biāo)準(zhǔn)在軟件需求規(guī)格說明中已明確規(guī)定,所以系統(tǒng)測試的依據(jù)就是軟件需求規(guī)格說明,它包含的信息就是軟件系統(tǒng)測試的基礎(chǔ)。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動是是執(zhí)行系統(tǒng)測試已通過集成測試的系統(tǒng)系統(tǒng)測試用例、腳本是否通過全部需求都已驗證系統(tǒng)測試評價系統(tǒng)測試報告提交用戶驗收驗證下一個需求修改(程序、設(shè)計或需求)回到相應(yīng)階段否否系統(tǒng)測試階段的測試活動3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動接受測試接受測試也叫用戶驗收測試,是系統(tǒng)測試的一個子集。接受測試是以客戶為主的測試。軟件開發(fā)人員和QA(質(zhì)量保證)人員也應(yīng)參加。由客戶參加設(shè)計測試用例,使用用戶界面輸入測試數(shù)據(jù),并分析測試的輸出結(jié)果。一般使用生產(chǎn)中的實際數(shù)據(jù)進行測試。在測試過程中,除了確認軟件的功能和性能外,還應(yīng)確認軟件的可移植性、兼容性、可維護性、錯誤的恢復(fù)功能等。如果軟件系統(tǒng)是根據(jù)合同開發(fā)的,在交付時客戶會進行驗收測試。若系統(tǒng)規(guī)模比較小,測試可以是非正式的。但對于大多數(shù)系統(tǒng),要根據(jù)事前就已經(jīng)商定的日程,正式執(zhí)行驗收測試,在向客戶交付系統(tǒng)前,確保程序能夠通過測試。驗收測試往往不會超過一天時間,它并不是全面的系統(tǒng)測試。有些開發(fā)合同可能會要求以認證來代替驗收測試。認證應(yīng)是由第三方實施的。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動運行和維護階段的測試活動運行和維護階段是軟件生存周期中最長的一段時間,在這段時間內(nèi),需要在運行環(huán)境對軟件產(chǎn)品進行性能監(jiān)視,如果有必要,為了糾正錯誤或滿足新的需求,還需要對軟件產(chǎn)品進行修改。對軟件產(chǎn)品、應(yīng)用以及用戶其他考慮因素的高度依賴性可能會使運行和維護階段更復(fù)雜。3.4軟件的測試-在軟件開發(fā)生存周期中的測試活動軟件調(diào)試是在進行了成功的測試之后才開始的工作。它與軟件測試不同,調(diào)試的任務(wù)是進一步診斷和改正程序中潛在的錯誤。調(diào)試活動由兩部分組成:確定程序中可疑錯誤的確切性質(zhì)和位置。對程序(設(shè)計,編碼)進行修改,排除這個錯誤。調(diào)試工作是一個具有很強技巧性的工作---需要經(jīng)驗的積累。軟件運行失效或出現(xiàn)問題,往往只是潛在錯誤的外部表現(xiàn),而外部表現(xiàn)與內(nèi)在原因之間常常沒有明顯的聯(lián)系。如果要找出真正的原因,排除潛在的錯誤,不是一件易事??梢哉f,調(diào)試是通過現(xiàn)象,找出原因的一個思維分析的過程。3.4軟件的測試-調(diào)試調(diào)試的步驟從錯誤的外部表現(xiàn)形式入手,確定程序中出錯位置;研究有關(guān)部分的程序,找出錯誤的內(nèi)在原因。有兩種可能:測試用例測試結(jié)果錯誤現(xiàn)場出錯原因假

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論