選擇題(每小題2分,共50分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的。請將正確選項填涂在答題卡相應(yīng)位置上,答在試卷上不得分。
(1)堅持在軟件開發(fā)的各個階段實施下列哪種質(zhì)量保證措施,才能在開發(fā)過程中盡早發(fā)現(xiàn)和預(yù)防錯誤,把出現(xiàn)的錯誤克服在早期
A)技術(shù)評審 B)程序測試 C)文檔審查 D)管理評審
(2)經(jīng)驗表明,在程序測試中,某模塊與其他模塊相比,若該模塊已發(fā)現(xiàn)并改正的錯誤數(shù)目較多,則該模塊中殘存的錯誤數(shù)目與其他模塊相比,通常應(yīng)該
A)較少 B)較多 C)相似 D)不確定
(3)對程序中已發(fā)現(xiàn)的錯誤進行錯誤定位和確定出錯性質(zhì),并改正這些錯誤,同時修改相關(guān)的文檔,稱為
A)測試 B)調(diào)試 C)錯誤分析 D)驗證
(4)同行評審,有時稱為同級評審,是一種通過作者的同行來確認缺陷和需要變更區(qū)域的檢查方法。它主要分為管理評審、技術(shù)評審、文檔評審和
A)誤差評審 B)項目評審 C)過程評審 D)組織體系評審
(5)數(shù)據(jù)流覆蓋關(guān)注的是程序中某個變量從其聲明、賦值到引用的變化情況,它是下列哪一種覆蓋的變種
A)語句覆蓋 B)控制覆蓋 C)分支覆蓋 D)路徑覆蓋
(6)程序的流程圖如下圖所示,采用路徑覆蓋法進行測試,則至少需要幾個測試用例可以覆蓋所有可能的路徑
(7)如果一個判定中的復(fù)合條件表達式為(A > 1)or(B <= 3),則為了達到100%的條件覆蓋率,至少需要設(shè)計多少個測試用例
A)1 B)
(8)自底向上單元測試的策略是首先對模塊調(diào)用圖上的哪一層模塊進行測試
A)底層 B)下一層 C)高層 D)上一層
(9)基本路徑測試滿足
A)語句覆蓋 B)路徑覆蓋 C)分支覆蓋 D)條件覆蓋
(10)集成測試對系統(tǒng)內(nèi)部的交互以及集成后系統(tǒng)功能檢驗了何種質(zhì)量特性
A)正確性 B)可靠性 C)可使用性 D)可維護性
(11)在軟件性能測試中,下列指標(biāo)中哪個不是軟件性能的指標(biāo)
A)響應(yīng)時間 B)吞吐量 C)資源利用率 D)并發(fā)進程數(shù)
(12)下列關(guān)于軟件性能測試的說法中,正確的是
A)性能測試的目的不是為了發(fā)現(xiàn)軟件缺陷
B)壓力測試與負載測試的目的都是為了探測軟件在滿足預(yù)定性能需求的情況下所能負擔(dān)的大壓力
C)性能測試通常要對測試結(jié)果進行分析才能獲得測試結(jié)論
D)在性能下降曲線上,大建議用戶數(shù)通常處于性能輕微下降區(qū)與性能急劇下降區(qū)的交界處
(13)下列關(guān)于軟件可靠性測試的說法中,錯誤的是
A)發(fā)現(xiàn)軟件缺陷是軟件可靠性測試的主要目的
B)軟件可靠性測試通常用于有可靠性要求的軟件
C)在軟件可靠性測試中,執(zhí)行的測試用例必須完全符合所定義的軟件運行剖面
D)可靠性測試通常要對測試結(jié)果進行分析才能獲得測試結(jié)論
(14)下列關(guān)于面向?qū)ο筌浖䴗y試的說法中,正確的是
A)在測試一個類時,只要對該類的每個成員方法都進行充分的測試就完成了對該類充分的測試
B)在存在多態(tài)的情況下,為了達到較高的測試充分性,應(yīng)對所有可能的綁定都進行測試
C)假設(shè)類B是類A的子類,如果類A已進行了充分的測試,在測試類B時不必測試任何類B繼承類A的成員方法
D)對于一棵繼承樹上的多個類,只有處于葉節(jié)點的類需要測試
(15)下列哪種測試不屬于面向?qū)ο髥卧獪y試考慮的范疇
A)成員方法的測試 B)類的測試
C)類樹的測試 D)多個相互協(xié)作的類樹的測試
(16)下列關(guān)于面向?qū)ο蠹蓽y試的說法中,正確的是
A)大突擊集成是面向?qū)ο蠹蓽y試常用且有效的方法
B)自底向上集成和自頂向下集成都需要為集成測試開發(fā)大量代碼
C)協(xié)作集成在任何情況下都優(yōu)于自底向上集成和自頂向下集成
D)高頻集成是以自底向上集成為基礎(chǔ),利用冒煙測試進行的集成測試
(17)在Web應(yīng)用軟件的分層測試策略中,下列哪個不是測試關(guān)注的層次
A)數(shù)據(jù)層 B)業(yè)務(wù)層 C)服務(wù)層 D)表示層
(18)下列關(guān)于Web應(yīng)用軟件測試的說法中,正確的是
A)Cookie測試是Web應(yīng)用軟件功能測試的重要內(nèi)容
B)對于沒有使用數(shù)據(jù)庫的Web應(yīng)用軟件,不需要進行性能測試
C)鏈接測試是Web應(yīng)用軟件易用性測試的重要內(nèi)容
D)Web應(yīng)用軟件安全性測試僅關(guān)注Web應(yīng)用軟件是否能夠防御網(wǎng)絡(luò)攻擊
(19)下列哪一項不屬于軟件功能易用性測試關(guān)注的內(nèi)容
A)軟件界面的色彩是否協(xié)調(diào)
B)軟件是否能主動禁止用戶可能進行的非法操作
C)軟件是否允許用戶針對自己的使用習(xí)慣進行定制
D)軟件是否能幫助用戶減少輸入中的重復(fù)勞動
(20)下列關(guān)于極限測試的說法中,正確的是
A)極限測試是一種新型的測試方法,傳統(tǒng)的測試技術(shù)均不適用于極限測試
B)極限測試中所有的測試均是由編碼人員完成的
C)與傳統(tǒng)的軟件測試相比,極限測試是一種更嚴(yán)格的測試
D)極限測試需要頻繁地進行單元測試
(21)下列有關(guān)測試過程V模型的說法中,正確的是
A)驗收測試應(yīng)確定程序的執(zhí)行是否滿足軟件設(shè)計的要求
B)系統(tǒng)測試應(yīng)確定系統(tǒng)功能和性能的質(zhì)量特性是否達到系統(tǒng)要求的指標(biāo)
C)單元測試和集成測試應(yīng)確定軟件的實現(xiàn)是否滿足用戶需要或合同的要求
D)集成測試在編碼結(jié)束前就可以開始
(22)下列哪項工作與軟件缺陷管理和追蹤無關(guān)
A)對缺陷應(yīng)該包含的信息條目、狀態(tài)分類等進行完善設(shè)計
B)通過軟件系統(tǒng)自動發(fā)送通知給相關(guān)開發(fā)和測試人員,使缺陷得到及時處理
C)對測試用例的執(zhí)行結(jié)果進行記錄和追蹤
D)通過一些歷史曲線和統(tǒng)計曲線來分析和預(yù)測未來的缺陷發(fā)現(xiàn)情況
(23)下列有關(guān)軟件問題生命周期模型狀態(tài)定義的說法中,錯誤的是
A)“新建”表示測試中發(fā)現(xiàn)并報告了新的軟件問題
B)“打開”表示軟件問題已被確認并分配給相關(guān)開發(fā)工程師處理
C)“關(guān)閉”表示軟件問題已被開發(fā)人員修復(fù)并等待測試人員驗證
D)“解決”表示軟件問題已被確認修復(fù)
(24)下列有關(guān)軟件測試工具的說法中,錯誤的是
A)靜態(tài)測試工具可用于對軟件需求、結(jié)構(gòu)設(shè)計、詳細設(shè)計和代碼進行評審、走查和審查
B)靜態(tài)測試工具可對軟件的復(fù)雜度分析、數(shù)據(jù)流分析、控制流分析和接口分析提供支持
C)動態(tài)測試工具可用于軟件的覆蓋分析和性能分析
D)動態(tài)測試工具不包括軟件的仿真測試和變異測試
(25)計算機軟件測試規(guī)范規(guī)定,軟件測試的類別可分為:單元測試、集成測試以及
A)系統(tǒng)測試 B)驗收測試
C)系統(tǒng)測試和驗收測試 D)配置項測試、系統(tǒng)測試和驗收測試
論述題(3題,共50分)
論述題答題必須用藍、黑色鋼筆或圓珠筆寫在論述題答題紙的相應(yīng)位置上。
論述題1:以下是學(xué)生選課系統(tǒng)中“學(xué)生查詢成績”交互行為的描述,請按要求回答問題(20分)
交互開始時終端上顯示首頁,用戶選擇“查詢”請求后,顯示“請輸入學(xué)號”。
在用戶輸入學(xué)號后,系統(tǒng)核對學(xué)生學(xué)號:若輸入的學(xué)號不正確,則顯示“輸入的學(xué)號不正確”,此次查詢?nèi)∠,回到首頁;若輸入的學(xué)號正確,出現(xiàn)“請輸入課程名”。
一旦輸入課程名,就開始核對課程名稱:若輸入的課程名不正確,則顯示“輸入的課程名不正確”,此次查詢?nèi)∠氐绞醉;若輸入的課程名正確,則根據(jù)“學(xué)號”和“課程名”,查詢學(xué)生成績。
若查詢學(xué)生成績成功,則顯示查詢到的成績,系統(tǒng)詢問是否繼續(xù)查詢:當(dāng)用戶選擇“繼續(xù)查詢”后回到“請輸入學(xué)號”;當(dāng)用戶選擇“結(jié)束查詢”后回到首頁。
若查詢學(xué)生成績失敗,則顯示“查詢失敗”后回到首頁。
(1)請畫出該系統(tǒng)以上交互行為的狀態(tài)圖(應(yīng)滿足功能圖的要求,不可畫成流程圖)。(10分)
(2)使用基本路徑測試方法確定該狀態(tài)圖的測試路徑。(10分)
論述題2:以下是QESuite Web Version 1.0中某測試項目的部分界面,請按要求回答問題(12分)
(1)下圖是該測試項目的測試用例執(zhí)行文檔界面。有幾個測試用例沒有執(zhí)行?有幾個測試用例近執(zhí)行通過?有幾個測試用例近執(zhí)行失敗?(3分)
(2)下圖是該測試項目的某軟件問題報告視圖。按QESuite Web Version 1.0中的軟件問題生命周期定義,4號軟件問題報告需要何種人員進行哪些可能的操作?5號軟件問題報告需要何種人員進行哪些可能的操作?8號軟件問題報告需要何種人員進行哪些可能的操作?(9分)
論述題3:針對以下C語言程序,請按要求回答問題(18分)
已知link.c源程序如下:
/*link.c程序?qū)蜗蜴湵磉M行操作,首先建立一個單向鏈表,然后根據(jù)用戶的選擇可以對其進行插入節(jié)點、刪除節(jié)點和鏈表反轉(zhuǎn)操作*/
#include
#include
typedef struct list_node *list_pointer; //定義鏈表指針
typedef struct list_node{ //定義鏈表結(jié)構(gòu)
int data;
list_pointer link;
}list_node;
//用到的操作函數(shù):
list_pointer create(); //建立一個單向鏈表
void insert(list_pointer *p_ptr, list_pointer node); //在node后加入一個新的節(jié)點
void delete_node(list_pointer *p_ptr, list_pointer trail, list_pointer node);
//刪除前一個節(jié)點是trail的當(dāng)前節(jié)點node
void print(list_pointer ptr); //打印鏈表節(jié)點中的值
list_pointer invert(list_pointer lead); //反轉(zhuǎn)鏈表
int main()
{
list_pointer ptr=NULL;
list_pointer node, trail;
list_pointer *p = &ptr;
int choose, location, i;
printf("you should create a link first:\n");
//建立一個單向鏈表:
ptr=create(); /* ptr 指向鏈表的第一個節(jié)點 */
print(ptr);
//根據(jù)用戶的不同選擇進行相應(yīng)的操作:
printf("input number 0, you can quit the program\n");
printf("input number 1, you can insert a new node to link\n");
printf("input number 2, you can delete a node from the link\n");
printf("input number 3, you can invert the link\n");
printf("please input your choice\n");
scanf("%d", &choose);
while(choose!=0){
switch(choose){
case 1:
printf("you will insert a node to the link\n");
printf("please input the location of the node:\n");
scanf("%d", &location);
node = ptr;
i = 1;
while(i
node = node->link;
i++;
}
insert(p, node); /* p為指向ptr的指針 */
print(ptr);
break;
case 2:
printf("you will delete a node from the link\n");
printf("please input the location of the node:\n");
scanf("%d", &location);
node = ptr;
if(location ==1)
trail = NULL;
trail = ptr;
i = 1;
while(i
trail = trail->link;
i++;
}
node = trail->link;
delete_node(p, trail, node);
print(ptr);
break;
case 3:
printf("you will invert the link\n");
ptr = invert(ptr);
print(ptr);
break;
default:
break;
return -1;
}
printf("please input your choice\n");
scanf("%d", &choose);
}
return 0;
}
//根據(jù)用戶的輸入數(shù)值建立一個新的單向鏈表:
list_pointer create()
{
int i, current, length;
list_pointer p1, p2, head;
printf("please input the node number of the link:\n");
scanf("%d", &length);
printf("the number of the link is : %d\n", length);
printf("please input the data for the link node:\n");
i =0;
p1= p2= (list_pointer) malloc(sizeof(list_node));
head = p1;
for(i = 0; i
scanf("%d", ¤t);
p1->data = current;
p2->link = p1;
p2 = p1;
p1 = (list_pointer) malloc(sizeof(list_node));
}
p2->link = NULL;
return head;
}
……
(1)畫出主函數(shù)main的控制流程圖。(10分)
(2)設(shè)計一組測試用例,盡量使main 函數(shù)的語句覆蓋率能達到100% 。如果認為該函數(shù)的語句覆蓋率無法達到100% ,需說明原因。(8分)