![軟件工程(張海藩)第7章解讀教學(xué)內(nèi)容_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/18/033cd6c4-3bc4-494b-a315-4999fd048b3d/033cd6c4-3bc4-494b-a315-4999fd048b3d1.gif)
![軟件工程(張海藩)第7章解讀教學(xué)內(nèi)容_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/18/033cd6c4-3bc4-494b-a315-4999fd048b3d/033cd6c4-3bc4-494b-a315-4999fd048b3d2.gif)
![軟件工程(張海藩)第7章解讀教學(xué)內(nèi)容_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/18/033cd6c4-3bc4-494b-a315-4999fd048b3d/033cd6c4-3bc4-494b-a315-4999fd048b3d3.gif)
![軟件工程(張海藩)第7章解讀教學(xué)內(nèi)容_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/18/033cd6c4-3bc4-494b-a315-4999fd048b3d/033cd6c4-3bc4-494b-a315-4999fd048b3d4.gif)
![軟件工程(張海藩)第7章解讀教學(xué)內(nèi)容_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/18/033cd6c4-3bc4-494b-a315-4999fd048b3d/033cd6c4-3bc4-494b-a315-4999fd048b3d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單擊此處編輯母版標(biāo)題樣式單擊此處編輯母版標(biāo)題樣式 單擊此處編輯母版副標(biāo)題樣式單擊此處編輯母版副標(biāo)題樣式軟件工程(張海藩)第7章解讀 程序設(shè)計(jì)語言程序設(shè)計(jì)語言1.1.程序設(shè)計(jì)語言的分類程序設(shè)計(jì)語言的分類 通常我們依據(jù)對數(shù)據(jù)存儲和操作的抽象程度,通常我們依據(jù)對數(shù)據(jù)存儲和操作的抽象程度,把品種繁多的程序設(shè)計(jì)語言分成機(jī)器、匯編、高級把品種繁多的程序設(shè)計(jì)語言分成機(jī)器、匯編、高級和第四代語言四大類。和第四代語言四大類。(1 1)機(jī)器語言)機(jī)器語言 機(jī)器語言主要用機(jī)器語言主要用0 0和和1 1代碼對計(jì)算機(jī)硬件的高低代碼對計(jì)算機(jī)硬件的高低電平進(jìn)行指代,用電平進(jìn)行指代,用0 0、1 1串對計(jì)算機(jī)能進(jìn)行的操作及串
2、對計(jì)算機(jī)能進(jìn)行的操作及存儲地址等進(jìn)行編碼,是計(jì)算機(jī)的數(shù)據(jù)操作與存儲存儲地址等進(jìn)行編碼,是計(jì)算機(jī)的數(shù)據(jù)操作與存儲能力的第一級邏輯抽象。目前幾乎沒有人用它編程。能力的第一級邏輯抽象。目前幾乎沒有人用它編程。3(2 2)匯編語言)匯編語言 匯編語言用英文字母、數(shù)字和一些特殊符號對匯編語言用英文字母、數(shù)字和一些特殊符號對機(jī)器語言指令和存儲空間及數(shù)據(jù)進(jìn)行編碼,為機(jī)器語言指令和存儲空間及數(shù)據(jù)進(jìn)行編碼,為0 0,1 1串進(jìn)行命名,可見匯編語言是對機(jī)器語言的一級抽串進(jìn)行命名,可見匯編語言是對機(jī)器語言的一級抽象,是對計(jì)算機(jī)語言的二級抽象。有多少種帶有常象,是對計(jì)算機(jī)語言的二級抽象。有多少種帶有常用指令集合的微處
3、理機(jī)系統(tǒng)結(jié)構(gòu),就有多少種從屬用指令集合的微處理機(jī)系統(tǒng)結(jié)構(gòu),就有多少種從屬于機(jī)器語言的匯編語言。于機(jī)器語言的匯編語言。4(3 3)高級語言)高級語言 高級語言是把人們利用機(jī)器語言或匯編語言編高級語言是把人們利用機(jī)器語言或匯編語言編程時所用數(shù)據(jù)的邏輯結(jié)構(gòu)和對數(shù)據(jù)進(jìn)行使用時的操程時所用數(shù)據(jù)的邏輯結(jié)構(gòu)和對數(shù)據(jù)進(jìn)行使用時的操作序列的邏輯結(jié)構(gòu)歸納抽象為類型和語句,利用英作序列的邏輯結(jié)構(gòu)歸納抽象為類型和語句,利用英文字母、數(shù)字和一些符號通過一定規(guī)則(語法)對文字母、數(shù)字和一些符號通過一定規(guī)則(語法)對其編碼,所用編碼的自然語言含義與對應(yīng)邏輯結(jié)構(gòu)其編碼,所用編碼的自然語言含義與對應(yīng)邏輯結(jié)構(gòu)的意義盡量接近。高級
4、語言不依賴于實(shí)現(xiàn)這種語言的意義盡量接近。高級語言不依賴于實(shí)現(xiàn)這種語言的計(jì)算機(jī)。的計(jì)算機(jī)。5(4 4)第四代語言)第四代語言 所謂第四代語言就是把某一領(lǐng)域內(nèi)的通用數(shù)據(jù)所謂第四代語言就是把某一領(lǐng)域內(nèi)的通用數(shù)據(jù)結(jié)構(gòu)和功能模塊用高級語言進(jìn)行編碼,一般通過顯結(jié)構(gòu)和功能模塊用高級語言進(jìn)行編碼,一般通過顯示屏幕利用菜單形式和用戶進(jìn)行會話,由用戶通過示屏幕利用菜單形式和用戶進(jìn)行會話,由用戶通過鍵盤等選擇自己所用功能模塊,并填寫相應(yīng)參數(shù),鍵盤等選擇自己所用功能模塊,并填寫相應(yīng)參數(shù),可見第四代語言其實(shí)是計(jì)算機(jī)在某一領(lǐng)域的應(yīng)用,可見第四代語言其實(shí)是計(jì)算機(jī)在某一領(lǐng)域的應(yīng)用,是計(jì)算機(jī)與人之間進(jìn)行信息交換的工具,是碼義結(jié)
5、是計(jì)算機(jī)與人之間進(jìn)行信息交換的工具,是碼義結(jié)合的會話符號系統(tǒng)。合的會話符號系統(tǒng)。62.2.選擇程序設(shè)計(jì)語言的標(biāo)準(zhǔn)選擇程序設(shè)計(jì)語言的標(biāo)準(zhǔn)(1 1)理想標(biāo)準(zhǔn))理想標(biāo)準(zhǔn) 選用的高級語言應(yīng)該有理想的模塊化機(jī)制,可選用的高級語言應(yīng)該有理想的模塊化機(jī)制,可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu) 為了便于調(diào)試和提高軟件的可靠性,語言特點(diǎn)為了便于調(diào)試和提高軟件的可靠性,語言特點(diǎn)應(yīng)該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的應(yīng)該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯誤。錯誤。 為了降低軟件開發(fā)和維護(hù)的成本,選用的語言為了降低軟件開發(fā)和維護(hù)的成本,選用的語言應(yīng)該有良好的獨(dú)立編譯機(jī)制。應(yīng)該有良好的獨(dú)立編譯機(jī)
6、制。7(1 1)實(shí)用標(biāo)準(zhǔn))實(shí)用標(biāo)準(zhǔn)如果系統(tǒng)是由用戶負(fù)責(zé)維護(hù)的,那么我們就應(yīng)該選如果系統(tǒng)是由用戶負(fù)責(zé)維護(hù)的,那么我們就應(yīng)該選擇用戶熟悉的語言書寫程序。擇用戶熟悉的語言書寫程序。所選擇的語言應(yīng)該與目標(biāo)系統(tǒng)所能提供的編譯程序所選擇的語言應(yīng)該與目標(biāo)系統(tǒng)所能提供的編譯程序相匹配。相匹配。語言有可利用的軟件工具,使目標(biāo)系統(tǒng)的實(shí)現(xiàn)和驗(yàn)語言有可利用的軟件工具,使目標(biāo)系統(tǒng)的實(shí)現(xiàn)和驗(yàn)證變得容易。證變得容易??筛鶕?jù)工程的規(guī)模從現(xiàn)有的語言中選擇,也可以根可根據(jù)工程的規(guī)模從現(xiàn)有的語言中選擇,也可以根據(jù)需要設(shè)計(jì)一種新的語言,以滿足用戶的需求。據(jù)需要設(shè)計(jì)一種新的語言,以滿足用戶的需求。8在與目標(biāo)設(shè)計(jì)不矛盾的情況下,應(yīng)該選擇
7、一種程序員在與目標(biāo)設(shè)計(jì)不矛盾的情況下,應(yīng)該選擇一種程序員所熟悉的語言。所熟悉的語言。應(yīng)該選擇一種標(biāo)準(zhǔn)化程度高,程序可移植性好的語言。應(yīng)該選擇一種標(biāo)準(zhǔn)化程度高,程序可移植性好的語言。選擇語言應(yīng)充分考慮目標(biāo)系統(tǒng)的應(yīng)用范圍。選擇語言應(yīng)充分考慮目標(biāo)系統(tǒng)的應(yīng)用范圍。 在工程和科學(xué)計(jì)算領(lǐng)域中在工程和科學(xué)計(jì)算領(lǐng)域中FORTRANFORTRAN仍是主要語仍是主要語言,在商業(yè)應(yīng)用方面通常采用言,在商業(yè)應(yīng)用方面通常采用COBOLCOBOL語言,在系統(tǒng)語言,在系統(tǒng)程序及實(shí)時應(yīng)用領(lǐng)域采用程序及實(shí)時應(yīng)用領(lǐng)域采用C C語言和語言和AdaAda語言,在組語言,在組合論應(yīng)用方面較多地采用合論應(yīng)用方面較多地采用LISPLISP
8、語言,在表述知識語言,在表述知識和邏輯推理方面采用和邏輯推理方面采用PROLOGPROLOG語言。語言。 93.3.編碼風(fēng)格編碼風(fēng)格 編碼風(fēng)格編碼風(fēng)格 ( (Coding Style)Coding Style),又稱又稱程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格,是程序設(shè)計(jì)者在創(chuàng)作中喜歡或習(xí)慣使用的表達(dá)自己是程序設(shè)計(jì)者在創(chuàng)作中喜歡或習(xí)慣使用的表達(dá)自己作品的方式。作品的方式。 從軟件工程學(xué)的角度,良好的編碼風(fēng)格主從軟件工程學(xué)的角度,良好的編碼風(fēng)格主要體現(xiàn)在程序代碼邏輯清晰,易讀、易理解、易維要體現(xiàn)在程序代碼邏輯清晰,易讀、易理解、易維護(hù),能高效利用系統(tǒng)資源等各個方面。護(hù),能高效利用系統(tǒng)資源等各個方面。 編碼風(fēng)格強(qiáng)
9、調(diào)編碼風(fēng)格強(qiáng)調(diào)“清晰第一清晰第一”。清晰和效率。清晰和效率往往是矛盾的。強(qiáng)調(diào)往往是矛盾的。強(qiáng)調(diào)“清晰第一清晰第一”,并非不要效率,并非不要效率,而是而是在清晰的前提下求取效率在清晰的前提下求取效率。 10(1 1)程序內(nèi)部文檔)程序內(nèi)部文檔 大型軟件系統(tǒng)的程序內(nèi)部必須帶有說明性材料,大型軟件系統(tǒng)的程序內(nèi)部必須帶有說明性材料,即即“內(nèi)部文檔內(nèi)部文檔”,內(nèi)部文檔可用注釋語句書寫,程,內(nèi)部文檔可用注釋語句書寫,程序中適當(dāng)?shù)丶由献⑨?,是提高程序可讀性的有力手序中適當(dāng)?shù)丶由献⑨專翘岣叱绦蚩勺x性的有力手段。段。注釋分為兩類:注釋分為兩類:序言性注釋和描述性注釋序言性注釋和描述性注釋序言性注釋序言性注釋出
10、現(xiàn)在模塊的首部,其內(nèi)容一般包括:出現(xiàn)在模塊的首部,其內(nèi)容一般包括: 有關(guān)模塊功能的說明有關(guān)模塊功能的說明 界面描述。包括調(diào)用語句格式,所有參數(shù)的解釋和界面描述。包括調(diào)用語句格式,所有參數(shù)的解釋和該模塊需調(diào)用的模塊名等。該模塊需調(diào)用的模塊名等。 一些重要變量的使用、限制和一些其它信息。一些重要變量的使用、限制和一些其它信息。 開發(fā)歷史。如作者、復(fù)查者、復(fù)查日期、修改日期開發(fā)歷史。如作者、復(fù)查者、復(fù)查日期、修改日期和敘述等。和敘述等。11 描述性注釋描述性注釋嵌在程序之中,描述性注釋又有功嵌在程序之中,描述性注釋又有功能性的和狀態(tài)性的,功能性注釋說明程序段的功能,能性的和狀態(tài)性的,功能性注釋說明程
11、序段的功能,通??煞旁诔绦蚨沃?,狀態(tài)性注釋說明數(shù)據(jù)的狀通??煞旁诔绦蚨沃?,狀態(tài)性注釋說明數(shù)據(jù)的狀態(tài),通常可放在程序段之后。態(tài),通??煞旁诔绦蚨沃?。 對于注釋,還應(yīng)注意以下幾點(diǎn):對于注釋,還應(yīng)注意以下幾點(diǎn): 注釋應(yīng)該與程序一致注釋應(yīng)該與程序一致 注釋應(yīng)該提供一些從程序本身難以得到的信息,而注釋應(yīng)該提供一些從程序本身難以得到的信息,而不是重復(fù)程序語句不是重復(fù)程序語句 是對語句段做注釋,而不是對每個語句作注釋是對語句段做注釋,而不是對每個語句作注釋 提高可讀性的另一個主要手段是采用提高可讀性的另一個主要手段是采用縮排法縮排法,它使程序的書寫反映其邏輯結(jié)構(gòu)的深度。它使程序的書寫反映其邏輯結(jié)構(gòu)的深
12、度。12(2 2)數(shù)據(jù)說明)數(shù)據(jù)說明數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化當(dāng)多個變量名在一個語句中說明時,應(yīng)該按字母順當(dāng)多個變量名在一個語句中說明時,應(yīng)該按字母順序排列這些變量序排列這些變量當(dāng)設(shè)計(jì)的時候使用了一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)該用當(dāng)設(shè)計(jì)的時候使用了一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)該用注解說明使用程序設(shè)計(jì)語言實(shí)現(xiàn)這個數(shù)據(jù)結(jié)構(gòu)的方注解說明使用程序設(shè)計(jì)語言實(shí)現(xiàn)這個數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn)法和特點(diǎn)13(3 3)語句構(gòu)造)語句構(gòu)造不要為了節(jié)省空間而把多個語句寫在同一行不要為了節(jié)省空間而把多個語句寫在同一行盡量避免復(fù)雜的條件測試盡量避免復(fù)雜的條件測試盡量減少對盡量減少對“非非”條件的測試條件的測試避免大量
13、使用循環(huán)嵌套和條件嵌套避免大量使用循環(huán)嵌套和條件嵌套利用括號使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清利用括號使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀晰直觀14(4 4) 輸入輸出輸入輸出對所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn)對所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn)檢查輸入項(xiàng)重要組合的合法性檢查輸入項(xiàng)重要組合的合法性保持輸入格式簡單保持輸入格式簡單使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目明確提示交互式輸入的請求,詳細(xì)說明可用的選擇或邊明確提示交互式輸入的請求,詳細(xì)說明可用的選擇或邊界數(shù)值界數(shù)值當(dāng)程序設(shè)計(jì)語言對格式有嚴(yán)格要求時,應(yīng)保持輸入格式當(dāng)程序設(shè)計(jì)語言對格式有嚴(yán)格要求時,應(yīng)保持
14、輸入格式一致一致設(shè)計(jì)良好的輸出報(bào)表設(shè)計(jì)良好的輸出報(bào)表給所有輸出數(shù)據(jù)加標(biāo)志給所有輸出數(shù)據(jù)加標(biāo)志15(5 5) 效率效率 提高程序效率的提高程序效率的根本途徑根本途徑在于設(shè)計(jì)階段選擇良在于設(shè)計(jì)階段選擇良好的數(shù)據(jù)結(jié)構(gòu)和算法。好的數(shù)據(jù)結(jié)構(gòu)和算法。 考慮程序的效率時應(yīng)注意的幾點(diǎn):考慮程序的效率時應(yīng)注意的幾點(diǎn): 在使程序運(yùn)行得更快前先要使其正確在使程序運(yùn)行得更快前先要使其正確 提高程序運(yùn)行速度時要保持程序的正確性提高程序運(yùn)行速度時要保持程序的正確性 在使程序運(yùn)行得更快些先使其清晰在使程序運(yùn)行得更快些先使其清晰 別貪圖效率上的小利而破壞程序的清晰性別貪圖效率上的小利而破壞程序的清晰性 讓編譯程序去做簡單的優(yōu)
15、化讓編譯程序去做簡單的優(yōu)化 16(一)程序運(yùn)行時間(一)程序運(yùn)行時間 (1 1)應(yīng)先簡化算術(shù)和邏輯的表達(dá)式。)應(yīng)先簡化算術(shù)和邏輯的表達(dá)式。(2 2)仔細(xì)研究嵌套的循環(huán),以確定是否有語句)仔細(xì)研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)層往外移??梢詮膬?nèi)層往外移。(3 3)盡量避免使用多維數(shù)組。)盡量避免使用多維數(shù)組。(4 4)盡量避免使用指針和復(fù)雜的列表。)盡量避免使用指針和復(fù)雜的列表。(5 5)使用執(zhí)行時間短的算術(shù)運(yùn)算。)使用執(zhí)行時間短的算術(shù)運(yùn)算。(6 6)即使語言允許,一般也不要采用混合數(shù)據(jù))即使語言允許,一般也不要采用混合數(shù)據(jù)類型。類型。(7 7)盡量使用整數(shù)表達(dá)式和布爾表達(dá)式。)盡量使用整
16、數(shù)表達(dá)式和布爾表達(dá)式。17(二)存儲器效率(二)存儲器效率 采用結(jié)構(gòu)化程序設(shè)計(jì),將程序功能合理采用結(jié)構(gòu)化程序設(shè)計(jì),將程序功能合理分塊,使每個模塊或一組密切相關(guān)模塊的程序體積分塊,使每個模塊或一組密切相關(guān)模塊的程序體積大小與每頁的容量相匹配,可減少頁面調(diào)度、減少大小與每頁的容量相匹配,可減少頁面調(diào)度、減少內(nèi)外存交換,提高存儲器效率。內(nèi)外存交換,提高存儲器效率。在微型計(jì)算機(jī)系統(tǒng)中,存儲器的容量對在微型計(jì)算機(jī)系統(tǒng)中,存儲器的容量對軟件設(shè)計(jì)和編碼的制約比較大。因此要選擇可生成軟件設(shè)計(jì)和編碼的制約比較大。因此要選擇可生成較短目標(biāo)代碼且存儲壓縮性能優(yōu)良的編譯程序,有較短目標(biāo)代碼且存儲壓縮性能優(yōu)良的編譯程序
17、,有時需要采用匯編語言編程。時需要采用匯編語言編程。 18(三)輸入(三)輸入/ /輸出的效率輸出的效率 (1 1)所有輸入)所有輸入/ /輸出都應(yīng)該有緩沖,以減少過多的輸出都應(yīng)該有緩沖,以減少過多的通信次數(shù)。通信次數(shù)。(2 2)對輔存(如磁盤),應(yīng)選用最簡單的訪問方法。)對輔存(如磁盤),應(yīng)選用最簡單的訪問方法。(3 3)輔存的輸入)輔存的輸入/ /輸出,應(yīng)該以塊為單位進(jìn)行。輸出,應(yīng)該以塊為單位進(jìn)行。(4 4)終端和打印機(jī)的輸入)終端和打印機(jī)的輸入/ /輸出,應(yīng)當(dāng)考慮設(shè)備的輸出,應(yīng)當(dāng)考慮設(shè)備的特性,以提高輸入特性,以提高輸入/ /輸出的質(zhì)量和速度。輸出的質(zhì)量和速度。(5 5)不應(yīng)當(dāng)采用不能被
18、人們所理解的超高效的輸入)不應(yīng)當(dāng)采用不能被人們所理解的超高效的輸入/ /輸出。輸出。19 軟件測試軟件測試(一)軟件測試基礎(chǔ)(一)軟件測試基礎(chǔ)1.什么是什么是“測試測試” “測試測試”的恰當(dāng)定義應(yīng)該是的恰當(dāng)定義應(yīng)該是“為了發(fā)現(xiàn)錯誤而為了發(fā)現(xiàn)錯誤而執(zhí)行程序執(zhí)行程序”。2.測試策略測試策略 在一定的研制時間、研制經(jīng)費(fèi)的限制下,通過在一定的研制時間、研制經(jīng)費(fèi)的限制下,通過執(zhí)行有限個測試用例,盡可能多地發(fā)現(xiàn)一些錯誤。執(zhí)行有限個測試用例,盡可能多地發(fā)現(xiàn)一些錯誤。3.測試的關(guān)鍵測試的關(guān)鍵 如何測試高產(chǎn)的測試用例如何測試高產(chǎn)的測試用例204.4.軟件測試的目標(biāo)軟件測試的目標(biāo)(1) (1) 測試是為了發(fā)現(xiàn)程序
19、中的錯誤而執(zhí)行程序的過程測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程(2) (2) 好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案誤的測試方案(3) (3) 成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試試215.5.軟件測試準(zhǔn)則軟件測試準(zhǔn)則(1 1) 所有測試都應(yīng)該能追溯到用戶需求所有測試都應(yīng)該能追溯到用戶需求(2 2) 應(yīng)該遠(yuǎn)在測試開始之前就制定出測試計(jì)劃應(yīng)該遠(yuǎn)在測試開始之前就制定出測試計(jì)劃(3 3) 把把ParetoPareto原理應(yīng)用到軟件測試中原理應(yīng)用到軟件測試中 ParetoPareto
20、原理說明,測試發(fā)現(xiàn)的錯誤中的原理說明,測試發(fā)現(xiàn)的錯誤中的80%80%很可能是由程很可能是由程序中序中20%20%的模塊造成的的模塊造成的(4 4) 應(yīng)該從應(yīng)該從“小規(guī)模小規(guī)模”測試開始,并逐步進(jìn)行測試開始,并逐步進(jìn)行“大規(guī)模大規(guī)?!睖y測試試(5 5) 窮舉測試是不可能的窮舉測試是不可能的 窮舉測試就是把程序所有可能的執(zhí)行路徑都檢查一遍的窮舉測試就是把程序所有可能的執(zhí)行路徑都檢查一遍的測試測試(6 6) 為了達(dá)到最佳的測試效果,應(yīng)該由獨(dú)立的第三方從事測為了達(dá)到最佳的測試效果,應(yīng)該由獨(dú)立的第三方從事測試工作試工作 “最佳效果最佳效果”是指有最大可能性發(fā)現(xiàn)錯誤的測試是指有最大可能性發(fā)現(xiàn)錯誤的測試22
21、6.6. 測試方法測試方法 兩種測試方法:兩種測試方法:黑盒測試黑盒測試和和白盒測試白盒測試 黑盒法黑盒法的特點(diǎn):測試人員將程序看成一個的特點(diǎn):測試人員將程序看成一個“黑黑盒盒”,不關(guān)心程序內(nèi)部是怎么做的,而只是想檢查,不關(guān)心程序內(nèi)部是怎么做的,而只是想檢查程序是否符合它的程序是否符合它的“功能說明功能說明”。所以使用黑盒法。所以使用黑盒法時,測試用例是完全根據(jù)程序的功能說明來設(shè)計(jì)的。時,測試用例是完全根據(jù)程序的功能說明來設(shè)計(jì)的?!咀⒆ⅰ咳绻胗煤诤蟹òl(fā)現(xiàn)程序中所有的錯誤,則如果想用黑盒法發(fā)現(xiàn)程序中所有的錯誤,則必須用輸入數(shù)據(jù)的所有可能值來檢查程序是否都能必須用輸入數(shù)據(jù)的所有可能值來檢查程序是
22、否都能產(chǎn)生正確的結(jié)果。產(chǎn)生正確的結(jié)果。 23 白盒法白盒法的特點(diǎn):需了解程序內(nèi)部的結(jié)構(gòu),此時測的特點(diǎn):需了解程序內(nèi)部的結(jié)構(gòu),此時測試用例是根據(jù)程序的內(nèi)部邏輯來設(shè)計(jì)的。如果想用試用例是根據(jù)程序的內(nèi)部邏輯來設(shè)計(jì)的。如果想用白盒法來發(fā)現(xiàn)程序中所有的錯誤,則至少必須使程白盒法來發(fā)現(xiàn)程序中所有的錯誤,則至少必須使程序中的每種可能的路徑都執(zhí)行一次。序中的每種可能的路徑都執(zhí)行一次。【注注】使用白盒法時還應(yīng)該認(rèn)識到:即使試遍所有使用白盒法時還應(yīng)該認(rèn)識到:即使試遍所有的路徑,仍不能保證程序符合它的功能要求,因?yàn)榈穆窂?,仍不能保證程序符合它的功能要求,因?yàn)槌绦蛑杏行╁e誤是與數(shù)據(jù)有關(guān)的。程序中有些錯誤是與數(shù)據(jù)有關(guān)的
23、。例如:例如:程序錯誤地將語句程序錯誤地將語句X:=Y+ZX:=Y+Z編寫成編寫成X:=Y-ZX:=Y-Z,但,但測試中執(zhí)行該語句時,變量測試中執(zhí)行該語句時,變量Z Z的值恰好是零,這個錯的值恰好是零,這個錯誤就不能被發(fā)現(xiàn)。另外,程序中還可能遺漏了某些誤就不能被發(fā)現(xiàn)。另外,程序中還可能遺漏了某些路徑。路徑。247.7. 測試步驟測試步驟(1 1)模塊測試(單元測試)模塊測試(單元測試) 把每個模塊作為一個單獨(dú)的實(shí)體來測試,通常把每個模塊作為一個單獨(dú)的實(shí)體來測試,通常比較容易設(shè)計(jì)檢驗(yàn)?zāi)K正確性的測試方案比較容易設(shè)計(jì)檢驗(yàn)?zāi)K正確性的測試方案(2 2)子系統(tǒng)測試)子系統(tǒng)測試 把經(jīng)過單元測試的模塊放在
24、一起形成一個子系把經(jīng)過單元測試的模塊放在一起形成一個子系統(tǒng)來測試統(tǒng)來測試(3 3)系統(tǒng)測試)系統(tǒng)測試 把經(jīng)過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來把經(jīng)過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來測試測試25(4 4)驗(yàn)收測試)驗(yàn)收測試 把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測試,使用實(shí)把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測試,使用實(shí)際數(shù)據(jù)(系統(tǒng)將來要處理的信息)進(jìn)行測試際數(shù)據(jù)(系統(tǒng)將來要處理的信息)進(jìn)行測試(5 5)平行運(yùn)行)平行運(yùn)行 同時運(yùn)行新開發(fā)出來的系統(tǒng)和將被它取代的舊同時運(yùn)行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結(jié)果,這樣做系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結(jié)果,這樣做的的目的目的:(1)
25、(1) 可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(2) (2) 用戶能有一段熟悉新系統(tǒng)的時間用戶能有一段熟悉新系統(tǒng)的時間(3) (3) 可以驗(yàn)證用戶指南和使用手冊之類的文檔可以驗(yàn)證用戶指南和使用手冊之類的文檔(4) (4) 能夠以準(zhǔn)生產(chǎn)模式對新系統(tǒng)進(jìn)行全負(fù)荷測試,能夠以準(zhǔn)生產(chǎn)模式對新系統(tǒng)進(jìn)行全負(fù)荷測試,可以用測試結(jié)果驗(yàn)證性能指標(biāo)可以用測試結(jié)果驗(yàn)證性能指標(biāo)268.8. 測試階段的信息流測試階段的信息流27(二)軟件測試過程(二)軟件測試過程 軟件測試過程由單元測試、集成測試和驗(yàn)收測軟件測試過程由單元測試、集成測試和驗(yàn)收測試三部分組成。試三部分組成。1.單元
26、測試單元測試(1)單元測試的內(nèi)容)單元測試的內(nèi)容 單元測試主要考察模塊接口單元測試主要考察模塊接口 局部數(shù)據(jù)結(jié)構(gòu)局部數(shù)據(jù)結(jié)構(gòu) 重要的執(zhí)行通路重要的執(zhí)行通路 出錯處理和影響出錯處理和影響 邊界測試邊界測試28 模塊接口模塊接口1 1)參數(shù)數(shù)目和由調(diào)用模塊送來的變元的數(shù)目、屬性)參數(shù)數(shù)目和由調(diào)用模塊送來的變元的數(shù)目、屬性是否一致?是否一致?2 2)參數(shù)和變元的單位系統(tǒng)是否一致?)參數(shù)和變元的單位系統(tǒng)是否一致?3 3)傳送給被調(diào)用模塊的變元的目數(shù)、屬性是否與參)傳送給被調(diào)用模塊的變元的目數(shù)、屬性是否與參數(shù)的數(shù)目、屬性相同?數(shù)的數(shù)目、屬性相同?4 4)傳送給被調(diào)用模塊的變元的單位系統(tǒng)是否等于參)傳送給
27、被調(diào)用模塊的變元的單位系統(tǒng)是否等于參數(shù)的單位系統(tǒng)?數(shù)的單位系統(tǒng)?5 5)引用內(nèi)部函數(shù)時,變元次序、屬性和數(shù)目是否正)引用內(nèi)部函數(shù)時,變元次序、屬性和數(shù)目是否正確?確?6 6)是否修改了只作輸入用的變元?)是否修改了只作輸入用的變元?7 7)全程變量的定義和使用在各個模塊中是否一致?)全程變量的定義和使用在各個模塊中是否一致?29當(dāng)一個模塊執(zhí)行外部的當(dāng)一個模塊執(zhí)行外部的I/OI/O操作時,需附加以下測試:操作時,需附加以下測試:1 1)文件屬性正確嗎?)文件屬性正確嗎?2 2)OPENOPEN語句是否正確?語句是否正確?3 3)緩沖區(qū)大小與記錄長度是否匹配?)緩沖區(qū)大小與記錄長度是否匹配?4 4
28、)使用文件之前先打開文件了嗎?)使用文件之前先打開文件了嗎?5 5)文件結(jié)束的條件處理了嗎?)文件結(jié)束的條件處理了嗎?6 6)I/OI/O錯誤查檢處理了嗎?錯誤查檢處理了嗎?7 7)輸出信息中有文字書寫錯誤嗎?)輸出信息中有文字書寫錯誤嗎?8 8)格式說明書與輸入)格式說明書與輸入/ /輸出語句是否一致?輸出語句是否一致?30 局部數(shù)據(jù)結(jié)構(gòu)局部數(shù)據(jù)結(jié)構(gòu)1 1)不正確或不一致的數(shù)據(jù)說明)不正確或不一致的數(shù)據(jù)說明2 2)錯誤的初始化或沒有賦初值)錯誤的初始化或沒有賦初值3 3)變量名的拼寫或縮寫錯誤)變量名的拼寫或縮寫錯誤4 4)數(shù)據(jù)類型不相容)數(shù)據(jù)類型不相容5 5)上溢、下溢和地址異常)上溢、下
29、溢和地址異常 在單元測試時,除局部數(shù)據(jù)結(jié)構(gòu)外,全程數(shù)據(jù)在單元測試時,除局部數(shù)據(jù)結(jié)構(gòu)外,全程數(shù)據(jù)對模塊的影響也應(yīng)檢查。對模塊的影響也應(yīng)檢查。31重要的執(zhí)行通路重要的執(zhí)行通路1 1)誤解或錯誤理解算術(shù)運(yùn)算的優(yōu)先次序)誤解或錯誤理解算術(shù)運(yùn)算的優(yōu)先次序2)混合運(yùn)算中運(yùn)算對象的類型彼此不相容)混合運(yùn)算中運(yùn)算對象的類型彼此不相容3)初始化不正確)初始化不正確4)精度不夠)精度不夠5)表達(dá)式的符號表示不正確)表達(dá)式的符號表示不正確6)不同數(shù)據(jù)類型的數(shù)進(jìn)行比較)不同數(shù)據(jù)類型的數(shù)進(jìn)行比較7)不正確的邏輯運(yùn)算符或不正確的優(yōu)先順序)不正確的邏輯運(yùn)算符或不正確的優(yōu)先順序8)本應(yīng)相等,但因精確度不夠使之不等)本應(yīng)相等,
30、但因精確度不夠使之不等9)差)差1錯(多一次或少一次循環(huán))錯(多一次或少一次循環(huán))10)不正?;虿淮嬖诘难h(huán)結(jié)束條件)不正?;虿淮嬖诘难h(huán)結(jié)束條件11)當(dāng)遇到發(fā)散的循環(huán)時,無法終止循環(huán))當(dāng)遇到發(fā)散的循環(huán)時,無法終止循環(huán)12)錯誤地修改循環(huán)變量)錯誤地修改循環(huán)變量32 出錯處理出錯處理1 1)輸出的出錯信息難以理解)輸出的出錯信息難以理解2 2)指出的錯誤并不是所遇到的錯誤)指出的錯誤并不是所遇到的錯誤3 3)未進(jìn)行出錯處理就先進(jìn)行系統(tǒng)干預(yù))未進(jìn)行出錯處理就先進(jìn)行系統(tǒng)干預(yù)4 4)錯誤處理不正確)錯誤處理不正確5 5)描述錯誤的信息不足以幫助確定錯誤的位置)描述錯誤的信息不足以幫助確定錯誤的位置3
31、3 邊界測試邊界測試 邊界測試是單元測試步驟中最后的,也是最重邊界測試是單元測試步驟中最后的,也是最重要的任務(wù),軟件常常在邊界上出錯。例如,在處理要的任務(wù),軟件常常在邊界上出錯。例如,在處理n n維數(shù)組的第維數(shù)組的第n n個元素時很可能出錯。因此,在為數(shù)據(jù)個元素時很可能出錯。因此,在為數(shù)據(jù)結(jié)構(gòu)、控制變量及數(shù)據(jù)值設(shè)計(jì)測試情況時,把測試結(jié)構(gòu)、控制變量及數(shù)據(jù)值設(shè)計(jì)測試情況時,把測試安排在略低于、等于、略高于他們的最大值或最小安排在略低于、等于、略高于他們的最大值或最小值處是很可能發(fā)現(xiàn)錯誤的。值處是很可能發(fā)現(xiàn)錯誤的。34(2 2)單元測試的方法)單元測試的方法 人工測試人工測試 人工測試也稱人工代碼審
32、查,既可由程序員自人工測試也稱人工代碼審查,既可由程序員自己來完成,也可由審查小組來完成。后者對單元測己來完成,也可由審查小組來完成。后者對單元測試很有效,可以查出試很有效,可以查出30%70%30%70%的邏輯設(shè)計(jì)錯誤和編的邏輯設(shè)計(jì)錯誤和編碼錯誤。碼錯誤。 計(jì)算機(jī)測試計(jì)算機(jī)測試 每一個被測試的單元不都是一個獨(dú)立的程序模每一個被測試的單元不都是一個獨(dú)立的程序模塊,模塊自己不能運(yùn)行,必須依靠其它模塊來驅(qū)動,塊,模塊自己不能運(yùn)行,必須依靠其它模塊來驅(qū)動,同時每一個模塊在整個系統(tǒng)結(jié)構(gòu)中的執(zhí)行往往又調(diào)同時每一個模塊在整個系統(tǒng)結(jié)構(gòu)中的執(zhí)行往往又調(diào)用一些下屬模塊。驅(qū)動程序和存根程序。用一些下屬模塊。驅(qū)動程
33、序和存根程序。351 1)驅(qū)動程序)驅(qū)動程序 驅(qū)動程序的作用是模擬驅(qū)動程序的作用是模擬x x的調(diào)用模塊,它接收不的調(diào)用模塊,它接收不同測試用例的數(shù)據(jù),并把這些數(shù)據(jù)傳送給被測試的同測試用例的數(shù)據(jù),并把這些數(shù)據(jù)傳送給被測試的模塊模塊x x,然后打印有關(guān)的結(jié)果。,然后打印有關(guān)的結(jié)果。2 2)存根程序)存根程序 存根程序的作用是模擬被測模塊的下屬模塊,存根程序的作用是模擬被測模塊的下屬模塊,印出對入口的檢驗(yàn)或操作結(jié)果,并把控制歸還給調(diào)印出對入口的檢驗(yàn)或操作結(jié)果,并把控制歸還給調(diào)用他的模塊。用他的模塊。驅(qū)動程序X存根程序1存根程序i362.集成測試集成測試 集成測試是組裝軟件的系統(tǒng)技術(shù),在裝配的過集成測
34、試是組裝軟件的系統(tǒng)技術(shù),在裝配的過程中對組裝的模塊進(jìn)行測試。集成測試的目的是發(fā)程中對組裝的模塊進(jìn)行測試。集成測試的目的是發(fā)現(xiàn)與模塊接口有關(guān)的問題,它包括了子系統(tǒng)測試和現(xiàn)與模塊接口有關(guān)的問題,它包括了子系統(tǒng)測試和系統(tǒng)測試兩個過程。系統(tǒng)測試兩個過程。 集成測試方法:集成測試方法: 非漸增式測試方法非漸增式測試方法自底向上的結(jié)合技術(shù)自底向上的結(jié)合技術(shù) 漸增式測試方法漸增式測試方法自頂向下的結(jié)合技術(shù)自頂向下的結(jié)合技術(shù)深度優(yōu)先的結(jié)合策略深度優(yōu)先的結(jié)合策略寬度優(yōu)先的結(jié)合策略寬度優(yōu)先的結(jié)合策略37(1 1)兩種測試方法及比較)兩種測試方法及比較 漸增式測試方法,是把下一個要測試的模塊同已經(jīng)漸增式測試方法,是
35、把下一個要測試的模塊同已經(jīng)測好的模塊結(jié)合起來進(jìn)行測試,測試完成后再把下測好的模塊結(jié)合起來進(jìn)行測試,測試完成后再把下一個應(yīng)該測試的模塊結(jié)合進(jìn)來測試,這種方法每次一個應(yīng)該測試的模塊結(jié)合進(jìn)來測試,這種方法每次只增加一個模塊。只增加一個模塊。 非漸增式測試方法,先分別測試每個模塊,然后再非漸增式測試方法,先分別測試每個模塊,然后再把所有的模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程把所有的模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程序。序。 這兩種測試方法漸增式測試方法要更好些。由這兩種測試方法漸增式測試方法要更好些。由于它測試的徹底性,對于提高軟件質(zhì)量有較大幫助,于它測試的徹底性,對于提高軟件質(zhì)量有較大幫助,目前應(yīng)
36、用軟件均采用此方法進(jìn)行集成測試。目前應(yīng)用軟件均采用此方法進(jìn)行集成測試。38 非漸增式測試方法 原因漸增式測試方法 原因測試工作量大要編寫測試用的軟件多較小已測試的模塊可作為部分測試軟件發(fā)現(xiàn)接口錯誤時間晚最后組裝早邊測試邊組裝錯誤定位難最后組裝易邊測試邊組裝軟件測試的徹底性差只進(jìn)行單元測試和組裝測試好除單元測試外邊組裝邊測試使系統(tǒng)經(jīng)歷多次回歸測試測試所占用的機(jī)器時間短可以多人并行測試長只能由一個人進(jìn)行測試,測試中有回歸測試測試的人力使用情況充分可并行測試不充分不能進(jìn)行并行測試測試進(jìn)度快可并行測試慢只能一個人進(jìn)行測試用戶的滿意率較低測試不徹底高有回歸測試,測試徹底類類 原因原因比較內(nèi)容比較內(nèi)容39
37、(2 2)自頂向下的結(jié)合)自頂向下的結(jié)合 在漸增式測試方法中,把模塊結(jié)合到軟件系統(tǒng)在漸增式測試方法中,把模塊結(jié)合到軟件系統(tǒng)中去采用自頂向下的結(jié)合技術(shù)。從主控制模塊開始,中去采用自頂向下的結(jié)合技術(shù)。從主控制模塊開始,沿著控制層次向下移動,逐漸把各個模塊都一一結(jié)沿著控制層次向下移動,逐漸把各個模塊都一一結(jié)合起來,從而構(gòu)成目標(biāo)系統(tǒng)。合起來,從而構(gòu)成目標(biāo)系統(tǒng)。40 深度優(yōu)先策略深度優(yōu)先策略 先把軟件結(jié)構(gòu)的一條主控制路徑上的所有模塊先把軟件結(jié)構(gòu)的一條主控制路徑上的所有模塊都結(jié)合裝配起來,然后再結(jié)合裝配中央或右側(cè)的控都結(jié)合裝配起來,然后再結(jié)合裝配中央或右側(cè)的控制路徑,直到所有模塊都被結(jié)合進(jìn)去為止。其中主制
38、路徑,直到所有模塊都被結(jié)合進(jìn)去為止。其中主控制路徑的選擇取決于系統(tǒng)的應(yīng)用特點(diǎn),同時也帶控制路徑的選擇取決于系統(tǒng)的應(yīng)用特點(diǎn),同時也帶有很大任意性,在某種程度上也與人的因素有關(guān)。有很大任意性,在某種程度上也與人的因素有關(guān)。M M1 1-M-M2 2-M-M5 5-M-M8 8-M-M6 6-M-M3 3-S-S7 7-S-S4 441 寬度優(yōu)先策略寬度優(yōu)先策略 寬度優(yōu)先的結(jié)合策略是沿著軟件結(jié)構(gòu)水平地移寬度優(yōu)先的結(jié)合策略是沿著軟件結(jié)構(gòu)水平地移動,把處于同一個控制層次上的所有模塊組裝起來,動,把處于同一個控制層次上的所有模塊組裝起來,然后再組裝下一個控制層次中的所有模塊,如此繼然后再組裝下一個控制層次
39、中的所有模塊,如此繼續(xù)進(jìn)行下去,直到所有模塊都被結(jié)合進(jìn)軟件結(jié)構(gòu)為續(xù)進(jìn)行下去,直到所有模塊都被結(jié)合進(jìn)軟件結(jié)構(gòu)為止。止。M M1 1-M-M2 2-M-M3 3-S-S4 4-M-M5 5-M-M6 6-S-S7 7-M-M8 842 自頂向下的結(jié)合過程自頂向下的結(jié)合過程1 1)用主控程序作為測試驅(qū)動模塊,用存根程序代替)用主控程序作為測試驅(qū)動模塊,用存根程序代替所有下屬于主控制模塊的模塊;所有下屬于主控制模塊的模塊;2 2)選擇一種結(jié)合策略,每次用一個實(shí)際模塊代換一)選擇一種結(jié)合策略,每次用一個實(shí)際模塊代換一個存根程序;個存根程序;3 3)每結(jié)合一個模塊,就進(jìn)行相應(yīng)的測試;)每結(jié)合一個模塊,就進(jìn)
40、行相應(yīng)的測試;4 4)為了保證不引進(jìn)新的錯誤,可以進(jìn)行回歸測試)為了保證不引進(jìn)新的錯誤,可以進(jìn)行回歸測試 從從2 2)開始不斷重復(fù)進(jìn)行上述過程,直到構(gòu)造成)開始不斷重復(fù)進(jìn)行上述過程,直到構(gòu)造成完整的軟件結(jié)構(gòu)為止。完整的軟件結(jié)構(gòu)為止。43(3 3)自底向上的結(jié)合)自底向上的結(jié)合 這種結(jié)合方法是從軟件結(jié)構(gòu)最底層模塊開始進(jìn)行這種結(jié)合方法是從軟件結(jié)構(gòu)最底層模塊開始進(jìn)行裝配和測試。它不需要存根程序,因?yàn)閺淖畹讓酉蛏涎b配和測試。它不需要存根程序,因?yàn)閺淖畹讓酉蛏辖Y(jié)合,在逐步處理以上層次的模塊時所需要的子模塊結(jié)合,在逐步處理以上層次的模塊時所需要的子模塊總可以得到。但這種結(jié)合方法需要驅(qū)動程序。自底向總可以得
41、到。但這種結(jié)合方法需要驅(qū)動程序。自底向上結(jié)合技術(shù)一般支持非漸增式測試方法。上結(jié)合技術(shù)一般支持非漸增式測試方法。44 自底向上的結(jié)合過程為:自底向上的結(jié)合過程為:1 1)把低層模塊組成族,)把低層模塊組成族,以實(shí)現(xiàn)某個特定的軟件以實(shí)現(xiàn)某個特定的軟件子功能;子功能;2 2)為每個族寫一個驅(qū)動)為每個族寫一個驅(qū)動程序,作為測試的控制,程序,作為測試的控制,用以協(xié)調(diào)測試數(shù)據(jù)的輸用以協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;入和輸出;3 3)對族進(jìn)行測試;)對族進(jìn)行測試;4 4)去掉驅(qū)動程序,)去掉驅(qū)動程序,沿軟件結(jié)構(gòu)自動向上移動,沿軟件結(jié)構(gòu)自動向上移動,把子功能族結(jié)合起來形成把子功能族結(jié)合起來形成更大的子功能族。更大
42、的子功能族。45 自頂向下集成測試方法自頂向下集成測試方法l 優(yōu)點(diǎn):不需要設(shè)計(jì)驅(qū)動程序,能在測試早期實(shí)現(xiàn)并優(yōu)點(diǎn):不需要設(shè)計(jì)驅(qū)動程序,能在測試早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能,發(fā)現(xiàn)上層模塊的接口錯誤;驗(yàn)證系統(tǒng)的主要功能,發(fā)現(xiàn)上層模塊的接口錯誤;l 缺點(diǎn):需要存根程序,并且與存根程序有關(guān)的測試缺點(diǎn):需要存根程序,并且與存根程序有關(guān)的測試較困難,低層關(guān)鍵模塊中的錯誤發(fā)現(xiàn)較晚。較困難,低層關(guān)鍵模塊中的錯誤發(fā)現(xiàn)較晚。l 自底向上集成測試方法自底向上集成測試方法l 優(yōu)點(diǎn):不需要設(shè)計(jì)存根程序,測試用例的設(shè)計(jì)比自優(yōu)點(diǎn):不需要設(shè)計(jì)存根程序,測試用例的設(shè)計(jì)比自頂向下集成測試容易;頂向下集成測試容易;l 缺點(diǎn):直到把最
43、后一個模塊結(jié)合進(jìn)來以前,程序作缺點(diǎn):直到把最后一個模塊結(jié)合進(jìn)來以前,程序作為一個整體始終不存在。為一個整體始終不存在。463.確認(rèn)測試確認(rèn)測試 軟件的有效性是確認(rèn)測試的任務(wù),軟件有效的軟件的有效性是確認(rèn)測試的任務(wù),軟件有效的標(biāo)準(zhǔn),也是確認(rèn)測試的基礎(chǔ)。標(biāo)準(zhǔn),也是確認(rèn)測試的基礎(chǔ)。 確認(rèn)測試的目標(biāo)是:檢查系統(tǒng)的功能、性能要確認(rèn)測試的目標(biāo)是:檢查系統(tǒng)的功能、性能要求是否已達(dá)到用戶所要求的那樣,文檔資料是否正求是否已達(dá)到用戶所要求的那樣,文檔資料是否正確、完整,系統(tǒng)的可移植性、兼容性、錯誤的恢復(fù)確、完整,系統(tǒng)的可移植性、兼容性、錯誤的恢復(fù)能力和易維護(hù)性等是否滿足。能力和易維護(hù)性等是否滿足。 47 確認(rèn)測
44、試對已測試過的純技術(shù)性問題不再測試,對確認(rèn)測試對已測試過的純技術(shù)性問題不再測試,對用戶特別感興趣的功能和性能需要增加測試,按照用戶用戶特別感興趣的功能和性能需要增加測試,按照用戶的實(shí)際使用過程,使用實(shí)際數(shù)據(jù)進(jìn)行測試。確認(rèn)測試是的實(shí)際使用過程,使用實(shí)際數(shù)據(jù)進(jìn)行測試。確認(rèn)測試是以用戶為主進(jìn)行的,用戶參與設(shè)計(jì)測試方案,參與實(shí)地以用戶為主進(jìn)行的,用戶參與設(shè)計(jì)測試方案,參與實(shí)地測試,參與評價測試結(jié)果。測試,參與評價測試結(jié)果。確認(rèn)測試屬于黑盒測試。確認(rèn)測試屬于黑盒測試。確認(rèn)測試的結(jié)果可能有兩種:確認(rèn)測試的結(jié)果可能有兩種: 功能和性能與用戶要求一致,軟件是可以接受的。功能和性能與用戶要求一致,軟件是可以接受
45、的。 功能或性能與用戶的要求有差距。功能或性能與用戶的要求有差距。48(三)設(shè)計(jì)測試方案(三)設(shè)計(jì)測試方案 白盒測試白盒測試 邏輯覆蓋邏輯覆蓋 黑盒測試黑盒測試 等價類劃分等價類劃分邊界值邊界值錯誤推測錯誤推測 圖形技術(shù)圖形技術(shù)491.1.邏輯覆蓋邏輯覆蓋 邏輯覆蓋是以程序內(nèi)部邏輯為基礎(chǔ)的測試技術(shù),邏輯覆蓋是以程序內(nèi)部邏輯為基礎(chǔ)的測試技術(shù),它考慮測試用例對程序內(nèi)部邏輯覆蓋的程度。最常它考慮測試用例對程序內(nèi)部邏輯覆蓋的程度。最常用的邏輯覆蓋標(biāo)準(zhǔn)主要有以下五種。用的邏輯覆蓋標(biāo)準(zhǔn)主要有以下五種。(1 1)語句覆蓋)語句覆蓋 語句覆蓋的含義是:選擇足夠的測試用例(測語句覆蓋的含義是:選擇足夠的測試用例
46、(測試數(shù)據(jù)),使程序中每個語句至少都能執(zhí)行一次。試數(shù)據(jù)),使程序中每個語句至少都能執(zhí)行一次。50(1)a,b判定取真判定取真A1,B=0,A=2,X1(2)選擇測試數(shù)據(jù))選擇測試數(shù)據(jù)A=2,B=0,X=2(3)實(shí)現(xiàn)執(zhí)行路徑覆蓋)實(shí)現(xiàn)執(zhí)行路徑覆蓋 sacbed512.2.判定覆蓋判定覆蓋 判定覆蓋又叫分支覆蓋,判定覆蓋又叫分支覆蓋,它的含義是:選擇足夠的測試它的含義是:選擇足夠的測試用例,使程序中的每個判定至用例,使程序中的每個判定至少取得一次少取得一次“真真”值和值和“假假”值,也就是使程序中的每個分值,也就是使程序中的每個分支至少執(zhí)行一次。支至少執(zhí)行一次。 (1 1)若選擇覆蓋路徑為)若選擇
47、覆蓋路徑為sacbedsacbed和和sabdsabd時,測試數(shù)據(jù)為時,測試數(shù)據(jù)為A=2,B=0,X=3A=2,B=0,X=3和和A=1,B=0,X=1A=1,B=0,X=1 (2 2)若選擇覆蓋路徑為)若選擇覆蓋路徑為sacbdsacbd和和sabedsabed時,測試數(shù)據(jù)為時,測試數(shù)據(jù)為A=3,B=0,X=1A=3,B=0,X=1和和A=2,B=1,X=1A=2,B=1,X=1523.3.條件覆蓋條件覆蓋 條件覆蓋的含義是:選擇足夠條件覆蓋的含義是:選擇足夠的測試用例,使得判定中的每個條的測試用例,使得判定中的每個條件取得各種可能的結(jié)果。件取得各種可能的結(jié)果。 a a點(diǎn)有下述可能結(jié)果:點(diǎn)有
48、下述可能結(jié)果: A2A2,A2A2,B B0 0,B0B0 b b點(diǎn)有下述可能結(jié)果:點(diǎn)有下述可能結(jié)果:A A2 2,A 2A 2,X1X1,X 1X 1只要選擇測試數(shù)據(jù)只要選擇測試數(shù)據(jù) A A2 2,B B0 0,X X4 4和和 A A1 1,B B1 1,X X1 1就可以滿足條件覆蓋。就可以滿足條件覆蓋。其覆蓋路徑為其覆蓋路徑為sacbedsacbed和和sabdsabd534.4.判定判定/ /條件覆蓋條件覆蓋 判定判定/ /條件覆蓋能同時滿足判定覆蓋和條件覆蓋條件覆蓋能同時滿足判定覆蓋和條件覆蓋兩種覆蓋標(biāo)準(zhǔn)。它的含義是:選擇足夠的測試用例,兩種覆蓋標(biāo)準(zhǔn)。它的含義是:選擇足夠的測試用例
49、,使得判定表達(dá)式中的每個條件都取到各種可能的值,使得判定表達(dá)式中的每個條件都取到各種可能的值,而且每個判定表達(dá)式也都取到各種可能的結(jié)果。下而且每個判定表達(dá)式也都取到各種可能的結(jié)果。下述兩組測試數(shù)據(jù)滿足判定述兩組測試數(shù)據(jù)滿足判定/ /條件覆蓋:條件覆蓋:A A2 2,B B0 0,X X4 4和和A A1 1,B B1 1,X X1 1 但這兩組測試數(shù)據(jù)與前述的條件覆蓋中選取的但這兩組測試數(shù)據(jù)與前述的條件覆蓋中選取的兩組數(shù)據(jù)相同,則不能不說,有時判定兩組數(shù)據(jù)相同,則不能不說,有時判定/ /條件覆蓋也條件覆蓋也并不比條件覆蓋更強(qiáng)。并不比條件覆蓋更強(qiáng)。545.5.條件組合覆蓋條件組合覆蓋 條件組合覆
50、蓋的含義是:選擇足夠的測試用例,條件組合覆蓋的含義是:選擇足夠的測試用例,使得每個判定表達(dá)式中條件的各種可能組合都至少使得每個判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。顯然,滿足條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)出現(xiàn)一次。顯然,滿足條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù),也一定滿足判定覆蓋、條件覆蓋和判定據(jù),也一定滿足判定覆蓋、條件覆蓋和判定/ /條件覆條件覆蓋,條件組合覆蓋是最強(qiáng)的一個覆蓋標(biāo)準(zhǔn)。蓋,條件組合覆蓋是最強(qiáng)的一個覆蓋標(biāo)準(zhǔn)。共有八種可能的條件組合:共有八種可能的條件組合:(1 1)A1,B=0 A1,B=0 (5 5)A=2,XA=2,X1 1 (2 2)A1,B0 A1,B0 (6 6)A=2,X1
51、 A=2,X1 (3 3)A1,B=0 A1,B=0 (7 7)A2,XA2,X1 1 (4 4)A1,B0 A1,B0 (8 8)A2,X1 A2,X1 55 下面四組測試數(shù)據(jù)可以使上面列出的八種條件下面四組測試數(shù)據(jù)可以使上面列出的八種條件組合每種至少出現(xiàn)一次:組合每種至少出現(xiàn)一次: A=2A=2,B=0B=0,X=4X=4滿足條件(滿足條件(1 1)和()和(5 5),覆蓋),覆蓋sacbedsacbed A=2 A=2,B=1B=1,X=1X=1滿足條件(滿足條件(2 2)和()和(6 6),覆蓋),覆蓋sabedsabed A=1 A=1,B=0B=0,X=2X=2滿足條件(滿足條件(
52、3 3)和()和(7 7),覆蓋),覆蓋sabedsabed A=1 A=1,B=1B=1,X=1X=1滿足條件(滿足條件(4 4)和()和(8 8),覆蓋),覆蓋sabdsabd566. 點(diǎn)覆蓋點(diǎn)覆蓋 圖論中點(diǎn)覆蓋的含義是:如果連通圖圖論中點(diǎn)覆蓋的含義是:如果連通圖G的子圖的子圖G是連通的,而且包含是連通的,而且包含G的所有結(jié)點(diǎn),則稱的所有結(jié)點(diǎn),則稱G是是G的點(diǎn)的點(diǎn)覆蓋。覆蓋。7. 邊覆蓋邊覆蓋 圖論中邊覆蓋的含義是:如果連通圖圖論中邊覆蓋的含義是:如果連通圖G的子圖的子圖G是連通的,而且包含是連通的,而且包含G的所有邊,則稱的所有邊,則稱G是是G的邊覆的邊覆蓋。蓋。8. 路徑覆蓋路徑覆蓋
53、路徑覆蓋的含義是:選取足夠多測試數(shù)據(jù),使路徑覆蓋的含義是:選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中如果程序圖中有環(huán),則要求每個環(huán)至少經(jīng)過一次有環(huán),則要求每個環(huán)至少經(jīng)過一次)。572.2.等價類劃分等價類劃分 等價類劃分是用黑盒法設(shè)計(jì)測試用例的一種技等價類劃分是用黑盒法設(shè)計(jì)測試用例的一種技術(shù)。窮盡的黑盒測試需要使用所有有效的和無效的術(shù)。窮盡的黑盒測試需要使用所有有效的和無效的輸入數(shù)據(jù)來測試程序,但這是不可行的。所以只能輸入數(shù)據(jù)來測試程序,但這是不可行的。所以只能選取少量的有代表性的輸入數(shù)據(jù),以較小的代價暴選取少量的有代表性的輸入數(shù)據(jù),以
54、較小的代價暴露出較多的程序錯誤。露出較多的程序錯誤。58 如果把所有可能的輸入數(shù)據(jù)如果把所有可能的輸入數(shù)據(jù)( (有效的和無效的有效的和無效的) )劃分成若干個等價類,則可以合理地做出下述假定:劃分成若干個等價類,則可以合理地做出下述假定:每類中的一個典型值在測試中的作用與這一類中所每類中的一個典型值在測試中的作用與這一類中所有其他值的作用相同。因此,可以從每個等價類中有其他值的作用相同。因此,可以從每個等價類中只取一組數(shù)據(jù)作為測試數(shù)據(jù)。這樣選取的測試數(shù)據(jù)只取一組數(shù)據(jù)作為測試數(shù)據(jù)。這樣選取的測試數(shù)據(jù)最有代表性,最可能發(fā)現(xiàn)程序中的錯誤。最有代表性,最可能發(fā)現(xiàn)程序中的錯誤。59(1 1)劃分等價類)
55、劃分等價類1 1) 如果規(guī)定了輸入值的范圍,則可劃分出一個有如果規(guī)定了輸入值的范圍,則可劃分出一個有效的等價類,兩個無效的等價類;效的等價類,兩個無效的等價類;2 2) 如果規(guī)定了輸入數(shù)據(jù)的個數(shù),也可以劃分出一如果規(guī)定了輸入數(shù)據(jù)的個數(shù),也可以劃分出一個有效的等價類和兩個無效的等價類;個有效的等價類和兩個無效的等價類;3 3) 如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ蝗绻?guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌斎胫底霾煌幚?,則每個允許的輸入值是一個同輸入值做不同處理,則每個允許的輸入值是一個有效的等價類,此外還有一個無效的等價類;有效的等價類,此外還有一個無效的等價類;604 4) 如果規(guī)定了
56、輸入數(shù)據(jù)必須遵循的規(guī)則,則可以如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,則可以劃分出一個有效的等價類和若干個無效的等價類;劃分出一個有效的等價類和若干個無效的等價類;5 5) 如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負(fù)整數(shù)等三個有效類;整數(shù)、零和負(fù)整數(shù)等三個有效類;6 6) 如果程序的處理對象是表格,則應(yīng)該使用空表,如果程序的處理對象是表格,則應(yīng)該使用空表,以及含一項(xiàng)或多項(xiàng)的表。以及含一項(xiàng)或多項(xiàng)的表。61(2 2)設(shè)計(jì)測試用例)設(shè)計(jì)測試用例1 1)為每個等價類編號;)為每個等價類編號;2 2)設(shè)計(jì)一個新的測試用例,使它盡可能多地覆蓋尚)設(shè)計(jì)一個新的測試
57、用例,使它盡可能多地覆蓋尚未被覆蓋的有效等價類,重復(fù)這一步驟直到所有有未被覆蓋的有效等價類,重復(fù)這一步驟直到所有有效等價類都被覆蓋為止;效等價類都被覆蓋為止;3 3) 設(shè)計(jì)一個新的測試用例,使它覆蓋一個而且只設(shè)計(jì)一個新的測試用例,使它覆蓋一個而且只覆蓋一個尚未被覆蓋的無效等價類,重復(fù)這一步驟,覆蓋一個尚未被覆蓋的無效等價類,重復(fù)這一步驟,直到所有無效等價類都被覆蓋為止。直到所有無效等價類都被覆蓋為止。623.3.邊界值分析邊界值分析 使用剛好等于、小于或大于邊界值的數(shù)據(jù)來進(jìn)使用剛好等于、小于或大于邊界值的數(shù)據(jù)來進(jìn)行測試,有較大的可能發(fā)現(xiàn)錯誤。用邊界值分析技行測試,有較大的可能發(fā)現(xiàn)錯誤。用邊界值
58、分析技術(shù)設(shè)計(jì)測試方案首先應(yīng)確定邊界情況,這需要經(jīng)驗(yàn)術(shù)設(shè)計(jì)測試方案首先應(yīng)確定邊界情況,這需要經(jīng)驗(yàn)和創(chuàng)造性,通常輸入等價類和輸出等價類的邊界,和創(chuàng)造性,通常輸入等價類和輸出等價類的邊界,是應(yīng)該著重測試的程序邊界情況。是應(yīng)該著重測試的程序邊界情況。63 通常設(shè)計(jì)測試方案時總是聯(lián)合使用等價劃分和通常設(shè)計(jì)測試方案時總是聯(lián)合使用等價劃分和邊界值分析兩種技術(shù),協(xié)調(diào)邊界值分析和等價類劃邊界值分析兩種技術(shù),協(xié)調(diào)邊界值分析和等價類劃分二者之間的差別:分二者之間的差別: 邊界值分析技術(shù)不是從一個等價類中任選一個測試邊界值分析技術(shù)不是從一個等價類中任選一個測試用例作代表;用例作代表; 邊界值分析技術(shù)不僅注意輸入條件,
59、它還根據(jù)輸出邊界值分析技術(shù)不僅注意輸入條件,它還根據(jù)輸出情況設(shè)計(jì)測試用例。情況設(shè)計(jì)測試用例。 64例:計(jì)算機(jī)輸出整數(shù)的范圍在例:計(jì)算機(jī)輸出整數(shù)的范圍在-32768-327683276732767之間,之間,若我們要測試機(jī)器所能表示整數(shù)的邊界情況,若我們要測試機(jī)器所能表示整數(shù)的邊界情況,則有如下測試方案和輸出結(jié)果。則有如下測試方案和輸出結(jié)果。輸入輸入-32769-32769,輸出,輸出“無效輸入無效輸入”輸入輸入-32768-32768,輸出,輸出-32768-32768輸入輸入-32767-32767,輸出,輸出-32767-32767輸入輸入3276632766,輸出,輸出327663276
60、6輸入輸入3276732767,輸出,輸出3276732767輸入輸入3276832768,輸出,輸出“無效輸入無效輸入”654.4.錯誤推測錯誤推測 人們也可以通過經(jīng)驗(yàn)或直覺推測程序中可能存人們也可以通過經(jīng)驗(yàn)或直覺推測程序中可能存在的各種錯誤,有針對性地設(shè)計(jì)檢查這些錯誤的測在的各種錯誤,有針對性地設(shè)計(jì)檢查這些錯誤的測試用例,這就是錯誤推測技術(shù)。錯誤推測技術(shù)沒有試用例,這就是錯誤推測技術(shù)。錯誤推測技術(shù)沒有確定的步驟,在很大程度上是憑經(jīng)驗(yàn)進(jìn)行的。確定的步驟,在很大程度上是憑經(jīng)驗(yàn)進(jìn)行的。66(四)綜合策略(四)綜合策略 白盒法和黑盒法各有長處和短處,每種方法都可白盒法和黑盒法各有長處和短處,每種方
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代學(xué)生餐廳的照明與色彩搭配藝術(shù)
- 深度解讀網(wǎng)絡(luò)輿情的來源與影響研究報(bào)告解讀分享
- 現(xiàn)代金融行業(yè)中的移動支付技術(shù)與教育普及
- 快手國慶節(jié)的活動方案
- 國慶假期活動方案
- 國慶節(jié)酒店漲價活動方案
- 2、3、4的乘法口訣(說課稿)-2024-2025學(xué)年二年級上冊數(shù)學(xué)人教版
- Unit1 There is a horse in this photo(說課稿)-2024-2025學(xué)年外研版(三起)四年級上冊001
- 17《他們那時候多有趣啊》(說課稿)-2023-2024學(xué)年統(tǒng)編版語文六年級下冊
- 13 我能行(說課稿)-統(tǒng)編版(五四制)道德與法治二年級下冊
- 春節(jié)后復(fù)工安全教育培訓(xùn)考試試題及答案
- 寄宿制學(xué)校工作總結(jié)
- 小學(xué)數(shù)學(xué)6年級應(yīng)用題100道附答案(完整版)
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- JT-T 1495-2024 公路水運(yùn)危險性較大工程專項(xiàng)施工方案編制審查規(guī)程
- JT-T-390-1999突起路標(biāo)行業(yè)標(biāo)準(zhǔn)
- 人教版二年級上冊加減混合計(jì)算300題及答案
- 2023年四川省成都市武侯區(qū)中考物理二診試卷(含答案)
- 《也是冬天-也是春天》
- 鮮切水果行業(yè)分析
- 第7章-無人機(jī)法律法規(guī)
評論
0/150
提交評論