




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第7章章 實(shí)現(xiàn)實(shí)現(xiàn)1 編碼編碼2 軟件測(cè)試基礎(chǔ)軟件測(cè)試基礎(chǔ)3 單元測(cè)試單元測(cè)試4 集成測(cè)試集成測(cè)試5 確認(rèn)測(cè)試確認(rèn)測(cè)試6 白盒測(cè)試技術(shù)白盒測(cè)試技術(shù)7 黑盒測(cè)試技術(shù)黑盒測(cè)試技術(shù)8 調(diào)試調(diào)試9 軟件可靠性軟件可靠性1. 實(shí)現(xiàn):包括編碼和測(cè)試。實(shí)現(xiàn):包括編碼和測(cè)試。2. 編碼:編碼: 就是把軟件設(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語言就是把軟件設(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語言 書寫的程序。書寫的程序。3. 測(cè)試:測(cè)試:1)無論怎樣強(qiáng)調(diào)軟件測(cè)試的重要性和它對(duì)軟件可)無論怎樣強(qiáng)調(diào)軟件測(cè)試的重要性和它對(duì)軟件可 靠性的影響都不過分;靠性的影響都不過分;2)測(cè)試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,)測(cè)試的目的就是在
2、軟件投入生產(chǎn)性運(yùn)行之前, 盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤;盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤;3)軟件測(cè)試在軟件生命周期中橫跨兩個(gè)階段;)軟件測(cè)試在軟件生命周期中橫跨兩個(gè)階段;4)調(diào)試:是測(cè)試階段最困難的工作。)調(diào)試:是測(cè)試階段最困難的工作。 1. 程序設(shè)計(jì)語言程序設(shè)計(jì)語言 是人和計(jì)算機(jī)通信的最基本的工具,它的特點(diǎn)是人和計(jì)算機(jī)通信的最基本的工具,它的特點(diǎn) 必然會(huì)影響人的思維和解題方式,必然會(huì)影響人的思維和解題方式, 因此,編碼之前的一項(xiàng)重要工作就是選擇一種因此,編碼之前的一項(xiàng)重要工作就是選擇一種 適當(dāng)?shù)某绦蛟O(shè)計(jì)語言。適當(dāng)?shù)某绦蛟O(shè)計(jì)語言。 2. 匯編語言和高級(jí)語言匯編語言和高級(jí)語言7.1 編碼編碼 7.1.
3、1 選擇程序設(shè)計(jì)語言選擇程序設(shè)計(jì)語言1)匯編語言:)匯編語言: 使用匯編語言編碼需要把軟件設(shè)計(jì)翻譯成機(jī)器使用匯編語言編碼需要把軟件設(shè)計(jì)翻譯成機(jī)器 操作的序列,由于這兩種表示方法很不相同,操作的序列,由于這兩種表示方法很不相同, 因此匯編程序設(shè)計(jì)既困難又容易出差錯(cuò)。因此匯編程序設(shè)計(jì)既困難又容易出差錯(cuò)。2)高級(jí)語言)高級(jí)語言 一般都容許用戶給程序變量和子程序賦予含義一般都容許用戶給程序變量和子程序賦予含義 鮮明的名字,通過名字很容易把程序?qū)ο蠛退r明的名字,通過名字很容易把程序?qū)ο蠛退?們所代表的實(shí)體聯(lián)系起來;們所代表的實(shí)體聯(lián)系起來; 此外,高級(jí)語言使用的符號(hào)和概念更符合人的此外,高級(jí)語言使用的符
4、號(hào)和概念更符合人的 習(xí)慣。習(xí)慣。 因此,用高級(jí)語言寫的程序容易閱讀,容易測(cè)因此,用高級(jí)語言寫的程序容易閱讀,容易測(cè) 試,容易調(diào)試,容易維護(hù)。試,容易調(diào)試,容易維護(hù)。3. 選擇程序設(shè)計(jì)語言的理想標(biāo)準(zhǔn):選擇程序設(shè)計(jì)語言的理想標(biāo)準(zhǔn): . 理想的模塊化機(jī)制;理想的模塊化機(jī)制; . 可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu); . 良好的獨(dú)立編譯機(jī)制。良好的獨(dú)立編譯機(jī)制。4. 實(shí)用標(biāo)準(zhǔn):實(shí)用標(biāo)準(zhǔn): . 系統(tǒng)用戶的要求;系統(tǒng)用戶的要求; . 可以使用的編譯程序;可以使用的編譯程序; . 可以得到的軟件工具;可以得到的軟件工具; . 工程規(guī)模;工程規(guī)模; . 程序員的知識(shí);程序員的知識(shí); .
5、 軟件可移植性要求軟件可移植性要求 . 軟件的應(yīng)用領(lǐng)域軟件的應(yīng)用領(lǐng)域 好程序的一個(gè)重要標(biāo)準(zhǔn)是:好程序的一個(gè)重要標(biāo)準(zhǔn)是: 源程序代碼的邏輯簡(jiǎn)明清晰、易讀易懂源程序代碼的邏輯簡(jiǎn)明清晰、易讀易懂 1. 程序內(nèi)部的文檔程序內(nèi)部的文檔 2. 數(shù)據(jù)說明數(shù)據(jù)說明 3. 語句構(gòu)造語句構(gòu)造 4. 輸入輸出輸入輸出 5. 效率效率7.1.2 編碼風(fēng)格編碼風(fēng)格 表面看來,軟件測(cè)試的目的與軟件工程所有其他表面看來,軟件測(cè)試的目的與軟件工程所有其他 階段的目的都相反;階段的目的都相反; 測(cè)試階段的根本目標(biāo):是盡可能多地發(fā)現(xiàn)并排除測(cè)試階段的根本目標(biāo):是盡可能多地發(fā)現(xiàn)并排除 軟件中潛藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的軟件系軟件中
6、潛藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的軟件系 統(tǒng)交給用戶使用;統(tǒng)交給用戶使用; 但是,僅就測(cè)試本身而言,它的目標(biāo)可能和許多但是,僅就測(cè)試本身而言,它的目標(biāo)可能和許多 人原來設(shè)想的很不相同。人原來設(shè)想的很不相同。7.2 軟件測(cè)試基礎(chǔ)軟件測(cè)試基礎(chǔ)g.myers給出了關(guān)于測(cè)試的一些規(guī)則,這些規(guī)則給出了關(guān)于測(cè)試的一些規(guī)則,這些規(guī)則也可以看作是測(cè)試的目標(biāo)或定義:也可以看作是測(cè)試的目標(biāo)或定義:1) 測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的 過程;過程;2) 好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā) 現(xiàn)的錯(cuò)誤的測(cè)試方案;現(xiàn)的錯(cuò)誤的測(cè)試方案;3)
7、 成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò) 誤的測(cè)試。誤的測(cè)試。7.2.1 軟件測(cè)試的目標(biāo)軟件測(cè)試的目標(biāo)為了能設(shè)計(jì)出有效的測(cè)試方案,軟件工程師必須深入理解為了能設(shè)計(jì)出有效的測(cè)試方案,軟件工程師必須深入理解并正確運(yùn)用指導(dǎo)軟件測(cè)試的基本準(zhǔn)則。并正確運(yùn)用指導(dǎo)軟件測(cè)試的基本準(zhǔn)則。1.所有測(cè)試都應(yīng)該能追溯到用戶需求;所有測(cè)試都應(yīng)該能追溯到用戶需求;2.應(yīng)該遠(yuǎn)在測(cè)試開始之前就制定出測(cè)試計(jì)劃;應(yīng)該遠(yuǎn)在測(cè)試開始之前就制定出測(cè)試計(jì)劃;3.把把pareto原理應(yīng)用到軟件測(cè)試中;原理應(yīng)用到軟件測(cè)試中; pareto原理:測(cè)試發(fā)現(xiàn)的錯(cuò)誤中的原理:測(cè)試發(fā)現(xiàn)的錯(cuò)誤中的80%很可能是很可
8、能是 由程序中由程序中20%的模塊造成的;的模塊造成的;4.應(yīng)該從應(yīng)該從“小規(guī)模小規(guī)?!睖y(cè)試開始,并逐步進(jìn)行測(cè)試開始,并逐步進(jìn)行“大規(guī)模大規(guī)模”測(cè)測(cè)試;試; 5. 窮舉測(cè)試是不可能的;窮舉測(cè)試是不可能的;6. 為了達(dá)到最佳的測(cè)試效果,應(yīng)該由獨(dú)立的第三方從事為了達(dá)到最佳的測(cè)試效果,應(yīng)該由獨(dú)立的第三方從事 測(cè)試工作。測(cè)試工作。7.2.2 軟件測(cè)試準(zhǔn)則軟件測(cè)試準(zhǔn)則1. 白盒測(cè)試法白盒測(cè)試法 是可以把程序看成裝在一個(gè)透明的白盒子里,測(cè)是可以把程序看成裝在一個(gè)透明的白盒子里,測(cè) 試者完全知道程序的結(jié)構(gòu)和處理算法。這種方法試者完全知道程序的結(jié)構(gòu)和處理算法。這種方法 按照程序內(nèi)部的邏輯測(cè)試程序,檢測(cè)程序中的
9、主按照程序內(nèi)部的邏輯測(cè)試程序,檢測(cè)程序中的主 要執(zhí)行通路是否都能按預(yù)定要求正確工作。要執(zhí)行通路是否都能按預(yù)定要求正確工作。 是知道產(chǎn)品的內(nèi)部工作過程,可以通過測(cè)試來檢是知道產(chǎn)品的內(nèi)部工作過程,可以通過測(cè)試來檢 驗(yàn)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說明書的規(guī)定正常驗(yàn)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說明書的規(guī)定正常 進(jìn)行。進(jìn)行。 因此,因此,白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試。白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試。7.2.3 測(cè)試方法測(cè)試方法2. 黑盒測(cè)試法黑盒測(cè)試法 是是把程序看作一個(gè)黑盒子,完全不考慮程序的把程序看作一個(gè)黑盒子,完全不考慮程序的 內(nèi)部結(jié)構(gòu)和處理過程。也就是說,黑盒測(cè)試是內(nèi)部結(jié)構(gòu)和處理過程。也就是說,黑盒測(cè)試是 在程序接口
10、進(jìn)行的測(cè)試,它只檢查程序功能是在程序接口進(jìn)行的測(cè)試,它只檢查程序功能是 否能按照規(guī)格說明書的規(guī)定正常使用,程序是否能按照規(guī)格說明書的規(guī)定正常使用,程序是 否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)并產(chǎn)生正確的輸出信否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)并產(chǎn)生正確的輸出信 息,程序運(yùn)行過程中能否保持外部信息的完整息,程序運(yùn)行過程中能否保持外部信息的完整 性。性。 是已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過是已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過 測(cè)試來檢驗(yàn)是否每個(gè)功能都能正常使用。測(cè)試來檢驗(yàn)是否每個(gè)功能都能正常使用。 因此,因此,黑盒測(cè)試又稱為功能測(cè)試。黑盒測(cè)試又稱為功能測(cè)試。大型軟件系統(tǒng)的測(cè)試過程基本上由下述幾個(gè)步驟大型軟件系統(tǒng)的
11、測(cè)試過程基本上由下述幾個(gè)步驟 組成:組成:1. 模塊測(cè)試模塊測(cè)試 模塊測(cè)試的目的是保證每個(gè)模塊作為一個(gè)單元能模塊測(cè)試的目的是保證每個(gè)模塊作為一個(gè)單元能 正確運(yùn)行,所以模塊測(cè)試通常又稱為單元測(cè)試。正確運(yùn)行,所以模塊測(cè)試通常又稱為單元測(cè)試。 在這個(gè)測(cè)試步驟中所發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)在這個(gè)測(cè)試步驟中所發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè) 計(jì)的錯(cuò)誤。計(jì)的錯(cuò)誤。7.2.4 測(cè)試步驟測(cè)試步驟2. 子系統(tǒng)測(cè)試子系統(tǒng)測(cè)試 子系統(tǒng)測(cè)試是把經(jīng)過單元測(cè)試的模塊放在一起形子系統(tǒng)測(cè)試是把經(jīng)過單元測(cè)試的模塊放在一起形 成一個(gè)子系統(tǒng)來測(cè)試。成一個(gè)子系統(tǒng)來測(cè)試。3. 系統(tǒng)測(cè)試系統(tǒng)測(cè)試 系統(tǒng)測(cè)試是把經(jīng)過測(cè)試的子系統(tǒng)裝配成一個(gè)完整系統(tǒng)測(cè)試
12、是把經(jīng)過測(cè)試的子系統(tǒng)裝配成一個(gè)完整 的系統(tǒng)來測(cè)試。的系統(tǒng)來測(cè)試。4. 驗(yàn)收測(cè)試驗(yàn)收測(cè)試 驗(yàn)收測(cè)試把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測(cè)試;驗(yàn)收測(cè)試把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測(cè)試; 驗(yàn)收測(cè)試的目的是驗(yàn)證系統(tǒng)確實(shí)能夠滿足用戶的驗(yàn)收測(cè)試的目的是驗(yàn)證系統(tǒng)確實(shí)能夠滿足用戶的 需要,在這個(gè)測(cè)試步驟中發(fā)現(xiàn)的往往是系統(tǒng)需求需要,在這個(gè)測(cè)試步驟中發(fā)現(xiàn)的往往是系統(tǒng)需求 說明書中的錯(cuò)誤。驗(yàn)收測(cè)試也稱為確認(rèn)測(cè)試。說明書中的錯(cuò)誤。驗(yàn)收測(cè)試也稱為確認(rèn)測(cè)試。5. 平行運(yùn)行平行運(yùn)行 平行運(yùn)行:就是同時(shí)運(yùn)行新開發(fā)出來的系統(tǒng)和將平行運(yùn)行:就是同時(shí)運(yùn)行新開發(fā)出來的系統(tǒng)和將 被它取代的舊系統(tǒng),以便比較新舊兩個(gè)系統(tǒng)的處被它取代的舊系統(tǒng),以便
13、比較新舊兩個(gè)系統(tǒng)的處 理結(jié)果。這樣做的具體目的有如下幾點(diǎn):理結(jié)果。這樣做的具體目的有如下幾點(diǎn):(1) 可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(xiǎn);可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(xiǎn);(2) 用戶能有一段熟悉新系統(tǒng)的時(shí)間;用戶能有一段熟悉新系統(tǒng)的時(shí)間;(3) 可以驗(yàn)證用戶指南和使用手冊(cè)之類的文檔;可以驗(yàn)證用戶指南和使用手冊(cè)之類的文檔;(4) 能夠以準(zhǔn)生產(chǎn)模式對(duì)新系統(tǒng)進(jìn)行全負(fù)荷測(cè)試,能夠以準(zhǔn)生產(chǎn)模式對(duì)新系統(tǒng)進(jìn)行全負(fù)荷測(cè)試, 可以用測(cè)試結(jié)果驗(yàn)證性能指標(biāo)??梢杂脺y(cè)試結(jié)果驗(yàn)證性能指標(biāo)。 測(cè)試階段的輸入信息有兩類:測(cè)試階段的輸入信息有兩類: (1) 軟件配置:軟件配置: 包括需求說明書、設(shè)計(jì)說明書和源
14、程序清單等;包括需求說明書、設(shè)計(jì)說明書和源程序清單等; (2) 測(cè)試配置:測(cè)試配置: 包括測(cè)試計(jì)劃和測(cè)試方案。包括測(cè)試計(jì)劃和測(cè)試方案。 所謂測(cè)試方案不僅僅是測(cè)試時(shí)使用的輸入數(shù)據(jù),所謂測(cè)試方案不僅僅是測(cè)試時(shí)使用的輸入數(shù)據(jù), 還應(yīng)該包括每組輸入數(shù)據(jù)預(yù)定要檢驗(yàn)的功能,以還應(yīng)該包括每組輸入數(shù)據(jù)預(yù)定要檢驗(yàn)的功能,以 及每組輸入數(shù)據(jù)預(yù)期應(yīng)該得到的正確輸出。及每組輸入數(shù)據(jù)預(yù)期應(yīng)該得到的正確輸出。7.2.5 測(cè)試階段的信息流測(cè)試階段的信息流圖圖1 測(cè)試階段的信息流測(cè)試階段的信息流 單元測(cè)試又稱為模塊測(cè)試,集中檢測(cè)軟件設(shè)計(jì)單元測(cè)試又稱為模塊測(cè)試,集中檢測(cè)軟件設(shè)計(jì) 的最小單元的最小單元模塊;通常,單元測(cè)試和編碼模
15、塊;通常,單元測(cè)試和編碼 軟件屬于過程的同一個(gè)階段。軟件屬于過程的同一個(gè)階段。 在編寫出源程序代碼并通過了編譯程序的語法在編寫出源程序代碼并通過了編譯程序的語法 檢查之后,就可以對(duì)重要的執(zhí)行通路進(jìn)行測(cè)試,檢查之后,就可以對(duì)重要的執(zhí)行通路進(jìn)行測(cè)試, 以便發(fā)現(xiàn)模塊內(nèi)部的錯(cuò)誤。以便發(fā)現(xiàn)模塊內(nèi)部的錯(cuò)誤。 單元測(cè)試主要使用白盒測(cè)試技術(shù),而且對(duì)多個(gè)單元測(cè)試主要使用白盒測(cè)試技術(shù),而且對(duì)多個(gè) 模塊的測(cè)試可以并行地進(jìn)行。模塊的測(cè)試可以并行地進(jìn)行。 可以應(yīng)用人工測(cè)試和計(jì)算機(jī)測(cè)試這樣兩種不同可以應(yīng)用人工測(cè)試和計(jì)算機(jī)測(cè)試這樣兩種不同 類型的測(cè)試方法,完成單元測(cè)試工作。類型的測(cè)試方法,完成單元測(cè)試工作。7.3 單元測(cè)試
16、單元測(cè)試1. 模塊接口模塊接口 首先應(yīng)該對(duì)通過模塊接口的數(shù)據(jù)流進(jìn)行測(cè)試,如首先應(yīng)該對(duì)通過模塊接口的數(shù)據(jù)流進(jìn)行測(cè)試,如 果數(shù)據(jù)不能正確地進(jìn)出,所有其他測(cè)試都是不切果數(shù)據(jù)不能正確地進(jìn)出,所有其他測(cè)試都是不切 實(shí)際的。實(shí)際的。2. 局部數(shù)據(jù)結(jié)構(gòu)局部數(shù)據(jù)結(jié)構(gòu) 對(duì)于模塊來說,局部數(shù)據(jù)結(jié)構(gòu)是常見的錯(cuò)誤來源。對(duì)于模塊來說,局部數(shù)據(jù)結(jié)構(gòu)是常見的錯(cuò)誤來源。 應(yīng)該仔細(xì)設(shè)計(jì)測(cè)試方案,以便發(fā)現(xiàn)局部數(shù)據(jù)說明、應(yīng)該仔細(xì)設(shè)計(jì)測(cè)試方案,以便發(fā)現(xiàn)局部數(shù)據(jù)說明、 初始化、默認(rèn)值等方面的錯(cuò)誤。初始化、默認(rèn)值等方面的錯(cuò)誤。7.3.1 測(cè)試重點(diǎn)測(cè)試重點(diǎn)3. 重要的執(zhí)行通路重要的執(zhí)行通路 由于通常不可能進(jìn)行窮盡測(cè)試,因此,在單元由于通常
17、不可能進(jìn)行窮盡測(cè)試,因此,在單元測(cè)測(cè) 試期間選擇最有代表性、最可能發(fā)現(xiàn)錯(cuò)誤的執(zhí)行試期間選擇最有代表性、最可能發(fā)現(xiàn)錯(cuò)誤的執(zhí)行 通路進(jìn)行測(cè)試十分關(guān)鍵;通路進(jìn)行測(cè)試十分關(guān)鍵; 應(yīng)該設(shè)計(jì)測(cè)試方案用來發(fā)現(xiàn)由于錯(cuò)誤的計(jì)算、應(yīng)該設(shè)計(jì)測(cè)試方案用來發(fā)現(xiàn)由于錯(cuò)誤的計(jì)算、不不 正確的比較或不適當(dāng)?shù)目刂屏鞫斐傻腻e(cuò)誤。正確的比較或不適當(dāng)?shù)目刂屏鞫斐傻腻e(cuò)誤。4. 出錯(cuò)處理通路出錯(cuò)處理通路 好的設(shè)計(jì)應(yīng)該能預(yù)見出現(xiàn)錯(cuò)誤的條件,并且設(shè)置好的設(shè)計(jì)應(yīng)該能預(yù)見出現(xiàn)錯(cuò)誤的條件,并且設(shè)置 適當(dāng)?shù)奶幚礤e(cuò)誤的通路,以便在真的出現(xiàn)錯(cuò)誤時(shí)適當(dāng)?shù)奶幚礤e(cuò)誤的通路,以便在真的出現(xiàn)錯(cuò)誤時(shí) 執(zhí)行相應(yīng)的出錯(cuò)處理通路或干凈地結(jié)束處理。執(zhí)行相應(yīng)的出錯(cuò)處理通
18、路或干凈地結(jié)束處理。 不僅應(yīng)該在程序中包含出錯(cuò)處理通路,而且應(yīng)該不僅應(yīng)該在程序中包含出錯(cuò)處理通路,而且應(yīng)該 認(rèn)真測(cè)試這種通路。認(rèn)真測(cè)試這種通路。5. 邊界條件邊界條件 邊界測(cè)試是單元測(cè)試中最后的也可能是最重要邊界測(cè)試是單元測(cè)試中最后的也可能是最重要 的任務(wù)。的任務(wù)。 軟件常常在它的邊界上失效,故使用剛好小于、軟件常常在它的邊界上失效,故使用剛好小于、 剛好等于和剛好大于最大值或最小值的數(shù)據(jù)結(jié)剛好等于和剛好大于最大值或最小值的數(shù)據(jù)結(jié) 構(gòu)、控制量和數(shù)據(jù)值的測(cè)試方案,非??赡馨l(fā)構(gòu)、控制量和數(shù)據(jù)值的測(cè)試方案,非??赡馨l(fā) 現(xiàn)軟件中的錯(cuò)誤。現(xiàn)軟件中的錯(cuò)誤。 人工測(cè)試源程序可以由編寫者本人非正式地進(jìn)行,人工
19、測(cè)試源程序可以由編寫者本人非正式地進(jìn)行, 也可以由審查小組正式進(jìn)行。后者稱為代碼審查。也可以由審查小組正式進(jìn)行。后者稱為代碼審查。 審查小組最好由下述審查小組最好由下述 4 人組成:人組成:(1) 組長;組長;(2) 程序的設(shè)計(jì)者;程序的設(shè)計(jì)者;(3) 程序的編寫者;程序的編寫者;(4) 程序的測(cè)試者。程序的測(cè)試者。7.3.2 代碼審查代碼審查 審查方法:審查方法: 方法方法1: 小組成員應(yīng)該先研究設(shè)計(jì)說明書,力求理解這小組成員應(yīng)該先研究設(shè)計(jì)說明書,力求理解這 個(gè)設(shè)計(jì)。個(gè)設(shè)計(jì)。 為了幫助理解,可以先由設(shè)計(jì)者扼要地介紹他為了幫助理解,可以先由設(shè)計(jì)者扼要地介紹他 的設(shè)計(jì)。的設(shè)計(jì)。 再由程序的編寫者
20、解釋他是怎樣用程序代碼實(shí)再由程序的編寫者解釋他是怎樣用程序代碼實(shí) 現(xiàn)這個(gè)設(shè)計(jì)的,通常是逐個(gè)語句地講述程序的現(xiàn)這個(gè)設(shè)計(jì)的,通常是逐個(gè)語句地講述程序的 邏輯。邏輯。 對(duì)照程序設(shè)計(jì)常見錯(cuò)誤清單,分析審查這個(gè)程對(duì)照程序設(shè)計(jì)常見錯(cuò)誤清單,分析審查這個(gè)程 序。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí)由組長記錄下來,審查會(huì)繼序。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí)由組長記錄下來,審查會(huì)繼 續(xù)進(jìn)行。續(xù)進(jìn)行。 方法方法2: 稱為預(yù)排:稱為預(yù)排: 由一個(gè)人扮演由一個(gè)人扮演“測(cè)試者測(cè)試者”,其他人扮演,其他人扮演“計(jì)算計(jì)算機(jī)機(jī)”。 會(huì)前測(cè)試者準(zhǔn)備好測(cè)試方案,會(huì)上由扮演計(jì)算機(jī)會(huì)前測(cè)試者準(zhǔn)備好測(cè)試方案,會(huì)上由扮演計(jì)算機(jī) 的成員模擬計(jì)算機(jī)執(zhí)行被測(cè)試的程序。的成員模擬計(jì)算機(jī)
21、執(zhí)行被測(cè)試的程序。 在大多數(shù)情況下,通過向程序員提出關(guān)于他的程在大多數(shù)情況下,通過向程序員提出關(guān)于他的程 序的邏輯和他編寫程序時(shí)所做的假設(shè)的疑問,可序的邏輯和他編寫程序時(shí)所做的假設(shè)的疑問,可 以發(fā)現(xiàn)的錯(cuò)誤比由測(cè)試方案直接發(fā)現(xiàn)的錯(cuò)誤多。以發(fā)現(xiàn)的錯(cuò)誤比由測(cè)試方案直接發(fā)現(xiàn)的錯(cuò)誤多。 模塊不是一個(gè)獨(dú)立的程序,因此必須為每個(gè)單元模塊不是一個(gè)獨(dú)立的程序,因此必須為每個(gè)單元 測(cè)試開發(fā)驅(qū)動(dòng)軟件和測(cè)試開發(fā)驅(qū)動(dòng)軟件和(或或)存根軟件。存根軟件。 驅(qū)動(dòng)程序:就是一個(gè)驅(qū)動(dòng)程序:就是一個(gè)“主程序主程序”,它接收測(cè)試數(shù),它接收測(cè)試數(shù) 據(jù),把這些數(shù)據(jù)傳送給被測(cè)試的模塊,并且印出據(jù),把這些數(shù)據(jù)傳送給被測(cè)試的模塊,并且印出 有
22、關(guān)的結(jié)果。有關(guān)的結(jié)果。 存根程序代替被測(cè)試的模塊所調(diào)用的模塊。因此存根程序代替被測(cè)試的模塊所調(diào)用的模塊。因此 存根程序也可以稱為存根程序也可以稱為“虛擬子程序虛擬子程序”。7.3.3 計(jì)算機(jī)測(cè)試計(jì)算機(jī)測(cè)試圖圖7.2 正文加工系統(tǒng)的層次圖正文加工系統(tǒng)的層次圖. test stub(*測(cè)試正文編輯模塊用的存根程序測(cè)試正文編輯模塊用的存根程序*)初始化;初始化;輸出信息輸出信息“進(jìn)入了正文編輯程序進(jìn)入了正文編輯程序”;輸出輸出“輸入的控制信息是輸入的控制信息是”cfunct;輸出緩沖區(qū)中的字符串;輸出緩沖區(qū)中的字符串;if cfunct=changethen把緩沖區(qū)中第二個(gè)字改為把緩沖區(qū)中第二個(gè)字改
23、為*else在緩沖區(qū)的尾部加在緩沖區(qū)的尾部加?endif;輸出緩沖區(qū)中的新字符串;輸出緩沖區(qū)中的新字符串;end test stub. test driver(*測(cè)試正文編輯模塊用的驅(qū)動(dòng)程序測(cè)試正文編輯模塊用的驅(qū)動(dòng)程序*)說明長度為說明長度為2500個(gè)字符的一個(gè)緩沖區(qū);個(gè)字符的一個(gè)緩沖區(qū);把把cfunct置為希望測(cè)試的狀態(tài);置為希望測(cè)試的狀態(tài);輸入字符串;輸入字符串;調(diào)用正文編輯模塊;調(diào)用正文編輯模塊;停止或再次初啟;停止或再次初啟;end test driver 集成測(cè)試包括子系統(tǒng)測(cè)試和系統(tǒng)測(cè)試;集成測(cè)試包括子系統(tǒng)測(cè)試和系統(tǒng)測(cè)試; 集成測(cè)試是測(cè)試和組裝軟件的系統(tǒng)化技術(shù),主要集成測(cè)試是測(cè)試和組
24、裝軟件的系統(tǒng)化技術(shù),主要 目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。 由模塊組裝成程序時(shí)有兩種方法:由模塊組裝成程序時(shí)有兩種方法: 1.非漸增式測(cè)試方法非漸增式測(cè)試方法 2.漸增式測(cè)試方法漸增式測(cè)試方法 3.比較比較7.4 集成測(cè)試集成測(cè)試 當(dāng)使用漸增方式把模塊結(jié)合到程序中去時(shí),有自頂向下和當(dāng)使用漸增方式把模塊結(jié)合到程序中去時(shí),有自頂向下和 自底向上兩種集成策略。自底向上兩種集成策略。 7.4.1 自頂向下集成自頂向下集成 思想:思想: 從主控制模塊開始,沿著程序的控制層次向下移動(dòng),逐漸從主控制模塊開始,沿著程序的控制層次向下移動(dòng),逐漸 把各個(gè)模塊結(jié)合起來。在把附屬于(及最終附屬
25、于)主控把各個(gè)模塊結(jié)合起來。在把附屬于(及最終附屬于)主控 制模塊的那些模塊組裝到程序結(jié)構(gòu)中去時(shí),或者使用深度制模塊的那些模塊組裝到程序結(jié)構(gòu)中去時(shí),或者使用深度 優(yōu)先的策略,或者使用寬度優(yōu)先的策略。優(yōu)先的策略,或者使用寬度優(yōu)先的策略。 深度優(yōu)先的結(jié)合方法:先組裝在軟件結(jié)構(gòu)的一條主控制通深度優(yōu)先的結(jié)合方法:先組裝在軟件結(jié)構(gòu)的一條主控制通 路上的所有模塊。路上的所有模塊。 而寬度優(yōu)先的結(jié)合方法:是沿軟件結(jié)構(gòu)水平地移動(dòng),把處而寬度優(yōu)先的結(jié)合方法:是沿軟件結(jié)構(gòu)水平地移動(dòng),把處 于同一個(gè)控制層次上的所有模塊組裝起來。于同一個(gè)控制層次上的所有模塊組裝起來。圖圖7.3 自頂向下結(jié)合自頂向下結(jié)合 把模塊結(jié)合進(jìn)
26、軟件結(jié)構(gòu)的具體過程由下述把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的具體過程由下述4個(gè)步個(gè)步 驟完成:驟完成: 1. 對(duì)主控制模塊進(jìn)行測(cè)試,測(cè)試時(shí)用存根程序代替對(duì)主控制模塊進(jìn)行測(cè)試,測(cè)試時(shí)用存根程序代替 所有直接附屬于主控制模塊的模塊;所有直接附屬于主控制模塊的模塊; 2. 根據(jù)選定的結(jié)合策略根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先深度優(yōu)先或?qū)挾葍?yōu)先),每,每 次用一個(gè)實(shí)際模塊代換一個(gè)存根程序;次用一個(gè)實(shí)際模塊代換一個(gè)存根程序; 3. 在結(jié)合進(jìn)一個(gè)模塊的同時(shí)進(jìn)行測(cè)試;在結(jié)合進(jìn)一個(gè)模塊的同時(shí)進(jìn)行測(cè)試; 4. 為了保證加入模塊沒有引進(jìn)新的錯(cuò)誤,可能需要為了保證加入模塊沒有引進(jìn)新的錯(cuò)誤,可能需要 進(jìn)行回歸測(cè)試進(jìn)行回歸測(cè)試(
27、即,全部或部分地重復(fù)以前做過即,全部或部分地重復(fù)以前做過 的測(cè)試的測(cè)試)。 從第二步開始不斷地重復(fù)進(jìn)行上述過程,直到構(gòu)從第二步開始不斷地重復(fù)進(jìn)行上述過程,直到構(gòu) 造起完整的軟件結(jié)構(gòu)為止。造起完整的軟件結(jié)構(gòu)為止。 自頂向下集成的優(yōu)點(diǎn):自頂向下集成的優(yōu)點(diǎn): 自頂向下的結(jié)合策略能夠在測(cè)試的早期對(duì)主要的控制或關(guān)自頂向下的結(jié)合策略能夠在測(cè)試的早期對(duì)主要的控制或關(guān) 鍵的抉擇進(jìn)行檢驗(yàn)。如果主要控制確實(shí)有問題,早期認(rèn)識(shí)鍵的抉擇進(jìn)行檢驗(yàn)。如果主要控制確實(shí)有問題,早期認(rèn)識(shí) 到這類問題是很有好處的,可以及早想辦法解決。到這類問題是很有好處的,可以及早想辦法解決。 自頂向下集成方法的問題:自頂向下集成方法的問題: 最
28、常見的是:為了充分地測(cè)試軟件系統(tǒng)的較高層次,需要最常見的是:為了充分地測(cè)試軟件系統(tǒng)的較高層次,需要 在較低層次上的處理。在較低層次上的處理。 解決方法:解決方法: 1. 把許多測(cè)試推遲到用真實(shí)模塊代替了存根程序以后再進(jìn)行;把許多測(cè)試推遲到用真實(shí)模塊代替了存根程序以后再進(jìn)行; 這種方法失去了在特定的測(cè)試和組裝特定的模塊之間的精這種方法失去了在特定的測(cè)試和組裝特定的模塊之間的精 確對(duì)應(yīng)關(guān)系,這可能導(dǎo)致在確定錯(cuò)誤的位置和原因時(shí)發(fā)生確對(duì)應(yīng)關(guān)系,這可能導(dǎo)致在確定錯(cuò)誤的位置和原因時(shí)發(fā)生 困難。困難。 2. 從層次系統(tǒng)的底部向上組裝軟件。從層次系統(tǒng)的底部向上組裝軟件。自底向上測(cè)試從軟件結(jié)構(gòu)最低層的模塊開始組
29、裝和測(cè)試。自底向上測(cè)試從軟件結(jié)構(gòu)最低層的模塊開始組裝和測(cè)試。自底向上測(cè)試不需要存根程序。自底向上測(cè)試不需要存根程序。自底向上的結(jié)合策略:自底向上的結(jié)合策略: 1. 把低層模塊組合成實(shí)現(xiàn)某個(gè)特定的軟件子功能的族;把低層模塊組合成實(shí)現(xiàn)某個(gè)特定的軟件子功能的族; 2. 寫一個(gè)驅(qū)動(dòng)程序?qū)懸粋€(gè)驅(qū)動(dòng)程序(是用于測(cè)試的控制程序是用于測(cè)試的控制程序),協(xié)調(diào)測(cè)試數(shù)據(jù),協(xié)調(diào)測(cè)試數(shù)據(jù)的的 輸入和輸出;輸入和輸出; 3. 對(duì)由模塊組成的子功能族進(jìn)行測(cè)試;對(duì)由模塊組成的子功能族進(jìn)行測(cè)試; 4. 去掉驅(qū)動(dòng)程序,沿軟件結(jié)構(gòu)自下向上移動(dòng),把子功能族組去掉驅(qū)動(dòng)程序,沿軟件結(jié)構(gòu)自下向上移動(dòng),把子功能族組 合起來形成更大的子功能族
30、。合起來形成更大的子功能族。上述第二步到第四步實(shí)質(zhì)上構(gòu)成了一個(gè)循環(huán)。上述第二步到第四步實(shí)質(zhì)上構(gòu)成了一個(gè)循環(huán)。7.4.2 自底向上集成自底向上集成圖圖7.4 自底向上結(jié)合自底向上結(jié)合 自頂向下測(cè)試方法的主要優(yōu)點(diǎn)是:自頂向下測(cè)試方法的主要優(yōu)點(diǎn)是: 1. 不需要測(cè)試驅(qū)動(dòng)程序;不需要測(cè)試驅(qū)動(dòng)程序; 2. 能夠在測(cè)試階段的早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能夠在測(cè)試階段的早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功 能,而且能在早期發(fā)現(xiàn)上層模塊的接口錯(cuò)誤。能,而且能在早期發(fā)現(xiàn)上層模塊的接口錯(cuò)誤。 自頂向下測(cè)試方法的主要缺點(diǎn)是:自頂向下測(cè)試方法的主要缺點(diǎn)是: 1. 需要存根程序,可能遇到與此相聯(lián)系的測(cè)試?yán)щy;需要存根程序,可能遇到
31、與此相聯(lián)系的測(cè)試?yán)щy; 2. 低層關(guān)鍵模塊中的錯(cuò)誤發(fā)現(xiàn)較晚,低層關(guān)鍵模塊中的錯(cuò)誤發(fā)現(xiàn)較晚, 3. 而且用這種方法在早期不能充分展開人力。而且用這種方法在早期不能充分展開人力??梢钥闯?,自底向上測(cè)試方法的優(yōu)缺點(diǎn)與自頂向下測(cè)可以看出,自底向上測(cè)試方法的優(yōu)缺點(diǎn)與自頂向下測(cè)試方法的優(yōu)缺點(diǎn)剛好相反。試方法的優(yōu)缺點(diǎn)剛好相反。7.4.3 不同集成測(cè)試策略的比較不同集成測(cè)試策略的比較 混合策略:混合策略: 1. 改進(jìn)的自頂向下測(cè)試方法改進(jìn)的自頂向下測(cè)試方法 基本上使用自頂向下的測(cè)試方法,但是在早期使基本上使用自頂向下的測(cè)試方法,但是在早期使 用自底向上的方法測(cè)試軟件中的少數(shù)關(guān)鍵模塊。用自底向上的方法測(cè)試軟件中
32、的少數(shù)關(guān)鍵模塊。 它的缺點(diǎn)也比自頂向下方法多一條,即測(cè)試關(guān)鍵它的缺點(diǎn)也比自頂向下方法多一條,即測(cè)試關(guān)鍵 模塊時(shí)需要驅(qū)動(dòng)程序。模塊時(shí)需要驅(qū)動(dòng)程序。 2. 混合法混合法 對(duì)軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對(duì)軟對(duì)軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對(duì)軟 件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。 當(dāng)被測(cè)試的軟件中關(guān)鍵模塊比較多時(shí),這種混合當(dāng)被測(cè)試的軟件中關(guān)鍵模塊比較多時(shí),這種混合 法可能是最好的折衷方法。法可能是最好的折衷方法。 回歸測(cè)試:回歸測(cè)試: 是指重新執(zhí)行已經(jīng)做過的測(cè)試的某個(gè)子集,以保是指重新執(zhí)行已經(jīng)做過的測(cè)試的某個(gè)子集,以保 證上述這些變化沒有帶來
33、非預(yù)期的副作用。證上述這些變化沒有帶來非預(yù)期的副作用。 更廣義地說,回歸測(cè)試就是用于保證由于調(diào)試或更廣義地說,回歸測(cè)試就是用于保證由于調(diào)試或 其他原因引起的變化,不會(huì)導(dǎo)致非預(yù)期的軟件行其他原因引起的變化,不會(huì)導(dǎo)致非預(yù)期的軟件行 為或額外錯(cuò)誤的測(cè)試活動(dòng)。為或額外錯(cuò)誤的測(cè)試活動(dòng)。7.4.4 回歸測(cè)試回歸測(cè)試 確認(rèn)測(cè)試:也稱為驗(yàn)收測(cè)試,它的目標(biāo)是驗(yàn)證軟確認(rèn)測(cè)試:也稱為驗(yàn)收測(cè)試,它的目標(biāo)是驗(yàn)證軟 件的有效性。件的有效性。 驗(yàn)證:指的是保證軟件正確地實(shí)現(xiàn)了某個(gè)特定要驗(yàn)證:指的是保證軟件正確地實(shí)現(xiàn)了某個(gè)特定要 求的一系列活動(dòng),求的一系列活動(dòng), 確認(rèn):指的是為了保證軟件確實(shí)滿足了用戶需求確認(rèn):指的是為了保證
34、軟件確實(shí)滿足了用戶需求 而進(jìn)行的一系列活動(dòng)。而進(jìn)行的一系列活動(dòng)。 軟件有效性的一個(gè)簡(jiǎn)單定義是:軟件有效性的一個(gè)簡(jiǎn)單定義是: 如果軟件的功能如果軟件的功能 和性能如同用戶所和性能如同用戶所合理期待合理期待的那樣,軟件就是有的那樣,軟件就是有 效的。效的。7.5 確認(rèn)測(cè)試確認(rèn)測(cè)試 確認(rèn)測(cè)試必須有用戶積極參與,或者以用戶為主進(jìn)行;確認(rèn)測(cè)試必須有用戶積極參與,或者以用戶為主進(jìn)行; 確認(rèn)測(cè)試通常使用黑盒測(cè)試法;確認(rèn)測(cè)試通常使用黑盒測(cè)試法; 應(yīng)該仔細(xì)設(shè)計(jì)測(cè)試計(jì)劃和測(cè)試過程,測(cè)試計(jì)劃包括要進(jìn)行應(yīng)該仔細(xì)設(shè)計(jì)測(cè)試計(jì)劃和測(cè)試過程,測(cè)試計(jì)劃包括要進(jìn)行 的測(cè)試的種類及進(jìn)度安排,測(cè)試過程規(guī)定了用來檢測(cè)軟件的測(cè)試的種類及
35、進(jìn)度安排,測(cè)試過程規(guī)定了用來檢測(cè)軟件 是否與需求一致的測(cè)試方案。通過測(cè)試和調(diào)試要保證軟件是否與需求一致的測(cè)試方案。通過測(cè)試和調(diào)試要保證軟件 能滿足所有功能要求;能達(dá)到每個(gè)性能要求,文檔資料是能滿足所有功能要求;能達(dá)到每個(gè)性能要求,文檔資料是 準(zhǔn)確而完整的,此外,還應(yīng)該保證軟件能滿足其他預(yù)定的準(zhǔn)確而完整的,此外,還應(yīng)該保證軟件能滿足其他預(yù)定的 要求。要求。 確認(rèn)測(cè)試有下述兩種可能的結(jié)果:確認(rèn)測(cè)試有下述兩種可能的結(jié)果: 1. 功能和性能與用戶要求一致,軟件是可以接受的;功能和性能與用戶要求一致,軟件是可以接受的; 2. 功能和性能與用戶要求有差距。功能和性能與用戶要求有差距。7.5.1 確認(rèn)測(cè)試的
36、范圍確認(rèn)測(cè)試的范圍 確認(rèn)測(cè)試的一個(gè)重要內(nèi)容是復(fù)查軟件配置。確認(rèn)測(cè)試的一個(gè)重要內(nèi)容是復(fù)查軟件配置。 復(fù)查的目的是保證軟件配置的所有成分都齊全,質(zhì)量符復(fù)查的目的是保證軟件配置的所有成分都齊全,質(zhì)量符 合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必 須的細(xì)節(jié),而且已經(jīng)編好目錄。須的細(xì)節(jié),而且已經(jīng)編好目錄。7.5.3 alpha和和beta測(cè)試測(cè)試 如果軟件是專為某個(gè)客戶開發(fā)的,可以進(jìn)行一系列驗(yàn)收如果軟件是專為某個(gè)客戶開發(fā)的,可以進(jìn)行一系列驗(yàn)收 測(cè)試,以便用戶確認(rèn)所有需求都得到滿足。測(cè)試,以便用戶確認(rèn)所有需求都得到滿足。 如果一個(gè)軟件是為許多客戶開發(fā)的
37、,在這種情況下,絕如果一個(gè)軟件是為許多客戶開發(fā)的,在這種情況下,絕 大多數(shù)軟件開發(fā)商都使用被稱為大多數(shù)軟件開發(fā)商都使用被稱為alpha測(cè)試和測(cè)試和beta測(cè)試的測(cè)試的 過程,來發(fā)現(xiàn)那些看起來只有最終用戶才能發(fā)現(xiàn)的錯(cuò)誤。過程,來發(fā)現(xiàn)那些看起來只有最終用戶才能發(fā)現(xiàn)的錯(cuò)誤。7.5.2 軟件配置復(fù)查軟件配置復(fù)查 alpha測(cè)試測(cè)試 由用戶在開發(fā)者的場(chǎng)所進(jìn)行,并且在開發(fā)者對(duì)用戶的由用戶在開發(fā)者的場(chǎng)所進(jìn)行,并且在開發(fā)者對(duì)用戶的“指指 導(dǎo)導(dǎo)”下進(jìn)行測(cè)試。開發(fā)者負(fù)責(zé)記錄發(fā)現(xiàn)的錯(cuò)誤和使用中下進(jìn)行測(cè)試。開發(fā)者負(fù)責(zé)記錄發(fā)現(xiàn)的錯(cuò)誤和使用中遇遇 到的問題??傊降膯栴}。總之,alpha測(cè)試是在受控的環(huán)境中進(jìn)行的。測(cè)試
38、是在受控的環(huán)境中進(jìn)行的。 beta測(cè)試測(cè)試 由軟件的最終用戶們?cè)谝粋€(gè)或多個(gè)客戶場(chǎng)所進(jìn)行,由軟件的最終用戶們?cè)谝粋€(gè)或多個(gè)客戶場(chǎng)所進(jìn)行,beta 測(cè)試是軟件在開發(fā)者不能控制的環(huán)境中的測(cè)試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)真實(shí)”應(yīng)用。應(yīng)用。 用戶記錄在用戶記錄在beta測(cè)試過程中遇到的一切問題,并且定期測(cè)試過程中遇到的一切問題,并且定期 把這些問題報(bào)告給開發(fā)者。接收到在把這些問題報(bào)告給開發(fā)者。接收到在beta測(cè)試期間報(bào)告測(cè)試期間報(bào)告 的問題之后,開發(fā)者對(duì)軟件產(chǎn)品進(jìn)行必要的修改,并準(zhǔn)的問題之后,開發(fā)者對(duì)軟件產(chǎn)品進(jìn)行必要的修改,并準(zhǔn) 備向全體客戶發(fā)布最終的軟件產(chǎn)品。備向全體客戶發(fā)布最終的軟件產(chǎn)品。
39、設(shè)計(jì)測(cè)試方案:設(shè)計(jì)測(cè)試方案: 1)是測(cè)試階段的關(guān)鍵技術(shù)問題;)是測(cè)試階段的關(guān)鍵技術(shù)問題; 2)所謂測(cè)試方案:包括具體的測(cè)試目的,應(yīng)該輸)所謂測(cè)試方案:包括具體的測(cè)試目的,應(yīng)該輸 入的測(cè)試數(shù)據(jù)和預(yù)期的結(jié)果。入的測(cè)試數(shù)據(jù)和預(yù)期的結(jié)果。 3)設(shè)計(jì)測(cè)試方案的基本目標(biāo)是:確定一組最可能)設(shè)計(jì)測(cè)試方案的基本目標(biāo)是:確定一組最可能 發(fā)現(xiàn)某個(gè)錯(cuò)誤或某類錯(cuò)誤的測(cè)試數(shù)據(jù)。發(fā)現(xiàn)某個(gè)錯(cuò)誤或某類錯(cuò)誤的測(cè)試數(shù)據(jù)。7.6 白盒測(cè)試技術(shù)白盒測(cè)試技術(shù)所謂邏輯覆蓋:是對(duì)一系列測(cè)試過程的總稱,這組所謂邏輯覆蓋:是對(duì)一系列測(cè)試過程的總稱,這組 測(cè)試過程逐漸進(jìn)行越來越完整的通路測(cè)試。測(cè)試過程逐漸進(jìn)行越來越完整的通路測(cè)試。 1. 語句覆
40、蓋語句覆蓋 1)含義是:選擇足夠多的測(cè)試數(shù)據(jù),使被測(cè)程序中)含義是:選擇足夠多的測(cè)試數(shù)據(jù),使被測(cè)程序中 每個(gè)語句至少執(zhí)行一次。每個(gè)語句至少執(zhí)行一次。 2)為了使每個(gè)語句都執(zhí)行一次,程序的執(zhí)行路徑應(yīng))為了使每個(gè)語句都執(zhí)行一次,程序的執(zhí)行路徑應(yīng) 該是該是sacbed,為此只需要輸入下面的測(cè)試數(shù)據(jù)為此只需要輸入下面的測(cè)試數(shù)據(jù)(實(shí)實(shí) 際上際上x可以是任意實(shí)數(shù)可以是任意實(shí)數(shù)): a=2,b=0,x=43)語句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。)語句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。7.6.1 邏輯覆蓋邏輯覆蓋圖圖7.5 被測(cè)試模塊的流程圖被測(cè)試模塊的流程圖例例1. 1. 設(shè)計(jì)下列偽碼程序的語句覆蓋和路徑覆蓋測(cè)試用例:設(shè)
41、計(jì)下列偽碼程序的語句覆蓋和路徑覆蓋測(cè)試用例:startinput(a, b, c)if a5 then x=5 else x=1end ifif b10 then y=20 else y=2end ifif c15 then z=30 else z=3end ifprint(x, y, z)stop語句覆蓋的典型測(cè)試用例:語句覆蓋的典型測(cè)試用例:1) 3個(gè)判定表達(dá)式的值全為假個(gè)判定表達(dá)式的值全為假 輸入:輸入:a=1, b=1, c=1 預(yù)期的輸出:預(yù)期的輸出:x=1, y=2, z=32) 3個(gè)判定表達(dá)式的值全為真?zhèn)€判定表達(dá)式的值全為真 輸入:輸入:a=10, b=20, c=30 預(yù)期的輸
42、出:預(yù)期的輸出:x=10, y=20, z=30路徑覆蓋的測(cè)試用例:路徑覆蓋的測(cè)試用例:1) (t, t ,t) 5) (f, f, f)2) (t, t, f) 6) (f, f, t)3) (t, f, f) 7) (f, t, f)4) (t, f, t) 8) (f, t, t)2. 判定覆蓋判定覆蓋1)判定覆蓋又叫分支覆蓋;)判定覆蓋又叫分支覆蓋;2)含義是:不僅每個(gè)語句必須至少執(zhí)行一次,而且)含義是:不僅每個(gè)語句必須至少執(zhí)行一次,而且 每個(gè)判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一每個(gè)判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一 次,也就是每個(gè)判定的每個(gè)分支都至少執(zhí)行一次,也就是每個(gè)判定的每個(gè)分
43、支都至少執(zhí)行一 次。次。3)能夠覆蓋路徑)能夠覆蓋路徑sacbed和和sabd或者或者sacbd和和sabed的的 測(cè)試數(shù)據(jù),都滿足判定覆蓋標(biāo)準(zhǔn)。測(cè)試數(shù)據(jù),都滿足判定覆蓋標(biāo)準(zhǔn)。 . a=3,b=0,x=3; tf . a=2,b=1,x=1; ft4)判定覆蓋比語句覆蓋強(qiáng),但是對(duì)程序邏輯的覆蓋)判定覆蓋比語句覆蓋強(qiáng),但是對(duì)程序邏輯的覆蓋 程度仍然不高程度仍然不高.3. 條件覆蓋條件覆蓋1)含義是:不僅每個(gè)語句至少執(zhí)行一次,而且使判定表達(dá)式)含義是:不僅每個(gè)語句至少執(zhí)行一次,而且使判定表達(dá)式 中的每個(gè)條件都取到各種可能的結(jié)果。中的每個(gè)條件都取到各種可能的結(jié)果。 . a=2,b=0,x=4; sa
44、cbed . a=1,b=1,x=1; sabd2) 條件覆蓋通常比判定覆條件覆蓋通常比判定覆蓋強(qiáng),因?yàn)樗古卸ū磉_(dá)蓋強(qiáng),因?yàn)樗古卸ū磉_(dá)式中每個(gè)條件都取到了兩式中每個(gè)條件都取到了兩個(gè)不同的結(jié)果,判定覆蓋個(gè)不同的結(jié)果,判定覆蓋卻只關(guān)心整個(gè)判定表達(dá)式卻只關(guān)心整個(gè)判定表達(dá)式的值。的值。a: a1, a1, b=0, b0; b: a=2, a2, x1, x1;4. 判定判定/條件覆蓋條件覆蓋1) 含義是含義是: 選取足夠多的測(cè)試數(shù)據(jù),使得判定表達(dá)選取足夠多的測(cè)試數(shù)據(jù),使得判定表達(dá) 式中的每個(gè)條件都取到各種可能的值,而且每個(gè)式中的每個(gè)條件都取到各種可能的值,而且每個(gè) 判定表達(dá)式也都取到各種可能的結(jié)
45、果。判定表達(dá)式也都取到各種可能的結(jié)果。2) . a=2,b=0,x=4; sacbed, tt . a=1,b=1,x=1; sabd, ff3) 有時(shí)判定有時(shí)判定/條件覆蓋也并不比條件覆蓋更強(qiáng)。條件覆蓋也并不比條件覆蓋更強(qiáng)。5. 條件組合覆蓋條件組合覆蓋1) 它要求選取足夠多的測(cè)試數(shù)據(jù),使得每個(gè)判定表它要求選取足夠多的測(cè)試數(shù)據(jù),使得每個(gè)判定表 達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。2) 顯然,滿足條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù),也一顯然,滿足條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù),也一 定滿足判定覆蓋、條件覆蓋和判定定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋標(biāo)條件覆蓋
46、標(biāo) 準(zhǔn)。因此,條件組合覆蓋是前述幾種覆蓋標(biāo)準(zhǔn)中準(zhǔn)。因此,條件組合覆蓋是前述幾種覆蓋標(biāo)準(zhǔn)中 最強(qiáng)的。最強(qiáng)的。3) 但是,滿足條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù)并不一但是,滿足條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù)并不一 定能使程序中的每條路徑都執(zhí)行到,如定能使程序中的每條路徑都執(zhí)行到,如sacbd。對(duì)于左圖,共有對(duì)于左圖,共有8種可能的條種可能的條件組合:件組合:1. a1, b=0 2. a1, b03. a1, b=0 4. a1, b05. a=2, x1 6. a=2, x17. a2, x1 8. a2, x1 . a=2,b=0,x=4; sacbed, 1和和5, tt . a=2,b=1,x=1;
47、sabed, 2和和6, ft . a=1,b=0,x=2; sabed, 3和和7, ft . a=1,b=1,x=1; sabd, 4和和8, ff例例2. 設(shè)計(jì)下列偽碼程序的分支覆蓋和條件組合覆蓋測(cè)試用例:設(shè)計(jì)下列偽碼程序的分支覆蓋和條件組合覆蓋測(cè)試用例: start input(a, b, c, d) if (a0) and (bo) then x=a+b else x=a-b end if if (ca) or (db) then y=c-d else y=c+d end if print(x, y) stop6. 點(diǎn)覆蓋點(diǎn)覆蓋1) 圖論中點(diǎn)覆蓋的概念定義如下:如果連通圖圖論中點(diǎn)覆蓋
48、的概念定義如下:如果連通圖g的子的子 圖圖g是連通的,而且包含是連通的,而且包含g的所有結(jié)點(diǎn),則稱的所有結(jié)點(diǎn),則稱 g是是g的點(diǎn)覆蓋。的點(diǎn)覆蓋。2) 在正常情況下流圖是連通的有向圖,滿足點(diǎn)覆蓋標(biāo)在正常情況下流圖是連通的有向圖,滿足點(diǎn)覆蓋標(biāo) 準(zhǔn)要求。準(zhǔn)要求。3) 可以選取足夠多的測(cè)試數(shù)據(jù),使得程序執(zhí)行路徑至可以選取足夠多的測(cè)試數(shù)據(jù),使得程序執(zhí)行路徑至 少經(jīng)過流圖的每個(gè)結(jié)點(diǎn)一次,由于流圖的每個(gè)結(jié)點(diǎn)少經(jīng)過流圖的每個(gè)結(jié)點(diǎn)一次,由于流圖的每個(gè)結(jié)點(diǎn) 與一條或多條語句相對(duì)應(yīng),顯然,點(diǎn)覆蓋標(biāo)準(zhǔn)和語與一條或多條語句相對(duì)應(yīng),顯然,點(diǎn)覆蓋標(biāo)準(zhǔn)和語 句覆蓋標(biāo)準(zhǔn)是相同的。句覆蓋標(biāo)準(zhǔn)是相同的。7. 邊覆蓋邊覆蓋1) 圖論
49、中邊覆蓋的定義是:如果連通圖圖論中邊覆蓋的定義是:如果連通圖g的子圖的子圖g 是連通的,而且包含是連通的,而且包含g的所有邊,則稱的所有邊,則稱g是是g的的 邊覆蓋。邊覆蓋。2) 為了滿足邊覆蓋的測(cè)試標(biāo)準(zhǔn),要求選取足夠多測(cè)為了滿足邊覆蓋的測(cè)試標(biāo)準(zhǔn),要求選取足夠多測(cè) 試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條 邊一次。通常邊覆蓋和判定覆蓋是一致的。邊一次。通常邊覆蓋和判定覆蓋是一致的。8. 路徑覆蓋路徑覆蓋 含義是,選取足夠多測(cè)試數(shù)據(jù),使程序的每條可含義是,選取足夠多測(cè)試數(shù)據(jù),使程序的每條可 能路徑都至少執(zhí)行一次能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則
50、要如果程序圖中有環(huán),則要 求每個(gè)環(huán)至少經(jīng)過一次求每個(gè)環(huán)至少經(jīng)過一次)。1. 基本路徑測(cè)試基本路徑測(cè)試1) 基本路徑測(cè)試是基本路徑測(cè)試是tom mccabe提出的一種白盒測(cè)提出的一種白盒測(cè) 試技術(shù)。試技術(shù)。2) 使用這種技術(shù)設(shè)計(jì)測(cè)試用例時(shí),首先計(jì)算程序的使用這種技術(shù)設(shè)計(jì)測(cè)試用例時(shí),首先計(jì)算程序的 環(huán)形復(fù)雜度,并用環(huán)形復(fù)雜度,并用v(g)為指南定義執(zhí)行路徑的基為指南定義執(zhí)行路徑的基 本集合,從該基本集合導(dǎo)出的測(cè)試用例可以保證本集合,從該基本集合導(dǎo)出的測(cè)試用例可以保證 程序中的每條語句至少執(zhí)行一次,而且每個(gè)條件程序中的每條語句至少執(zhí)行一次,而且每個(gè)條件 在執(zhí)行時(shí)都將分別取真、假兩種值。在執(zhí)行時(shí)都將分
51、別取真、假兩種值。7.6.2 控制結(jié)構(gòu)測(cè)試控制結(jié)構(gòu)測(cè)試 使用基本路徑測(cè)試技術(shù)設(shè)計(jì)測(cè)試用例的步驟如下:使用基本路徑測(cè)試技術(shù)設(shè)計(jì)測(cè)試用例的步驟如下: 第一步,第一步, 根據(jù)過程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖根據(jù)過程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖。 例例: 用基本路徑測(cè)試技術(shù)測(cè)試下面的用用基本路徑測(cè)試技術(shù)測(cè)試下面的用pdl描述的求平均值描述的求平均值 過程。過程。 1. 畫出流圖畫出流圖 procedure average;/* 這個(gè)過程計(jì)算不超過這個(gè)過程計(jì)算不超過100個(gè)在規(guī)定值域內(nèi)的有效數(shù)字的平均個(gè)在規(guī)定值域內(nèi)的有效數(shù)字的平均值;同時(shí)計(jì)算有效數(shù)字的總和及個(gè)數(shù)。值;同時(shí)計(jì)算有效數(shù)字的總和及個(gè)數(shù)。*/ interf
52、ace returns average, total.input, total.valid; interface accepts value, minimum, maximum; type value1100 is scalar array; type average, total.input, total.valid; minimum,maximum, sum is scalar; type i is integer;1: i=1; total.input=total.valid=0;sum=0;2:do while valuei -9993: and total.input=minimum
53、6: and valuei0 end average10: if total.valid011:then average=sum/total.valid;12: else average=-999;13: endif end average圖圖7.6 求平均值過程的流圖求平均值過程的流圖第二步,計(jì)算流圖的環(huán)形復(fù)雜度。第二步,計(jì)算流圖的環(huán)形復(fù)雜度。第三步,確定線性獨(dú)立路徑的基本集合。第三步,確定線性獨(dú)立路徑的基本集合。1) 所謂獨(dú)立路徑所謂獨(dú)立路徑:是指至少引入程序的一個(gè)新處理語是指至少引入程序的一個(gè)新處理語 句集合或一個(gè)新條件的路徑,用流圖術(shù)語描述,句集合或一個(gè)新條件的路徑,用流圖術(shù)語描述,
54、獨(dú)立路徑至少包含一條在定義該路徑之前不曾用獨(dú)立路徑至少包含一條在定義該路徑之前不曾用 過的邊。過的邊。2) 使用基本路徑測(cè)試法設(shè)計(jì)測(cè)試用例時(shí),程序的環(huán)使用基本路徑測(cè)試法設(shè)計(jì)測(cè)試用例時(shí),程序的環(huán) 形復(fù)雜度決定了程序中獨(dú)立路徑的數(shù)量,而且這形復(fù)雜度決定了程序中獨(dú)立路徑的數(shù)量,而且這 個(gè)數(shù)是確保程序中所有語句至少被執(zhí)行一次所需個(gè)數(shù)是確保程序中所有語句至少被執(zhí)行一次所需 的測(cè)試數(shù)量的上界。的測(cè)試數(shù)量的上界。下面列出了下面列出了 6 條獨(dú)立路徑:條獨(dú)立路徑:路徑路徑1:12101113路徑路徑2:12101213路徑路徑3:123101113路徑路徑4:12345892.路徑路徑5:123456892.
55、路徑路徑6:1234567892.路徑路徑4,5,6后面的省略號(hào)表示,可以后接通過控后面的省略號(hào)表示,可以后接通過控制結(jié)構(gòu)其余部分的任意路徑。制結(jié)構(gòu)其余部分的任意路徑。第四步,設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測(cè)第四步,設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測(cè) 試用例。試用例。 可以測(cè)試上一步得出的基本集合的測(cè)試用例如下:可以測(cè)試上一步得出的基本集合的測(cè)試用例如下: 1. 路徑路徑1的測(cè)試用例的測(cè)試用例: valuek = 有效輸入值,其中有效輸入值,其中ki; value i = -999,其中,其中2i100; 預(yù)期結(jié)果:基于預(yù)期結(jié)果:基于k的正確平均值和總數(shù)。的正確平均值和總數(shù)。 注意:路徑
56、注意:路徑 1無法獨(dú)立測(cè)試,必須作為路徑無法獨(dú)立測(cè)試,必須作為路徑4、5和和 6的一部分來測(cè)試。的一部分來測(cè)試。2. 路徑路徑2的測(cè)試用例的測(cè)試用例: value 1 = -999; 預(yù)期結(jié)果:預(yù)期結(jié)果:average = -999,其他都保持初始值。,其他都保持初始值。3. 路徑路徑2的測(cè)試用例的測(cè)試用例: 試圖處理試圖處理101個(gè)或更多值;個(gè)或更多值; 前前100個(gè)數(shù)值應(yīng)該是有效輸入值;個(gè)數(shù)值應(yīng)該是有效輸入值; 預(yù)期結(jié)果:前預(yù)期結(jié)果:前100個(gè)數(shù)的平均值,總數(shù)為個(gè)數(shù)的平均值,總數(shù)為100。 注意:路徑注意:路徑 3也無法獨(dú)立測(cè)試,必須作為路徑也無法獨(dú)立測(cè)試,必須作為路徑4、5 和和6的一部
57、分來測(cè)試。的一部分來測(cè)試。4. 路徑路徑4的測(cè)試用例的測(cè)試用例: value i = 有效輸入值,其中有效輸入值,其中i100; value k minimum,其中,其中ki ; 預(yù)期結(jié)果:基于預(yù)期結(jié)果:基于k的正確平均值和總數(shù)。的正確平均值和總數(shù)。5. 路徑路徑5的測(cè)試用例的測(cè)試用例: value i = 有效輸入值,其中有效輸入值,其中i maximum,其中,其中ki ; 預(yù)期結(jié)果:基于預(yù)期結(jié)果:基于k的正確平均值和總數(shù)。的正確平均值和總數(shù)。6. 路徑路徑6的測(cè)試用例的測(cè)試用例: value i = 有效輸入值,其中有效輸入值,其中i0) 3: and (bo) 4: then x=a
58、+b 5: else x=a-b 6: end if 7: if (ca) 8: or (db) 9: then y=c-d 10: else y=c+d 11: end if 12: print(x, y) stop 路徑路徑1:12346791112路徑路徑2:1256791112路徑路徑3:12356791112路徑路徑4:123467891112路徑路徑5:1234678101112 2. 條件測(cè)試條件測(cè)試(1) 用條件測(cè)試技術(shù)設(shè)計(jì)出的測(cè)試用例,能夠檢查程序模塊中用條件測(cè)試技術(shù)設(shè)計(jì)出的測(cè)試用例,能夠檢查程序模塊中包包 含的邏輯條件。含的邏輯條件。(2) 邏輯條件可以是邏輯條件可以是1個(gè)
59、簡(jiǎn)單條件個(gè)簡(jiǎn)單條件 or 復(fù)合條件。復(fù)合條件。 簡(jiǎn)單條件簡(jiǎn)單條件 . 可以是一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式;可以是一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式; . 前可加前可加not算符;算符; . 關(guān)系表達(dá)式的形式:關(guān)系表達(dá)式的形式:e1 e2 其中,其中,e1和和e2是算術(shù)表達(dá)式,而是算術(shù)表達(dá)式,而是下列算符是下列算符 之一:之一:“”或或“”。 復(fù)合條件復(fù)合條件 . 由兩個(gè)或多個(gè)簡(jiǎn)單條件、布爾算符和括弧組成;由兩個(gè)或多個(gè)簡(jiǎn)單條件、布爾算符和括弧組成; . 布爾算符有布爾算符有or(“|”),),and(“&”)和)和not。 條件成分的類型包括布爾算符、布爾變量、布爾條件成分的類型包括布爾算符、
60、布爾變量、布爾 括弧(括住簡(jiǎn)單條件或復(fù)合條件)、關(guān)系算符及括?。ɡㄗ『?jiǎn)單條件或復(fù)合條件)、關(guān)系算符及 算術(shù)表達(dá)式。算術(shù)表達(dá)式。 如果條件不正確,則至少條件的一個(gè)成分不正確。如果條件不正確,則至少條件的一個(gè)成分不正確。 因此,條件錯(cuò)誤的類型如下:因此,條件錯(cuò)誤的類型如下: . 布爾算符錯(cuò)(布爾算符不正確,遺漏布爾算符或布爾算符錯(cuò)(布爾算符不正確,遺漏布爾算符或 有多余的布爾算符)有多余的布爾算符) . 布爾變量錯(cuò)布爾變量錯(cuò) . 布爾括弧錯(cuò)布爾括弧錯(cuò) . 關(guān)系算符錯(cuò)關(guān)系算符錯(cuò) . 算術(shù)表達(dá)式錯(cuò)算術(shù)表達(dá)式錯(cuò)(3) 條件測(cè)試策略條件測(cè)試策略1) 分支測(cè)試分支測(cè)試 . 可能是最簡(jiǎn)單的條件測(cè)試策略可能是最簡(jiǎn)單的條件測(cè)試策略, . 對(duì)于
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 樓盤變廢為寶活動(dòng)方案
- 桐鄉(xiāng)八年級(jí)數(shù)學(xué)活動(dòng)方案
- 油田插花活動(dòng)方案
- 植樹節(jié)樹木掛牌活動(dòng)方案
- 殷都區(qū)安全教育活動(dòng)方案
- 校長講安全活動(dòng)方案
- 水泥廠東宿舍活動(dòng)方案
- 森林沙龍活動(dòng)方案
- 民營企業(yè)家聯(lián)誼活動(dòng)方案
- 氣墊抽獎(jiǎng)活動(dòng)方案
- 河北省石家莊市2025年七年級(jí)下學(xué)期語文期末考試卷及答案
- 四川省德陽市2025年七年級(jí)下學(xué)期語文期末試卷及答案
- 石獅子購銷合同協(xié)議
- 2025廣州市荔灣區(qū)輔警考試試卷真題
- 課題申報(bào)書:基于核心素養(yǎng)發(fā)展理念的小學(xué)數(shù)學(xué)跨學(xué)科主題學(xué)習(xí)設(shè)計(jì)的策略研究
- 模聯(lián)面試題及答案
- 上海市楊浦區(qū)2025屆高三語文一模質(zhì)量調(diào)研試卷(含答案)
- 貴州省遵義市2024年八年級(jí)《數(shù)學(xué)》上學(xué)期期末試題與參考答案
- 隔壁拆房相鄰協(xié)議書
- GB/T 320-2025工業(yè)用合成鹽酸
- 2025(人教版)小升初數(shù)學(xué)總復(fù)習(xí) 知識(shí)點(diǎn)總結(jié)+專項(xiàng)練習(xí)(含答案)
評(píng)論
0/150
提交評(píng)論