第5章 結(jié)構(gòu)化的實(shí)現(xiàn)_第1頁
第5章 結(jié)構(gòu)化的實(shí)現(xiàn)_第2頁
第5章 結(jié)構(gòu)化的實(shí)現(xiàn)_第3頁
第5章 結(jié)構(gòu)化的實(shí)現(xiàn)_第4頁
第5章 結(jié)構(gòu)化的實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩222頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1

軟件工程

SoftwareEngineering

2第5章結(jié)構(gòu)化的實(shí)現(xiàn)結(jié)構(gòu)化實(shí)現(xiàn):編碼測(cè)試編碼:把軟件設(shè)計(jì)翻譯成計(jì)算機(jī)可以理解的形式——用某種程序設(shè)計(jì)語言書寫的程序。測(cè)試:在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤。結(jié)構(gòu)化實(shí)現(xiàn)結(jié)構(gòu)化實(shí)現(xiàn)工作的內(nèi)容和步驟設(shè)計(jì)階段所設(shè)計(jì)定義的每一個(gè)模塊進(jìn)行程序過程設(shè)計(jì)、編碼和單元測(cè)試工作。按結(jié)構(gòu)圖將各軟件模塊組裝起來,進(jìn)行組裝測(cè)試、確認(rèn)測(cè)試和系統(tǒng)測(cè)試等工作。交付用戶使用并根據(jù)使用情況進(jìn)行維護(hù)。在每個(gè)階段都必須按照有關(guān)規(guī)范編寫相應(yīng)的說明書或報(bào)告。結(jié)構(gòu)化實(shí)現(xiàn)結(jié)構(gòu)化實(shí)現(xiàn)工作的內(nèi)容和步驟結(jié)構(gòu)化實(shí)現(xiàn)結(jié)構(gòu)化實(shí)現(xiàn)階段的主要任務(wù):按總體設(shè)計(jì)方案購置和安裝計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)。軟件準(zhǔn)備。人員培訓(xùn)。主要是用戶培訓(xùn)。數(shù)據(jù)準(zhǔn)備。沒有一定基礎(chǔ)的數(shù)據(jù)準(zhǔn)備,系統(tǒng)調(diào)試就不能很好的運(yùn)行。試運(yùn)行。6結(jié)構(gòu)化的實(shí)現(xiàn)編碼軟件測(cè)試基礎(chǔ)軟件測(cè)試方法軟件測(cè)試步驟單元測(cè)試集成測(cè)試確認(rèn)測(cè)試軟件調(diào)試7編碼程序設(shè)計(jì)語言的選擇原則編碼風(fēng)格8程序設(shè)計(jì)語言的選擇原則在選擇編程語言時(shí),可以考慮以下因素。應(yīng)用領(lǐng)域:目標(biāo)系統(tǒng)的應(yīng)用領(lǐng)域不同,需要采取的系統(tǒng)開發(fā)范型也不同,所以要考慮支持相應(yīng)范型的編程語言。系統(tǒng)用戶的要求。軟件運(yùn)行環(huán)境。可得到的軟件工具。工程規(guī)模。軟件可移植性。程序員的知識(shí)。

9程序設(shè)計(jì)語言的選擇原則C語言:適合系統(tǒng)底層實(shí)現(xiàn)。C語言、匯編語言、Ada:適合實(shí)時(shí)應(yīng)用、或很特殊的復(fù)雜算法、代碼優(yōu)化要求高的領(lǐng)域。FORTRAN:工程領(lǐng)域,復(fù)雜的數(shù)值計(jì)算。Java:適合平臺(tái)無關(guān)的應(yīng)用、網(wǎng)絡(luò)編程應(yīng)用。Dephi:適合信息系統(tǒng)應(yīng)用。PROLOG和LISP:人工智能領(lǐng)域。SQLServer、Oracle、Access:數(shù)據(jù)庫操作。程序的復(fù)雜性及度量1.代碼行度量法度量程序的復(fù)雜性,最簡(jiǎn)單的方法就是統(tǒng)計(jì)程序的源代碼行數(shù)。常用的軟件成本估量計(jì)量單位:源代碼行工作量:一項(xiàng)任務(wù)所需的程序員平均工作時(shí)間。單位是人月、人年或人日。軟件生產(chǎn)率:開發(fā)全過程中單位勞動(dòng)量能夠完成的平均軟件數(shù)量。程序的復(fù)雜性及度量2.McCabe度量法由ThomasMcCabe提出的一種基于程序控制流的復(fù)雜性度量方法。先畫出流圖,然后用該圖的環(huán)路數(shù)作為程序復(fù)雜性的度量值。流圖是退化的程序流程圖。把流程圖中的每一個(gè)處理符號(hào)都退化成一個(gè)結(jié)點(diǎn),原來連接不同處理符號(hào)的流線變成連接不同結(jié)點(diǎn)的有向弧,這樣的有向圖叫做流圖。有向圖G結(jié)點(diǎn)數(shù)n=6弧數(shù)m=9環(huán)的個(gè)數(shù)V(G)=m-n+2=512環(huán)路復(fù)雜度取決于程序控制結(jié)構(gòu)的復(fù)雜度。當(dāng)程序的分支數(shù)目或循環(huán)數(shù)目增加時(shí)其復(fù)雜度也增加。對(duì)于復(fù)雜度超過10的程序,應(yīng)分成幾個(gè)小程序,以減少程序中的錯(cuò)誤。這種度量的缺點(diǎn):不同種類的控制流的復(fù)雜度不能區(qū)分。簡(jiǎn)單IF語句與循環(huán)語句的復(fù)雜性是一樣的。嵌套IF語句與簡(jiǎn)單CASE的復(fù)雜性是一樣的。模塊接口當(dāng)成一個(gè)簡(jiǎn)單分支一樣處理。一個(gè)具有1000行的順序程序與一行語句的復(fù)雜性相同。1314編碼風(fēng)格1.源程序文檔化編寫源程序文檔化的原則為:1)標(biāo)識(shí)符應(yīng)盡量具有實(shí)際意義2)程序應(yīng)加注釋主要內(nèi)容有:說明每個(gè)模塊的用途、功能。說明模塊的接口形式、參數(shù)描述及從屬模塊的清單。該模塊的數(shù)據(jù)描述:特殊的數(shù)組或變量的說明、約束或其他信息。開發(fā)歷史:指程序的編寫者、審閱者姓名及日期、修改說明及日期。152.數(shù)據(jù)說明變量、常量聲明時(shí)說明其用途變量命名時(shí)采用一定的規(guī)范說明語句中變量排列有序化使用注釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)例如:變量命名可采用匈牙利命名法nLength,szUserName常量采用全大寫方式變量說明順序示例: ①常量說明②簡(jiǎn)單變量類型說明 ③數(shù)組說明④公用數(shù)據(jù)塊說明⑤所有的文件說明編碼風(fēng)格163.語句構(gòu)造不要把多個(gè)語句寫在一行避免多層循環(huán)或條件嵌套語句清晰采用縮進(jìn)統(tǒng)一風(fēng)格編碼風(fēng)格17一行中包括了多個(gè)語句,掩蓋了程序的循環(huán)結(jié)構(gòu)和條件結(jié)構(gòu),使其可讀性變得很差FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;編碼風(fēng)格18FORI:=1TON-1DO//改進(jìn)布局

BEGIN

T:=I;

FORJ:=I+1TONDO

IFA[J]<A[T]THENT:=J;

IFT≠ITHEN

BEGIN

WORK:=A[T];

A[T]:=A[I];

A[I]:=WORK;

ENDEND;編碼風(fēng)格19階梯式布局IF(…)

THEN

IF(…)

THEN

……

ELSE

……

ENDIF

……

ELSE

……

ENDIF編碼風(fēng)格20程序編寫首先應(yīng)當(dāng)考慮清晰性例如,有一個(gè)用Pascal語句寫出的程序段:A[I]:=A[I]+A[J];A[J]:=A[I]-A[J];A[I]:=A[I]-A[J]; WORK:=A[J];A[J]:=A[I];A[I]:=WORK;編碼風(fēng)格214.輸入/輸出對(duì)所有輸入數(shù)據(jù)進(jìn)行檢查輸入采用簡(jiǎn)單、一致的格式輸入提示輸出數(shù)據(jù)統(tǒng)一格式,說明簡(jiǎn)潔無二義……編碼風(fēng)格225.效率效率是靠良好的設(shè)計(jì)來保證的。程序運(yùn)行時(shí)間減少嵌套循環(huán),避免多維數(shù)組,減少類型轉(zhuǎn)換、采用占用內(nèi)存少的數(shù)據(jù)類型。內(nèi)存采用優(yōu)化的算法輸入/輸出效率設(shè)計(jì)簡(jiǎn)單的人機(jī)接口編碼風(fēng)格23軟件測(cè)試背景軟件是人編的—所以不完美實(shí)例:1994-1995,迪斯尼的獅子王系統(tǒng)不支持問題1999年12月3日,美國航天局火星極地登陸飛船失蹤1991年愛國者導(dǎo)彈防御系統(tǒng)系統(tǒng)時(shí)鐘錯(cuò)誤積累造成跟蹤系統(tǒng)失去精確度千年蟲,世界各地解決2000年錯(cuò)誤超過數(shù)億美元24千年蟲(Y2K)在上個(gè)世紀(jì)70年代,程序員為了節(jié)約非常寶貴的內(nèi)存資源和硬盤空間,在存儲(chǔ)日期時(shí),只保留年份的后兩位,如“1980”被存為“80”。當(dāng)2000年到來的時(shí)候,問題就會(huì)出現(xiàn),比如銀行存款程序在計(jì)算利息時(shí),應(yīng)該用現(xiàn)在的日期“2000年1月1日”減去當(dāng)時(shí)存款的日期,比如“1989年1月1日”,結(jié)果應(yīng)該是11年,如果利息是3%,銀行要付給顧客每100元,大約66元利息。如果程序沒有糾正年份只存儲(chǔ)兩位的問題,其存款年數(shù)就變?yōu)?89年,變成顧客反要付銀行巨額利息。就是為了這樣一個(gè)簡(jiǎn)單的設(shè)計(jì)缺陷,全世界付出幾十億美元。25軟件測(cè)試的背景1963年,美國飛往火星的火箭爆炸,損失$10million。原因:FORTRAN循環(huán):

DO5I=1,3誤寫為DO5I=1.326軟件測(cè)試的背景在整個(gè)軟件開發(fā)中,測(cè)試工作量一般占30%~40%,甚至≥50%。在人命關(guān)天的軟件(如飛機(jī)控制、核反應(yīng)堆等)中,測(cè)試所花費(fèi)的時(shí)間往往是其它軟件工程活動(dòng)時(shí)間之和的三到五倍。27Bug有人說,軟件測(cè)試就是在尋找軟件中的Bug。28關(guān)于Bug的一個(gè)有趣的小故事故事發(fā)生在1945年9月的一天,一個(gè)炎熱的下午,機(jī)房是一間第一次世界大戰(zhàn)時(shí)建造的老建筑,沒有空調(diào),所有窗戶都敞開著。Hopper正領(lǐng)著她的研究小組夜以繼日地工作,研制一臺(tái)稱為“MARKII”的計(jì)算機(jī),它使用了大量的繼電器(電子機(jī)械裝置,那時(shí)還沒有使用晶體管),一臺(tái)不是純粹的電子計(jì)算機(jī)。突然,MARKII死機(jī)了。研究人員試了很多次還是啟動(dòng)不來,然后就開始用各種方法找問題,看問題究竟出現(xiàn)在哪里,最后定位到板子F第70號(hào)繼電器出錯(cuò)。Hopper觀察這個(gè)出錯(cuò)的繼電器,驚奇地發(fā)現(xiàn)一只飛蛾躺在中間,已經(jīng)被繼電器打死。她小心地用攝子將蛾子夾出來,用透明膠布帖到“事件記錄本”中,并注明“第一個(gè)發(fā)現(xiàn)蟲子的實(shí)例”,然后計(jì)算機(jī)又恢復(fù)了正常。從此以后,人們將計(jì)算機(jī)錯(cuò)誤戲稱為臭蟲(Bug),而把找尋錯(cuò)誤的工作稱為“找臭蟲”(Debug)。GraceHopper的事件記錄本,連同那個(gè)飛蛾,現(xiàn)在都陳列在美國歷史博物館中。

29問題在哪里?

沒有足夠測(cè)試缺乏測(cè)試平臺(tái)不正確的測(cè)試環(huán)境缺少集成測(cè)試缺少性能測(cè)試缺少強(qiáng)度測(cè)試缺少可靠性測(cè)試

……微軟的經(jīng)驗(yàn)Windows95有1000萬行代碼Windows2000有5000萬行代碼,3000多個(gè)工程師,幾百個(gè)小團(tuán)隊(duì)。Exchange2000和Windows2000開發(fā)人員結(jié)構(gòu)Exchange2000Windows2000項(xiàng)目經(jīng)理25人約250人開發(fā)人員140人約1700人測(cè)試人員350人約3200人測(cè)試人員/開發(fā)人員2.51.931軟件測(cè)試行業(yè)前景軟件測(cè)試行業(yè)前景看好,需求量已超過30萬。有數(shù)據(jù)顯示,目前軟件測(cè)試行業(yè)人才需求量已超過30萬,并且仍在以每年20%的速度增加。中國軟件協(xié)會(huì)秘書長胡昆山表示,現(xiàn)階段,我國軟件測(cè)試基礎(chǔ)人才不足,已成為制約我國軟件產(chǎn)業(yè)發(fā)展的瓶頸。軟件測(cè)試人才是職場(chǎng)的多面手,需要具備縝密的邏輯思維能力、全面的測(cè)試技術(shù)能力、較強(qiáng)的責(zé)任心和團(tuán)隊(duì)合作精神,以及出色的溝通能力等職業(yè)素質(zhì)。32軟件測(cè)試基礎(chǔ)軟件測(cè)試目標(biāo)軟件測(cè)試準(zhǔn)則軟件測(cè)試方法軟件測(cè)試步驟功能測(cè)試和性能測(cè)試軟件測(cè)試工具軟件測(cè)試管理流程33軟件測(cè)試目標(biāo)測(cè)試是程序的執(zhí)行過程,目的在于發(fā)現(xiàn)錯(cuò)誤。好的測(cè)試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤。成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。

34軟件測(cè)試目標(biāo)程序測(cè)試能證明錯(cuò)誤的存在,但不能證明錯(cuò)誤不存在。測(cè)試的目的是發(fā)現(xiàn)程序中的錯(cuò)誤,是為了證明程序有錯(cuò),而不是證明程序無錯(cuò)。35軟件測(cè)試目標(biāo)如果軟件中的問題沒有人發(fā)現(xiàn),那么它算不算軟件缺陷?古諺:“一片樹葉飄落在森林中沒有人聽見,誰能說它發(fā)出了聲音?”由于不能報(bào)告沒有看見的問題,因此,沒有看見就不能說存在軟件缺陷。只有看到了,才能斷言軟件缺陷。36測(cè)試的目的是說明程序正確地執(zhí)行它應(yīng)有的功能”這種說法正確嗎?例:程序Triangle,輸入三個(gè)整數(shù),表示一個(gè)三角形的三個(gè)邊長,該程序產(chǎn)生一個(gè)結(jié)果,指出該三角形是等邊三角形、等腰三角形還是不等邊三角形。為說明其能正確執(zhí)行它的功能,可使用“測(cè)試用例”(3,4,5),(5,5,6),(6,6,6),程序都能給出正確結(jié)果,是否就可認(rèn)為程序是正確的?軟件測(cè)試目標(biāo)37對(duì)測(cè)試的理解編程大師說:“任何一個(gè)程序,無論它多么小,總存在著錯(cuò)誤?!背鯇W(xué)者不相信大師的話,他問:“如果一個(gè)程序小得只執(zhí)行一個(gè)簡(jiǎn)單的功能,那會(huì)怎樣?”“這樣的一個(gè)程序沒有意義,”大師說,“但如果這樣的程序存在的話,操作系統(tǒng)最后將失效,產(chǎn)生一個(gè)錯(cuò)誤。”但初學(xué)者不滿足,他問:“如果操作系統(tǒng)不失效,那么會(huì)怎樣?”“沒有不失效的操作系統(tǒng),”大師說,“但如果這樣的操作系統(tǒng)存在的話,硬件最后將失效,產(chǎn)生一個(gè)錯(cuò)誤?!背鯇W(xué)者仍不滿足,再問:“如果硬件不失效,那么會(huì)怎樣?”大師長嘆一聲道:“沒有不失效的硬件。但如果這樣的硬件存在的話,用戶就會(huì)想讓那個(gè)程序做一件不同的事,這件事也是一個(gè)錯(cuò)誤?!睕]有錯(cuò)誤的程序世間難求。[編程之道(郭海等譯),清華大學(xué)出版社]38(1)所有的測(cè)試都應(yīng)追溯到用戶需求最嚴(yán)重的錯(cuò)誤(從用戶角度)是那些導(dǎo)致軟件無法滿足需求的錯(cuò)誤。軟件測(cè)試的準(zhǔn)則39(2)應(yīng)該在測(cè)試開始之前的相當(dāng)長時(shí)間,就制定出測(cè)試計(jì)劃。概要設(shè)計(jì)時(shí)應(yīng)完成測(cè)試計(jì)劃。軟件測(cè)試不等于程序測(cè)試,軟件測(cè)試應(yīng)貫穿于軟件定義與開發(fā)的整個(gè)期間。軟件測(cè)試的準(zhǔn)則40軟件測(cè)試的準(zhǔn)則(3)把Pareto原理應(yīng)用于軟件測(cè)試。Pareto原理告訴我們,測(cè)試發(fā)現(xiàn)的錯(cuò)誤中的80%很可能是由程序中20%的模塊造成的。

41軟件測(cè)試的準(zhǔn)則(4)測(cè)試應(yīng)該從“小規(guī)?!遍_始,并逐步進(jìn)行“大規(guī)?!睖y(cè)試。(5)窮舉測(cè)試是不可能的。例Sum(inta,intb,intc) 假定int類型為16位整數(shù)

{ 需要測(cè)試216*216*216次

return(a+b+c); 每次1ms,約要1萬年

}42(6)為了達(dá)到最佳的測(cè)試效果,應(yīng)該由獨(dú)立的第三方來從事測(cè)試工作。開發(fā)和測(cè)試隊(duì)伍分別建立。軟件測(cè)試的準(zhǔn)則43軟件測(cè)試是有風(fēng)險(xiǎn)的行為軟件數(shù)量遺漏軟件缺陷數(shù)目測(cè)試費(fèi)用測(cè)試中測(cè)試后測(cè)試工作量最優(yōu)測(cè)量量44軟件測(cè)試方法靜態(tài)測(cè)試方法動(dòng)態(tài)測(cè)試方法白盒測(cè)試方法黑盒測(cè)試方法軟件測(cè)試方法45靜態(tài)測(cè)試靜態(tài)測(cè)試技術(shù):不實(shí)際運(yùn)行程序,而是通過檢查和閱讀等手段來發(fā)現(xiàn)錯(cuò)誤并評(píng)估代碼質(zhì)量的軟件測(cè)試技術(shù)。靜態(tài)測(cè)試約可找出30~70%的邏輯設(shè)計(jì)錯(cuò)誤。方法:走查:WalkThrough審查:Inspection評(píng)審:ReviewMichaelFaganIBM46靜態(tài)測(cè)試-走查走查:開發(fā)組內(nèi)部進(jìn)行的,主要是個(gè)人通過檢查和閱讀等手段來查找錯(cuò)誤的活動(dòng)。經(jīng)驗(yàn):限時(shí)避免跑題不要現(xiàn)場(chǎng)修改檢查要點(diǎn)邏輯錯(cuò)誤代碼標(biāo)準(zhǔn)/規(guī)范/風(fēng)格47靜態(tài)測(cè)試-審查審查:開發(fā)組內(nèi)部進(jìn)行的,分配了相關(guān)的角色,采用講解、提問并使用Checklist方式進(jìn)行的查找錯(cuò)誤的活動(dòng)。經(jīng)驗(yàn):以會(huì)議的形式,制定會(huì)議目標(biāo)、流程和規(guī)則,結(jié)束后要編寫報(bào)告。參加人員:經(jīng)驗(yàn)豐富的開發(fā)人員、和本模塊相關(guān)的開發(fā)人員、本項(xiàng)目組的新人。由另外一名開發(fā)者進(jìn)行講解、其他開發(fā)者主要按照Checklist進(jìn)行提問并填表、本模塊開發(fā)者回答問題并記錄。不要現(xiàn)場(chǎng)修改。檢查要點(diǎn)設(shè)計(jì)需求代碼標(biāo)準(zhǔn)/規(guī)范/風(fēng)格48靜態(tài)測(cè)試-評(píng)審評(píng)審:開發(fā)組、測(cè)試組和相關(guān)人員(QA、產(chǎn)品經(jīng)理等)聯(lián)合進(jìn)行的,采用講解、提問并使用Checklist方式進(jìn)行的查找錯(cuò)誤的活動(dòng)。經(jīng)驗(yàn):以會(huì)議的形式,制定會(huì)議目標(biāo)、流程和規(guī)則,結(jié)束后要編寫報(bào)告。相關(guān)資料要在會(huì)議前下發(fā)并閱讀。參加人員:經(jīng)驗(yàn)豐富的開發(fā)人員、和本模塊相關(guān)的開發(fā)人員、測(cè)試組和相關(guān)人員。由另外一名開發(fā)者進(jìn)行講解、其他開發(fā)者主要按照Checklist進(jìn)行提問并填表、本模塊開發(fā)者回答問題并記錄。不要現(xiàn)場(chǎng)修改。檢查要點(diǎn)設(shè)計(jì)需求代碼標(biāo)準(zhǔn)/規(guī)范/風(fēng)格文檔的完整性和一致性49動(dòng)態(tài)測(cè)試動(dòng)態(tài)測(cè)試:通過運(yùn)行軟件來檢驗(yàn)軟件的動(dòng)態(tài)行為和運(yùn)行結(jié)果的正確性動(dòng)態(tài)測(cè)試的兩個(gè)基本要素:被測(cè)試程序測(cè)試數(shù)據(jù)(測(cè)試用例)50動(dòng)態(tài)測(cè)試白盒測(cè)試(結(jié)構(gòu)測(cè)試)測(cè)試者完全知道程序的內(nèi)部結(jié)構(gòu)和處理算法黑盒測(cè)試(功能測(cè)試)測(cè)試者完全不知道程序的內(nèi)部結(jié)構(gòu)和處理算法51白盒測(cè)試—基于代碼的測(cè)試52黑盒測(cè)試—基于需求的測(cè)試軟件輸入輸出53CBAD-A:只能用黑盒測(cè)試發(fā)現(xiàn)的錯(cuò)誤-B:只能用白盒測(cè)試發(fā)現(xiàn)的錯(cuò)誤-C:兩種方法都能發(fā)現(xiàn)的錯(cuò)誤-D:兩種方法都不能發(fā)現(xiàn)的錯(cuò)誤黑盒測(cè)試與白盒測(cè)試能發(fā)現(xiàn)的錯(cuò)誤54窮舉測(cè)試?yán)?輸入三角形的三條邊長可采用的測(cè)試用例數(shù)(設(shè)字長16位)=216X216X216≈3X1014執(zhí)行時(shí)間:

設(shè)測(cè)試一次需1ms,共需一萬年。黑盒測(cè)試黑盒測(cè)試55窮舉測(cè)試?yán)簭腁到B的可能路徑51+52+..+519+520≈1014執(zhí)行時(shí)間:設(shè)測(cè)試一次需2ms

窮舉測(cè)試需5億年。不論黑盒還是白盒測(cè)試都不能進(jìn)行窮盡測(cè)試AB白盒測(cè)試56白盒測(cè)試技術(shù)白盒測(cè)試技術(shù)將介紹:邏輯覆蓋基本路徑測(cè)試循環(huán)測(cè)試57白盒測(cè)試技術(shù)--邏輯覆蓋邏輯覆蓋是設(shè)計(jì)白盒測(cè)試方案的一種技術(shù)。設(shè)計(jì)測(cè)試方案是測(cè)試階段的關(guān)鍵技術(shù)問題。測(cè)試方案包括具體的測(cè)試目的(例如,要測(cè)試的具體功能),應(yīng)該輸入的測(cè)試數(shù)據(jù)和預(yù)期的輸出結(jié)果。測(cè)試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測(cè)試用例。58不同的測(cè)試數(shù)據(jù)發(fā)現(xiàn)程序錯(cuò)誤的能力差別很大,為了提高測(cè)試效率降低測(cè)試成本,應(yīng)該選用高效的測(cè)試數(shù)據(jù)。因?yàn)椴豢赡苓M(jìn)行窮盡的測(cè)試,選用少量“最有效的”測(cè)試數(shù)據(jù),做到盡可能完備的測(cè)試就更重要了。有選擇地執(zhí)行程序中某些最有代表性的通路是對(duì)窮盡測(cè)試的唯一可行的替代辦法。邏輯覆蓋是對(duì)一系列測(cè)試過程的總稱,這組測(cè)試過程逐漸進(jìn)行越來越完整的通路測(cè)試。59測(cè)試數(shù)據(jù)從覆蓋源程序語句的詳盡程度分析,大致有以下一些不同的覆蓋標(biāo)準(zhǔn)。 語句覆蓋判定覆蓋條件覆蓋判定/條件覆蓋條件組合覆蓋路徑覆蓋60測(cè)試數(shù)據(jù):A=2,B=0,X=4語句覆蓋是最弱的邏輯覆蓋1.語句覆蓋語句覆蓋的含義是,選擇足夠多的測(cè)試數(shù)據(jù),使被測(cè)程序中每個(gè)語句至少執(zhí)行一次。61測(cè)試數(shù)據(jù):A=3,B=0,X=1

覆蓋sacbdA=2,B=1,X=3

覆蓋sabed2.判定覆蓋判定覆蓋又叫分支覆蓋,使每個(gè)判定的真假分支都至少執(zhí)行一次判定覆蓋仍是弱的邏輯覆蓋只覆蓋了全部路徑的一半62測(cè)試數(shù)據(jù):A=2,B=0,X=4

滿足A>1,B=0,A=2,X>1條件 覆蓋sacbedA=1,B=1,X=1

滿足A≤1,B≠0,A≠2,X≤1條件 覆蓋sabda點(diǎn)各種情況:A>1,A≤1,B=0,B≠0

b點(diǎn)各種情況:A=2,A≠2,X>1,X≤13.條件覆蓋判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果。條件覆蓋強(qiáng)于判定覆蓋條件覆蓋的每個(gè)條件都取到了兩個(gè)不同的結(jié)果判定覆蓋的每個(gè)判定表達(dá)式都取到了兩個(gè)不同的結(jié)果63測(cè)試數(shù)據(jù):A=2,B=0,X=1

滿足A>1,B=0,A=2,X≤1條件 覆蓋sacbedA=1,B=1,X=2

滿足A≤1,B≠0,A≠2,X>1條件 覆蓋sabed條件覆蓋不一定滿足判定覆蓋第二個(gè)判定表達(dá)式的值為假的情況沒有考慮。64判定覆蓋不一定包含條件覆蓋。條件覆蓋也不一定包含判定覆蓋。一種能同時(shí)滿足這兩種覆蓋標(biāo)準(zhǔn)的是: 判定/條件覆蓋。65測(cè)試數(shù)據(jù):A=2,B=0,X=4

覆蓋sacbedA=1,B=1,X=1

覆蓋sabd4.判定/條件覆蓋判定表達(dá)式中的每個(gè)條件都取到各種可能的值,而且每個(gè)判定表達(dá)式也都取到各種可能的結(jié)果能同時(shí)滿足判定、條件兩種覆蓋。判定/條件覆蓋不一定滿足路徑覆蓋。665.條件組合覆蓋

每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。

測(cè)試數(shù)據(jù):A=2,B=0,X=4 1,5組合,覆蓋sacbedA=2,B=1,X=1 2,6組合,覆蓋sabedA=1,B=0,X=2 3,7組合,覆蓋sabedA=1,B=1,X=1 4,8組合,覆蓋sabd八種組合:

(1)A>1,B=0(2)A>1,B≠0(3)A≤1,B=0(4)A≤1,B≠0

(5)A=2,X>1(6)A=2,X≤1(7)A≠2,X>1(8)A≠2,X≤1676.路徑覆蓋

覆蓋每一個(gè)可能的路徑。測(cè)試數(shù)據(jù):A=1,B=1,X=1

覆蓋sabdA=1,B=1,X=2

覆蓋sabedA=3,B=0,X=1

覆蓋sacbdA=2,B=0,X=4

覆蓋sacbed686種覆蓋標(biāo)準(zhǔn)的對(duì)比發(fā)現(xiàn)錯(cuò)誤能力覆蓋標(biāo)準(zhǔn)要求弱強(qiáng)語句覆蓋每條語句至少執(zhí)行一次判定覆蓋每個(gè)判定的每個(gè)分支至少執(zhí)行一次條件覆蓋每個(gè)判定的每個(gè)條件應(yīng)取到各種可能的值判定/條件覆蓋同時(shí)滿足判定覆蓋和條件覆蓋條件組合覆蓋每個(gè)判定中各條件的每一種組合至少出現(xiàn)一次路徑覆蓋使程序中每一條可能的路徑至少執(zhí)行一次69流圖流圖在設(shè)計(jì)測(cè)試方案時(shí),往往需要仔細(xì)分析程序的控制流。為了突出表示程序的控制流,可以使用流圖(也稱為程序圖)。流圖僅僅描繪程序的控制流程,它完全不表現(xiàn)對(duì)數(shù)據(jù)的具體操作以及分支或循環(huán)的具體條件。70流圖在流圖中用圓表示節(jié)點(diǎn),一個(gè)圓代表一條或多條語句。程序流程圖中的一個(gè)處理框序列和一個(gè)菱形判定框,可以映射成流圖中的一個(gè)節(jié)點(diǎn)。流圖中的箭頭線稱為邊,它和程序流程圖中的箭頭線類似,代表控制流。在流圖中一條邊必須終止于一個(gè)節(jié)點(diǎn),即使這個(gè)節(jié)點(diǎn)并不代表任何語句(實(shí)際上相當(dāng)于一個(gè)空語句)。由邊和節(jié)點(diǎn)圍成的面積稱為區(qū)域,當(dāng)計(jì)算區(qū)域數(shù)時(shí)應(yīng)該包括圖外部未被圍起來的那個(gè)區(qū)域。71流圖圖把程序流程圖映射成流圖(a)程序流程圖;(b)流圖72流圖PDLprocedure:sort1:dowhilerecordsremain

readrecord;2:ifrecordfield1=03:thenprocessrecord;

storeinbuffer;

incremertcounter;4:elseifrecordfield2=05:thenresetcounter;6:elseprocessrecord;

storeinfile;7a:endif

endif7b:enddo8:end圖

由PDL翻譯成的流圖73白盒測(cè)試技術(shù)--基本路徑測(cè)試基本路徑測(cè)試基本路徑測(cè)試是TomMcCabe提出的一種白盒測(cè)試技術(shù)。通過分析由控制構(gòu)造的環(huán)路的復(fù)雜性,導(dǎo)出基本路徑集合,從而設(shè)計(jì)測(cè)試用例,保證這些路徑至少通過一次。74設(shè)計(jì)基本路徑測(cè)試的步驟(1)以詳細(xì)設(shè)計(jì)或源程序?yàn)榛A(chǔ),導(dǎo)出程序流程圖的拓?fù)浣Y(jié)構(gòu)——程序圖。(a)程序流程圖(b)程序圖圖:程序流程圖和程序圖75(2)程序圖G的環(huán)路復(fù)雜性V(G)的計(jì)算例如,圖(b)的V(G)=4,還可以按如下兩種方法計(jì)算:V(G)=判定結(jié)點(diǎn)數(shù)+1=3+1=4。V(G)=邊的數(shù)量-節(jié)點(diǎn)數(shù)量+2=11-9+2=4。(3)確定只包含獨(dú)立路徑的基本路徑集。例如,在圖(b)所示的圖中,一組獨(dú)立的路徑是:path1:1—11path2:1—2—3—4—5—10—1—11path3:1—2—3—6—8—9—10—1—11path4:1—2—3—6—7—9—10—1—11(4)設(shè)計(jì)測(cè)試用例,確?;韭窂郊现忻織l路徑的執(zhí)行。76使用基本路徑測(cè)試技術(shù)設(shè)計(jì)測(cè)試用例的步驟如下:1.根據(jù)過程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖2.計(jì)算流圖的環(huán)形復(fù)雜度3.確定線性獨(dú)立路徑的基本集合4.設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測(cè)試用例77白盒測(cè)試技術(shù)--循環(huán)測(cè)試循環(huán)測(cè)試循環(huán)測(cè)試是一種白盒測(cè)試技術(shù),它專注于測(cè)試循環(huán)結(jié)構(gòu)的有效性。在結(jié)構(gòu)化的程序中通常只有三種循環(huán):簡(jiǎn)單循環(huán)串接循環(huán)嵌套循環(huán)78圖三種循環(huán)79白盒測(cè)試技術(shù)--循環(huán)測(cè)試1.簡(jiǎn)單循環(huán)使用下列測(cè)試集來測(cè)試簡(jiǎn)單循環(huán),其中n是允許通過循環(huán)的最大次數(shù)。跳過循環(huán)。只通過循環(huán)一次。通過循環(huán)兩次。通過循環(huán)m次,其中m<n-1。通過循環(huán)n-1,n,n+1次。for(i=1;i<=n;i++){ …}80白盒測(cè)試技術(shù)--循環(huán)測(cè)試2.嵌套循環(huán)如果把簡(jiǎn)單循環(huán)的測(cè)試方法直接應(yīng)用到嵌套循環(huán),可能的測(cè)試數(shù)就會(huì)隨嵌套層數(shù)的增加按幾何級(jí)數(shù)增長,這會(huì)導(dǎo)致不切實(shí)際的測(cè)試數(shù)目。B.Beizer提出了一種能減少測(cè)試數(shù)的方法。從最內(nèi)層循環(huán)開始測(cè)試,把所有其他循環(huán)都設(shè)置為最小值。對(duì)最內(nèi)層循環(huán)使用簡(jiǎn)單循環(huán)測(cè)試方法,而使外層循環(huán)的迭代參數(shù)(例如,循環(huán)計(jì)數(shù)器)取最小值,并為越界值或非法值增加一些額外的測(cè)試。由內(nèi)向外,對(duì)下一個(gè)循環(huán)進(jìn)行測(cè)試,但保持所有其他外層循環(huán)為最小值,其他嵌套循環(huán)為“典型”值。繼續(xù)進(jìn)行下去,直到測(cè)試完所有循環(huán)。for(i=1;i<=m;i++) for(j=1;j<=n;j++){ …}設(shè)i=1,對(duì)內(nèi)層循環(huán)做簡(jiǎn)單測(cè)試81白盒測(cè)試技術(shù)--循環(huán)測(cè)試

3.串接循環(huán)如果串接循環(huán)的各個(gè)循環(huán)都彼此獨(dú)立,則可以使用前述的測(cè)試簡(jiǎn)單循環(huán)的方法來測(cè)試串接循環(huán)。如果兩個(gè)循環(huán)串接,而且第一個(gè)循環(huán)的循環(huán)計(jì)數(shù)器值是第二個(gè)循環(huán)的初始值,則這兩個(gè)循環(huán)并不是獨(dú)立的。當(dāng)循環(huán)不獨(dú)立時(shí),建議使用測(cè)試嵌套循環(huán)的方法來測(cè)試串接循環(huán)。82黑盒測(cè)試技術(shù)黑盒測(cè)試著重測(cè)試軟件的功能需求。黑盒測(cè)試并不能取代白盒測(cè)試技術(shù),它是與白盒測(cè)試互補(bǔ)的方法。83黑盒測(cè)試技術(shù)黑盒測(cè)試力圖發(fā)現(xiàn)下述類型的錯(cuò)誤:①功能不正確或遺漏了功能;②界面錯(cuò)誤;③數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部數(shù)據(jù)庫訪問錯(cuò)誤;④性能錯(cuò)誤;⑤初始化和終止錯(cuò)誤。白盒測(cè)試在測(cè)試過程的早期階段進(jìn)行,而黑盒測(cè)試主要用于測(cè)試過程的后期。黑盒測(cè)試故意不考慮程序的控制結(jié)構(gòu),而把注意力集中于信息域。84黑盒測(cè)試方法等價(jià)類劃分邊界值分析錯(cuò)誤推測(cè)因果圖綜合策略85黑盒測(cè)試--等價(jià)類劃分等價(jià)類是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的,并合理地假定:測(cè)試某等價(jià)類的代表值等價(jià)于對(duì)這一類其他值的測(cè)試。如果某個(gè)等價(jià)類中的一個(gè)數(shù)據(jù)作為測(cè)試數(shù)據(jù)進(jìn)行測(cè)試查出了錯(cuò)誤,那么使用這一等價(jià)類中的其他數(shù)據(jù)進(jìn)行測(cè)試也會(huì)查出同樣的錯(cuò)誤;若使用某個(gè)等價(jià)類中的一個(gè)數(shù)據(jù)作為測(cè)試數(shù)據(jù)進(jìn)行測(cè)試沒有查出錯(cuò)誤,則使用這個(gè)等價(jià)類中的其他數(shù)據(jù)也同樣查不出錯(cuò)誤。86等價(jià)類的劃分有兩種不同的情況:(1)有效等價(jià)類:是指對(duì)于程序的規(guī)格說明來說,是合理的、有意義的輸入數(shù)據(jù)構(gòu)成的集合。利用它,可以檢驗(yàn)程序是否實(shí)現(xiàn)了規(guī)格說明預(yù)先規(guī)定的功能和性能。(2)無效等價(jià)類:是指對(duì)于程序的規(guī)格說明來說,是不合理的、無意義的輸入數(shù)據(jù)構(gòu)成的集合。程序員主要利用這一類測(cè)試用例檢查程序中功能和性能的實(shí)現(xiàn)是否有不符合規(guī)格說明要求的地方。在設(shè)計(jì)測(cè)試用例時(shí),要同時(shí)考慮有效等價(jià)類和無效等價(jià)類的設(shè)計(jì)。黑盒測(cè)試--等價(jià)類劃分87劃分等價(jià)類的規(guī)則:(1)如果輸入條件規(guī)定了取值范圍或值的個(gè)數(shù),可定義一個(gè)有效等價(jià)類和兩個(gè)無效等價(jià)類。例:輸入值是學(xué)生成績,范圍是0~100無效等價(jià)類成績>1000100

有效等價(jià)類0≤成績≤100

無效等價(jià)類成績<0黑盒測(cè)試--等價(jià)類劃分88黑盒測(cè)試--等價(jià)類劃分(2)如果規(guī)格說明規(guī)定了數(shù)據(jù)值的集合,或者是規(guī)定了“必須如何”的條件,這時(shí)可確定一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。例如,在C中對(duì)變量標(biāo)識(shí)符規(guī)定為“以字母開頭的……串”,那么所有以字母開頭的串構(gòu)成有效等價(jià)類,而不在此集合內(nèi)(不以字母開頭)的串歸于無效等價(jià)類。(3)如果規(guī)格說明中規(guī)定的是一個(gè)條件數(shù)據(jù),則可確定一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。例如:“……成人(年滿18歲)須……”,則考慮成人為一個(gè)有效等價(jià)類;未滿18歲者為一個(gè)無效等價(jià)類。(4)如規(guī)定了輸入數(shù)據(jù)的一組值,且程序?qū)Σ煌斎胫底霾煌幚?,則每個(gè)允許的輸入值是一個(gè)有效等價(jià)類,并有一個(gè)無效等價(jià)類(所有不允許的輸入值的集合)。例:輸入條件說明學(xué)歷可為:??啤⒈究?、碩士、博士四種之一,則分別取這四個(gè)值作為四個(gè)有效等價(jià)類,另外把四種學(xué)歷之外的任何學(xué)歷作為無效等價(jià)類。(5)如果我們確知,已劃分的等價(jià)類中各元素在程序中的處理方式不同,則應(yīng)將此等價(jià)類進(jìn)一步劃分成更小的等價(jià)類。90黑盒測(cè)試--等價(jià)劃分用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例步驟:(1)形成等價(jià)類表,每一等價(jià)類規(guī)定一個(gè)唯一的編號(hào);(2)設(shè)計(jì)一個(gè)新的測(cè)試方案以盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,復(fù)重這一步驟直到所有有效等價(jià)類都被覆蓋為止。(3)設(shè)計(jì)一個(gè)新的測(cè)試方案,使它覆蓋一個(gè)而且只覆蓋一個(gè)尚未被覆蓋的無效等價(jià)類,重復(fù)這一步驟直到所有無效等價(jià)類都被覆蓋為止。91例1:用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例例如,有一報(bào)表處理系統(tǒng),要求用戶輸入處理報(bào)表的日期。假設(shè)日期限制在1990年1月至1999年12月,即系統(tǒng)只能對(duì)該段時(shí)期內(nèi)的報(bào)表進(jìn)行處理。如果用戶輸入的日期不在此范圍內(nèi),則顯示輸入錯(cuò)誤信息。該系統(tǒng)規(guī)定日期由年、月的6位數(shù)字字符組成,前4位代表年,后兩位代表月?,F(xiàn)用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例,來測(cè)試程序的“日期檢查功能”。

如何用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例,來測(cè)試程序的日期檢查功能?

92(1)劃分等價(jià)類并編號(hào)劃分成3個(gè)有效等價(jià)類,7個(gè)無效等價(jià)類,如表所示。

表:“報(bào)表日期”的輸入條件的等價(jià)類表輸入等價(jià)類合理等價(jià)類不合理等價(jià)類報(bào)表日期的類型及長度(1)6位數(shù)字字符(2)有非數(shù)字字符(3)少于6個(gè)數(shù)字字符(4)多于6個(gè)數(shù)字字符年份范圍(5)在1990~1999之間(6)小于1990(7)大于1999月份范圍(8)在1~12之間(9)等于0(10)大于1293(2)為合理等價(jià)類設(shè)計(jì)測(cè)試用例對(duì)于表中編號(hào)為1,5,8對(duì)應(yīng)的3個(gè)合理等價(jià)類,用一個(gè)測(cè)試用例覆蓋。

測(cè)試數(shù)據(jù) 期望結(jié)果 覆蓋范圍

199905 輸入有效 1,5,8(1)6位數(shù)字字符(2)年在1990~1999之間(3)月在01~12之間94(3)為每一個(gè)不合理等價(jià)類至少設(shè)計(jì)一個(gè)測(cè)試用例

測(cè)試數(shù)據(jù) 期望結(jié)果 覆蓋范圍

99MAY

輸入無效 219995

輸入無效 31999005

輸入無效 4

198912 輸入無效 6

200001 輸入無效 7199900

輸入無效 9199913

輸入無效 10不能出現(xiàn)相同的測(cè)試用例本例的10個(gè)等價(jià)類至少需要8個(gè)測(cè)試用例95例2:用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例用等價(jià)劃分法設(shè)計(jì)一個(gè)簡(jiǎn)單程序的測(cè)試方案。假設(shè)有一個(gè)把數(shù)字串轉(zhuǎn)變成整數(shù)的函數(shù)。運(yùn)行程序的計(jì)算機(jī)字長16位,用二進(jìn)制補(bǔ)碼表示整數(shù)。這個(gè)函數(shù)是用C語言編寫的,它的說明如下:intstrtoint(chararray[7])96被處理的數(shù)字串是右對(duì)齊的,也就是說,如果數(shù)字串比六個(gè)字符短,則在它的左邊補(bǔ)空格。如果數(shù)字串是負(fù)的,則負(fù)號(hào)和最高位數(shù)字緊相鄰(負(fù)號(hào)在最高位數(shù)字左邊一位)。考慮到C編譯程序固有的檢錯(cuò)功能,測(cè)試時(shí)不需要使用長度不等于6的數(shù)組做實(shí)在參數(shù),更不需要使用任何非字符數(shù)組類型的實(shí)在參數(shù)。97輸入等價(jià)類合理等價(jià)類不合理等價(jià)類數(shù)字字符串的類型及長度1~6個(gè)數(shù)字字符組成(最高位數(shù)字不是零)最高位數(shù)字是零最高位數(shù)字左鄰是負(fù)號(hào)的數(shù)字串(4)空字符串(全是空格)(5)左部填充的字符既不是零也不是空格(6)最高位數(shù)字右面由數(shù)字和空格混合組成;(7)最高位數(shù)字右面由數(shù)字和其他字符混合組成;(8)負(fù)號(hào)與最高位數(shù)字之間有空格。(1)劃分等價(jià)類并編號(hào)98輸出等價(jià)類合理等價(jià)類不合理等價(jià)類數(shù)字字符串的類型及長度(9)在計(jì)算機(jī)能表示的最小負(fù)整數(shù)和零之間的負(fù)整數(shù)(10)零(11)在零和計(jì)算機(jī)能表示的最大正整數(shù)之間的正整數(shù)。(12)比計(jì)算機(jī)能表示的最小負(fù)整數(shù)還小的負(fù)整數(shù)(13)比計(jì)算機(jī)能表示的最大正整數(shù)還大的正整數(shù)。若計(jì)算機(jī)字長16位,用二進(jìn)制補(bǔ)碼表示整數(shù),所以能表示的最小負(fù)整數(shù)是-32768,能表示的最大正整數(shù)是32767。99(2)為合理等價(jià)類設(shè)計(jì)測(cè)試用例對(duì)于表中編號(hào)為1,5,8對(duì)應(yīng)的3個(gè)合理等價(jià)類,用一個(gè)測(cè)試用例覆蓋。

測(cè)試數(shù)據(jù) 期望結(jié)果 覆蓋范圍

1 1 1 000001 1 2,11 -00001 -1 3,9 000000 0 2,10

100(3)為每一個(gè)不合理等價(jià)類至少設(shè)計(jì)一個(gè)測(cè)試用例

測(cè)試數(shù)據(jù)期望結(jié)果 覆蓋范圍‘’ 錯(cuò)誤——沒有數(shù)字 4‘a(chǎn)b1’ 錯(cuò)誤——填充錯(cuò) 5‘1

2’ 錯(cuò)誤——無效輸入 6‘1ab2’ 錯(cuò)誤——無效輸入 7‘-12’ 錯(cuò)誤——負(fù)號(hào)位置錯(cuò) 8-47561

錯(cuò)誤——無效輸入 12132767

錯(cuò)誤——無效輸入 13本例的13個(gè)等價(jià)類至少需要11個(gè)測(cè)試用例例3參看書P201/等價(jià)類劃分測(cè)試實(shí)例102黑盒測(cè)試--邊界值分析邊界值分析邊界值是指輸入等價(jià)類或輸出等價(jià)類邊界上的值。實(shí)踐經(jīng)驗(yàn)表明,程序往往在處理邊界情況時(shí)發(fā)生錯(cuò)誤。在測(cè)試過程中,邊界值分析法是對(duì)等價(jià)類分析法的補(bǔ)充,專注于每個(gè)等價(jià)類的邊界值。檢查邊界情況的測(cè)試用例是比較高效的,可以查出更多的錯(cuò)誤。103邊界值-基本思想最小值:Min略高于最小值:Min+正常值:Normal略低于最大值:Max-最大值:Maxa<=X1<=b||c<=X2<=d黑盒測(cè)試--邊界值分析104

邊界值分析-健壯性測(cè)試略低于最小值:Min-最小值:Min略高于最小值:Min+正常值:Normal略低于最大值:Max-最大值:Max略高于最大值:Max+a<=X1<=b||c<=X2<=d黑盒測(cè)試--邊界值分析105邊界值分析法與等價(jià)類劃分法區(qū)別:(1)邊界值分析不是從某等價(jià)類中隨便挑一個(gè)作為代表,而是等價(jià)類的每個(gè)邊界都要作為測(cè)試條件。(2)邊界值分析不僅考慮輸入條件,還要考慮輸出空間產(chǎn)生的測(cè)試情況被測(cè)試子域測(cè)試內(nèi)點(diǎn)測(cè)試外點(diǎn)

如果在懸崖峭壁邊可以自信地安全行走,平地就不在話下。如果軟件在能力達(dá)到極限時(shí)能夠運(yùn)行,那么在正常情況下就不會(huì)出什么問題。邊界與懸崖很類似黑盒測(cè)試--邊界值分析黑盒測(cè)試邊界值分析法的測(cè)試用例是由等價(jià)類的邊界值產(chǎn)生的,根據(jù)輸入/輸出等價(jià)類,選取稍高于邊界值或稍低于邊界值等特定情況作為測(cè)試用例。107前例中劃分等價(jià)類劃分成3個(gè)有效等價(jià)類,7個(gè)無效等價(jià)類,如表所示。

表:“報(bào)表日期”的輸入條件的等價(jià)類表輸入等價(jià)類合理等價(jià)類不合理等價(jià)類報(bào)表日期的類型及長度(1)6位數(shù)字字符(2)有非數(shù)字字符(3)少于6個(gè)數(shù)字字符(4)多于6個(gè)數(shù)字字符年份范圍(5)在1990~1999之間(6)小于1990(7)大于1999月份范圍(8)在1~12之間(9)等于0(10)大于12108表:“報(bào)表日期”邊界值分析法測(cè)試用例

輸入等價(jià)類測(cè)試用例說明測(cè)試數(shù)據(jù)期望結(jié)果選取理由報(bào)表日期的類型及長度1個(gè)數(shù)字字符5個(gè)數(shù)字字符7個(gè)數(shù)字字符有1個(gè)非數(shù)字字符全部是非數(shù)字字符6個(gè)數(shù)字字符51999519990051999.5May---199905顯示出錯(cuò)顯示出錯(cuò)顯示出錯(cuò)顯示出錯(cuò)顯示出錯(cuò)顯示有效僅有一個(gè)合法字符比有效長度少1比有效長度多1只有一個(gè)非法字符6個(gè)非法字符類型及長度均有效年份范圍年份為1990年份為1999年份為1989年份為2000199001199912198912200001輸入有效輸入有效顯示出錯(cuò)顯示出錯(cuò)最小日期最大日期剛好小于最小日期剛好大于最大日期月份范圍月份為1月月份為12月月份<1月份>12199801199812199800199813輸入有效輸入有效顯示出錯(cuò)顯示出錯(cuò)最小月份最大月份剛好小于最小月份剛好大于最大月份黑盒測(cè)試--邊界值分析應(yīng)用邊界值分析方法設(shè)計(jì)測(cè)試用例的實(shí)例

假如一個(gè)為學(xué)生標(biāo)準(zhǔn)化考試批閱試卷、產(chǎn)生成績報(bào)告的程序,程序的輸入文件由一些有80個(gè)字符的記錄(卡片)組成。輸入數(shù)據(jù)記錄格式如右圖所示。

把以上所有記錄分為3組:(1)標(biāo)題。這一組只有一個(gè)記錄,其內(nèi)容是成績報(bào)告的名字。(2)各題的標(biāo)準(zhǔn)答案。每個(gè)記錄均在第80個(gè)字符處標(biāo)以數(shù)字“2”。該組的第1個(gè)記錄的第1~3個(gè)字符為試題數(shù)(取值為1~999)。第10~59個(gè)字符給出第1~50題的標(biāo)準(zhǔn)答案(每個(gè)合法字符表示一個(gè)答案)。該組的第2、第3……個(gè)記錄相應(yīng)為第51~100題、第101~150題……題的標(biāo)準(zhǔn)答案。(3)學(xué)生的答卷。每個(gè)記錄均在第80個(gè)字符處標(biāo)以數(shù)字“3”,每個(gè)學(xué)生的答卷在若干個(gè)記錄中給出。例如,某甲的首記錄第1~9個(gè)字符給出學(xué)生的學(xué)號(hào),第10~59個(gè)字符列出的是某甲所作的第1~50題的解答。若試題數(shù)超過50,則其第2、第3……個(gè)記錄分別給出的第51~100題、第101~150……題的解答。然后是某乙的答卷記錄。學(xué)生人數(shù)不超過200人,試題個(gè)數(shù)不超過999。程序的輸出有4個(gè)報(bào)告。黑盒測(cè)試--邊界值分析①按學(xué)號(hào)排列的成績單,列出每個(gè)學(xué)生的成績(百分制)、名次。②按學(xué)生成績排序的成績單。③平均分?jǐn)?shù)及標(biāo)準(zhǔn)偏差的報(bào)告。④試題分析報(bào)告。按試題號(hào)排列,列出各題學(xué)生答對(duì)的百分比。下面分別考慮輸入數(shù)據(jù)和輸出數(shù)據(jù),以及邊界條件,選擇測(cè)試用例。

黑盒測(cè)試--邊界值分析黑盒測(cè)試--邊界值分析113黑盒測(cè)試--錯(cuò)誤推測(cè)錯(cuò)誤推測(cè)法在很大程度上靠直覺和經(jīng)驗(yàn)進(jìn)行。它的基本想法是列舉出程序中可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,并且根據(jù)它們選擇測(cè)試方案。例如,對(duì)于一個(gè)排序程序,列出以下幾項(xiàng)需特別測(cè)試的情況:(1)輸入表為空。(2)輸入表只含一個(gè)元素。(3)輸入表中所有元素均相同。(4)輸入表中已排好序。測(cè)試人員要站在用戶的角度,考慮他們要輸入的信息,而不管這些信息看起來是合法的輸入還是非法的輸入。114黑盒測(cè)試--因果圖等價(jià)類劃分和邊界值分析方法都只是孤立地考慮各個(gè)輸入數(shù)據(jù)的測(cè)試功能,而沒有考慮多個(gè)輸入數(shù)據(jù)的組合引起的錯(cuò)誤。因果圖能有效地檢測(cè)輸入條件的各種組合可能會(huì)引起的錯(cuò)誤。因果圖因果圖導(dǎo)出測(cè)試用例的步驟:分析軟件規(guī)格說明描述中哪些是原因(即輸入條件或輸入條件等價(jià)類),哪些是結(jié)果(即輸出條件),并給每個(gè)原因和結(jié)果賦予一個(gè)標(biāo)識(shí)符。在因果圖上用一些記號(hào)表明約束或限制條件。把因果圖轉(zhuǎn)換成判定表。將判定表的每一列作為依據(jù),設(shè)計(jì)測(cè)試用例。116黑盒測(cè)試--因果圖因果圖基本符號(hào)黑盒測(cè)試--因果圖117約束符號(hào)圖118因果圖方法實(shí)例某電力公司有A、B、C、D四類收費(fèi)標(biāo)準(zhǔn),并規(guī)定:居民用電<100度/月 按A類收費(fèi)≥100度/月 按B類收費(fèi)動(dòng)力用電<10000度/月,非高峰,B類收費(fèi)≥10000度/月,非高峰,C類收費(fèi)

<10000度/月,高峰,C類收費(fèi)≥10000度/月,高峰,D類收費(fèi)黑盒測(cè)試--因果圖119居民用電動(dòng)力用電<100度/月<10000度/月高峰12345黑盒測(cè)試--因果圖

用因果圖表明輸入和輸出間的邏輯關(guān)系1I12ABC435DI4I3I2因果居民用電動(dòng)力用電<100度/月<10000度/月高峰取反

用因果圖表明輸入和輸出間的邏輯關(guān)系1I12AB∨∧C435∧DI4I3I2∨∧∧∧∧因果居民用電動(dòng)力用電<100度/月<10000度/月高峰把因果圖轉(zhuǎn)換為判定表組合條件條件(原因)

動(dòng)作(結(jié)果)ABC123123456101100011000110000100001104101050011D000110010000測(cè)試用例123為判定表每一列設(shè)計(jì)一個(gè)測(cè)試用例:1列居民電,90度/月 A2列居民電,110度/月 B3列動(dòng)力電,8000度/月, 非高峰 B4列動(dòng)力電,1.2萬度/月, 非高峰 C5列動(dòng)力電,0.9萬度/月, 高峰 C6列動(dòng)力電,1.1萬度/月, 高峰 D

條件測(cè)試用例預(yù)期結(jié)果組合(輸入數(shù)據(jù))(輸出動(dòng)作)黑盒測(cè)試--因果圖因果圖法測(cè)試實(shí)例一個(gè)處理單價(jià)為5角錢的飲料的自動(dòng)售貨機(jī)測(cè)試用例的設(shè)計(jì)。其規(guī)格說明如下:若投入5角錢或1元錢的硬幣,按下“橙汁”或“啤酒”按鈕,則相應(yīng)的飲料就送出來。若售貨機(jī)沒有零錢找,則一個(gè)顯示“零錢找完”的紅燈亮,這時(shí)在投入1元硬幣并按下按鈕后,飲料不送出來而且1元硬幣也退出來;若有零錢找,則顯示“零錢找完”的紅燈滅,在送出飲料的同時(shí)退還5角硬幣。因果圖法測(cè)試實(shí)例因:1.售貨機(jī)有零錢2.投入1元硬幣3.投入5角硬幣4.按下啤酒按鈕5.按下橙汁按鈕果:售貨機(jī)“零錢找完”紅燈亮退還1元硬幣退還5角硬幣送出啤酒飲料送出橙汁飲料因果圖法測(cè)試實(shí)例1.畫因果圖的條件和結(jié)果1262.因果圖—選商品、錢付清1272.因果圖—應(yīng)找零錢1282.因果圖—能夠找零錢1292.因果圖—找零錢1302.因果圖—5角錢付清1312.因果圖—退1元錢1323.判定表1333.判定表—去除無效用例1343.判定表—合并判定表136黑盒測(cè)試策略的綜合運(yùn)用針對(duì)具體某個(gè)頁面或模塊,應(yīng)用等價(jià)類的思想劃分輸入范圍(重點(diǎn)測(cè)試邊界值);可以使用錯(cuò)誤推測(cè)法追加一些測(cè)試用例,這需要依靠測(cè)試工程師的智慧和經(jīng)驗(yàn)。如果涉及多個(gè)輸入條件的組合情況,再用因果圖法考慮所有情況的排列組合。黑盒測(cè)試因果圖法等價(jià)類法邊界值法錯(cuò)誤推測(cè)法137黑盒測(cè)試策略的綜合運(yùn)用案例:計(jì)算三角形面積程序。輸入三個(gè)整數(shù)A、B、C,輸出以A、B、C為三邊的三角形面積(1<=A、B、C<100),結(jié)果保留2位小數(shù)。請(qǐng)運(yùn)用等價(jià)類劃分方法,編寫測(cè)試用例。邊長數(shù)值非數(shù)值整數(shù)小數(shù)(7)字母(8)能構(gòu)成三角形(1)空格(10)空白(11)1-99<1(5)>99(6)不能構(gòu)成三角形a+b<c(2)b+c<a(3)a+c<b(4)特殊字符(9)

劃分等價(jià)類用例編號(hào)所屬等價(jià)類輸入數(shù)據(jù)預(yù)期結(jié)果11(有效等價(jià)類)A=1,B=1,C=10.4321(有效等價(jià)類)A=99,B=99,C=994243.9632(無效等價(jià)類)A=1,B=2,C=4提示“3邊不能構(gòu)成三角形”43(無效等價(jià)類)A=4,B=1,C=2提示“3邊不能構(gòu)成三角形”54(無效等價(jià)類)A=1,B=4,C=2提示“3邊不能構(gòu)成三角形”65(無效等價(jià)類)A=0,B=0,C=0提示“請(qǐng)輸入1-99之間的整數(shù)”76(無效等價(jià)類)A=100,B=100,C=100提示“請(qǐng)輸入1-99之間的整數(shù)”87(無效等價(jià)類)A=4.1,B=5.6,C=4.8提示“請(qǐng)輸入整數(shù)”98(無效等價(jià)類)A=ABCD,B=ABCD,C=ABCD提示“請(qǐng)輸入1-99之間的整數(shù)”109(無效等價(jià)類)A=!#$$,B=!#$$,C=!#$$提示“請(qǐng)輸入1-99之間的整數(shù)”1110(無效等價(jià)類)A=空格,B=空格,C=空格提示“請(qǐng)輸入1-99之間的整數(shù)”1211(無效等價(jià)類)A=空白,B=空白,C=空白提示“請(qǐng)輸入1-99之間的整數(shù)”140實(shí)用測(cè)試策略(1)例:程序Triangle讀入三個(gè)整數(shù)值,這三個(gè)整數(shù)代表同一個(gè)三角形三條邊的長度,程序根據(jù)這三個(gè)值判斷三角形屬于不等邊、等腰或等邊三角形中的那一種。abcTrianglea,b,c三角形的類型?黑盒測(cè)試(等價(jià)劃分)

正常的三角形(a,b,c)不等邊三角形(8,10,12);(10,8,12);(10,12,8)等邊三角形(10,10,10)等腰三角形(10,10,17);(10,17,10);(17,10,10)

不能構(gòu)成三角形的非法數(shù)據(jù)(a,b,c)a+b<c(10,10,21)b+c<a(21,10,10)c+a<b(10,21,10)

退化的三角形(a,b,c)不等邊三角形(10,6,4)等邊三角形(0,0,0)等腰三角形(10,5,5);(5,10,5);(10,5,5)黑盒測(cè)試(邊界值分析)

一條邊長度為零的情況(0,10,12);(10,0,12);(10,12,0)兩條邊的長度為零的情況(0,0,17);(0,17,0);(17,0,0)三條邊的長度為零的情況(0,0,0)輸入數(shù)據(jù)中包含負(fù)整數(shù)(-10,-10,-10)……輸入數(shù)據(jù)不全(不足三個(gè)正整數(shù))(10,-,-)……輸入數(shù)據(jù)中包含非整數(shù)型的數(shù)據(jù)(a,b,c)(1.2,6e-4,7.8)……黑盒測(cè)試(錯(cuò)誤推測(cè))141單元測(cè)試被測(cè)模塊集成測(cè)試設(shè)計(jì)信息單元測(cè)試被測(cè)模塊單元測(cè)試被測(cè)模塊已經(jīng)測(cè)試過的模塊確認(rèn)測(cè)試系統(tǒng)測(cè)試軟件需求其它系統(tǒng)元素已集成的軟件已確認(rèn)的軟件可交付的軟件軟件測(cè)試步驟142軟件測(cè)試步驟(1)單元測(cè)試(2)集成測(cè)試(3)確認(rèn)測(cè)試(4)系統(tǒng)測(cè)試1431.什么是單元測(cè)試對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。單元?1個(gè)函數(shù)1個(gè)類1個(gè)窗口、1個(gè)菜單…單元測(cè)試1442.什么時(shí)候進(jìn)行單元測(cè)試程序員編碼之后,代碼已經(jīng)通過編譯后進(jìn)行單元測(cè)試。前期做一些準(zhǔn)備工作:撰寫單元測(cè)試計(jì)劃編寫單元測(cè)試用例單元測(cè)試145單元測(cè)試3.誰來進(jìn)行單元測(cè)試白盒測(cè)試工程師或開發(fā)人員。如果有開發(fā)人員來測(cè)試,做到交叉測(cè)試,避免一個(gè)人只測(cè)試自己的程序。146單元測(cè)試4.單元測(cè)試的依據(jù)是什么源程序本身:代碼和注釋《詳細(xì)計(jì)劃》文檔147單元測(cè)試5.單元測(cè)試通過標(biāo)準(zhǔn)是什么(參考)程序通過所有單元測(cè)試的用例語句的覆蓋率達(dá)到100%分支的覆蓋率達(dá)到85%148單元測(cè)試6.國內(nèi)單元測(cè)試的現(xiàn)狀很不正規(guī)。只是開發(fā)人員簡(jiǎn)單的編譯和調(diào)試一下自己的程序,沒有相應(yīng)的單元測(cè)試計(jì)劃、單元測(cè)試用例和代碼覆蓋率的統(tǒng)計(jì)。149單元測(cè)試7.如何進(jìn)行單元測(cè)試單元測(cè)試主要是白盒測(cè)試方法。先靜態(tài)地檢查代碼是否符合規(guī)范再動(dòng)態(tài)運(yùn)行代碼,檢查實(shí)際運(yùn)行結(jié)果。150單元測(cè)試的案例該程序?qū)崿F(xiàn)的功能如下:#include<stdio.h>voidiszero(intm){ if(m!=0) printf(“%d”,m); else printf(“%d”,1);}voidmain(){inta[5],i=0;printf(“請(qǐng)輸入5個(gè)整數(shù)\n”);for(i=0;i<=4;i++){ scanf(“%d”,&a[i]); iszero(a[i]);}}151單元測(cè)試的案例(1)編譯運(yùn)行程序首先編譯程序,沒有語法上的錯(cuò)誤,編譯通過。然后運(yùn)行程序,輸入12340,按回車。輸出12341,符合預(yù)期結(jié)果。(2)靜態(tài)檢查檢查程序中不符合編碼規(guī)范的地方,發(fā)現(xiàn)程序沒有任何注釋,應(yīng)該注明程序的基本信息和各函數(shù)的主要功能。152單元測(cè)試的案例(3)動(dòng)態(tài)測(cè)試邊界值問題輸入1234567,按回車,運(yùn)行結(jié)果仍然為12345,與預(yù)期相符。雖結(jié)果正確,但最好能夠在程序中加以提示。非法數(shù)據(jù)的容錯(cuò)性輸入5個(gè)小數(shù)。輸入數(shù)據(jù)時(shí)中間不加空格,有可能是逗號(hào)。153單元測(cè)試的內(nèi)容:主要對(duì)模塊的五個(gè)基本特性進(jìn)行評(píng)價(jià)。單元測(cè)試154(1)模塊接口測(cè)試在單元測(cè)試的開始,應(yīng)對(duì)通過被測(cè)模塊的數(shù)據(jù)流進(jìn)行測(cè)試。測(cè)試項(xiàng)目包括:調(diào)用本模塊的輸入?yún)?shù)是否正確;本模塊調(diào)用子模塊時(shí)輸入給子模塊的參數(shù)是否正確全局量的定義在各模塊中是否一致(2)局部數(shù)據(jù)結(jié)構(gòu)測(cè)試不正確或不一致的數(shù)據(jù)類型說明使用尚未賦值或尚未初始化的變量錯(cuò)誤的初始值或錯(cuò)誤的缺省值變量名拼寫錯(cuò)或書寫錯(cuò)不一致的數(shù)據(jù)類型全局?jǐn)?shù)據(jù)對(duì)模塊的影響單元測(cè)試155(3)路徑測(cè)試選擇適當(dāng)?shù)臏y(cè)試用例,對(duì)模塊中重要的執(zhí)行路徑進(jìn)行測(cè)試。應(yīng)當(dāng)設(shè)計(jì)測(cè)試用例查找由于錯(cuò)誤的計(jì)算、不正確的比較或不正常的控制流而導(dǎo)致的錯(cuò)誤.對(duì)基本執(zhí)行路徑和循環(huán)進(jìn)行測(cè)試可以發(fā)現(xiàn)大量的路徑錯(cuò)誤。(4)錯(cuò)誤處理測(cè)試出錯(cuò)的描述是否難以理解出錯(cuò)的描述是否能夠?qū)﹀e(cuò)誤定位顯示的錯(cuò)誤與實(shí)際的錯(cuò)誤是否相符對(duì)錯(cuò)誤條件的處理正確與否在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等。單元測(cè)試156(5)邊界條件測(cè)試注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時(shí)出錯(cuò)的可能性。對(duì)這些地方要仔細(xì)地選擇測(cè)試用例,認(rèn)真加以測(cè)試。如果對(duì)模塊運(yùn)行時(shí)間有要求的話,還要專門進(jìn)行關(guān)鍵路徑測(cè)試,以確定最壞情況下和平均意義下影響模塊運(yùn)行時(shí)間的因素。單元測(cè)試157單元測(cè)試單元測(cè)試方法:人工測(cè)試計(jì)算機(jī)測(cè)試158單元測(cè)試1.單元測(cè)試—人工測(cè)試由編寫者本人非正式地進(jìn)行。由審查小組正式進(jìn)行稱為代碼審查,它是一種非常有效的程序驗(yàn)證技術(shù),對(duì)于典型的程序來說,可以查出30%~70%的邏輯設(shè)計(jì)錯(cuò)誤和編碼錯(cuò)誤。審查小組最好由下述四人組成:組長,他應(yīng)該是一個(gè)很有能力的程序員,而且沒有直接參與這項(xiàng)工程;程序的設(shè)計(jì)者;程序的編寫者;程序的測(cè)試者。1592.單元測(cè)試—計(jì)算機(jī)測(cè)試

模塊不是獨(dú)立的程序,自己不能運(yùn)行,要靠其它部分來調(diào)用和驅(qū)動(dòng),要為每個(gè)單元測(cè)試開發(fā)兩個(gè)軟件:(1)驅(qū)動(dòng)模塊(驅(qū)動(dòng)程序)相當(dāng)于主模塊(2)樁模塊(測(cè)試存根、連接程序)代替所測(cè)模塊調(diào)用的子模塊單元測(cè)試160BACDE待測(cè)試模塊單元測(cè)試161被測(cè)模塊B

驅(qū)動(dòng)模塊(模擬模塊A)樁模塊(測(cè)試存根)(模擬模塊E)測(cè)試用例測(cè)試結(jié)果單元測(cè)試162單元測(cè)試的測(cè)試環(huán)境

(a)軟件結(jié)構(gòu)(b)模塊B的測(cè)試環(huán)境圖:單元測(cè)試的測(cè)試環(huán)境163集成測(cè)試單元測(cè)試單元測(cè)試單元測(cè)試單元測(cè)試單元測(cè)試164集成測(cè)試1.什么是集成測(cè)試在單元測(cè)試的基礎(chǔ)上,需要將所有模塊按照設(shè)計(jì)要求組裝成為系統(tǒng),發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問題,最終構(gòu)成要求的軟件系統(tǒng)。在把各個(gè)模塊連接起來的時(shí)侯,穿越模塊接口的數(shù)據(jù)是否會(huì)丟失;

一個(gè)模塊的功能是否會(huì)對(duì)另一個(gè)模塊的功能產(chǎn)生不利的影響;各個(gè)子功能組合起來,能否達(dá)到預(yù)期要求的父功能;全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問題;單個(gè)模塊的誤差累積起來,是否會(huì)放大,從而達(dá)到不能接受的程度。165集成測(cè)試2.什么時(shí)候進(jìn)行集成測(cè)試單元和集成測(cè)試同步進(jìn)行。在單元測(cè)試中先測(cè)試幾個(gè)函數(shù)的自身功能,然后再集成測(cè)試一下這幾個(gè)函數(shù)的接口(即參數(shù)傳遞)。3.由誰來進(jìn)行集成測(cè)試白盒測(cè)試工程師或是開發(fā)人員4.集成測(cè)試的依據(jù)是什么單元測(cè)試模塊以及《概要設(shè)計(jì)》文檔166集成測(cè)試方案:自頂向下集成測(cè)試自底向上集成測(cè)試核心系統(tǒng)先行集成測(cè)試高頻集成測(cè)試深度優(yōu)先廣度優(yōu)先集成測(cè)試167自頂向下集成測(cè)試(需要樁模塊)從主控模塊(主程序)開始沿控制層向下移動(dòng),把模塊一一組合起來。分兩種方法:先深度:按照結(jié)構(gòu),用一條主控制路徑將所有模塊組合起來;先寬度:逐層組合所有下屬模塊,在每一層水平地集成測(cè)試

沿著移動(dòng)。

集成測(cè)試模塊測(cè)試結(jié)合順序深度優(yōu)先:A、B、E、C、D、F廣度優(yōu)先:A、B、C、D、E、F168自頂向下測(cè)試的組裝模塊的方法1)自頂向下結(jié)合有兩種組合策略:(1)深度優(yōu)先策略:

圖:一個(gè)軟件結(jié)構(gòu)圖

圖:采用深度優(yōu)先策略自頂向下結(jié)合模塊的過程

(2)寬度優(yōu)先策略:逐層結(jié)合直接下屬的所有模塊。結(jié)合順序?yàn)镸,A,B,C,D,E。169自頂向下集成測(cè)試組裝過程分以下五個(gè)步驟:步驟一:用主控模塊作為測(cè)試驅(qū)動(dòng)程序,其直接下屬模塊用樁模塊來代替;步驟二:根據(jù)所選擇的集成測(cè)試法(先深度或先寬度),每次用實(shí)際模塊代替下屬的樁模塊步驟三:在組合每個(gè)實(shí)際模塊時(shí)都要進(jìn)行測(cè)試;步驟四:完成一組測(cè)試后再用一個(gè)實(shí)際模塊代替另一個(gè)樁模塊;步驟五:可以進(jìn)行回歸測(cè)試(即重新再做所有的或者部分已做過的測(cè)試),以保證不引入新的錯(cuò)誤。

集成測(cè)試170集成測(cè)試自底向上集成(需要驅(qū)動(dòng)程序)自底向上的集成是最常使用的方法。其他集成方法都或多或少地繼承、吸收了這種集成方式的思想。自底向上集成方式從程序模塊結(jié)構(gòu)中最底層的模塊開始組裝和測(cè)試。模塊是自底向上進(jìn)行組裝的,對(duì)于一個(gè)給定層次的模塊,它的子模塊(包括子模塊的所有下屬模塊)事前已經(jīng)完成組裝并經(jīng)過測(cè)試,所以不再需要編制樁模塊。171自底向上測(cè)試的組裝模塊的方法自底向上測(cè)試測(cè)試步驟為:(1)把低層模塊組合成實(shí)現(xiàn)一個(gè)個(gè)特定功能的族。如圖所示。

圖一個(gè)軟件結(jié)構(gòu)圖(2)為每一個(gè)族編寫一個(gè)驅(qū)動(dòng)模塊,以協(xié)調(diào)測(cè)試用例的輸入和測(cè)試結(jié)果的輸出。如圖所示,其中di模塊為驅(qū)動(dòng)模塊。

圖為每個(gè)族分別進(jìn)行測(cè)試172自底向上測(cè)試的組裝模塊的方法(3)對(duì)模塊族進(jìn)行測(cè)試。(4)按軟件控制結(jié)構(gòu)圖依次向上擴(kuò)展,用實(shí)際模塊替換驅(qū)動(dòng)模塊,形成一個(gè)個(gè)更大的族。如圖所示。

圖形成3個(gè)更大的族進(jìn)一步測(cè)試(5)重復(fù)(2)~(4)步,直至軟件系統(tǒng)全部測(cè)試完畢。核心系統(tǒng)先行集成測(cè)試先對(duì)核心軟件部件進(jìn)行集成測(cè)試,在測(cè)試通過的基礎(chǔ)上再按各外圍軟件部件的重要程度逐個(gè)集成到核心系統(tǒng)中。每次加入一個(gè)外圍軟件部件都產(chǎn)生一個(gè)產(chǎn)品基線,直至最后形成穩(wěn)定的軟件產(chǎn)品。方案點(diǎn)評(píng):該集成測(cè)試方法對(duì)于快速軟件開發(fā)很有效果,適合較復(fù)雜系統(tǒng)的集成測(cè)試,能保證一些重要的功能和服務(wù)的實(shí)現(xiàn)。缺點(diǎn)是采用此法的系統(tǒng)一般應(yīng)能明確區(qū)分核心軟件部件和外圍軟件部件,核心軟件部件應(yīng)具有較高的耦合度,外圍軟件部件內(nèi)部也應(yīng)具有較高的耦合度,但各外圍軟件部件之間應(yīng)具有較低的耦合度。核心系統(tǒng)先行集成測(cè)試步驟如下:步驟一:對(duì)核心系統(tǒng)中的每個(gè)模塊進(jìn)行單獨(dú)的、充分的測(cè)試,必要時(shí)使用驅(qū)動(dòng)模塊和樁模塊;步驟二:對(duì)于核心系統(tǒng)中的所有模塊一次性集合到被測(cè)系統(tǒng)中,解決集成中出現(xiàn)的各類問題。在核心系統(tǒng)規(guī)模相對(duì)較大的情況下,也可以按照自底向上的步驟,集成核心系統(tǒng)的各組成模塊。步驟三:按照各外圍軟件部件的重要程度以及模塊間的相互制約關(guān)系,擬定外圍軟件部件集成到核心系統(tǒng)中的順序方案。方案經(jīng)評(píng)審以后,即可進(jìn)行外圍軟件部件的集成。步驟四:在外圍軟件部件添加到核心系統(tǒng)以前,外圍軟件部件應(yīng)先完成內(nèi)部的模塊級(jí)集成測(cè)試。步驟五:按順序不斷加入外圍軟件部件,排除外圍軟件部件集成中出現(xiàn)的問題,形成最終的用戶系統(tǒng)。

高頻集成測(cè)試高頻集成測(cè)試是指同步于軟件開發(fā)過程,每隔一段時(shí)間對(duì)開發(fā)團(tuán)隊(duì)的現(xiàn)有代碼進(jìn)行一次集成測(cè)試。如某些自動(dòng)化集成測(cè)試工具能實(shí)現(xiàn)每日深夜對(duì)開發(fā)團(tuán)隊(duì)的現(xiàn)有代碼進(jìn)行一次集成測(cè)試,然后將測(cè)試結(jié)果發(fā)到各開發(fā)人員的電子郵箱中。該集成測(cè)試方法頻繁地將新代碼加入到一個(gè)已經(jīng)穩(wěn)定的基線中,以免集成故障難以發(fā)現(xiàn),同時(shí)控制可能出現(xiàn)的基線偏差。使用高頻集成測(cè)試需要具備一定的條件:可以持續(xù)獲得一個(gè)穩(wěn)定的增量,并且該增量內(nèi)部已被驗(yàn)證沒有問題;大部分有意義的功能增加可以在一個(gè)相對(duì)穩(wěn)定的時(shí)間間隔(如每個(gè)工作日)內(nèi)獲得;測(cè)試包和代碼的開發(fā)工作必須是并行進(jìn)行的,并且需要版本控制工具來保證始終維護(hù)的是測(cè)試腳本和代碼的最新版本;必須借助于使用自動(dòng)化工具來完成。高頻集成一個(gè)顯著的特點(diǎn)就是集成次數(shù)頻繁,顯然,人工的方法是不勝任的。高頻集成測(cè)試一般采用如下步驟來完成:

步驟一:選擇集成測(cè)試自動(dòng)化工具。如很多Java項(xiàng)目采用Junit+Ant方案來實(shí)現(xiàn)集成測(cè)試的自動(dòng)化,也有一些商業(yè)集成測(cè)試工具可供選擇。步驟二:設(shè)置版本控制工具,以確保集成測(cè)試自動(dòng)化工具所獲得的版本是最新版本。如使用CVS進(jìn)行版本控制。步驟三:測(cè)試人員和開發(fā)人員負(fù)責(zé)編寫對(duì)應(yīng)程序代碼的測(cè)試腳本。步驟四:設(shè)置自動(dòng)化集成測(cè)試工具,每隔一段時(shí)間對(duì)配置管理庫的新添加的代碼進(jìn)行自動(dòng)化的集成測(cè)試,并將測(cè)試報(bào)告匯報(bào)給開發(fā)人員和測(cè)試人員。步驟五:測(cè)試人員監(jiān)督代碼開發(fā)人員及時(shí)關(guān)閉不合格項(xiàng)。按照步驟三至步驟五不斷循環(huán),直至形成最終軟件產(chǎn)品。高頻集成測(cè)試方案點(diǎn)評(píng):該測(cè)試方案能在開發(fā)過程中及時(shí)發(fā)現(xiàn)代碼錯(cuò)誤,能直觀地看到開發(fā)團(tuán)隊(duì)的有效工程進(jìn)度。在此方案中,開發(fā)維護(hù)源代碼與開發(fā)維護(hù)軟件測(cè)試包被賦予了同等的重要性,這對(duì)有效防止錯(cuò)誤、及時(shí)糾正錯(cuò)誤都很有幫助。該方案的缺點(diǎn)在于測(cè)試包有時(shí)候可能不能暴露深層次的編碼錯(cuò)誤和圖形界面錯(cuò)誤。集成測(cè)試方案的選擇在現(xiàn)代復(fù)雜軟件項(xiàng)目集成測(cè)試過程中,通常采用核心系統(tǒng)先行集成測(cè)試和高頻集成測(cè)試相結(jié)合的方式進(jìn)行。自底向上的集成測(cè)試方案在采用傳統(tǒng)瀑布式開發(fā)模式的軟件項(xiàng)目集成過程中較為常見。應(yīng)結(jié)合項(xiàng)目的實(shí)際工程環(huán)境及各測(cè)試方案適用的范圍進(jìn)行合理的選型。確認(rèn)測(cè)試(validationtesting)又稱有效性測(cè)試。它的任務(wù)是驗(yàn)證軟件的有效性,即驗(yàn)證軟件的功能和性能及其他特性是否與用戶的要求一致。在確認(rèn)測(cè)試階段需要做的工作如下圖所示。

確認(rèn)測(cè)試

從上圖中可看出,首先要進(jìn)行有效性測(cè)試以及軟件配置復(fù)審,然后進(jìn)行驗(yàn)收測(cè)試和安裝測(cè)試,在通過了專家鑒定之后,才能成為可交付的軟件。1.進(jìn)行有效性測(cè)試(黑盒測(cè)試)有效性測(cè)試是在模擬的環(huán)境(可能就是開發(fā)的環(huán)境)下,運(yùn)用黑盒測(cè)試的方法,驗(yàn)證被測(cè)軟件是否滿足需求規(guī)格說明書列出的需求。確認(rèn)測(cè)試

2.軟件配置復(fù)查軟件配置復(fù)查的目的是保證軟件配置的所有成分都齊全,各方面的質(zhì)量都符合要求,具有維護(hù)階段所必須的細(xì)節(jié),而且已經(jīng)編排好分類的目錄。除了按合同規(guī)定的內(nèi)容和要求,由人工審查軟件配置之外,在確認(rèn)測(cè)試的過程中,應(yīng)當(dāng)嚴(yán)格遵守用戶手冊(cè)和操作手冊(cè)中規(guī)定的使用步驟,以便檢查這些文檔資料的完整性和正確性。必須仔細(xì)記錄發(fā)現(xiàn)的遺漏和錯(cuò)誤,并且適當(dāng)?shù)匮a(bǔ)充和改正。

確認(rèn)測(cè)試

3.測(cè)試和測(cè)試在軟件交付使用之后,用戶將如何實(shí)際使用程序,對(duì)于開發(fā)者來說是無法預(yù)測(cè)的。

很多軟件產(chǎn)品生產(chǎn)者采用一種稱之為測(cè)試和測(cè)試的測(cè)試方法,以發(fā)現(xiàn)可能只有最終用戶才能發(fā)現(xiàn)的錯(cuò)誤。確認(rèn)測(cè)試

測(cè)試是由一個(gè)用戶在開發(fā)環(huán)境下進(jìn)行的測(cè)試,也可以是公司內(nèi)部的用戶在模擬實(shí)際操作環(huán)境下進(jìn)行的測(cè)試。

軟件在一個(gè)自然設(shè)置狀態(tài)下使用,開發(fā)者坐在用戶旁邊,隨時(shí)記下錯(cuò)誤情況和使用中的問題。

測(cè)試的目的是評(píng)價(jià)軟件產(chǎn)品的FLURPS(即功能、局域化、可使

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論