軟件測(cè)試技術(shù)(第三版)(范勇)課后答案 練習(xí)題4-7參考答案_第1頁(yè)
軟件測(cè)試技術(shù)(第三版)(范勇)課后答案 練習(xí)題4-7參考答案_第2頁(yè)
軟件測(cè)試技術(shù)(第三版)(范勇)課后答案 練習(xí)題4-7參考答案_第3頁(yè)
軟件測(cè)試技術(shù)(第三版)(范勇)課后答案 練習(xí)題4-7參考答案_第4頁(yè)
軟件測(cè)試技術(shù)(第三版)(范勇)課后答案 練習(xí)題4-7參考答案_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章--練習(xí)題4請(qǐng)用邏輯覆蓋法對(duì)下面的java代碼段進(jìn)行測(cè)試。publiccharfunction(intx,inty){

chart;

if((x>=90)&&(y>=90)){

t='A';

}else{

if((x+y)>=165)

t='B';

else

t='C';

}

returnt;

}【參考答案】:修改代碼:/**

*第4章練習(xí)題1

*/

publicclassSample1{

/**

*該方法接收兩個(gè)整數(shù)參數(shù)(科目成績(jī)),返回等級(jí)

*@paramx科目1的分?jǐn)?shù)

*@paramy科目2的分?jǐn)?shù)

*@returnchar等級(jí)

*/

publiccharfunction(intx,inty){

chart;

if((x>=90)&&(y>=90)){

t='A';

}else{

if((x+y)>=165)

t='B';

else

t='C';

}

returnt;

}

}測(cè)試代碼如:importorg.junit.jupiter.api.DisplayName;

importorg.junit.jupiter.api.Test;

importstaticorg.junit.jupiter.api.Assertions.*;

classSample1Test{

@DisplayName("語(yǔ)句覆蓋")

@Test

voidlineTest(){

Sample1sample1=newSample1();

assertEquals('A',sample1.function(90,90));

assertEquals('B',sample1.function(90,75));

assertEquals('C',sample1.function(80,75));

}

@DisplayName("分支覆蓋")

@Test

voidbranchTest(){

Sample1sample1=newSample1();

assertEquals('A',sample1.function(90,90));

assertEquals('B',sample1.function(90,75));

assertEquals('C',sample1.function(80,75));

}

@DisplayName("條件覆蓋")

@Test

voidconditionTest(){

Sample1sample1=newSample1();

assertEquals('A',sample1.function(90,90));

assertEquals('B',sample1.function(90,75));

assertEquals('C',sample1.function(80,75));

}

@DisplayName("判定-條件覆蓋")

@Test

voidbranchConditionTest(){

Sample1sample1=newSample1();

assertEquals('A',sample1.function(90,90));

assertEquals('B',sample1.function(90,75));

assertEquals('C',sample1.function(80,75));

}

@DisplayName("條件組合覆蓋")

@Test

voidconditionComTest(){

Sample1sample1=newSample1();

assertEquals('A',sample1.function(90,90));

assertEquals('C',sample1.function(70,90));

assertEquals('B',sample1.function(90,75));

assertEquals('C',sample1.function(80,75));

}

@DisplayName("條件組合覆蓋")

@Test

voidpathTest(){

Sample1sample1=newSample1();

assertEquals('A',sample1.function(90,90));

assertEquals('B',sample1.function(90,75));

assertEquals('C',sample1.function(80,75));

}

}為以下流程圖所示的程序段設(shè)計(jì)一組測(cè)試用例,要求分別滿足語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。t=-1t=-1x>8andy>5x>16ory>10x>0ory>0t=0t=10FalseFalseTrueTrueTrueFalset=5【參考答案】畫(huà)出程序流程圖對(duì)應(yīng)的控制流圖,如圖所示(說(shuō)明:圖中綠色和紅色的標(biāo)準(zhǔn)對(duì)應(yīng)程序流程圖中條件和判定),提示復(fù)合條件需要拆分。記:x>8 T1, x<=9 F1,y>5 T2, y<=5 F2,x>0 T3, x<=0 F3,y>0 T4, y<=0 F4,x>16 T5, x<=16 F5,y>10 T6, y<=10 F6(2)語(yǔ)句覆蓋測(cè)試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(3)判定覆蓋測(cè)試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(4)條件覆蓋測(cè)試用例覆蓋條件覆蓋分支執(zhí)行路徑x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(5)判定-條件覆蓋測(cè)試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(6)組合覆蓋測(cè)試用例覆蓋條件覆蓋分支執(zhí)行路徑x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9x=0,y=15F1T2F3T4F5T62-3-3’1-2-3-3’-6-9(7)路徑覆蓋測(cè)試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’44’1-2-2’-4-8-9請(qǐng)用邏輯覆蓋和基路徑測(cè)試方法對(duì)下面的java代碼進(jìn)行測(cè)試。代碼的功能是:用折半查找法在元素呈升序排列的數(shù)組中查找值為key的元素。/**

*二分查找

*/

publicclassSample3{

/**

*二分查找

*@paramarray數(shù)組

*@paramkey關(guān)鍵字

*@return位置

*/

publicintbinSearch(intarray[],intkey){

intmid,low,high;

low=0;

high=array.length-1;

while(low<=high){

mid=(low+high)/2;

if(key==array[mid])

returnmid;

elseif(key<array[mid])

high=mid-1;

else

low=mid+1;

}

return-1;

}

}【參考答案】importorg.junit.jupiter.api.DisplayName;

importorg.junit.jupiter.params.ParameterizedTest;

importvider.CsvSource;

importjava.util.Arrays;

importstaticorg.junit.jupiter.api.Assertions.*;

classSample3Test{

@DisplayName("基路徑測(cè)試")

@ParameterizedTest(name="{index}=>查找''{1}''預(yù)期位置{2}")

@CsvSource({"[1:2:3:4:5:6:7:8:9:10],9,8",

"[1:2:3:4:5:6:7:8:9:10],10,9",

"[1:2:3:4:5:6:7:8:9:10],4,3",

"[1:2:3:4:5:6:7:8:9:10],-1,-1"

})

voidbasePathTest(StringarrStr,intkey,intpos){

arrStr=arrStr.substring(1,arrStr.length()-1);

Sample3sample3=newSample3();

String[]arrayString=arrStr.split(":");

int[]array=Arrays.stream(arrayString)

.mapToInt(Integer::parseInt)

.toArray();

assertEquals(pos,sample3.binSearch(array,key));

}

@DisplayName("邏輯覆蓋")

@ParameterizedTest(name="{index}=>查找''{1}''預(yù)期位置{2}")

@CsvSource({"[1:2:3:4:5:6:7:8:9:10],9,8",

"[1:2:3:4:5:6:7:8:9:10],10,9",

"[1:2:3:4:5:6:7:8:9:10],4,3",

"[1:2:3:4:5:6:7:8:9:10],1,0",

"[1:2:3:4:5:6:7:8:9:10],15,-1",

"[1:2:3:4:5:6:7:8:9:10],-1,-1"

})

voidlogicTest(StringarrStr,intkey,intpos){

arrStr=arrStr.substring(1,arrStr.length()-1);

Sample3sample3=newSample3();

String[]arrayString=arrStr.split(":");

int[]array=Arrays.stream(arrayString)

.mapToInt(Integer::parseInt)

.toArray();

assertEquals(pos,sample3.binSearch(array,key));

}

}以下代碼由java語(yǔ)言書(shū)寫(xiě),請(qǐng)按要求回答問(wèn)題。publicintisLeap(intyear){ if(year%4==0){ if(year%100==0){ if(year%400==0) leap=1; else leap=0; } else leap=1;}else leap=0; returnleap;}問(wèn)題1:請(qǐng)畫(huà)出以上代碼的控制流圖問(wèn)題2:請(qǐng)計(jì)算上述控制流圖的圈復(fù)雜度V(G)(獨(dú)立線性路徑數(shù))問(wèn)題3:假設(shè)輸入的取值范圍是0<year<2010,請(qǐng)使用基本路徑測(cè)試法為變量year設(shè)計(jì)測(cè)試用例,使其滿足基本路徑覆蓋的要求?!緟⒖即鸢浮繂?wèn)題1:(圖中紅色字符對(duì)應(yīng)代碼行號(hào))問(wèn)題2:V(G)=E–N+2=12–10+2=4V(G)=判定節(jié)點(diǎn)數(shù)+1=3+1=4v(G)=區(qū)域數(shù)=4問(wèn)題3:源碼:/**

*閏年判斷

*/

publicclassSample4{

/**

*閏年判斷

*

*@paramyear年份

*@return閏年

*/

publicBooleanisLeap(intyear){

Booleanleap;

if(year%4==0){

if(year%100==0){

if(year%400==0)

leap=true;

else

leap=false;

}else

leap=true;

}else

leap=false;

returnleap;

}

}測(cè)試代碼:importorg.junit.jupiter.api.DisplayName;

importorg.junit.jupiter.params.ParameterizedTest;

importvider.CsvSource;

importstaticorg.junit.jupiter.api.Assertions.*;

classSample4Test{

@DisplayName("基路徑測(cè)試")

@ParameterizedTest(name="{index}=>測(cè)試年:{0}")

@CsvSource({"2000,true",

"2024,true",

"1900,false",

"2001,false"

})

voidisLeapTest(intyear,booleanleap){

Sample4sample4=newSample4();

assertEquals(leap,sample4.isLeap(year));

}

}設(shè)計(jì)判別一個(gè)整數(shù)x(x≥2)是否為素?cái)?shù)的程序,并設(shè)計(jì)測(cè)試用例滿足條件覆蓋和基本路徑覆蓋?!緟⒖即鸢浮吭创a:/**

*判斷是否為質(zhì)數(shù)

*/

publicclassSample5{

/**

*判斷是否為質(zhì)數(shù)

*@paramn數(shù)字

*@return是否為質(zhì)數(shù)

*/

publicbooleanprimeNumber(intn){

inti;

for(i=2;i<n;i++){

if(n%i==0){

returnfalse;

}

}

if(n==i){

returntrue;

}else{

returnfalse;

}

}

}測(cè)試代碼:importorg.junit.jupiter.api.DisplayName;

importorg.junit.jupiter.params.ParameterizedTest;

importvider.CsvSource;

importstaticorg.junit.jupiter.api.Assertions.*;

classSample5Test{

@DisplayName("基路徑測(cè)試")

@ParameterizedTest(name="{index}=>測(cè)試年:{0}")

@CsvSource({"2,true","3,true",

"1,false","4,false",

})

voidprimeNumberTest(intn,booleanprime){

Sample5sample5=newSample5();

assertEquals(prime,sample5.primeNumber(n));

}

}某程序的功能是:輸入兩個(gè)正整數(shù),計(jì)算這兩個(gè)數(shù)的最大公約數(shù)。程序代碼如下。Publicintdivisor_c(inta,

intb){ if(a<=0||b<=0){ return

0; } while(a!=b){ if(a>b) a=a-b; else b=b-a; } returna; }請(qǐng)根據(jù)程序內(nèi)容,請(qǐng)完成下列題目。(1)根據(jù)程序代碼繪制控制流圖。(2)計(jì)算控制流圖的圈復(fù)雜度。(3)找出程序獨(dú)立路徑。(4)設(shè)計(jì)測(cè)試用例,實(shí)現(xiàn)基路徑覆蓋。(5)設(shè)計(jì)測(cè)試用例,實(shí)現(xiàn)語(yǔ)句覆蓋。 【參考答案】控制流圖圈復(fù)雜度V(G)=E–N+2=13–10+2=5V(G)=判定節(jié)點(diǎn)數(shù)+1=4+1=5v(G)=區(qū)域數(shù)=5獨(dú)立路徑:1-2-91-1’-2-91-3-7-91-3-4-5-8-3-7-91-3-4-6-8-3-7-9(5)測(cè)試用例代碼如下:源碼:/**

*求最大公約數(shù)

*/

publicclassSample6{

/**

*求最大公約數(shù)

*@parama數(shù)字a

*@paramb數(shù)字b

*@return最大公約數(shù)

*/

publicintdivisor(inta,intb){

if(a<=0||b<=0){

return0;

}

while(a!=b){

if(a>b)

a=a-b;

else

b=b-a;

}

returna;

}

}測(cè)試代碼importorg.junit.jupiter.api.DisplayName;

importorg.junit.jupiter.params.ParameterizedTest;

importvider.CsvSource;

importstaticorg.junit.jupiter.api.Assertions.*;

classSample6Test{

@DisplayName("基路徑測(cè)試")

@ParameterizedTest(name="{index}=>測(cè)試:{0}|{1}公約數(shù){2}")

@CsvSource({"2,1,1","2,4,2",

"3,3,3","4,6,2",

"-3,3,0","4,-6,0",

})

voiddivisorTest(inta,intb,intexpected){

Sample6sample6=newSample6();

assertEquals(expected,sample6.divisor(a,b));

}

}第5章--練習(xí)題51.單元測(cè)試中的單元描述正確的有哪些? A)指一個(gè)可獨(dú)立運(yùn)行的代碼段,獨(dú)立運(yùn)行是指的是這個(gè)工作不受前一次或接下來(lái)的程序運(yùn)行的結(jié)果影響; B)面向過(guò)程的測(cè)試中指函數(shù)或子過(guò)程; C)面向?qū)ο蟮臏y(cè)試中指類或類的方法; D)面向?qū)ο蟮臏y(cè)試中成員屬性的測(cè)試;【參考答案】ABC2.單元測(cè)試的描述中正確的描述有哪些? A)單元測(cè)試是對(duì)軟件基本組成單元進(jìn)行的測(cè)試。 B)單元測(cè)試從程序的內(nèi)部結(jié)構(gòu)出發(fā)來(lái)進(jìn)行測(cè)試的,多采用白盒測(cè)試(結(jié)構(gòu)性測(cè)試)技術(shù)。 C)單元測(cè)試是軟件開(kāi)發(fā)過(guò)程中進(jìn)行的最低級(jí)別的測(cè)試活動(dòng)。測(cè)試進(jìn)行得越早越好。 D)測(cè)試工作主要是由程序開(kāi)發(fā)人員進(jìn)行自測(cè)和互測(cè),同時(shí)還需要單獨(dú)的測(cè)試角色,來(lái)進(jìn)行測(cè)試和評(píng)審【參考答案】ABCD3.單元測(cè)試中驅(qū)動(dòng)模塊(Driver)的作用? A)調(diào)用被測(cè)試單元; B)它接收測(cè)試數(shù)據(jù),并把數(shù)據(jù)傳送給被測(cè)單元, C)出實(shí)測(cè)結(jié)果。 D)被測(cè)試單元調(diào)用【參考答案】ABC單元測(cè)試有那些步驟,各個(gè)步驟有那些實(shí)施內(nèi)容。【參考答案】單元測(cè)試包含制訂測(cè)試計(jì)劃、單元測(cè)試設(shè)計(jì)、測(cè)試執(zhí)行、測(cè)試評(píng)估等步驟。制定測(cè)試計(jì)劃的實(shí)施內(nèi)容主要包括單元測(cè)試準(zhǔn)備、制定單元測(cè)試策略和單元測(cè)試計(jì)劃日程。單元測(cè)試設(shè)計(jì)的實(shí)施內(nèi)容主要是根據(jù)設(shè)計(jì)規(guī)格說(shuō)明書(shū),建立單元測(cè)試環(huán)境,完成測(cè)試設(shè)計(jì)和腳本的開(kāi)發(fā)。測(cè)試執(zhí)行的實(shí)施內(nèi)容主要是測(cè)試組根據(jù)測(cè)試計(jì)劃和測(cè)試日程安排進(jìn)行測(cè)試,并輸出測(cè)試結(jié)果,同時(shí)注意回歸測(cè)試的執(zhí)行。測(cè)試評(píng)估的實(shí)施內(nèi)容是由測(cè)試結(jié)果評(píng)估小組或評(píng)估人員對(duì)測(cè)試結(jié)果進(jìn)行評(píng)測(cè)、分析,并輸出分析結(jié)果。最后將從測(cè)試計(jì)劃開(kāi)始到評(píng)估結(jié)束的所有文檔進(jìn)行整理收集,提交測(cè)試結(jié)果。簡(jiǎn)述單元測(cè)試的目標(biāo)和意義。【參考答案】單元測(cè)試的目的:一個(gè)是查找錯(cuò)誤,提高軟件質(zhì)量;另一方面是節(jié)約成本和削減開(kāi)發(fā)時(shí)間。單元測(cè)試的包含兩層意義:?jiǎn)卧獪y(cè)試對(duì)軟件設(shè)計(jì)實(shí)現(xiàn)的意義。單元測(cè)試對(duì)軟件設(shè)計(jì)實(shí)現(xiàn)至關(guān)重要,旨在保障軟件質(zhì)量、降低開(kāi)銷(xiāo),并促進(jìn)代碼重構(gòu)與可測(cè)試性。它揭示設(shè)計(jì)流程,確保架構(gòu)分層合理,業(yè)務(wù)邏輯實(shí)現(xiàn)于邏輯層。單元測(cè)試作為實(shí)例,促進(jìn)開(kāi)發(fā)者理解被測(cè)單元,替代過(guò)時(shí)文檔,提高代碼維護(hù)性,促進(jìn)團(tuán)隊(duì)溝通,是推行質(zhì)量文化的關(guān)鍵。單元測(cè)試對(duì)軟件開(kāi)發(fā)者的意義。盡管單元測(cè)試看似增加工作量,但實(shí)則為開(kāi)發(fā)者帶來(lái)諸多益處。它幫助開(kāi)發(fā)者明確設(shè)計(jì)規(guī)格,鍛煉邏輯思維與代碼分析能力,促進(jìn)編寫(xiě)標(biāo)準(zhǔn)一致,通過(guò)代碼審閱增進(jìn)團(tuán)隊(duì)跨領(lǐng)域理解與學(xué)習(xí)機(jī)會(huì)。6.對(duì)案例中的排序程序進(jìn)行修改,替換成為起泡排序程序。具體程序如下:publicvoidbubbleSort(){for(inti=arr.length;--i>=0;){for(intj=0;j<i;j++){if(arr[j]>arr[j+1]){intt=arr[j];arr[j]=arr[j+1];arr[j+1]=t;}pause(i,j);}}}熟讀程序,并對(duì)其進(jìn)行單元測(cè)試。要求完成以下測(cè)試:代碼規(guī)范檢查和邏輯結(jié)構(gòu)檢查基路徑覆蓋測(cè)試循環(huán)覆蓋測(cè)試等價(jià)類測(cè)試特殊值測(cè)試測(cè)試后,針對(duì)缺陷,對(duì)代碼進(jìn)行修復(fù),并在修復(fù)后進(jìn)行回歸測(cè)試?!緟⒖即鸢浮恳?guī)范后代碼/**

*冒泡排序

*/

publicclassSample6{

privateint[]arr;

/**

*冒泡排序

*/

publicvoidbubbleSort(){

for(inti=arr.length;--i>=0;){

for(intj=0;j<i;j++){

if(arr[j]>arr[j+1]){

intt=arr[j];

arr[j]=arr[j+1];

arr[j+1]=t;

}

pause(i,j);

}

}

}

/**

*設(shè)置數(shù)組

*@return數(shù)組

*/

publicvoidsetArr(int[]arr){

this.arr=arr;

}

/**

*暫停函數(shù),這里打印數(shù)據(jù)

*@parami位置i

*@paramj位置j

*/

publicvoidpause(inti,intj){

System.out.println("交換數(shù)據(jù)位置:i="+i+",j="+j);

}

}基路徑覆蓋測(cè)試代碼@DisplayName("基路徑覆蓋測(cè)試")

@ParameterizedTest

@CsvSource({"[1:70:3:4:5:6:7:8:9:10],[1:3:4:5:6:7:8:9:10:70]",

"[1:-2:3],[-2:1:3]",

"[10:2:3:4:5:16:7:8:9:10],[2:3:4:5:7:8:9:10:10:16]",

})

voidbubbleSortPathTest(StringarrStr,StringarrExp){

Sample6sample6=newSample6();

String[]arrayString=arrStr.substring(1,arrExp.length()-1).split(":");

int[]array=Arrays.stream(arrayString)

.mapToInt(Integer::parseInt)

.toArray();

String[]arrayStringExp=arrExp.substring(1,arrExp.length()-1).split(":");

int[]arrayExp=Arrays.stream(arrayStringExp)

.mapToInt(Integer::parseInt)

.toArray();

sample6.setArr(array);

sample6.bubbleSort();

assertArrayEquals(arrayExp,array);

}循環(huán)測(cè)試代碼,按照循環(huán)測(cè)試要求,測(cè)試循環(huán)次數(shù),本例中只需測(cè)試測(cè)試循環(huán)0次)@DisplayName("循環(huán)覆蓋測(cè)試")

@Test

voidbubbleSortCycleTest(){

Sample6sample6=newSample6();

int[]array=newint[]{};

sample6.setArr(array);

sample6.bubbleSort();

assertArrayEquals(newint[]{},array);

}等價(jià)類,本例中對(duì)輸入數(shù)據(jù)進(jìn)行有效等價(jià)類和無(wú)效等價(jià)類劃分,有效類通過(guò)基路徑測(cè)試和循環(huán)測(cè)試進(jìn)行測(cè)試,這里測(cè)試無(wú)效數(shù)據(jù)。@DisplayName("等價(jià)類測(cè)試-數(shù)組為null")

@Test

voidbubbleSortTest(){

Sample6sample6=newSample6();

int[]array=null;

sample6.setArr(array);

sample6.bubbleSort();

assertArrayEquals(null,array);

}特殊值測(cè)試,這里主要測(cè)試按正序排列數(shù)據(jù),倒序排列數(shù)據(jù),相同數(shù)據(jù)的排序的測(cè)試@DisplayName("特殊值測(cè)試")

@ParameterizedTest

@CsvSource({"[1:1:1:1:1],[1:1:1:1:1]",

"[1:2:3:4:5],[1:2:3:4:5]",

"[5:4:3:2:1],[1:2:3:4:5]",

})

voidbubbleSortSpecialTest(StringarrStr,StringarrExp){

Sample6sample6=newSample6();

String[]arrayString=arrStr.substring(1,arrExp.length()-1).split(":");

int[]array=Arrays.stream(arrayString)

.mapToInt(Integer::parseInt)

.toArray();

String[]arrayStringExp=arrExp.substring(1,arrExp.length()-1).split(":");

int[]arrayExp=Arrays.stream(arrayStringExp)

.mapToInt(Integer::parseInt)

.toArray();

sample6.setArr(array);

sample6.bubbleSort();

assertArrayEquals(arrayExp,array);

}整理代碼,抽象公共函數(shù)。測(cè)試代碼如下:packagecn.st.ex5;

importorg.junit.jupiter.api.DisplayName;

importorg.junit.jupiter.api.Test;

importorg.junit.jupiter.params.ParameterizedTest;

importvider.CsvSource;

importjava.util.Arrays;

importstaticorg.junit.jupiter.api.Assertions.*;

classSample6Test{

@DisplayName("基路徑覆蓋測(cè)試")

@ParameterizedTest

@CsvSource({"[1:70:3:4:5:6:7:8:9:10],[1:3:4:5:6:7:8:9:10:70]",

"[1:-2:3],[-2:1:3]",

"[10:2:3:4:5:16:7:8:9:10],[2:3:4:5:7:8:9:10:10:16]",

})

voidbubbleSortPathTest(StringarrStr,StringarrExp){

test(arrStr,arrExp);

}

@DisplayName("循環(huán)覆蓋測(cè)試")

@Test

voidbubbleSortCycleTest(){

Sample6sample6=newSample6();

int[]array=newint[]{};

sample6.setArr(array);

sample6.bubbleSort();

assertArrayEquals(newint[]{},array);

}

@DisplayName("等價(jià)類測(cè)試-數(shù)組為null")

@Test

voidbubbleSortTest(){

Sample6sample6=newSample6();

int[]array=null;

sample6.setArr(array);

sample6.bubbleSort();

assertArrayEquals(null,array);

}

@DisplayName("特殊值測(cè)試")

@ParameterizedTest

@CsvSource({"[1:1:1:1:1],[1:1:1:1:1]",

"[1:2:3:4:5],[1:2:3:4:5]",

"[5:4:3:2:1],[1:2:3:4:5]",

})

voidbubbleSortSpecialTest(StringarrStr,StringarrExp){

test(arrStr,arrExp);

}

voidtest(StringarrStr,StringarrExp){

Sample6sample6=newSample6();

String[]arrayString=arrStr.substring(1,arrExp.length()-1).split(":");

int[]array=Arrays.stream(arrayString)

.mapToInt(Integer::parseInt)

.toArray();

String[]arrayStringExp=arrExp.substring(1,arrExp.length()-1).split(":");

int[]arrayExp=Arrays.stream(arrayStringExp)

.mapToInt(Integer::parseInt)

.toArray();

sample6.setArr(array);

sample6.bubbleSort();

assertArrayEquals(arrayExp,array);

}

}測(cè)試后,測(cè)試用例不能完全通過(guò),源碼沒(méi)有對(duì)arr為空的值進(jìn)行處理,修改后的源碼如下:/**

*冒泡排序

*/

publicclassSample6{

privateint[]arr;

/**

*冒泡排序

*/

publicvoidbubbleSort(){

if(arr==null||arr.length==0){

return;

}

for(inti=arr.length;--i>=0;){

for(intj=0;j<i;j++){

if(arr[j]>arr[j+1]){

intt=arr[j];

arr[j]=arr[j+1];

arr[j+1]=t;

}

pause(i,j);

}

}

}

/**

*設(shè)置數(shù)組

*@return數(shù)組

*/

publicvoidsetArr(int[]arr){

this.arr=arr;

}

/**

*交換暫停打印

*@parami位置i

*@paramj位置j

*/

publicvoidpause(inti,intj){

System.out.println("交換數(shù)據(jù)位置:i="+i+",j="+j);

}

}第6章--練習(xí)題6基于功能分解的集成的方法有哪些? A)非漸增式集成; B)自頂向下集成; C)自底向上集成; D)三明治集成;【參考答案】BCD基于調(diào)用圖的集成方法有: A)成對(duì)集成 B)相鄰集成 C)大棒集成 D)基于MM路徑的集成【參考答案】AB簡(jiǎn)述基于功能分解的集成的特點(diǎn),并分析其適用的應(yīng)用場(chǎng)景?!緟⒖即鸢浮酷槍?duì)不同的順序結(jié)構(gòu),基于功能分解的集成可分為自頂向下集成、自底向上集成、三明治集成。(1)自頂向下集成的優(yōu)點(diǎn)是可以使高級(jí)別的邏輯和數(shù)據(jù)流可以在過(guò)程的早期階段測(cè)試,有助于最大限度地減少對(duì)驅(qū)動(dòng)程序的需求。缺點(diǎn)是低級(jí)別的模塊在開(kāi)發(fā)周期中相對(duì)較晚的周期測(cè)試,這樣不能很好地支持有限功能的早期發(fā)布,如果樁模塊不能反應(yīng)真實(shí)情況,重要數(shù)據(jù)不能及時(shí)送回到上層模塊,則測(cè)試可能不充分。自頂向下集成適用場(chǎng)景:控制結(jié)構(gòu)比較清晰和穩(wěn)定、高層接口變化比較小、底層接口未定義或經(jīng)??赡鼙恍薷摹⒖刂颇K具有較大的\t"/html/31/_self"技術(shù)風(fēng)險(xiǎn),需要盡早驗(yàn)證、希望能夠盡早看到產(chǎn)品的系統(tǒng)功能行為。(2)自底向上集成的優(yōu)點(diǎn)是可以最大限度地減少對(duì)樁模塊的需求,并且可以實(shí)施多個(gè)模塊的并行測(cè)試,提高了測(cè)試效率,測(cè)試人員能較好地鎖定軟件故障所在的位置。缺點(diǎn)是對(duì)驅(qū)動(dòng)程序的需求使得測(cè)試管理變得復(fù)雜,不能很好地支持有限功能的早期發(fā)布。自底向上集成適用場(chǎng)景:底層接口比較穩(wěn)定、高層接口變化比較頻繁、底層模塊較早完成。(3)三明治集成兼有自頂向下集成和自底向上集成的優(yōu)缺點(diǎn)。三明治集成方法在軟件測(cè)試中適用于大多數(shù)項(xiàng)目,特別事當(dāng)系統(tǒng)的模塊層次結(jié)構(gòu)較為復(fù)雜,且中間層模塊功能較為關(guān)鍵時(shí),推薦使用該方法。簡(jiǎn)述基于調(diào)用圖的集成的特點(diǎn),并分析其適用的應(yīng)用場(chǎng)景?!緟⒖即鸢浮炕谡{(diào)用圖的集成測(cè)試是關(guān)注于程序模塊(函數(shù)方法)的調(diào)用關(guān)系來(lái)設(shè)計(jì)測(cè)試會(huì)話的,相對(duì)基于功能分解的集成測(cè)試而言,該測(cè)試方法對(duì)于功能層次關(guān)系不是很明確的軟件系統(tǒng)的集成測(cè)試,特別是對(duì)于調(diào)用關(guān)系復(fù)雜的軟件項(xiàng)目的集成測(cè)試很是適用。而基于調(diào)用圖的集成測(cè)試,結(jié)合了結(jié)構(gòu)性測(cè)試的方法,不僅關(guān)注模塊間的調(diào)用關(guān)系,還要關(guān)注代碼中模塊調(diào)用的位置。采用基于功能分解的集成方法分析下面的模塊圖的集成測(cè)試對(duì)話,具體要求如下:分別采用自頂向下,自低向上、三明治集成的方法分析在不同的方法下,是否需要樁模塊和驅(qū)動(dòng)模塊的設(shè)計(jì),需要設(shè)計(jì)那些?!緟⒖即鸢浮考蓽y(cè)試順序及設(shè)計(jì)的驅(qū)動(dòng)模塊及樁模塊如圖:自頂向下集成:深度優(yōu)先策略自頂向下集成:廣度優(yōu)先策略自底向上集成三明治集成采用基于調(diào)用圖的集成方法分析下圖中模塊調(diào)用關(guān)系圖的集成測(cè)試對(duì)話,具體要求如下:分別采用成對(duì)集成和相鄰集成的方法分析在不同的方法下,是否需要樁模塊和驅(qū)動(dòng)模塊的設(shè)計(jì),需要設(shè)計(jì)那些?!緟⒖即鸢浮砍蓪?duì)集成編號(hào)執(zhí)行對(duì)樁驅(qū)動(dòng)編號(hào)執(zhí)行對(duì)樁驅(qū)動(dòng)11-2S3S486-5S7S10D621-3S2S4S996-8S5S11S13D131-4S2S3105-10S7D643-9D1115-7S10D654-7S9D1128-13D664-9S7D1136-11S5S8D171-6S5S8S11相鄰集成編號(hào)節(jié)點(diǎn)前驅(qū)后繼樁驅(qū)動(dòng)112、3、4S9S72319S2S43419、7S2S34615、8、11S7S10S135567、10S8S11D168613S5S11D1第7章--練習(xí)題7下面關(guān)于系統(tǒng)測(cè)試的描述正確的有哪些? A)系統(tǒng)測(cè)試主要是由質(zhì)量部門(mén)的測(cè)試工程師來(lái)主導(dǎo)工作 B)一般使用黑盒測(cè)試技術(shù) C)一般由獨(dú)立的測(cè)試人員完成 D)系統(tǒng)測(cè)試的依據(jù)開(kāi)發(fā)人員提供的“需求規(guī)格說(shuō)明書(shū)”【參考答案】ABCD下面描述中哪些是性能測(cè)試的因素? A)使用用戶數(shù) B)功能的復(fù)雜度 C)數(shù)據(jù)量 D)軟件環(huán)境 E)硬件環(huán)境 F)網(wǎng)絡(luò)環(huán)境【參考答案】ABCDEF兼容性測(cè)試關(guān)注的內(nèi)容有哪些? A)軟件之間的兼容 B)操作系統(tǒng)兼容性測(cè)試 C)數(shù)據(jù)庫(kù)的兼容性測(cè)試 D)瀏覽器的兼容性測(cè)試【參考答案】ABCD簡(jiǎn)述系統(tǒng)測(cè)試的主要內(nèi)容?!緟⒖即鸢浮肯到y(tǒng)測(cè)試是將已經(jīng)集成好的軟件系統(tǒng),作為整個(gè)計(jì)算機(jī)系統(tǒng)的一個(gè)元素,與計(jì)算機(jī)硬件、外設(shè)、某些支持軟件、數(shù)據(jù)和人員等其它系統(tǒng)元素結(jié)合在一起,在實(shí)際運(yùn)行(使用)環(huán)境下,對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行一系列測(cè)試活動(dòng)。根本任務(wù)是證明被測(cè)系統(tǒng)的功能和結(jié)構(gòu)的穩(wěn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論