




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教改課題申報(bào)書(shū)地方
- 教育小課題立項(xiàng)申報(bào)書(shū)
- 電商課題申報(bào)書(shū)
- 南非施工合同范本
- 創(chuàng)業(yè)合伙協(xié)議合同范本
- 同城配送員工餐飲合同范本
- 申報(bào)書(shū)課題類別
- 旅游教改課題申報(bào)書(shū)
- 化工自提合同范本
- 合同內(nèi)歸屬權(quán)合同范本
- 《采購(gòu)管理策略》課件
- 《校園安全教育(第二版)》 課件 項(xiàng)目一 走進(jìn)安全教育;項(xiàng)目二 維護(hù)校園治安
- 高標(biāo)準(zhǔn)農(nóng)田建設(shè)項(xiàng)目驗(yàn)收技術(shù)方案
- 2024年甘肅天水麥積山石窟藝術(shù)研究所招聘工作人員考試真題
- 人效的指標(biāo)體系及其“落地雙引擎”
- 2025年山東省榮成市屬事業(yè)單位招聘崗位及歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 醫(yī)學(xué)三基知識(shí)考試題庫(kù)及答案(護(hù)理+臨床)
- 2024年6月浙江省高考化學(xué)試題含答案解析
- 火星表面材料分析-深度研究
- 2025年南京信息職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 《職業(yè)技能等級(jí)評(píng)價(jià)規(guī)范編制指南編制說(shuō)明》
評(píng)論
0/150
提交評(píng)論