版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第七章結(jié)構(gòu)化實(shí)現(xiàn),合肥工業(yè)大學(xué)理學(xué)院,實(shí)現(xiàn)包括編碼和測試兩個階段 一、編碼 二、軟件測試 三、調(diào)試 四、軟件可靠性,7.1編碼,編碼在總體設(shè)計和詳細(xì)設(shè)計之后進(jìn)行,它只是把軟件設(shè)計的結(jié)果翻譯成用某種程序設(shè)計語言書寫的程序。因此,程序的質(zhì)量基本上取決于設(shè)計的質(zhì)量。 程序設(shè)計語言的特性和編碼風(fēng)格會深刻地影響軟件的質(zhì)量和可維護(hù)性。,一般選擇高級語言而非匯編語言書寫程序。 選擇高級語言,考慮是否有 1)理想的模塊化機(jī)制 2)可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu) 3)良好的獨(dú)立編譯機(jī)制 4)編譯程序能夠盡可能多地發(fā)現(xiàn)程序 中的錯誤 5)總之,易于修改、測試和維護(hù),1.程序設(shè)計語言的選擇,衡量某種程序語言是否適合特
2、定的項目,就考慮下面一些因素: 1)系統(tǒng)用戶的要求 2)可以使用的編譯程序 3)可以得到的軟件工具 4)程序員的知識水平 5)軟件可移植性要求 6)工程規(guī)模 7)軟件的應(yīng)用領(lǐng)域,源代碼應(yīng)邏輯簡明清晰,易讀易懂。 程序內(nèi)部有 1)良好的文檔資料 2)有規(guī)律的數(shù)據(jù)說明格式 3)簡單清晰的語句構(gòu)造 4)輸入輸出格式 5)效率,2.編碼風(fēng)格,1)源程序文檔化,標(biāo)識符 注釋 程序的視覺組織,標(biāo)識符,標(biāo)識符包括模塊名、變量名、常量名、標(biāo)號名、子程序名、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。 這些名字應(yīng)能反映它所代表的實(shí)際東西,應(yīng)有一定實(shí)際意義。 例如,表示次數(shù)的量用Times,表示總量的用Total,表示平均值的用Av
3、erage,表示和的量用Sum等。 名字不是越長越好,應(yīng)當(dāng)選擇精煉的意義明確的名字。必要時可使用縮寫名字,但這時要注意縮寫規(guī)則要一致,并且要給每一個名字加注釋。同時,在一個程序中,一個變量只應(yīng)用于一種用途。,注釋,夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。 注釋決不是可有可無的。 一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個源程序的13到12,甚至更多。 注釋分為序言性注釋和功能性注釋 序言性注釋程序的整體說明:程序標(biāo)題、模塊功能和目的、主要算法、接口說明、有關(guān)數(shù)據(jù)描述、模塊位置、開發(fā)簡歷。 功能性注釋語句或程序段的功能說明。,視覺組織(空格、空行和移行),恰當(dāng)?shù)乩每崭瘢梢?/p>
4、突出運(yùn)算的優(yōu)先性,避免發(fā)生運(yùn)算的錯誤。 例如 ,將表達(dá)式(A17)ANDNOT(B49)ORC寫成(A17) AND NOT (B49) OR C 自然的程序段之間可用空行隔開。 移行也叫做向右縮格。 它是指程序中的各行 不必都在左端對齊, 都從第一格起排列。 這樣做使程序完全分 不清層次關(guān)系。,IF() THEN IF() THEN ELSE ENDIF ELSE ENDIF,2)數(shù)據(jù)說明,在設(shè)計階段已經(jīng)確定了數(shù)據(jù)結(jié)構(gòu)的組織及其復(fù)雜性。在編寫程序時,則需要注意數(shù)據(jù)說明的風(fēng)格。 為了使程序中數(shù)據(jù)說明更易于理解和維護(hù),必須注意以下幾點(diǎn)。 數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化 說明語句中變量安排有序化 使用注
5、釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化,例如,在FORTRAN程序中數(shù)據(jù)說明次序 常量說明 簡單變量類型說明 數(shù)組說明 公用數(shù)據(jù)塊說明 所有的文件說明 在類型說明中還可進(jìn)一步要求。例如, 可按如下順序排列: 整型量說明 實(shí)型量說明 字符量說明 邏輯量說明,說明語句中變量安排有序化,當(dāng)多個變量名在一個說明語句中說明時,應(yīng)當(dāng)對這些變量按字母的順序排列。帶標(biāo)號的全程數(shù)據(jù)也應(yīng)當(dāng)按字母的順序排列。 例如,把 integer size, length, width, cost, price寫成integer cost, length, price , size, width,使用注釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)
6、,如果設(shè)計了一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)當(dāng)使用注釋來說明在程序?qū)崿F(xiàn)時這個數(shù)據(jù)結(jié)構(gòu)的固有特點(diǎn)。,3)語句結(jié)構(gòu),程序編寫首先應(yīng)當(dāng)考慮清晰性。 在一行內(nèi)只寫一條語句。 程序要能直截了當(dāng)?shù)卣f明程序員的用意。 除非對效率有特殊的要求,程序編寫要做到清晰第一,效率第二。 盡可能使用庫函數(shù)。 盡量只采用三種基本的控制結(jié)構(gòu)來編寫程序。 避免不必要的轉(zhuǎn)移。同時如果能保持程序可讀性,則不必用 GOTO語句。 避免采用過于復(fù)雜的條件測試。 盡量減少使用“否定”條件的條件語句。,4)輸入輸出方法,對所有的輸入數(shù)據(jù)都要進(jìn)行檢驗(yàn)以保證有效性; 檢查輸入項的各種重要組合的合理性; 使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入
7、格式; 輸入數(shù)據(jù)時,應(yīng)允許使用自由格式輸入; 應(yīng)允許缺省值; 輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標(biāo)志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目; 明確提示交互輸入的請求,指明可使用選擇項的種類和取值范圍; 給所有的輸出加注解,并設(shè)計輸出報表格式。,5)效率,程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的存儲空間。 效率是一個性能要求,應(yīng)當(dāng)在需求分析階段給出。軟件效率以需求為準(zhǔn),不應(yīng)以人力所及為準(zhǔn)。 好的設(shè)計可以提高效率。 程序的效率與程序的簡單性相關(guān)。 一般說來,任何對效率無重要改善,且對程序的簡單性、可讀性和正確性不利的程序設(shè)計方法都是不可取的。,時間效率,源程序的效率與詳細(xì)設(shè)計階段確定的算法的效率直
8、接有關(guān)。 在編程序前,盡可能化簡有關(guān)的算術(shù)表達(dá)式和邏輯表達(dá)式; 仔細(xì)檢查算法中的嵌套的循環(huán),盡可能將某些語句或表達(dá)式移到循環(huán)外面; 盡量避免使用多維數(shù)組; 盡量避免使用指針和復(fù)雜的表; 采用“快速”的算術(shù)運(yùn)算;,不要混淆數(shù)據(jù)類型,避免在表達(dá)式中出現(xiàn)類型混雜; 盡量采用整數(shù)算術(shù)表達(dá)式和布爾表達(dá)式; 選用等效的高效率算法; 許多編譯程序具有“優(yōu)化”功能,可以自動生成高效率的目標(biāo)代碼。,影響存儲器效率的因素,內(nèi)存采取基于操作系統(tǒng)的分頁功能的虛擬存儲管理。存儲效率與操作系統(tǒng)的分頁功能直接有關(guān)。 采用結(jié)構(gòu)化程序設(shè)計,將程序功能合理分塊,使每個模塊或一組密切相關(guān)模塊的程序體積大小與每頁的容量相匹配,可減少
9、頁面調(diào)度,減少內(nèi)外存交換,提高存儲效率。 提高存儲器效率的關(guān)鍵是程序的簡單性。,輸入輸出效率,簡單清晰同樣是提高人機(jī)通信效率的關(guān)鍵。 面向設(shè)備的輸入輸出可遵循的原則: 對于所有的輸入/輸出操作,安排適當(dāng)?shù)木彌_區(qū),以減少頻繁的信息交換。 對輔助存儲(例如磁盤),選擇盡可能簡單的,可接受的存取方法; 對輔助存儲的輸入/輸出,應(yīng)當(dāng)成塊傳送; 任何不易理解的所謂“超高效”的輸入/輸出是不可取的。,7.2軟件測試基礎(chǔ),防不勝防的軟件錯誤 實(shí)例: 1963年,美國飛往火星的火箭爆炸,損失1000萬美元,原因是FORTRAN循環(huán) DO 5 I=1,3 誤寫為 DO 5 I=1.3 1991年愛國者導(dǎo)彈防御系
10、統(tǒng)系統(tǒng)時鐘誤差積累造成跟蹤系統(tǒng)失去精確度 千年蟲,世界各地解決2000年錯誤超過數(shù)億美元,統(tǒng)計表明,軟件測試的工作量往往占軟件開發(fā)總工作量的40%以上。在極端情況下,對人命關(guān)天的軟件(如飛機(jī)控制、核反應(yīng)堆等)測試所花費(fèi)的時間往往是其它軟件工程活動時間之和的3到5倍。,軟件開發(fā)工作量分配比例,40% 50%,10% 20%,例: Windows2000有5000萬行代碼,3000多個工程師,幾百個小團(tuán)隊。 Exchange2000和Windows2000開發(fā)人員結(jié)構(gòu),“測試的目的是說明程序正確地執(zhí)行它應(yīng)有的功能?!?這種說法正確嗎? G.J.Myers在軟件測試技巧中認(rèn)為: (1)測試是為了尋找
11、錯誤而運(yùn)行程序的過程。 (2)一個好的測試方案是指極可能找到迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案。 (3)一個成功的測試是揭示了迄今為止尚未發(fā)現(xiàn)的錯誤的測試。,1.軟件測試的目的,例:程序Triangle,輸入三個整數(shù),表示一個三角形的三個邊長,該程序產(chǎn)生一個結(jié)果,指出該三角形是等邊三角形、等腰三角形還是不等邊三角形。 為說明其能正確執(zhí)行它的功能,可使用測試用例(3,4,5),(5,5,6),(6,6,6), 程序都能給出正確結(jié)果,是否就可認(rèn)為程序是正確的? 測試用例:要輸入的測試數(shù)據(jù)和預(yù)期的輸出結(jié)果。 測試方案:具體的測試目的(如預(yù)定要測試的具體功能),應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。,E.W.
12、Dijkstra 指出: “程序測試能證明錯誤的存在,但不能證明錯誤不存在?!?測試的目的是發(fā)現(xiàn)程序中的錯誤,是為了證明程序有錯,而不是證明程序無錯。 把證明程序無錯當(dāng)作測試目的不僅是不正確的,完全做不到的,而且對做好測試沒有任何益處,甚至是十分有害的。 軟件測試要設(shè)法使軟件發(fā)生故障,暴露軟件錯誤。 測試的“成功”與“失敗”: 能夠發(fā)現(xiàn)錯誤的測試是成功的測試,否則是失敗的測試。,總之,測試的目的是 想以最少的時間和人力,系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。如果我們成功地實(shí)施了測試,我們就能夠發(fā)現(xiàn)軟件中的錯誤。 測試的附帶收獲是,它能夠證明軟件的功能和性能與需求說明相符合。 實(shí)施測試收集到的測
13、試結(jié)果數(shù)據(jù)為軟件可靠性分析提供了依據(jù)。 測試不能表明軟件中不存在錯誤,它只能說明軟件中存在錯誤。,2.測試原則,(1)所有的測試都應(yīng)追溯到用戶需求。 最嚴(yán)重的錯誤(從用戶角度)是那些導(dǎo)致軟件無法滿足需求的錯誤。 (2)一旦完成需求模型就可以著手制定測試計劃,詳細(xì)的測試用例定義可在設(shè)計模型確定后開始,所有測試工作可在編碼之前進(jìn)行計劃和設(shè)計。 程序中的問題根源可能在開發(fā)前期的各階段,解決、糾正錯誤也必須追溯到前期工作。,軟件測試程序測試 軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個過程。 據(jù)美國一家公司統(tǒng)計,查出的軟件錯誤中,屬于需求分析和軟件設(shè)計的錯誤約占 64%,屬于程序編寫的錯誤僅占36%。程序編寫
14、的許多錯誤是“先天的”。,測試與開發(fā)前期工作的關(guān)系,決定軟件與系統(tǒng)的配合關(guān)系,需求分析,概要設(shè)計,詳細(xì)設(shè)計,編 碼,單元測試,集成測試,確認(rèn)測試,系統(tǒng)測試,軟件開發(fā)過程是一個自頂向下,逐步細(xì)化的過程。 測試過程是依相反順序安排的自底向上,逐步集成的過程。,測試階段工作步驟,單元測試:檢驗(yàn)每個模塊能否單獨(dú)工作 集成測試:檢驗(yàn)概要設(shè)計中模塊接口設(shè)計問題 確認(rèn)測試:以需求規(guī)格說明書為檢驗(yàn)尺度 系統(tǒng)測試:綜合檢驗(yàn) 測試可視為分析、設(shè)計、編碼三個階段的最終復(fù)審,以保證軟件質(zhì)量.,測試原則(續(xù)),(3)測試規(guī)模應(yīng)該從“小”到“大”。 (4)pareto原理:測試發(fā)現(xiàn)的錯誤中80%很可能由程序中20%的模塊
15、造成。 應(yīng)孤立這些疑點(diǎn)模塊重點(diǎn)測試。 (5)窮舉測試是不可能的。 窮舉測試:把程序所有可能的執(zhí)行路徑都檢查一遍的測試。,測試原則(續(xù)),(5)應(yīng)由獨(dú)立的第三方來構(gòu)造測試。 (開發(fā)和測試隊伍分別建立) (6)測試用例應(yīng)由輸入數(shù)據(jù)和預(yù)期的輸出結(jié)果兩部分組成。 (7)兼顧合理的輸入和不合理的輸入數(shù)據(jù)。 (8)程序修改后要回歸測試。 (9)充分注意測試中的群集現(xiàn)象。經(jīng)驗(yàn)表明,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯誤數(shù)目成正比。,測試原則(續(xù)),(10)嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性。 (11)應(yīng)當(dāng)對每一個測試結(jié)果做全面檢查。 (12)妥善保存測試計劃,測試用例,出錯統(tǒng)計和最終分析報告,為維
16、護(hù)提供方便。,測試原則:軟件測試是有風(fēng)險的行為,數(shù) 量,遺漏軟件 缺陷數(shù)目,測試費(fèi)用,測試中,測試后,軟件,測試工作量,每一個軟件項目都有一個最優(yōu)的測量量,最優(yōu)測量量,3.測試的方法與技術(shù),軟件測試的 策略和方法,靜態(tài) 測試方法,動態(tài) 測試方法,人工測試方法,計算機(jī)輔助靜 態(tài)分析方法,白盒測試方法,黑盒測試方法,靜態(tài)測試:對軟件進(jìn)行分析、檢查和審閱,不實(shí)際運(yùn)行被測試的軟件。 靜態(tài)測試約可找出3070%的邏輯設(shè)計錯誤。 對需求規(guī)格說明書、軟件設(shè)計說明書、源程序做檢查和審閱,包括: 是否符合標(biāo)準(zhǔn)和規(guī)范 通過結(jié)構(gòu)分析、流圖分析、符號執(zhí)行指出軟件缺陷,動態(tài)測試:通過運(yùn)行軟件來檢驗(yàn)軟件的動態(tài)行為和運(yùn)行結(jié)
17、果的正確性。 動態(tài)測試的兩個基本要素: 被測試程序 測試數(shù)據(jù)(測試用例) 動態(tài)測試方法 (1)選取定義域有效值,或定義域外無效值。 (2)對已選取值決定預(yù)期的結(jié)果 (3)用選取值執(zhí)行程序 (4)執(zhí)行結(jié)果與預(yù)期的結(jié)果相比,不吻合說明程序有錯。,兩種常用的動態(tài)測試方法,黑盒測試 這種方法是把測試對象看做一個黑盒子,測試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求規(guī)格說明書,檢查程序的功能是否符合它的功能說明。 黑盒測試又叫做功能測試,數(shù)據(jù)驅(qū)動測試,基于規(guī)格說明書的測試。,白盒測試 此方法把測試對象看做一個透明的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例
18、,對程序所有邏輯路徑進(jìn)行測試。 通過在不同點(diǎn)檢查程序的狀態(tài),確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測試又稱開盒測試、玻璃盒測試,或是結(jié)構(gòu)測試,邏輯驅(qū)動測試,基于覆蓋的測試。,4.測試信息流,軟件配置:軟件需求規(guī)格說明、軟件設(shè)計規(guī)格說明、源代碼等; 測試配置:測試計劃、測試用例、測試程序等; 測試工具:測試數(shù)據(jù)自動生成程序、靜態(tài)分析程序、動態(tài)分析程序、測試結(jié)果分析程序、以及驅(qū)動測試的測試數(shù)據(jù)庫等等。,測試結(jié)果分析:比較實(shí)測結(jié)果與預(yù)期結(jié)果,評價錯誤是否發(fā)生。 調(diào)試(排錯):對已經(jīng)發(fā)現(xiàn)的錯誤進(jìn)行錯誤定位和確定出錯性質(zhì),并改正這些錯誤,同時修改相關(guān)的文檔。 修正后的文檔再測試:直到通過測試為止。
19、,通過收集和分析測試結(jié)果數(shù)據(jù),對軟件建立可靠性模型 利用可靠性分析,評價軟件質(zhì)量: -軟件的質(zhì)量和可靠性達(dá)到可以接受的程度 -所做的測試不足以發(fā)現(xiàn)嚴(yán)重的錯誤 如果測試發(fā)現(xiàn)不了錯誤,可以肯定,測試配置考慮得不夠細(xì)致充分,錯誤仍然潛伏在軟件中。,測試信息流,測試過程按4個步驟進(jìn)行,即單元測試、集成測試、確認(rèn)測試和系統(tǒng)測試。 開始是單元測試,集中對用源代碼實(shí)現(xiàn)的每一個程序單元進(jìn)行測試,檢查各個程序模塊是否正確地實(shí)現(xiàn)了規(guī)定的功能。,軟件測試策略,集成測試把已測試過的模塊組裝起來,主要對與設(shè)計相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)造進(jìn)行測試。 確認(rèn)測試則是要檢查已實(shí)現(xiàn)的軟件是否滿足了需求規(guī)格說明中確定了的各種需求,以及
20、軟件配置是否完全、正確。 系統(tǒng)測試把已經(jīng)經(jīng)過確認(rèn)的軟件納入實(shí)際運(yùn)行環(huán)境中,與其它系統(tǒng)成份組合在一起進(jìn)行測試。,7.3單元測試 (Unit Testing),單元測試又稱模塊測試,是針對軟件設(shè)計的最小單位 程序模塊,進(jìn)行正確性檢驗(yàn)的測試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯。 單元測試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計測試用例。多個模塊可以平行地獨(dú)立進(jìn)行單元測試。,1. 單元測試的內(nèi)容,在單元測試時,測試者需要依據(jù)詳細(xì)設(shè)計說明書和源程序清單,了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),主要采用白盒測試的測試用例,輔之以黑盒測試的測試用例,使之對任何合理的輸入和不合理的輸入,都能鑒別和響應(yīng)。,(1
21、) 模塊接口測試,在單元測試的開始,應(yīng)對通過被測模塊的數(shù)據(jù)流進(jìn)行測試。測試項目包括: 調(diào)用本模塊的輸入?yún)?shù)是否正確; 本模塊調(diào)用子模塊時輸入給子模塊的參數(shù)是否正確; 全局量的定義在各模塊中是否一致;,在做內(nèi)外存交換時要考慮: 文件屬性是否正確; OPEN與CLOSE語句是否正確; 緩沖區(qū)容量與記錄長度是否匹配; 在進(jìn)行讀寫操作之前是否打開了文件; 在結(jié)束文件處理時是否關(guān)閉了文件; 正文書寫輸入錯誤, IO錯誤是否檢查并做了處理。,(2) 局部數(shù)據(jù)結(jié)構(gòu)測試,不正確或不一致的數(shù)據(jù)類型說明 使用尚未賦值或尚未初始化的變量 錯誤的初始值或錯誤的缺省值 變量名拼寫錯或書寫錯 不一致的數(shù)據(jù)類型 全局?jǐn)?shù)據(jù)對
22、模塊的影響,(3) 路徑測試,選擇適當(dāng)?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進(jìn)行測試。 應(yīng)當(dāng)設(shè)計測試用例查找由于錯誤的計算、不正確的比較或不正常的控制流而導(dǎo)致的錯誤。 對基本執(zhí)行路徑和循環(huán)進(jìn)行測試可以發(fā)現(xiàn)大量的路徑錯誤。,(4) 錯誤處理測試,出錯的描述是否難以理解 出錯的描述是否能夠?qū)﹀e誤定位 顯示的錯誤與實(shí)際的錯誤是否相符 對錯誤條件的處理正確與否 在對錯誤進(jìn)行處理之前,錯誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等,(5) 邊界測試,注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細(xì)地選擇測試用例,認(rèn)真加以測試。 如果對模塊運(yùn)行時間有要求的話,還要專門進(jìn)行關(guān)鍵路徑測試,以
23、確定最壞情況下和平均意義下影響模塊運(yùn)行時間的因素。,2. 單元測試的步驟,模塊并不是一個獨(dú)立的程序,在考慮測試模塊時,同時要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測模塊相聯(lián)系的其它模塊。 驅(qū)動模塊 (driver) 樁模塊 (stub) 存根模塊,如果一個模塊要完成多種功能,可以將這個模塊看成由幾個小程序組成。必須對其中的每個小程序先進(jìn)行單元測試要做的工作,對關(guān)鍵模塊還要做性能測試。 對支持某些標(biāo)準(zhǔn)規(guī)程的程序,更要著手進(jìn)行互聯(lián)測試。有人把這種情況特別稱為模塊測試,以區(qū)別單元測試。,7.4集成測試(Integrated Testing),集成測試 (組裝測試、聯(lián)合測試) 通常,在單元測試的
24、基礎(chǔ)上,需要將所有模塊按照設(shè)計要求組裝成為系統(tǒng)。這時需要考慮的問題是: 在把各個模塊連接起來的時侯,穿越模塊接口的數(shù)據(jù)是否會丟失; 一個模塊的功能是否會對另一個模塊的功能產(chǎn)生不利的影響;,各個子功能組合起來,能否達(dá)到預(yù)期要求的父功能; 全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問題; 單個模塊的誤差累積起來,是否會放大,從而達(dá)到不能接受的程度。 在單元測試的同時可進(jìn)行集成測試 發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問題,最終構(gòu)成要求的軟件系統(tǒng)。,子系統(tǒng)的集成測試特別稱為部件測試,它所做的工作是要找出組裝后的子系統(tǒng)與系統(tǒng)需求規(guī)格說明之間的不一致。 通常,把模塊組裝成為系統(tǒng)的方式有兩種 一次性集成方式 增殖式集成方式,1. 一
25、次性集成方式 (big bang),它是一種非增殖式集成方式,也叫做整體拼裝。 使用這種方式,首先對每個模塊分別進(jìn)行模塊測試,然后再把所有模塊組裝在一起進(jìn)行測試,最終得到要求的軟件系統(tǒng)。,2. 增殖式集成方式,這種集成方式又稱漸增式集成 首先對一個個模塊進(jìn)行模塊測試,然后將這些模塊逐步組裝成較大的系統(tǒng) 在組裝的過程中邊連接邊測試,以發(fā)現(xiàn)連接過程中產(chǎn)生的問題 通過增殖逐步組裝成為要求的軟件系統(tǒng)。,(1) 自頂向下的增殖方式,這種集成方式將模塊按系統(tǒng)程序結(jié)構(gòu),沿控制層次自頂向下進(jìn)行集成。 自頂向下的增殖方式的主要優(yōu)點(diǎn)是不需要測試驅(qū)動程序,能在測試階段早期驗(yàn)證系統(tǒng)主要的控制和判斷點(diǎn);缺點(diǎn)是需要存根程
26、序。 選用按深度方向組裝的方式,可以首先實(shí)現(xiàn)和驗(yàn)證一個完整的軟件功能。,(2) 自底向上的增殖方式,這種集成的方式是從程序模塊結(jié)構(gòu)的最底層的模塊開始組裝和測試。 因?yàn)槟K是自底向上進(jìn)行組裝,對于一個給定層次的模塊,它的子模塊(包括子模塊的所有下屬模塊)已經(jīng)組裝并測試完成,所以不再需要樁模塊。在模塊的測試過程中需要從子模塊得到的信息可以直接運(yùn)行子模塊得到。,自頂向下增殖的方式和自底向上增殖的方式各有優(yōu)缺點(diǎn)。 一般來講,一種方式的優(yōu)點(diǎn)是另一種方式的缺點(diǎn)。,(3) 混合增殖式測試,衍變的自頂向下的增殖測試 基本上使用自頂向下的測試方法,但在早期使用自底向上的方法測試軟件中的少數(shù)關(guān)鍵模塊。 自底向上自
27、頂向下的增殖測試 對軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對軟件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。,7.5確認(rèn)測試(Validation Testing),確認(rèn)測試又稱驗(yàn)收測試(Acceptance Testing),任務(wù)是驗(yàn)證軟件的有效性。 軟件有效性:如果軟件的功能和性能及其它特性與用戶的合理期望一致,那么軟件就是有效的。 對軟件的功能和性能要求在軟件需求規(guī)格說明書中已經(jīng)明確規(guī)定。它包含的信息就是軟件確認(rèn)測試的基礎(chǔ)。,1. 進(jìn)行確認(rèn)測試(黑盒測試),確認(rèn)測試是在模擬的環(huán)境 (可能就是開發(fā)的環(huán)境) 下,運(yùn)用黑盒測試的方法,驗(yàn)證被測軟件是否滿足需求規(guī)格說明書列出的需求。 首先制定測試計劃,規(guī)
28、定要做測試的種類。還需要制定一組測試步驟,描述具體的測試用例。,通過實(shí)施預(yù)定的測試計劃和測試步驟,確定 軟件的特性是否與需求相符; 所有的文檔都是正確且便于使用; 同時,對其它軟件需求,例如可移植性、兼容性、出錯自動恢復(fù)、可維護(hù)性等,也都要進(jìn)行測試,在全部軟件測試的測試用例運(yùn)行完后,所有的測試結(jié)果可以分為兩類: 測試結(jié)果與預(yù)期的結(jié)果相符。這說明軟件的這部分功能或性能特征與需求規(guī)格說明書相符合,從而這部分程序被接受。 測試結(jié)果與預(yù)期的結(jié)果不符。這說明軟件的這部分功能或性能特征與需求規(guī)格說明不一致,因此要為它提交一份問題報告。,2. 軟件配置復(fù)查,軟件配置復(fù)查的目的是保證 軟件配置的所有成分都齊全
29、; 各方面的質(zhì)量都符合要求; 具有維護(hù)階段所必需的細(xì)節(jié); 而且已經(jīng)編排好分類的目錄。 應(yīng)當(dāng)嚴(yán)格遵守用戶手冊和操作手冊中規(guī)定的使用步驟,以便檢查這些文檔資料的完整性和正確性。,系統(tǒng)測試(System Testing),系統(tǒng)測試,是將通過確認(rèn)測試的軟件,作為整個基于計算機(jī)系統(tǒng)的一個元素,與計算機(jī)硬件、外設(shè)、某些支持軟件、數(shù)據(jù)和人員等其它系統(tǒng)元素結(jié)合在一起,在實(shí)際運(yùn)行環(huán)境下,對計算機(jī)系統(tǒng)進(jìn)行一系列的組裝測試和確認(rèn)測試。 系統(tǒng)測試的目的在于通過與系統(tǒng)的需求定義作比較, 發(fā)現(xiàn)軟件與系統(tǒng)的定義不符合或與之矛盾的地方。,3. 測試和測試,在軟件交付使用之后,用戶將如何實(shí)際使用程序,對于開發(fā)者來說是無法預(yù)測的
30、。 驗(yàn)收測試是以用戶為主的測試。軟件開發(fā)人員和QA(質(zhì)量保證)人員也應(yīng)參加。 測試是由一個用戶在開發(fā)環(huán)境下進(jìn)行的測試,也可以是公司內(nèi)部的用戶在模擬實(shí)際操作環(huán)境下進(jìn)行的測試。測試是在受控的環(huán)境中進(jìn)行的。,測試的目的是評價軟件產(chǎn)品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。尤其注重產(chǎn)品的界面和特色。 測試可以從軟件產(chǎn)品編碼結(jié)束之時開始,或在模塊(子系統(tǒng))測試完成之后開始,也可以在確認(rèn)測試過程中產(chǎn)品達(dá)到一定的穩(wěn)定和可靠程度之后再開始。,測試是由軟件的多個用戶在實(shí)際使用環(huán)境下進(jìn)行的測試。這些用戶返回有關(guān)錯誤信息給開發(fā)者。 測試時,開發(fā)者通常不在測試現(xiàn)場。因而,測試是在開發(fā)者無法控制
31、的環(huán)境下進(jìn)行的軟件現(xiàn)場應(yīng)用。 在測試中,由用戶記下遇到的所有問題,包括真實(shí)的以及主觀認(rèn)定的,定期向開發(fā)者報告。,測試主要衡量產(chǎn)品的FLURPS。著重于產(chǎn)品的支持性,包括文檔、客戶培訓(xùn)和支持產(chǎn)品生產(chǎn)能力。 只有當(dāng)測試達(dá)到一定的可靠程度時,才能開始測試。它處在整個測試的最后階段。同時,產(chǎn)品的所有手冊文本也應(yīng)該在此階段完全定稿。,軟件人員使用白盒測試方法,主要想對程序模塊進(jìn)行如下的檢查: 對程序模塊的所有獨(dú)立的執(zhí)行路徑至少測試一次; 對所有的邏輯判定,取“真”與取“假”的兩種情況都至少測試一次; 在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體; 測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性等。,7.6白盒測試技術(shù) (White-b
32、ox testing),7.6白盒測試技術(shù),白盒測試是根據(jù)被測程序的內(nèi)部邏輯結(jié)構(gòu)設(shè)計測試用例,力求提高測試覆蓋率。,白盒測試窮舉測試實(shí)例: 設(shè)程序含4個分支, 循環(huán)次數(shù)20, 從A到B的可能路徑 51+52+519+5201014 執(zhí)行時間: 設(shè)測試一次需2ms, 窮舉測試需6千多年,測試都不能進(jìn)行窮盡測試,所以軟件測試不可能發(fā)現(xiàn)程序中存在的所有錯誤,因此需精心設(shè)計測試方案,力爭盡可能少的次數(shù),測出盡可能多的錯誤。,1.邏輯覆蓋法,邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計測試用例的技術(shù)。它屬白盒測試。 (1)語句覆蓋 (2)判定覆蓋 (3)條件覆蓋 (4)判定條件覆蓋 (5)條件組合覆蓋 (
33、6)路徑覆蓋 (7)點(diǎn)覆蓋 (8)邊覆蓋,測試路徑圖,PROCEDURE SAMPLE (A,B:REAL; VAR X:REAL); BEGIN IF (A1) and (B=0) THEN X:=X/A IF (A=2) or (X1) THEN X:=X+1 END;,L1 ( s a c b e d ) = (A1) and (B=0) and (A=2) or (X/A1) = (A1) and (B=0) and (A=2) or (A1) and (B=0) and (X/A1) = (A=2) and (B=0) or (A1) and (B=0) and (X/A1) ,L2
34、 (s a b d ) = not(A1) and (B=0) and not(A=2) or (X1) = not (A1) or not (B=0) and not (A=2) and not (X1) = not (A1) and not (A=2) and not (X1) or not (B=0) and not (A=2) and not (X1) ,L3 ( s a b e d) = not (A1) and (B=0) and (A=2) or (X1) = not (A1) or not (B=0) and (A=2) or (X1) = not (A1) and (A=2)
35、 or not (A1) and (X1) or not (B=0) and (A=2) or not (B=0) and (X1) ,L4 ( s a c b d ) = (A1) and (B=0) and not (A=2) or (X/A1) = (A1) and (B=0) and not (A=2) and not (X/A1),測試路徑邏輯,(1) 語句覆蓋,語句覆蓋就是設(shè)計若干個測試用例,運(yùn)行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。 在圖例中,正好所有的可執(zhí)行語句都在路徑 L1上,所以選擇路徑 L1設(shè)計測試用例,就可以覆蓋所有的可執(zhí)行語句。 測試用例的設(shè)計格式如下【輸入的(A
36、,B,X),輸出的(A,B,X)】 為圖例設(shè)計滿足語句覆蓋的測試用例是【(2,0,4),(2,0,3)】 覆蓋 sacbed【L1】 語句覆蓋是最弱的邏輯覆蓋。,(2) 判定覆蓋,判定覆蓋就是設(shè)計若干個測試用例,運(yùn)行時,使得程序中不僅每一可執(zhí)行語句至少執(zhí)行一次,而且每個判斷的取真分支和取假分支至少執(zhí)行一次。 判定覆蓋又稱為分支覆蓋。 對于圖例,如果選擇路徑L1和L2, 就可得滿足要求的兩組測試用例: 【(2,0,4),(2,0,3)】覆蓋 sacbed【L1】 和【(1,1,1),(1,1,1)】覆蓋 sabd【L2】 【(3,0,3)】和【(2,1,1)】兩組測試 用例也可覆蓋所有判定的真假
37、分支。 判定覆蓋仍是弱的邏輯覆蓋。,條件覆蓋就是設(shè)計若干個測試用例,運(yùn)行時使得程序中每一可執(zhí)行語句至少執(zhí)行一次,每個判斷的每個條件的可能取值至少執(zhí)行一次。 在圖例中,我們事先可對所有條件的取值加以標(biāo)記。例如, 對于第一個判斷: 條件 A1 取真為T1 ,取假為條件 B0 取真為T2 ,取假為 對于第二個判斷: 條件A2 取真為T3 ,取假為 條件X1 取真為T4 ,取假為,(3) 條件覆蓋,測試用例 通過路徑 覆蓋分支 滿足的條件 A B X 1 0 3 sabed(L3) 2,6 T2 T4 2 1 1 sabed(L3) 2,6 T1 T3 兩個測試用例覆蓋了四個條件八種可能取值。 未覆蓋
38、4,3分支,不滿足判定覆蓋的要求。 條件覆蓋不一定包含判定覆蓋。 判定覆蓋也不一定包含條件覆蓋。 3 0 3 sacbd(L4) 4,3 T1T2 2 1 1 sabed(L3) 2,6 T1 T3 2 0 4 sacbed(L1) 4,6 T1T2 T3 T4 1 1 1 sabd(L2) 2,3,測試用例 覆蓋分支 條件取值 【(2,0,4),(2,0,3)】 L1(4,6) 【(1,0,1),(1,0,1)】 L2(2,3) 【(2,1,1),(2,1,2)】 L3(2,6),判定-條件覆蓋就是設(shè)計足夠的測試用例,使得判斷中每個分支至少執(zhí)行一次,并且每個判斷中的每個條件的可能取值至少執(zhí)行
39、一次。 能同時滿足判定、條件兩種覆蓋標(biāo)準(zhǔn)的取值。,(4) 判定-條件覆蓋,測試用例 覆蓋分支 條件取值 【(2,0,4),(2,0,3)】 L1(4,6) 【(1,1,1),(1,1,1)】 L2(2,3),條件組合覆蓋就是設(shè)計足夠的測試用例,運(yùn)行被測程序,使得每個判斷的所有可能的條件取值組合至少執(zhí)行一次。 記 A1, B0 作 A1, B0 作 A1, B0 作 A1, B0 作 A2, X1 作 A2, X1 作 A2, X1 作 A2, X1 作,(5) 條件組合覆蓋,測試用例 覆蓋分支 覆蓋條件 覆蓋組合 【(2,0,4),(2,0,3)】L1(4,6) , 【(2,1,1),(2,1
40、,2)】L3(2,6) , 【(1,0,3),(1,0,4)】L3(2,6) , 【(1,1,1),(1,1,1)】L2(2,3) ,(6) 點(diǎn)覆蓋,點(diǎn)覆蓋,要求選取足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖的每個結(jié)點(diǎn)一次。 由于流圖的每個結(jié)點(diǎn)與一條或多條語句相對應(yīng),顯然點(diǎn)覆蓋標(biāo)準(zhǔn)和語句覆蓋標(biāo)準(zhǔn)是相同的。,(7) 邊覆蓋,邊覆蓋,要求選取足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中的每條邊一次。 通常邊覆蓋標(biāo)準(zhǔn)和判定覆蓋標(biāo)準(zhǔn)是一致的。,(8) 路徑覆蓋,路徑覆蓋,選取足夠多的測試數(shù)據(jù),使得程序的每條可能路徑都至少執(zhí)行一次。 測試用例 覆蓋分支 覆蓋條件 【(2,0,4),(2,0,3)
41、】L1(4,6) 【(3,0,3),(3,0,1)】L4(4,3) 【(1,0,3),(1,0,4)】L3(2,6) 【(1,1,1),(1,1,1)】L2(2,3) 路徑覆蓋是很強(qiáng)的邏輯覆蓋。,路徑測試 基本路徑測試 條件測試路徑選擇 循環(huán)測試路徑選擇,2.控制結(jié)構(gòu)測試,路徑測試(Path testing),路徑測試就是設(shè)計足夠的測試用例,覆蓋程序中所有可能的路徑。 測試用例 通過路徑 覆蓋條件 【(2,0,4),(2,0,3)】L1(4,6) 【(1,1,1),(1,1,1)】L2(2,3) 【(1,1,2),(1,1,3)】L3(2,6) 【(3,0,3),(3,0,1)】L4(4,3)
42、,基本路徑測試,基本路徑測試方法是在程序的流圖的基礎(chǔ)上,分析程序的環(huán)形復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,設(shè)計測試用例的方法。設(shè)計出的測試用例要保證在測試中,程序的每一個可執(zhí)行語句至少要執(zhí)行一次,而且每個條件在執(zhí)行時都將分別取真、假兩種值。 基本路徑測試方法把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),程序中的循環(huán)體最多只執(zhí)行一次。,基本路徑測試步驟: 導(dǎo)出程序流程圖的拓?fù)浣Y(jié)構(gòu)流圖(程序圖、控制流圖) 計算流圖G的環(huán)形復(fù)雜度V(G) 確定只包含獨(dú)立路徑的基本路徑集合 設(shè)計測試用例 獨(dú)立路徑(Independent paths):指至少引入程序的一個新處理語句集合或一個新條件的路徑。,程序的流圖,符號為流圖的一個
43、結(jié)點(diǎn),表示一個或多個源程序語句。箭頭為邊,表示控制流的方向。,在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個匯聚結(jié)點(diǎn)。 邊和結(jié)點(diǎn)圈定的面積叫做區(qū)域,當(dāng)對區(qū)域計數(shù)時,圖形外的區(qū)域也應(yīng)記為一個區(qū)域。 如果判斷中的條件表達(dá)式是由一個或多個邏輯運(yùn)算符(OR,AND,NAND,NOR)連接的復(fù)合條件表達(dá)式,則需要改為一系列只有單個條件的嵌套的判斷。,導(dǎo)出程序流程圖的拓?fù)浣Y(jié)構(gòu)-流圖,1,2,3,6,4,5,7,10,11,節(jié)點(diǎn),邊,R4,區(qū)域,1,2,3,4,5,8,7,6,9,11,8,9,R1,R2,R3,10,計算流圖G的環(huán)形復(fù)雜度CC的不同方法 (Cyclomatic complexity) CC=區(qū)
44、域個數(shù)=4 CC=E-N+2=11-9+2=4 CC=判定節(jié)點(diǎn)個數(shù)+1=3+1=4,確定只包含獨(dú)立路徑的基本路徑集 程序的環(huán)形復(fù)雜度給出了程序基本路徑集中的獨(dú)立路徑條數(shù),這是確保程序中每個可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界。 從控制流圖來看,一條獨(dú)立路徑是至少包含一條在其它獨(dú)立路徑中從未有過的邊的路徑。,例如,在圖示的控制流圖中,一組獨(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 一條新路徑必須包含一條新邊 路徑 path1,path2,path3,
45、path4組成了控制流圖的一個基本路徑集。 環(huán)形復(fù)雜度4是構(gòu)成這個基本路徑集的獨(dú)立路徑的數(shù)量,也是設(shè)計測試用例的數(shù)目。,設(shè)計測試用例,保證基本路徑集中每條路徑的執(zhí)行 根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測試到 用邏輯覆蓋方法。 每個測試用例執(zhí)行之后,與預(yù)期結(jié)果進(jìn)行比較。如果所有測試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語句至少被執(zhí)行了一次。 必須注意,一些獨(dú)立的路徑(如例中的路徑1),往往不是完全孤立的,有時它是程序正常的控制流的一部分,這時,這些路徑的測試可以是另一條路徑測試的一部分。,條件測試路徑選擇,當(dāng)程序中判定多于一個時,形成的分支結(jié)構(gòu)可以分為兩類:嵌套型
46、分支結(jié)構(gòu)和串接(連鎖)型分支結(jié)構(gòu)。 對于嵌套型分支結(jié)構(gòu),若有n個判定語句,需要n+1個測試用例; 對于串接(連鎖)型分支結(jié)構(gòu),若有n個判定語句,需要有2n個測試用例,覆蓋它的2n條路徑。當(dāng)n較大時將無法測試。,循環(huán)測試路徑選擇,循環(huán)分為4種不同類型:簡單循環(huán)、串接(連鎖)循環(huán)、嵌套循環(huán)和非結(jié)構(gòu)循環(huán)。,(1)簡單循環(huán)(設(shè)n是循環(huán)允許的最大次數(shù)) 零次循環(huán):從循環(huán)入口到出口,跳過循環(huán) 一次循環(huán):檢查循環(huán)初始值 二次循環(huán):通過循環(huán)兩次 m次循環(huán): 通過循環(huán)m次,mn-1 最大次數(shù)循環(huán)n、比最大次數(shù)少一次n-1、比最大次數(shù)多一次n+1的循環(huán)。,(2) 嵌套循環(huán) 對最內(nèi)層循環(huán)做簡單循環(huán)的全部測試。所有其
47、它層的循環(huán)變量置為最小值; 逐步外推,對其外面一層循環(huán)進(jìn)行測試。測試時保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。 反復(fù)進(jìn)行,直到所有各層循環(huán)測試完畢。 對全部各層循環(huán)同時取最小循環(huán)次數(shù),或者同時取最大循環(huán)次數(shù),(3)串接(連鎖)循環(huán) 如果各個循環(huán)互相獨(dú)立,則可以用與簡單循環(huán)相同的方法進(jìn)行測試。但如果幾個循環(huán)不是互相獨(dú)立的,則需要使用測試嵌套循環(huán)的辦法來處理。 (4)非結(jié)構(gòu)循環(huán) 這一類循環(huán)應(yīng)該使用結(jié)構(gòu)化程序設(shè)計方法重新設(shè)計。,黑盒測試方法是在程序接口上進(jìn)行測試,主要是為了發(fā)現(xiàn)以下錯誤: 是否有不正確或遺漏了的功能? 在接口上,輸入能否正確地接受? 能否輸出正
48、確的結(jié)果? 是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件)訪問錯誤? 性能上是否能夠滿足要求? 是否有初始化或終止性錯誤? 用黑盒測試發(fā)現(xiàn)程序中的錯誤,必須在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),來檢查程序是否都能產(chǎn)生正確的輸出。但這是不可能的。,7.7黑盒測試技術(shù) (Black-box testing),等價類劃分 邊界值分析 錯誤推測法,等價類劃分(Equivalence partitioning),等價類劃分方法是一種典型的黑盒測試方法。等價類劃分方法把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干等價類(每個等價類中的一個典型值在測試中的作用與這一類中所有其它值的作用相同),然后從每
49、個等價類中選取少數(shù)有代表性的數(shù)據(jù)做為測試用例。 使用這一方法設(shè)計測試用例要經(jīng)歷劃分等價類(列出等價類表)和選取測試用例兩步。,等價類是指某個輸入域的子集合。在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的。測試某等價類的代表值就等價于對這一類其它值的測試。 等價類的劃分有兩種不同的情況: 有效等價類(正向集):是指對于程序的規(guī)格說明來說,是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。 無效等價類(反向集):是指對于程序的規(guī)格說明來說,是不合理的,無意義的輸入數(shù)據(jù)構(gòu)成的集合。 在設(shè)計測試用例時,要同時考慮有效等價類和無效等價類的設(shè)計。,劃分等價類,(1)如果輸入條件規(guī)定了取值范圍,則可以確立一個
50、有效等價類和兩個無效等價類。 例,在程序的規(guī)格說明中,對輸入條件有一句話: “ 項數(shù)可以從1到999 ” 則有效等價類是“1項數(shù)999”兩個無效等價類是“項數(shù)1”或“項數(shù)999”。 例,輸入值是學(xué)生成績,范圍是0100,劃分等價類的原則,0 100,有效等價類 0成績100,無效等價類 成績100,無效等價類 成績0,(2)如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,這時可確立一個有效等價類和一個無效等價類。 例,在Pascal語言中對變量標(biāo)識符規(guī)定為“以字母打頭的串”。那么所有以字母打頭的構(gòu)成有效等價類,而不在此集合內(nèi)(不以字母打頭)的歸于無效等價類。,(3)如果規(guī)定了輸
51、入數(shù)據(jù)的一組值,而且程序要對每個輸入值分別進(jìn)行處理。這時可為每一個輸入值確立一個有效等價類,此外針對這組值確立一個無效等價類,它是所有不允許的輸入值的集合。 例,輸入條件說明學(xué)歷可為:???、本科、碩士、博士四種之一,則分別取這四個值作為四個有效等價類,另外把四種學(xué)歷之外的任何學(xué)歷作為無效等價類。,(4)如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個有效等價類(符合規(guī)則)和若干個無效等價類(從不同角度違反規(guī)則)。 例:Pascal語言規(guī)定“一個語句必須以分號;結(jié)束”。這時,可以確定一個有效等價類“以;結(jié)束”,若干個無效等價類“以:結(jié)束”、“以,結(jié)束”、“以、結(jié)束”等。,在確立了等價類之后,建立
52、等價類表,列出所有劃分出的等價類。 再從劃分出的等價類中按以下原則選擇測試用例: 為每一個等價類規(guī)定一個唯一編號; 設(shè)計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價類,重復(fù)這一步,直到所有的有效等價類都被覆蓋為止; 設(shè)計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復(fù)這一步,直到所有的無效等價類都被覆蓋為止。,確立測試用例,示例,例:某報表處理系統(tǒng)要求用戶輸入處理報表的日期,日期限制在2003年1月至2008年12月,即系統(tǒng)只能對該段期間內(nèi)的報表進(jìn)行處理,如日期不在此范圍內(nèi),則顯示輸入錯誤信息。 系統(tǒng)日期規(guī)定由年、月的6位數(shù)字字符組成,前四位代表年,后兩位代表月。 如何
53、用等價類劃分法設(shè)計測試用例,來測試程序的日期檢查功能?,第一步:等價類劃分,輸入條件 有效等價類 無效等價類,報表日期的 類型及長度,6位數(shù)字字符(1),有非數(shù)字字符 (4) 少于6個數(shù)字字符 (5) 多于6個數(shù)字字符 (6),年份范圍,在20032008 之間 (2),小于2003 (7) 大于2008 (8),月份范圍,在112之間(3),“報表日期”輸入條件的等價類表,小于1 (9) 大于12 (10),第二步:為有效等價類設(shè)計測試用例,測試數(shù)據(jù) 期望結(jié)果 覆蓋范圍,200306,等價類(1)(2)(3),輸入有效,對表中編號為1,2,3的3個有效等價類用一個測試用例覆蓋:,(1)6位數(shù)
54、字字符 (2)年在20032008之間 (3)月在112之間,測試數(shù)據(jù) 期望結(jié)果 覆蓋范圍,003MAY 輸入無效 等價類(4) 20035 輸入無效 等價類(5) 2003005 輸入無效 等價類(6) 200105 輸入無效 等價類(7) 200905 輸入無效 等價類(8) 200300 輸入無效 等價類(9) 200313 輸入無效 等價類(10),不能出現(xiàn)相同 的測試用例,本例的10個等價類至 少需要8個測試用例,第三步:為每一個無效等價類至少 設(shè)計一個測試用例,準(zhǔn)考證號數(shù)據(jù)格式定義:共6位數(shù)字組成,其中第一位 為專業(yè)代號:1-行政專業(yè),2-法律專業(yè),3-財經(jīng)專業(yè) 后5位為考生順序號
55、,編碼范圍為: 行政專業(yè)準(zhǔn)考證號碼為:110001111215 法律專業(yè)準(zhǔn)考證號碼為:210001212006 財經(jīng)專業(yè)準(zhǔn)考證號碼為:310001314015,準(zhǔn)考證號碼的等價類劃分 有效等價類:(1) 110001 111215 (2) 210001 212006 (3) 310001 314015 無效等價類:(4) - 110000 (5) 111216 210000 (6) 212007 31000 (7) 314016 + ,例:對招干考試系統(tǒng)“輸入學(xué)生成績”子模塊設(shè)計測試錄入準(zhǔn)考證號的測試用例,例:在某一PASCAL語言版本中規(guī)定:“標(biāo)識符是由字母開頭,后跟字母或數(shù)字的任意組合構(gòu)成
56、。有效字符數(shù)為8個,最大字符數(shù)為80個?!辈⑶乙?guī)定“標(biāo)識符必須先說明,再使用”,“在同一說明語句中,標(biāo)識符至少必須有一個?!?用等價類劃分方法,建立輸入等價類表:,下面選取了9個測試用例,它們覆蓋了所有的等價類 VAR x,T1234567:REAL; BEGIN x := 3.414; T1234567 := 2.732; . (1), (2), (4), (8), (9), (12), (14) VAR :REAL; (3) VAR x,:REAL; (5) VAR T12345678:REAL; (6) VAR T12345.:REAL; (7) 多于80個字符 VAR T$:CHAR;
57、 (10) VAR GOTO:INTEGER; (11) VAR 2T:REAL; (13) VAR PAR:REAL; (15) BEGIN . PAP := SIN (3.14 * 0.8) / 6;,2.邊界值分析,邊界值分析也是一種黑盒測試方法,是對等價類劃分方法的補(bǔ)充。 人們從長期的測試工作經(jīng)驗(yàn)得知,大量的錯誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部。因此針對各種邊界情況設(shè)計測試用例,可以查出更多的錯誤。,軟件邊界與懸崖很類似 如果在懸崖峭壁邊可以自信地安全行走,平地就不在話下。,比如,在做三角形計算時,要輸入三角形的三個邊長:A、B和C。 我們應(yīng)注意到,要構(gòu)成三角形,
58、這三個數(shù)值應(yīng)當(dāng)滿足 A0、 B0、 C0、 ABC、 ACB、 BCA。 但如果把六個不等式中的任何一個大于號“”錯寫成大于等于號“”,那就不能構(gòu)成三角形。問題恰出現(xiàn)在容易被疏忽的邊界附近。,這里所說的邊界是指,相對于輸入等價類和輸出等價類而言,稍高于其邊界值及稍低于其邊界值的一些特定情況。 使用邊界值分析方法設(shè)計測試用例,首先應(yīng)確定邊界情況。應(yīng)當(dāng)選取正好等于,剛剛大于,或剛剛小于邊界的值做為測試數(shù)據(jù),而不是選取等價類中的典型值或任意值做為測試數(shù)據(jù)。,測試臨近邊界的合法數(shù)據(jù),以及剛超過邊界的非法數(shù)據(jù)。,3.錯誤推測(error guessing),可以靠經(jīng)驗(yàn)和直覺推測程序中可能存在的各種錯誤,
59、從而有針對性地編寫檢查這些錯誤的例子。這就是錯誤推測法。 錯誤推測法的基本想法是:列舉出程序中所有可能有的錯誤和容易發(fā)生錯誤的特殊情況,根據(jù)它們選擇測試用例。 例如,如果輸入或輸出的數(shù)目允許變化(如檢索的或生成的表的項數(shù)),則輸入或輸出的數(shù)目為0和1的情況(如表為空或只有一項)是容易出錯的情況。,黑盒測試與白盒測試比較,黑盒測試 白盒測試,優(yōu) 點(diǎn),缺 點(diǎn),性 質(zhì),適用于各階段測試 從產(chǎn)品功能角度測試 容易入手生成測試數(shù)據(jù),可構(gòu)造測試數(shù)據(jù)使特定程 序部分得到測試 有一定的充分性度量手段 可獲較多工具支持,某些代碼得不到測試 如果規(guī)格說明有誤, 則無法發(fā)現(xiàn) 不易進(jìn)行充分性測試,不易生成測試數(shù)據(jù)(通
60、常) 無法對未實(shí)現(xiàn)規(guī)格說明的 部分進(jìn)行測試 工作量大,通常只用于單 元測試,有應(yīng)用局限,是一種確認(rèn)(validation)技術(shù) 回答“我們在構(gòu)造一個正確的系統(tǒng)嗎?”,是一種驗(yàn)證(verification)技術(shù) 回答“我們在正確地構(gòu)造一個系統(tǒng)嗎?”,7.8調(diào)試(Debug),調(diào)試(即排錯)與成功的測試形影相隨。成功的測試發(fā)現(xiàn)了錯誤;而調(diào)試是確定錯誤的原因和準(zhǔn)確位置,并加以改正。 調(diào)試是把錯誤的外部表現(xiàn)和它的內(nèi)在原因聯(lián)系起來的目前尚未被人深入認(rèn)識的智力過程,所以它仍是一項技巧,是軟件開發(fā)過程中最艱巨的腦力勞動。,調(diào)試工作困難的原因,非技術(shù)原因:開發(fā)人員心理方面的原因。 錯誤的癥狀和原因所處的位置可
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流課程設(shè)計實(shí)驗(yàn)
- 種蘑菇課程設(shè)計
- 中華人民共和國民法典知識競賽題庫及答案
- 2024幼兒園安全教育工作總結(jié)結(jié)尾(31篇)
- 2024年自來水公司年終工作總結(jié)(35篇)
- 液體混合裝置plc課程設(shè)計
- 玉雕課程設(shè)計
- 食品行業(yè)客服工作總結(jié)
- 客房清潔員的工作總結(jié)
- 中醫(yī)科醫(yī)師工作總結(jié)
- 深部真菌病課件
- 用戶界面測試
- 人工氣道濕化的護(hù)理培訓(xùn)課件
- 電網(wǎng)適用的法律法規(guī)標(biāo)準(zhǔn)規(guī)范清單
- 讀書分享-給教師的一百條建議
- GB/T 4269.3-2000農(nóng)林拖拉機(jī)和機(jī)械、草坪和園藝動力機(jī)械操作者操縱機(jī)構(gòu)和其他顯示裝置用符號第3部分:草坪和園藝動力機(jī)械用符號
- GB/T 11618.1-2008銅管接頭第1部分:釬焊式管件
- 開工復(fù)工第一課
- 安徽省淮南市鳳臺縣基層診所醫(yī)療機(jī)構(gòu)衛(wèi)生院社區(qū)衛(wèi)生服務(wù)中心村衛(wèi)生室地址信息
- 旅游服務(wù)禮儀說課市公開課金獎市賽課一等獎?wù)n件
- 【線性代數(shù)自考練習(xí)題】滇西應(yīng)用技術(shù)大學(xué)專升本真題匯總(附答案解析)
評論
0/150
提交評論