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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

Ltotal=LS/EX+Lloop+Lif

+Lbranch

其中,LS

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

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

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

其中,mi

是模塊在第i

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

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

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

Lif的計(jì)算公式為

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

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

的計(jì)算公式為:

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

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

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

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

定義為:其中SI/O

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

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

定義為

Uread

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

Ctotal=Ltotal+0.1×Cinterface+

0.2×CC+0.4×CI/O

-0.1×Uread

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

Halstead度量

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

H

表示“程序長(zhǎng)度”,則有

H=n1

log2n1+n2

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

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

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

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

可用下式得到

V=N

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

V*=(2+n2*)

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

=

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

f()

,n2*表示輸入/輸出變量個(gè)數(shù)。用C語(yǔ)言寫出的交換排序的例子。3.3軟件的實(shí)現(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軟件的實(shí)現(xiàn)-程序效率與性能分析軟件工程35運(yùn)算符計(jì)數(shù)運(yùn)算對(duì)象計(jì)數(shù)可執(zhí)行語(yǔ)句結(jié)束7X6數(shù)組下標(biāo)[]6i5=5j10if()2n3for()221;7save2return116<301>1n2=8N2=34-1+5{}2n1=12N1=423.3軟件的實(shí)現(xiàn)-程序效率與性能分析對(duì)于上面的例子,利用n1,N1,n2,N2,可以計(jì)算得

H=12

log212+8

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

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

L=V*/V

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

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

D=1/L

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

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

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

=

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

應(yīng)與程序量V

成正比。例如,一個(gè)程序?qū)?5個(gè)數(shù)據(jù)庫(kù)項(xiàng)共訪問(wèn)1300次,對(duì)150個(gè)運(yùn)算符共使用了1200次,那么預(yù)測(cè)該程序的錯(cuò)誤數(shù)B:

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

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

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

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

源程序程序員我要讓計(jì)算機(jī)怎么做?設(shè)計(jì)說(shuō)明書設(shè)計(jì)員我要讓軟件做什么?理解正確性表達(dá)正確性理解正確性設(shè)計(jì)正確性表達(dá)正確性理解正確性編碼正確性運(yùn)行正確性輸入正確性

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論