2017東大軟院軟件測(cè)試期末考點(diǎn)梳理

本著共享主義,本人將PPT考點(diǎn)梳理出來,并且已經(jīng)翻譯成中文,供大家參考,歡迎各位指導(dǎo)!

本次考試題型分為選擇、判斷、簡(jiǎn)答和大題寫測(cè)試用例(Final Exam: 70%(閉卷考試))

所以考點(diǎn)既要把握細(xì)節(jié),又要掌握大題和理解概念(文章結(jié)合PPT用電腦看合適


軟件缺陷的概念

從產(chǎn)品內(nèi)部看,軟件缺陷是產(chǎn)品開發(fā)或維護(hù)過程中所存在的錯(cuò)誤、毛病等各種問題。

從產(chǎn)品外部看,軟件缺陷是系統(tǒng)所需要實(shí)現(xiàn)的某種功能的失效或者違背。

軟件測(cè)試的一個(gè)重要功能

verification(驗(yàn)證)and validation(確認(rèn))

verification:驗(yàn)證我們是不是正確的做了這個(gè)產(chǎn)品,也就是產(chǎn)品要符合他的目標(biāo)

validation:確認(rèn)我們是不是做了正確的產(chǎn)品,也就是產(chǎn)品是用戶真正想要的

軟件測(cè)試的目的

* 軟件測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程。

* 一個(gè)好的測(cè)試能過在第一時(shí)間發(fā)現(xiàn)程序中存在的錯(cuò)誤。

* 一個(gè)好的測(cè)試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯(cuò)誤。

* 減小軟件不能正常工作的風(fēng)險(xiǎn)

軟件測(cè)試的分類

C1:按照測(cè)試生成的來源

C2:按照生命周期的階段

C3:按照測(cè)試活動(dòng)的目的

C4:按被測(cè)對(duì)象的特征

C5:按測(cè)試過程的模型

軟件測(cè)試V模型

軟件測(cè)試V模型

軟件測(cè)試用例

輸入以測(cè)試系統(tǒng)和預(yù)測(cè)這些系統(tǒng)的輸出,如果系統(tǒng)根據(jù)其規(guī)范運(yùn)作。


黑盒測(cè)試

等價(jià)類劃分

分為有效類和無效類,兩者不能有重疊的部分

例如:前亞利桑那州境內(nèi)的一位步槍銷售商銷售密蘇里州制造的步槍機(jī)、槍托和槍管。槍機(jī)(Lock)賣45美元,槍托(Stock)賣30美元,槍管(Barrel)賣25美元。銷售商每月至少要銷售一支完整的步槍,且生產(chǎn)限額是大多數(shù)銷售商在一個(gè)月內(nèi)可銷售70個(gè)槍機(jī)、80個(gè)槍托和90個(gè)槍管。每訪問一個(gè)鎮(zhèn)子之后,銷售商都給密蘇里州步槍制造商發(fā)出電報(bào),說明在那個(gè)鎮(zhèn)子中售出的槍機(jī)、槍托和槍管數(shù)量。到了月末,銷售商要發(fā)出一封很短的電報(bào),通知-1個(gè)槍機(jī)被售出。這樣步槍制造商就知道當(dāng)月的銷售情況,并計(jì)算銷售商的傭金如下:銷售額不到(含)1000美元的部分為10%,1000(不含)~1800(含)美元的部分為15%,超過1800美元的部分為20%。傭金程序生成月份銷售報(bào)告,匯總售出的槍機(jī)、槍托和槍管總數(shù),銷售商的總銷售額以及傭金。

有效等價(jià)類:

L1={Lock:1≤Lock≤70}

L2={Lock=-1}

S1={Stock:1 ≤Stock≤80}

B1={Barrel :1 ≤ Barrel ≤90}

無效等價(jià)類:

L3={Lock : Lock =0 or Lock ﹤-1}

L4={Lock : Lock ﹥70}

S2={Stock : Stock ﹤1}

S3={Stock : Stock ﹥80}

B2={Barrel : Barrel ﹤1}

B3={Barrel:Barrel﹥90}

再例如:有一個(gè)報(bào)表處理系統(tǒng),要求用戶輸入處理報(bào)表的日期。假如日期限制在2000年1月至2020年12月,即系統(tǒng)只能對(duì)該段時(shí)期內(nèi)的報(bào)表進(jìn)行處理。如果用戶輸入的日期不在這個(gè)范圍內(nèi),則顯示“錯(cuò)誤信息”。并且此系統(tǒng)規(guī)定日期由年月的6位數(shù)字組成,前四位代表年,后兩位代表月。

要求:

寫出日期的等價(jià)類劃分。

生成測(cè)試用例。

等價(jià)類劃分

生成測(cè)試用例


生成測(cè)試用例

邊緣值分析法

基本原理

如下圖取值

邊界值法取值


兩個(gè)變量的情況下

注意:邊界值分析法是單一錯(cuò)誤原則

舉例說明:

三角形問題,輸入a、b、c

1 ≤ a ≤ 200

1 ≤ b ≤ 200

1 ≤ c ≤ 200

所以a,b,c的取值是

a = {1,2,100,199,200}

b = {1,2,100,199,200}

c = {1,2,100,199,200}

測(cè)試用例如下

邊界值分析的測(cè)試用例

小節(jié)總結(jié)

等價(jià)類測(cè)試的弱形式不如強(qiáng)形式測(cè)試全面。

無效值會(huì)引起運(yùn)行錯(cuò)誤的時(shí)候(實(shí)現(xiàn)語(yǔ)言是強(qiáng)類型),則沒有必要做健壯形式的測(cè)試。

錯(cuò)誤條件很重要的時(shí)候,健壯測(cè)試很重要。

邊界值測(cè)試是等價(jià)類測(cè)試的一種補(bǔ)充,兩者結(jié)合可以加強(qiáng)測(cè)試效果。

決策表技術(shù)可以解決變量之間依賴的問題。

要進(jìn)行多次嘗試,確認(rèn)最合適的等價(jià)類劃分。

正交測(cè)試

正交測(cè)試http://www.lxweimin.com/writer#/notebooks/11085322/notes/10481239

Decision Tables(決策表)

先來感受一波決策表吧(特別注意,結(jié)果能合并的一定要合并!!!)

決策表有四個(gè)部分

Stub portion、Entry portion、Condition portion、Action portion


決策表四個(gè)部分

從問題決策到結(jié)果,Y代表?xiàng)l件滿足,N代表?xiàng)l件不滿足,--代表忽略這個(gè)條件

決策表

練習(xí):

某貨運(yùn)站收費(fèi)標(biāo)準(zhǔn)如下:如果收件地點(diǎn)在本省,則快件每公斤5元,慢件每公斤3元;如果收件地點(diǎn)在省外,則在20公斤以內(nèi)(含20公斤)快件每公斤7元,慢件每公斤5元,而超過20公斤時(shí),快件每公斤9元,慢件每公斤7元。請(qǐng)用決策表方法解決此問題。

第一步:確定規(guī)則的數(shù)目。

條件:

(1)收件地在本省?

(2)是快件?

(3)重量不超過20公斤?

根據(jù)公式計(jì)算2的3次方=8

所以應(yīng)有8條規(guī)則。

第二步:列出所有的條件樁和行動(dòng)樁。

第三步:填入條件條目

第四步:填入行動(dòng)條目

未簡(jiǎn)化的決策表

第五步:化簡(jiǎn)決策表(一定要合并簡(jiǎn)化)

簡(jiǎn)化的決策表

Cause-Effect Graphing (因果圖)

因果圖法產(chǎn)生的背景

等價(jià)類劃分法和邊界值分析方法都是著重考慮輸入條件,但沒有考慮輸入條件的各種組合、輸入條件之間的相互制約關(guān)系。這樣雖然各種輸入條件可能出錯(cuò)的情況已經(jīng)測(cè)試到了,但多個(gè)輸入條件組合起來可能出錯(cuò)的情況卻被忽視了。

如果在測(cè)試時(shí)必須考慮輸入條件的各種組合,則可能的組合數(shù)目將是天文數(shù)字,因此必須考慮采用一種適合于描述多種條件的組合、相應(yīng)產(chǎn)生多個(gè)動(dòng)作的形式來進(jìn)行測(cè)試用例的設(shè)計(jì),這就需要利用因果圖(邏輯模型)。

因果圖概念介紹

因果圖(Cause-EffectGraphing)提供了一個(gè)把規(guī)格轉(zhuǎn)化為判定表的系統(tǒng)化方法,從該圖中可以產(chǎn)生測(cè)試數(shù)據(jù)。其中原因是表示輸入條件,結(jié)果是對(duì)輸入執(zhí)行的一系列計(jì)算后得到的輸出。因果圖方法最終生成的就是判定表,它適合于檢查程序輸入條件的各種組合情況。

因果圖中基本符號(hào)介紹(這里可以看PPT,不全部列出)



因果圖分析步驟

第一步,找出Cause(原因)

Cause(原因)

c1— the first character is #

c2 —the first character is *

c3 —the second character is number

第二步,找出Effect(結(jié)果)

e1— give the information N

e2— modify the document

e3— give the information M

第三步,分析出中間節(jié)點(diǎn)

然后畫出因果圖,如圖

再舉個(gè)例子

某公司對(duì)客戶有一定的折扣政策,公司軟件的一個(gè)模塊的需求說明書中描述“……當(dāng)交易額小于等于5萬(wàn)元時(shí)折扣為0,當(dāng)交易額大于5萬(wàn)元時(shí)才有折扣,如果交易的客戶在三個(gè)月內(nèi)無欠款,則折扣為15%;如果交易用戶在三個(gè)月內(nèi)有欠款,若該用戶是三年以上的老客戶,則折扣為10%;若該客戶不是三年以上的老客戶,則折扣為5%。”

原因(對(duì)立的就不要再寫了,比如寫了是小于五萬(wàn)就不用寫大于等于五萬(wàn)了):

C1:交易額大于5萬(wàn)元

C2:三個(gè)月無欠款

C3:三年以上老客戶

結(jié)果(注意對(duì)立的就不要再寫了):

E1:無折扣

E2:折扣=5%

E3:折扣=10%

E4:折扣=15%

因果圖,從這個(gè)圖中你就能找出導(dǎo)出上邊說的四種結(jié)果的邏輯

白盒測(cè)試(White-box testing)

白盒測(cè)試也叫structural testing, clear box testing, and glass box testing.

透明的看得見結(jié)構(gòu)

白盒測(cè)試分為靜態(tài)測(cè)試動(dòng)態(tài)測(cè)試

白盒靜態(tài)測(cè)試:Code inspection, Static structure analysis, Static quality metric method

白盒動(dòng)態(tài)測(cè)試:主要基于覆蓋,包括logic coverage, loop coverage, basis path coverage, etc.

白盒測(cè)試主要應(yīng)用于單元測(cè)試

we can’t use exhaustive(詳盡的) testing

動(dòng)態(tài)測(cè)試之邏輯覆蓋

白盒測(cè)試用例設(shè)計(jì)的一個(gè)很重要的評(píng)估標(biāo)準(zhǔn)就是對(duì)代碼的覆蓋度。一說到覆蓋,大家都感覺非常熟悉,但是常見的覆蓋都有哪些?各自有什么優(yōu)缺點(diǎn)?在白盒測(cè)試的用例設(shè)計(jì)中我們應(yīng)該如何自如地運(yùn)用呢?為大家總結(jié)了一下幾種常見的覆蓋以及各自的優(yōu)缺點(diǎn)。

白盒測(cè)試中常見的覆蓋有六種:語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。下面我們就分別看看這幾種不同的覆蓋究竟是什么鬼。

一、語(yǔ)句覆蓋(Statement Coverage)

語(yǔ)句覆蓋,顧名思義就是針對(duì)代碼語(yǔ)句的嘛。它的含義是我們?cè)O(shè)計(jì)出來的測(cè)試用例要保證程序中的每一個(gè)語(yǔ)句至少被執(zhí)行一次。通常語(yǔ)句覆蓋被認(rèn)為是“最弱的覆蓋”,原因是它僅僅考慮對(duì)代碼中的執(zhí)行語(yǔ)句進(jìn)行覆蓋而沒有考慮各種條件和分支,因此在實(shí)際運(yùn)用中語(yǔ)句覆蓋很難發(fā)現(xiàn)代碼中的問題。舉個(gè)非常簡(jiǎn)單的例子:

public int foo(int a,int b)

{

return a/b;

}

這是一個(gè)求兩數(shù)之商的函數(shù)。如果我們?cè)O(shè)計(jì)如下的測(cè)試用例:

TestCase: a = 2, b = 1

這時(shí)候我們會(huì)發(fā)現(xiàn),該函數(shù)的代碼覆蓋率達(dá)到了100%,并且設(shè)計(jì)的case可以順利通過測(cè)試。但是顯然該函數(shù)有一個(gè)很明顯的bug:當(dāng) b=0 時(shí),會(huì)拋出異常。

再來看這個(gè)例子:

流程圖1

主要特點(diǎn):語(yǔ)句覆蓋是最起碼的結(jié)構(gòu)覆蓋要求,語(yǔ)句覆蓋要求設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每條語(yǔ)句至少被執(zhí)行一次。

用例設(shè)計(jì):(如果此時(shí)將A路徑上的語(yǔ)句1—〉T去掉,那么用例如下

語(yǔ)句覆蓋測(cè)試用例

優(yōu)點(diǎn):可以很直觀地從源代碼得到測(cè)試用例,無須細(xì)分每條判定表達(dá)式。

缺點(diǎn):由于這種測(cè)試方法僅僅針對(duì)程序邏輯中顯式存在的語(yǔ)句,但對(duì)于隱藏的條件和可能到達(dá)的隱式邏輯分支,是無法測(cè)試的。在本例中去掉了語(yǔ)句1—〉T去掉,那么就少了一條測(cè)試路徑。在if結(jié)構(gòu)中若源代碼沒有給出else后面的執(zhí)行分支,那么語(yǔ)句覆蓋測(cè)試就不會(huì)考慮這種情況。但是我們不能排除這種以外的分支不會(huì)被執(zhí)行,而往往這種錯(cuò)誤會(huì)經(jīng)常出現(xiàn)。再如,在Do-While結(jié)構(gòu)中,語(yǔ)句覆蓋執(zhí)行其中某一個(gè)條件分支。那么顯然,語(yǔ)句覆蓋對(duì)于多分支的邏輯運(yùn)算是無法全面反映的,它只在乎運(yùn)行一次,而不考慮其他情況。

二、判定覆蓋(Decision Coverage)

判定覆蓋也被成為分支覆蓋(Branch Coverage),也就是說設(shè)計(jì)的測(cè)試用例要保證讓被測(cè)試程序中的每一個(gè)分支都至少執(zhí)行一次。舉個(gè)例子,有如下流程圖:

流程圖2

針對(duì)該圖我們想要做到判定覆蓋,可以設(shè)計(jì)如下case:

TestCase1: a=1, b=1 ?(路徑:ab)

TestCase2: a=-1, b=-1 ?(路徑:acd)

TestCase3: a=2, b=-1 ?(路徑:ace)

判定覆蓋比語(yǔ)句覆蓋強(qiáng)一些,能發(fā)現(xiàn)一些語(yǔ)句覆蓋無法發(fā)現(xiàn)的問題。但是往往一些判定條件都是由多個(gè)邏輯條件組合而成的,進(jìn)行分支判斷時(shí)相當(dāng)于對(duì)整個(gè)組合的最終結(jié)果進(jìn)行判斷,這樣就會(huì)忽略每個(gè)條件的取值情況,導(dǎo)致遺漏部分測(cè)試路徑。

同樣上邊流程圖1例子也一樣

用例設(shè)計(jì)

用例設(shè)計(jì)

優(yōu)點(diǎn):判定覆蓋比語(yǔ)句覆蓋要多幾乎一倍的測(cè)試路徑,當(dāng)然也就具有比語(yǔ)句覆蓋更強(qiáng)的測(cè)試能力。同樣判定覆蓋也具有和語(yǔ)句覆蓋一樣的簡(jiǎn)單性,無須細(xì)分每個(gè)判定就可以得到測(cè)試用例。

缺點(diǎn):往往大部分的判定語(yǔ)句是由多個(gè)邏輯條件組合(也就是可能if(a==b&&c==d)這種的邏輯組合)而成(如,判定語(yǔ)句中包含AND、OR、CASE),若僅僅判斷其整個(gè)最終結(jié)果,而忽略每個(gè)條件的取值情況,必然會(huì)遺漏部分測(cè)試路徑。

三、條件覆蓋(Condition Coverage)

條件覆蓋于分支覆蓋不同,條件覆蓋要求所設(shè)計(jì)的測(cè)試用例能使每個(gè)判定中的每一個(gè)條件都獲得可能的取值,即每個(gè)條件至少有一次真值、有一次假值

仍然以上面流程圖2作為例子來說明。上圖中涉及到的條件一共有4個(gè):

a>0, a<0, b>0, b<0

為了達(dá)到條件覆蓋的目的,我們?cè)O(shè)計(jì)的用例需要在 a 點(diǎn)有:

a>0, a≤0, b>0, b≤0,

這些情況出現(xiàn),并且在 c 點(diǎn)有:

a<0, a≥0, b<0, b≥0

這些情況出現(xiàn)。現(xiàn)在可以設(shè)計(jì)如下用例:

TestCase1: a=1, b=1 ?(路徑:ab)

TestCase1: a=-1, b=-1 ?(路徑:acd)

TestCase1: a=-1, b=0 ?(路徑:ace)

TestCase1: a=1, b=-1 ?(路徑:ace)

通常而言條件覆蓋比判定覆蓋強(qiáng),因?yàn)闂l件覆蓋使得判定中的每一個(gè)條件都取到了不同的結(jié)果,這一點(diǎn)判定覆蓋則無法保證。但條件覆蓋也有缺陷,因?yàn)樗荒鼙WC每個(gè)條件都取到了不同結(jié)果,但沒有考慮到判定結(jié)果,因此有時(shí)候條件覆蓋并不能保證判定覆蓋。

優(yōu)點(diǎn):顯然條件覆蓋比判定覆蓋,增加了對(duì)符合判定情況的測(cè)試,增加了測(cè)試路徑。

缺點(diǎn):要達(dá)到條件覆蓋,需要足夠多的測(cè)試用例,但條件覆蓋并不能保證判定覆蓋。條件覆蓋只能保證每個(gè)條件至少有一次為真,而不考慮所有的判定結(jié)果。

四、判定條件覆蓋(Decision/Condition Coverage)

以流程圖1為例

主要特點(diǎn):設(shè)計(jì)足夠多的測(cè)試用例,使得判定中每個(gè)條件的所有可能結(jié)果至少出現(xiàn)一次,每個(gè)判定本身所有可能結(jié)果也至少出現(xiàn)一次。

測(cè)試用例

優(yōu)點(diǎn):判定/條件覆蓋滿足判定覆蓋準(zhǔn)則和條件覆蓋準(zhǔn)則,彌補(bǔ)了二者的不足。

缺點(diǎn):判定/條件覆蓋準(zhǔn)則的缺點(diǎn)是未考慮條件的組合情況。

五、組合覆蓋(Branch Condition Combination Coverage)

組合覆蓋也叫做條件組合覆蓋。意思是說我們?cè)O(shè)計(jì)的測(cè)試用例應(yīng)該使得每個(gè)判定中的各個(gè)條件的各種可能組合都至少出現(xiàn)一次。顯然,滿足條件組合覆蓋的測(cè)試用例一定是滿足判定覆蓋、條件覆蓋和判定條件覆蓋的。

主要特點(diǎn):要求設(shè)計(jì)足夠多的測(cè)試用例,使得每個(gè)判定中條件結(jié)果的所有可能組合至少出現(xiàn)一次。

針對(duì)前文提到的流程圖2,做條件組合覆蓋時(shí)我們可以設(shè)計(jì)如下用例:

TestCase1: a=1, b=1 ?(路徑:ab)

TestCase1: a=-1, b=-1 ?(路徑:acd)

TestCase1: a=-1, b=0 ?(路徑:ace)

TestCase1: a=1, b=-1 ?(路徑:ace)

針對(duì)流程圖1

測(cè)試用例

優(yōu)點(diǎn):多重條件覆蓋準(zhǔn)則滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準(zhǔn)則。更改的判定/條件覆蓋要求設(shè)計(jì)足夠多的測(cè)試用例,使得判定中每個(gè)條件的所有可能結(jié)果至少出現(xiàn)一次,每個(gè)判定本身的所有可能結(jié)果也至少出現(xiàn)一次。并且每個(gè)條件都顯示能單獨(dú)影響判定結(jié)果。

缺點(diǎn):線性地增加了測(cè)試用例的數(shù)量。

六、路徑覆蓋

路徑覆蓋,意思是說我們?cè)O(shè)計(jì)的測(cè)試用例可以覆蓋程序中所有可能的執(zhí)行路徑。這種覆蓋方法可以對(duì)程序進(jìn)行徹底的測(cè)試用例覆蓋,比前面講的五種方法覆蓋度都要高。那么這種方法是不是就一定最好呢?當(dāng)然不能講得這么絕對(duì),它的缺點(diǎn)也是顯而易見的:由于需要對(duì)所有可能的路徑全部進(jìn)行覆蓋,那么我們需要設(shè)計(jì)數(shù)量非常巨大的而且較為復(fù)雜的測(cè)試用例,用例數(shù)量將呈現(xiàn)指數(shù)級(jí)的增長(zhǎng)。所以理論上來講路徑覆蓋是最徹底的測(cè)試用例覆蓋,但實(shí)際上很多時(shí)候路徑覆蓋的可操作性不強(qiáng)。

針對(duì)流程圖1

測(cè)試用例

優(yōu)點(diǎn):這種測(cè)試方法可以對(duì)程序進(jìn)行徹底的測(cè)試,比前面五種的覆蓋面都廣。

缺點(diǎn):由于路徑覆蓋需要對(duì)所有可能的路徑進(jìn)行測(cè)試(包括循環(huán)、條件組合、分支選擇等),那么需要設(shè)計(jì)大量、復(fù)雜的測(cè)試用例,使得工作量呈指數(shù)級(jí)增長(zhǎng)。而在有些情況下,一些執(zhí)行路徑是不可能被執(zhí)行的

總結(jié)

以上簡(jiǎn)單描述了幾種不用的邏輯覆蓋方法的原則和優(yōu)劣。在實(shí)際的操作中,要正確使用白盒測(cè)試的代碼覆蓋方法,就要從代碼分析和代碼調(diào)研入手,根據(jù)調(diào)研的結(jié)果,可以選擇上述方法中的某一種,或者好幾種方法的結(jié)合,設(shè)計(jì)出高效的測(cè)試用例,盡可能全面地覆蓋到代碼中的每一個(gè)邏輯路徑。

控制流程圖和圈復(fù)雜度

常見控制流圖

控制流圖
程序

將上訴程序轉(zhuǎn)化成控制流圖

控制流程圖

圈復(fù)雜度=判定節(jié)點(diǎn)數(shù)+1

練習(xí)1:

計(jì)算下圖的圈復(fù)雜度

標(biāo)識(shí)它的獨(dú)立路徑

獨(dú)立路徑是指程序中至少引進(jìn)一個(gè)新的處理語(yǔ)句集合,采用流圖的術(shù)語(yǔ),即獨(dú)立路徑必須至少包含一條在定義路徑之前不曾用到的邊。

獨(dú)立路徑數(shù)=判定節(jié)點(diǎn)數(shù)(4)+1= 5

獨(dú)立路徑數(shù)= e – n + 1 = 11 – 7 + 1 = 5

獨(dú)立路徑:

ABCFG

ABDFG

ABEFG

ABCDFG

ABEDFGABDFG

再比如

控制流程圖


獨(dú)立路徑

路徑1:1-11

路徑2:1-2-3-4-5-10-1-11

路徑3:1-2-3-6-8-9-10-11

路徑4:1-2-3-6-7-9-10-1-11

V=3個(gè)判定節(jié)點(diǎn)+1=4(圈復(fù)雜度)

由此為了覆蓋所有程序語(yǔ)句,必須設(shè)計(jì)至少4個(gè)測(cè)試用例使程序運(yùn)行于這4條路徑。


循環(huán)測(cè)試

路徑覆蓋法是一種將程序中循環(huán)結(jié)構(gòu)簡(jiǎn)化成選擇結(jié)構(gòu)的測(cè)試方法。

循環(huán)簡(jiǎn)化的目的是限制循環(huán)次數(shù),無論循環(huán)的形式和循環(huán)體實(shí)際執(zhí)行的次數(shù),簡(jiǎn)化后的循環(huán)測(cè)試只考慮循環(huán)一次或者零次兩種情況。

在這種情況下,循環(huán)與判定分支的效果是一樣的,即循環(huán)要么執(zhí)行,要么跳過。

采用較復(fù)雜的循環(huán)測(cè)試策略測(cè)試循環(huán),可采用下面測(cè)試集:

跳過整個(gè)循環(huán);

只循環(huán)一次;

只循環(huán)兩次;

循環(huán)m次,m

數(shù)據(jù)流測(cè)試...

突變測(cè)試(Mutation Testing)

突變測(cè)試(mutation testing) , 或稱作突變分析、程序突變,它是用于衡量軟件測(cè)試的質(zhì)量。突變測(cè)試通常對(duì)程序的源代碼或者目標(biāo)代碼做小的改動(dòng),并把截然不同的錯(cuò)誤行為(或者怪異行為)作為預(yù)期。如果測(cè)試代碼沒有覺察到這種小改動(dòng)帶來的錯(cuò)誤,就說明這個(gè)測(cè)試是有問題的。

突變測(cè)試目的:Help testers design high quality tests

Evaluate the quality of existing tests

突變測(cè)試范圍

unit level、integration level、specification level

下面用一個(gè)例子來解釋什么是變異測(cè)試,考慮以下代碼片段:

if(a && b) c = 1;

else c = 0;

條件運(yùn)算符如果用||來替換&&,就會(huì)產(chǎn)生以下變異:

if(a || b) c = 1;

else c = 0;

為了殺死這個(gè)突變,需要滿足以下條件:

(1)測(cè)試數(shù)據(jù)必須對(duì)突變和原始程序引起的不同狀態(tài)覆蓋。如:a=1,b=0可以達(dá)到目的。

(2)c的值應(yīng)該傳播到程序輸出,并被測(cè)試檢查。

弱突變覆蓋需滿足(1),強(qiáng)突變覆蓋需滿足(1)(2)。

1 變異測(cè)試?yán)碚?/b>

1.1 兩個(gè)基本假設(shè)

變異測(cè)試旨在找出有效的測(cè)試用例,發(fā)現(xiàn)程序中真正的錯(cuò)誤。在一個(gè)工程中,潛在BUG的數(shù)量是巨大的,通過生成突變體來全面覆蓋所有的錯(cuò)誤是不可能的。所以,傳統(tǒng)的變異測(cè)試旨在尋找這些錯(cuò)誤的子集,能盡量充分地近似描述這些BUG。這個(gè)理論基于兩條假設(shè):Competent

Programmer Hypothesis(CPH) 和 Coupling Effect(CE)。

CPH是指:假設(shè)編程人員是有能力的,他們盡力去更好地開發(fā)程序,達(dá)到正確可行的結(jié)果,而不是搞破壞。它關(guān)注的是程序員的行為和意圖。而CE(耦合效應(yīng))更加關(guān)注在變異測(cè)試中錯(cuò)誤的類別。一個(gè)簡(jiǎn)單的錯(cuò)誤產(chǎn)生往往是由于一個(gè)單一的變異(例如句法錯(cuò)誤),而一個(gè)龐大復(fù)雜的錯(cuò)誤往往是由于多出變異所導(dǎo)致。復(fù)雜變異體往往是由諸多簡(jiǎn)單變異體組合而成。

變異測(cè)試流程

在變異測(cè)試中,對(duì)于被測(cè)程序p,設(shè)定一個(gè)測(cè)試用例集合T。首先根據(jù)被測(cè)程序特征設(shè)定一系列變異算子;隨后通過在原有程序p上,執(zhí)行變異算子生成大量變異體;接著從大量變異體中識(shí)別出等價(jià)變異體;然后在剩余的非等價(jià)變異體上執(zhí)行測(cè)試用例集T中的測(cè)試用例,若可以檢測(cè)出所有非等價(jià)變異體,則變異測(cè)試分析結(jié)束,否則對(duì)未檢測(cè)出的變異體,需要額外設(shè)計(jì)新的測(cè)試用例,并添加到測(cè)試用例集T中。

定義 1(變異算子)

在符合語(yǔ)法規(guī)則前提下, 變異算子定義了從原有程序生成差別極小程序(即變異體)

的轉(zhuǎn)換規(guī)則。下表給出了一個(gè)典型的變異算子, 該變異算子將“+” 操作符變異為 “-” 操作符。選擇被測(cè)程序 p 中的條件表達(dá)式 a + b

> c 執(zhí)行該變異算子, 將得到條件表達(dá)式 a - b > c , 并生成變異體 p′ 。


定義 2(一階變異體)

在原有程序p上執(zhí)行單一變異算子并形成變異體p′ ,則稱p′為p的一階變異體。

定義3(高階變異體)

在原有程序 p 上依次執(zhí)行多次變異算子并形成變異體 p′ ,則稱 p′ 為 p 的高階變異體。若在 p 上依次執(zhí)行 k 次變異算子并形成變異體 p′ , 則稱 p′ 為 p 的 k 階變異體。

定義 4(可殺除變異體)

若存在測(cè)試用例t,在變異體p′ 和原有程序p上的執(zhí)行結(jié)果不一致, 則稱該變異體p′ 相對(duì)于測(cè)試用例集T是可殺除變異體。

定義 5(可存活變異體)

若不存在任何測(cè)試用例t, 在變異體p′ 和原有程序p上的執(zhí)行結(jié)果不一致, 則稱該變異體p′ 相對(duì)于測(cè)試用例集T是可存活變異體。一部分可存活變異體通過設(shè)計(jì)新的測(cè)試用例可以轉(zhuǎn)化成可殺除變異體,

剩余的可存活變異體則可能是等價(jià)變異體。本文對(duì)等價(jià)變異體定義如下。

定義 6(等價(jià)變異體)

若變異體p′ 與原有程序p在語(yǔ)法上存在差異, 但在語(yǔ)義上與p保持一致, 則稱p′ 是p的等價(jià)變異體。

等價(jià)變異體

單元測(cè)試(Unit Testing)

單元測(cè)試是最小的測(cè)試部分測(cè)試模塊是獨(dú)立于其他模塊的一般情況下,被測(cè)單元能夠?qū)崿F(xiàn)一個(gè)特定的功能,并與其他單元有明確的接口定義,這樣才可以與其他單元隔離開來。

In Java, a unit is a class or a class method.

In C, a unit is a function or sub processes.

目標(biāo):確保模塊被正確的編碼

依據(jù):系統(tǒng)詳細(xì)的規(guī)格說明

過程:經(jīng)過設(shè)計(jì)、腳本開發(fā)、執(zhí)行、調(diào)試和分析結(jié)果一個(gè)過程

執(zhí)行者:由程序開發(fā)人員和測(cè)試人員共同完成

方法:以白盒測(cè)試方法為主,輔以黑盒測(cè)試方法

如何進(jìn)行評(píng)估:通過所有單元測(cè)試用例,代碼沒有嚴(yán)重缺陷

單元測(cè)試過程

1、在詳細(xì)設(shè)計(jì)階段完成單元測(cè)試計(jì)劃

2、建立單元測(cè)試環(huán)境,完成測(cè)試設(shè)計(jì)和開發(fā)

3、執(zhí)行單元測(cè)試用例,并且詳細(xì)記錄測(cè)試結(jié)果

4、判定單元測(cè)試是否通過

5、提交單元測(cè)試報(bào)告

單元測(cè)試過程

單元測(cè)試優(yōu)點(diǎn)

1、單獨(dú)進(jìn)行,一起進(jìn)行,降低軟件質(zhì)量成本,縮短開發(fā)周期;

2、便于跟蹤錯(cuò)誤;

3、集成后錯(cuò)誤會(huì)放大,集成后復(fù)雜性高,很難發(fā)現(xiàn)問題;

4、無需而外的設(shè)備和人員。


單元測(cè)試分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試

靜態(tài)測(cè)試

代碼評(píng)審:代碼走查和正式會(huì)議審查。

代碼走查:代碼互查應(yīng)用最多,代碼走查是相對(duì)比較正式的評(píng)審過程,項(xiàng)目組部分成員通過閱讀代碼,向其他成員提出問題并對(duì)有關(guān)技術(shù)、風(fēng)格、可能錯(cuò)誤是否違背開發(fā)標(biāo)準(zhǔn)和規(guī)范等進(jìn)行評(píng)論。

正式會(huì)議審查:是一種正式的檢查和評(píng)估方法,最早由IBM提出,經(jīng)實(shí)踐證明,有一種有效的檢查辦法,從而得到軟件工程界的普遍認(rèn)同。它使用逐步檢查源代碼中有無邏輯或語(yǔ)法錯(cuò)誤的辦法來檢驗(yàn)故障。



集成測(cè)試(Integration Testing)(集成測(cè)試、組裝測(cè)試、聯(lián)合測(cè)試、子系統(tǒng)測(cè)試、部件測(cè)試)

優(yōu)點(diǎn):早點(diǎn)發(fā)現(xiàn)錯(cuò)誤,早點(diǎn)修正錯(cuò)誤,早點(diǎn)獲得測(cè)試反饋,調(diào)度修正錯(cuò)誤靈活

分為增量式測(cè)試和非增量式測(cè)試

測(cè)試模式

Big bang(大爆炸) integration

優(yōu)點(diǎn):完成速度快、能夠并行

缺點(diǎn):錯(cuò)誤發(fā)生時(shí)很難找出他的位置和改變以及很多問題得在系統(tǒng)測(cè)試才能發(fā)現(xiàn)

適用范圍:Existing system with only minor modifications

Small systems with adequate unit testing

System made from certified high quality reusable components

Top-down (自頂向下)integration

分為廣度和深度集成測(cè)試

Advantage

Early show main points of control and judgments.

Use depth-first assembly, and a complete software function can be firstly implemented and validated.

Only one driver module is needed at most.

Support fault isolation.

Disadvantage

The costs of the development and the maintenance of stubs are both higher.

Bottom level components demand can not be predicted may lead to many amendments to the top level components.

Bottom-up (自底向上)integration

Advantage

Allow conducting early certification for bottom modules, any leaf node is ready for integration testing can be tested.

Reduce workload of stub development

Support fault isolation

Disadvantage

Driver module development huge workload comparison.

Senior validation was deferred until the end, design error can not be found in time.

Bottom abnormal hard cover.

Sandwich(三明治) integration

Advantage

Combine the advantage of top-down strategy and bottom-up strategy.

Disadvantage

The testing of middle level is insufficient before integration testing.

Scope

It is used by the majority of software development projects.

Layers(分層) integration

High-frequency (高頻)integration

Event-based(基于事件) integration


System testing(系統(tǒng)測(cè)試)

目的:測(cè)試可安裝性、可用性、兼容性、可維護(hù)性等等

Performance Testing(性能測(cè)試)

性能是量度系統(tǒng)或組件在一定約束條件下,是否達(dá)到功能設(shè)計(jì)的指標(biāo):如響應(yīng)速度,計(jì)算的精度,內(nèi)存利用率。

性能是系統(tǒng)外部的質(zhì)量屬性基于用戶的需求和用戶的系統(tǒng)操作性的看法。

同時(shí)性能特別應(yīng)用于對(duì)實(shí)時(shí)系統(tǒng)的評(píng)價(jià)當(dāng)中,就是它的行為在指定的期限內(nèi)完成正確的操作。

評(píng)估指標(biāo)為時(shí)間效率,空間效率,I∕O性能,數(shù)據(jù)庫(kù)性能,內(nèi)存性能,初始化∕退出時(shí)間和資源利用率延時(shí),事務(wù)處理時(shí)間,最大事務(wù)處理時(shí)間,事務(wù)操作時(shí)間,數(shù)據(jù)庫(kù)性能,最大消耗的內(nèi)存量,高峰內(nèi)存時(shí)間,資源消耗。

下圖描述了web應(yīng)用的頁(yè)面響應(yīng)時(shí)間的分解。

頁(yè)面響應(yīng)時(shí)間分解為網(wǎng)絡(luò)傳輸時(shí)間(N1+N2+N3+N4)和應(yīng)用延遲時(shí)間(A1+A2+A3),

而應(yīng)用延遲時(shí)間又可分為數(shù)據(jù)庫(kù)延遲時(shí)間(A2)和應(yīng)用服務(wù)器延遲時(shí)間(A1+A3)。

延遲:一個(gè)指令控制器發(fā)出數(shù)據(jù)請(qǐng)求的一瞬間和數(shù)據(jù)傳送的一瞬間之間的時(shí)間間隔;是請(qǐng)求和完成操作之間拖延的時(shí)間差。

事務(wù)處理時(shí)間:是指完成一項(xiàng)事務(wù)所需要的運(yùn)行時(shí)間,用于評(píng)價(jià)事務(wù)處理效率。通常,事務(wù)處理的時(shí)間越短,則效率越高。

并發(fā)用戶數(shù),一般分兩種情況:

嚴(yán)格意義的并發(fā),即所有用戶在同一時(shí)間做同一件事情或者操作。

廣義范圍的并發(fā),多個(gè)用戶對(duì)系統(tǒng)發(fā)出了請(qǐng)求或進(jìn)行了操作,但這些操作可以是相同的,也可以是不同的。

吞吐量:是指在一次性能測(cè)試過程中網(wǎng)絡(luò)上傳輸數(shù)據(jù)量的總和。

一般來說,吞吐量用請(qǐng)求數(shù)/秒或頁(yè)面數(shù)/秒來衡量。

吞吐量指標(biāo)有如下兩個(gè)作用:

1、協(xié)助設(shè)計(jì)性能測(cè)試場(chǎng)景,衡量性能測(cè)試場(chǎng)景是否達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。

在設(shè)計(jì)性能測(cè)試場(chǎng)景時(shí),根據(jù)估算吞吐量數(shù)據(jù)測(cè)試場(chǎng)景事物發(fā)生頻率。

2、協(xié)助分析性能測(cè)試瓶頸。

性能測(cè)試比較關(guān)注業(yè)務(wù)并發(fā)用戶數(shù),從業(yè)務(wù)的角度設(shè)置多少并發(fā)數(shù)合理。

下面給出估算并發(fā)用戶數(shù)的公式:C=nL/T

C —平均的并發(fā)用戶數(shù)

n —登錄會(huì)話的數(shù)量

L —登錄會(huì)話的平均長(zhǎng)度

T —考察的時(shí)間段長(zhǎng)度



例題:

一個(gè)軟件系統(tǒng)每天約有400個(gè)用戶訪問。用戶在一天之內(nèi)有8小時(shí)內(nèi)使用該系統(tǒng),從登錄到退出的平均時(shí)間為4小時(shí),請(qǐng)計(jì)算該系統(tǒng)的并發(fā)用戶數(shù)和并發(fā)用戶的峰值各是多少?

分析:根據(jù)公式C=400×4/8=200

并發(fā)用戶數(shù)的峰值

負(fù)載測(cè)試是模擬實(shí)際軟件系統(tǒng)所承受的負(fù)載條件的系統(tǒng)負(fù)荷,通過不斷加載(不斷增加模擬用戶數(shù)量)或其他加載方式來觀察不同負(fù)載下系統(tǒng)響應(yīng)時(shí)間和數(shù)據(jù)吞吐量,系統(tǒng)資源占有率(cpu和內(nèi)存)等性能指標(biāo),以檢驗(yàn)系統(tǒng)的行為和特性,發(fā)現(xiàn)系統(tǒng)可能存在的性能瓶頸、內(nèi)存泄露和不能實(shí)現(xiàn)同步等問題。

高低突變加載:某個(gè)時(shí)間用戶數(shù)量很大,突然降到很低,過一段時(shí)間,又突然加到很高,反復(fù)幾次。借助這種負(fù)載方式的測(cè)試,容易發(fā)現(xiàn)資源的釋放和內(nèi)存泄漏的問題。

隨機(jī)加載方式:由隨機(jī)算法自動(dòng)生成某個(gè)數(shù)量范圍內(nèi)變化的、動(dòng)態(tài)的負(fù)載,這種方式可能是和實(shí)際情況最為接近的一種負(fù)載方式。雖然不容易模擬系統(tǒng)運(yùn)行出現(xiàn)的瞬間高峰期,但可以模擬系統(tǒng)長(zhǎng)時(shí)間的運(yùn)行過程的狀態(tài)。

壓力測(cè)試用于判定應(yīng)用處理大量數(shù)據(jù)的能力。

壓力測(cè)試可以成功的測(cè)試服務(wù)器滿負(fù)載的情況。

除了在服務(wù)器上增加運(yùn)行的應(yīng)用結(jié)合客戶端測(cè)試是一種額外的形式的壓力測(cè)試。

性能測(cè)試過程:計(jì)劃,記錄,修改,執(zhí)行,分析

喜歡就點(diǎn)個(gè)贊吧,祝各位期末考試取得好成績(jī)!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評(píng)論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,312評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,410評(píng)論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,778評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,955評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,521評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,266評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,468評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,696評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評(píng)論 1 294
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,193評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,431評(píng)論 2 378

推薦閱讀更多精彩內(nèi)容

  • 1.測(cè)試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架。軟件項(xiàng)目的開發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 21,980評(píng)論 7 278
  • 1.測(cè)試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架。軟件項(xiàng)目的開發(fā)包括:需求、設(shè)...
    宇文臭臭閱讀 6,743評(píng)論 5 100
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,212評(píng)論 2 126
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,819評(píng)論 18 139
  • 今天的課,開啟了新的篇章。作為真自由訓(xùn)練營(yíng)的入營(yíng)預(yù)習(xí),聽完《成功參加走出八大誤區(qū),輕松提升自律力》,邁出了問題解決...
    淘淘的故事閱讀 455評(píng)論 2 1