1. 程式人生 > >軟體測試工程師試題及答案

軟體測試工程師試題及答案

軟體測試工程師試題
一、填空
1、軟體測試階段的基本任務應當是根據軟體開發各階段的
和程式的
,精心設計一批“高產”的測試用例,利用這些測試用例
,找出軟體中潛藏的各種錯誤和缺陷。
2、測試用例不僅要選用合理的測試輸入資料,還需要選用不合理的測試輸入資料,這樣能更多地
,提高程式的可靠性。對於不合理的測試輸入資料,程式應
,並給出相應的提示。
3、動態測試指通過
發現錯誤。對軟體產品進行動態測試時使用黑盒測試法和
法。
4、靜態測試指
不在機器上執行,而是採用

的手段對程式進行檢測。
5、黑盒測試依據
,檢查程式是否滿足
。因此,黑盒測試由稱為功能測試或
測試。
6、白盒測試以檢查處理過程的細節為基礎,對程式中儘可能多的
進行測試,檢查內部

是否有錯,程式的
與預期的狀態是否一致。
7、在基本路徑測試中,獨立路徑是指包括一組以前沒有處理過的
的一條路徑。從程式圖來看,一條獨立路徑是至少包含有一條
的邊的路徑。
8、在單元測試中,驅動模組的作用是用來模擬被測模組的
。它的工作是接受
,以上層模組呼叫被測模組的形式
被測模組,接收被測模組的
並輸出。
9、在單元測試中,樁模組用來代替被測模組的
。其作用是
的資訊。
10、錯誤的群集現象是指模組錯誤發現率與模組的殘留錯誤數成
關係。

清空 提交

二、選擇題

1、在軟體測試中,下面說法中錯誤的是( )。
A. 測試是為了發現程式中的錯誤而執行程式的過程
B. 測試是為了表明程式是正確的
C. 好的測試方案是極可能發現迄今為止尚未發現的錯誤的方案
D. 成功的測試是發現了至今為止尚未發現的錯誤的測試

2、軟體測試的目的是( )。
A. 試驗性執行軟體
B. 發現軟體錯誤
C. 證明軟體正確
D. 找出軟體中全部錯誤

3、軟體測試用例主要由測試輸入資料和( )兩部分組成。
A. 測試計劃
B. 測試規則
C. 測試的預期結果
D. 以往測試記錄分析

4、與設計測試用例無關的文件是( )。
A. 專案開發計劃
B. 需求規格說明書
C. 軟體設計說明書
D. 源程式

5、軟體測試是軟體質量保證的主要手段之一,測試的成本已超過( )的30%以上。因此,提高測試的有效性非常重要。
A. 軟體開發成本
B. 軟體維護成本
C. 軟體開發成本和維護成本
D. 軟體研製成本

6、“高產”的測試是指( )。
A. 用適量的測試用例說明被測試程式正確無誤
B. 用適量的測試用例說明被測試程式符合相應的要求
C. 用適量的測試用例發現被測試程式儘可能多的錯?
D. 用適量的測試用例糾正被測試程式儘可能多的錯誤

7、如果想要進行成功的測試,為其設計測試用例主要依賴於( )。
A. 黑盒測試方法
B. 測試人員的經驗
C. 白盒測試方法
D. 錯誤推測法

8、使用白盒測試方法時,確定測試資料應根據( )和指定的覆蓋標準。
A. 程式的內部結構
B. 程式的複雜性
C. 使用說明書
D. 程式的功能

9、在用邏輯覆蓋法設計測試用例時,有語句覆蓋、分支覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋和路徑覆蓋等。其中( )是最強的覆蓋準則。
A. 語句覆蓋
B. 條件覆蓋
C. 判定-條件覆蓋
D. 路徑覆蓋

10、在設計測試用例時,( )是用得最多的一種黑盒測試方法。
A. 等價類劃分
B. 邊界值分析
C. 因果圖
D. 功能圖

11、在黑盒測試中,著重檢查輸入條件的組合的測試用例設計方法是( )。
A. 等價類劃分
B. 邊界值分析
C. 錯誤推測法
D. 因果圖法

12、從下列敘述中,能夠與軟體開發各階段,如需求分析、設計、編碼相對應的軟體測試是( )。
A. 組裝測試、確認測試、單元測試
B. 單元測試、組裝測試、確認測試
C. 單元測試、確認測試、組裝測試
D. 確認測試、組裝測試、單元測試

13、單元測試將根據在( )階段中產生的規格說明進行。
A. 可行性研究與計劃
B. 需求分析
C. 概要設計
D. 詳細設計

14、組裝測試計劃是在( )階段制定的。
A. 可行性研究與計劃
B. 需求分析
C. 概要設計
D. 詳細設計

15、確認測試計劃是在( )階段制定的。
A. 可行性研究與計劃
B. 需求分析
C. 概要設計
D. 詳細設計

16、軟體的組裝測試最好是由( )承擔,以提高組裝測試的效果。
A. 該軟體的設計者
B. 該軟體開發組的負責人
C. 該軟體的程式設計者
D. 不屬於該開發組的人員

17、( )是簡化了的模擬較低層次模組功能的虛擬子程式。
A. 過程
B. 函式
C. 模擬
D. 樁

18、( )是指為查明程式中的錯誤和缺陷,可能使用的工具和手段。
A. 除錯技術
B. 測試技術
C. 跟蹤法
D. 動態測試

19、從已發現故障的存在到找到準確的故障位置並確定故障的性質,這一過程稱為( )。
A. 錯誤檢測
B. 故障排除
C. 除錯
D. 測試

20、在程式設計的過程中應為程式除錯做好準備,主要體現在( )方面。
A. 採用模組化、結構化的程式設計方法設計程式
B. 編寫程式時要為程式除錯提供足夠的靈活性
C. 根據程式除錯的需要,選擇並安排適當的中間結果輸出和必要的斷?
D. 以上全是

21、統計資料表明,軟體測試的工作量佔整個軟體開發工作量的( )。
A. 30%
B. 70%
C. 40%~50%
D. 95%

22、軟體測試計劃是一些文件,它們描述了( )。
A. 軟體的性質
B. 軟體的功能和測試用例
C. 軟體的規定動作
D. 對於預定的測試活動將要採取的手段

23、IBM公司的統計資料表明,使用靜態測試的方法最高可以查出在測試中查出的全部軟體錯誤的( )。
A. 80%
B. 70%
C. 50%
D. 35%

24、黑盒測試方法的優點是( )。
A. 可測試軟體的特定部位
B. 能站在使用者立場測試
C. 可按軟體內部結構測試
D. 可發現實現功能需求中的錯誤

25、白盒測試方法的優點是( )。
A. 可測試軟體的特定部位
B. 能站在使用者立場測試
C. 可按軟體內部結構測試
D. 可發現實現功能需求中的錯誤

26、等價類劃分完成後,就可得出( ),它是確定測試用例的基礎。
A. 有效等價類
B. 無效等價
C. 等價類表
D. 測試用例集

27、由因果圖轉換出來的( )是確定測試用例的基礎。
A. 判定表
B. 約束條件表
C. 輸入狀態表
D. 輸出狀態表

清空 提交

三、選擇填空題

1、從供選擇的答案中選出應填入下列( )中的字句。
軟體測試的目的是( A )。為了提高測試的效率,應該( B )。使用白盒測試方法時,確定測試資料應根據( C )和指定的覆蓋標準。與設計測試資料無關的文件是( D )。
軟體的整合測試工作最好由( E )承擔,以提高整合測試的效果?BR>供選擇的答案:
A.① 評價軟體的質量② 發現軟體的錯誤
③ 找出軟體中的所有錯誤④ 證明軟體是正確的
B.① 隨機地選取測試資料
② 取一切可能的輸入資料作為測試資料
③ 在完成編碼以後制定軟體的測試計劃
④ 選擇發現錯誤的可能性大的資料作為測試資料
C.① 程式的內部邏輯② 程式的複雜程度
③ 使用說明書④ 程式的功能
D.① 該軟體的設計人員② 程式的複雜程度
③ 源程式④ 專案開發計劃
E.① 該軟體的設計人員② 該軟體開發組的負責人
③ 該軟體的程式設計人員④ 不屬該軟體開發組的軟體人員

2、從供選擇的答案中選出應填入下列( )中的字句。
為了把握軟體開發各個環節的正確性和協調性,人們需要進行( A )和( B )工作。( A )的目的是想證實在一給定的外部環境中軟體的邏輯正確性。它包括( C )和( D ),( B )則試圖證明在軟體生存期各個階段,以及階段間的邏輯( E )、( F )和正確性。
供選擇的答案:
A, B.① 操作 ② 確認 ③ 驗證 ④ 測試 ⑤ 除錯
C, D.① 使用者的確認 ② 需求規格說明的確認
 ③ 程式的確認 ④ 測試的確認
E, F.① 可靠性 ② 獨立性 ③ 協調性 ④ 完備性 ⑤ 擴充性

3、從供選擇的答案中選出應填入下列( )中的字句。
測試過程需要三類輸入:( A )、( B )和( C )。請選擇正確的答案填入下圖中以完成測試資訊處理的全過程。

供選擇的答案?
A~C.① 介面選擇② 軟體配置③ 硬體配置
 ④ 測試配置⑤ 測試環境⑥ 測試工具
D~ F.① 排錯 ② 可靠性分析 ③ 結果分析 ④ 資料分類

4、請從供選擇的答案中選出應填入下列( )中的字句。
程式的三種基本控制結構是( A )。它們的共同點是( B )。結構化程式設計的一種基本方法是( C )。軟體測試的目的是( D )。軟體除錯的目的是( E )。
供選擇的答案:
A.① 過程,子程式,分程式 ② 順序,條件,迴圈
③ 遞迴,堆疊,佇列 ④ 呼叫,返回,轉移
B.① 不能巢狀使用 ② 只能用來寫簡單的程式
③ 已經用硬體實現 ④ 只有一個入口和一個出口
C.① 篩選法 ② 遞迴法 ③ 歸納法 ④ 逐步求精法
D.① 證明程式中沒有錯誤 ② 發現程式中的錯誤
③ 測量程式的動態特性 ④ 檢查程式中的語法錯誤
E.① 找出錯誤所在並改正之 ② 排除存在錯誤的可能性
③ 對錯誤性質進行分類 ④ 統計出錯的次數

5、從供選擇的答案中選出同下列各條敘述關係最密切的字句。
(1) 對可靠性要求很高的軟體,例如作業系統,由第三者對原始碼進行逐行檢查。
(2) 已有的軟體被改版時,由於受到變更的影響,改版前正常的功能可能發生異常,效能也可能下降。因此,對變更的軟體進行測試是必要的。
(3) 在意識到被測試模組的內部結構或演算法的情況下進行測試。
(4) 為了確認使用者的需求,先做出系統的主要部分,提交給使用者試用。
(5) 在測試具有層次結構的大型軟體時,有一種方法是從上層模組開始,由上到下進行測試。此時,有必要用一些模組替代尚未測試過的下層模組。
供選擇的答案:
A~E:① 模擬器 ② 程式碼審查 ③ 模擬器 ④ 樁
⑤ 驅動器 ⑥ 域測試 ⑦ 黑盒測試 ⑧ 原型
⑨ 白盒測試 ⑩ 退化測試

6、從供選擇的答案中選出應填入下面敘述的( )內的正確答案。
軟體測試方法可分為黑盒測試法和白盒測試法兩種。
黑盒測試法是通過分析程式的( A )來設計測試用例的方法。除了測試程式外,它還適用於對( B )階段的軟體文件進行測試。
白盒測試法是根據程式的( C )來設計測試用例的方法。除了測試程式外,它也適用於對( D )階段的軟體文件進行測試。
白盒法測試程式時常按照給定的覆蓋條件選取測試用例。( E )覆蓋比( F )覆蓋嚴格,它使得每一個判定的每一條分支至少經歷一次。( G )覆蓋既是判定覆蓋,又是條件覆蓋,但它並不保證使各種條件都能取到所有可能的值。( H )覆蓋比其他條件都要嚴格,但它不能保證覆蓋程式中的每一條路徑?BR> 單元測試一般以( I )為主,測試的依據是( J )。
供選擇的答案:
A, C:① 應用範圍 ② 內部邏輯 ③ 功能 ④ 輸入資料
B, D:① 編碼 ② 軟體詳細設計 ③ 軟體總體設計 ④ 需求分析
E~H:① 語句 ② 判定 ③ 條件 ④ 判定/條件
⑤ 多重條件 ⑥ 路徑
I: ① 白盒法 ② 黑盒法
J: ① 模組功能規格說明 ② 系統模組結構圖 ③ 系統需求規格說明

7、從供選擇的答案中選出應填入下面敘述的( )內的正確答案。
整合測試也叫做( A )或( B )。通常,在( C )的基礎上,將所有模組按照設計要求組裝成為系統。子系統的整合測試特別稱為?nbsp; D ),它所做的工作是要找出子系統和系統需求規格說明之間的( E )。需要考慮的問題是:在把各個模組連線起來的時侯,穿越模組介面的資料是否會( F ); 一個模組的功能是否會對另一個模組的功能產生不利的影響;各個( G )組合起來,能否達到預期要求的( H );( I )是否有問題;單個模組的誤差累積起來是否會放大。
供選擇的答案:
A~D.① 單元測試 ② 部件測試 ③ 組裝測試
 ④ 系統測試 ⑤ 確認測試 ⑥ 聯合測試
E~I.① 子功能 ② 丟失 ③ 父功能
 ④ 區域性資料結構 ⑤ 全域性資料結構 ⑥ 不一致
 ⑦ 一致

8、從供選擇的答案中選出應該填入下列敘述的( )內的正確答案。
軟體測試中常用的靜態分析方法是( A )和( B )。( B )用於檢查模組或子程式間的呼叫是否正確。分析方法(白盒方法)中常用的方法是( C )方法。非分析方法(黑盒方法)中常用的方法是( D )方法和( E )方法。( E )方法根據輸出對輸入的依賴關係設計測試用例。
供選擇的答案:
A~B:① 引用分析 ② 演算法分析 ③ 可靠性分析 ④ 效率分析
⑤ 介面分析 ⑥ 操作分析
C~E:① 路徑測試 ② 等價類 ③ 因果圖 ④ 歸納測試
⑤ 綜合測試 ⑥ 追蹤 ⑦ 深度優先 ⑧ 除錯
⑨ 相對圖

9、從供選擇的答案中選出應填入下面敘述的( )內的正確答案。
等價類劃分是一種典型的( A )方法,也是一種非常實用的重要的測試方法。使用這一方法,完全不考慮程式的( B )。用所有可能輸入的資料來測試程式是不可能的,只能從全部可供輸入的資料中選擇一個( C )進行測試。( D )是指某個輸入域的集合,在該集合中,各個輸入資料對於揭露程式中的錯誤是( E )。
供選擇的答案:
A: ① 白盒測試方法 ② 黑盒測試方法
B: ① 內部結構 ② 外部環境 ③ 順序 ④ 流程
C~E:① 全集 ② 子集 ③ 等效?BR> ④ 不同的 ⑤ 等價類 ⑥ 典型集

10、從供選擇的答案中選出應填入下面敘述的( )內的正確答案。

① 黑盒測試方法的缺點是( )和( )。
A. 不可測試軟體的特定部位
B. 不能發現功能需求中的錯誤
C. 無法檢驗軟體的外部特性
D. 無法測試未實現功能需求的軟體的內部缺陷

② 白盒測試方法的缺點是( )和( )。
A. 不可測試軟體的特定部位
B. 不能發現功能需求中的錯誤
C. 無法檢驗軟體的外部特性
D. 無法測試未實現功能需求的軟體的內部缺陷

四、問答計算題
1、從下列關於軟體測試的敘述中,選出5條正確的敘述。
(1) 用黑盒法測試時,測試用例是根據程式內部邏輯設計的。
(2) 儘量用公共過程或子程式去代替重複的程式碼段。
(3) 測試是為了驗證該軟體已正確地實現了使用者的要求。
(4) 對於連鎖型分支結構,若有n個判定語句,則有2n條路徑。
(5) 儘量採用複合的條件測試,以避免巢狀的分支結構?BR> (6) GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程式更加簡潔。
(7) 發現錯誤多的程式模組,殘留在模組中的錯誤也多。
(8) 黑盒測試方法中最有效的是因果圖法。
(9) 在做程式的單元測試時,樁(存根)模組比驅動模組容易編寫。
(10) 程式效率的提高主要應通過選擇高效的演算法來實現。

2、對小的程式進行窮舉測試是可能的,用窮舉測試能否保證程式是百分之百正確呢?

3、在任何情況下單元測試都是可能的嗎?都是需要的嗎?

4、如圖所示的程式有三條不同的路徑。分別表示為L1(a→b)、L2(a→c→d)、L3(a→c→e),或簡寫為ace、abd、abe及acd。根據判定覆蓋、條件覆蓋、判定–條件覆蓋、條件組合覆蓋和路徑覆蓋等五種覆蓋標準,從供選擇的答案中分別找出滿足相應覆蓋標準的最小測試用例組。(用①~ ⑩回答)

供選擇的答案:
①x = 90, y = 90②x = 50, y = 50

③x = 90, y = 90④x = 90, y = 70
x = 50, y = 50x = 40, x = 90
⑤x = 90, y = 90⑥x = 90, y = 90
x = 50, y = 50x = 70, y = 90
x = 90, y = 70x = 50, y = 50
⑦x = 90, y = 90⑧x = 90, y = 90
x = 50, y = 50x = 50, y = 50
x = 80, y = 70x = 90, y = 50
x = 70, y = 90x = 80, y = 80

⑨x = 90, y = 90⑩x = 90, y = 90
x = 90, y = 70x = 80, y = 80
x = 90, y = 30x = 90, y = 70
x = 70, y = 90x = 90, y = 30
x = 30, y = 90x = 70, y = 90
x = 70, y = 70x = 30, y = 90
x = 50, y = 50x = 70, y = 70
x = 50, y = 50

5、在白盒測試用例設計中,有語句覆蓋、分支覆蓋、條件覆蓋、路徑覆蓋等,其中( A )是最強的覆蓋準則。為了對如下圖所示的程式段進行覆蓋測試,必須適當地選取測試用例組。若x, y是兩個變數,可供選擇的測試用例組共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四組,如表中給出,則實現判定覆蓋至少應採取的測試用例組是( B )或( C );實現條件覆蓋至少應採取的測試用例組是( D );實現路徑覆蓋至少應採取的測試用例組是( E )或( F )。

供選擇的答案
A:① 語句覆蓋 ② 條件覆蓋 ③ 判定覆蓋 ④ 路徑覆蓋
B~F:① Ⅰ和Ⅱ組 ② Ⅱ和Ⅲ組 ③ Ⅲ和Ⅳ組 ④ Ⅰ和Ⅳ組
 ⑤ Ⅰ、Ⅱ、Ⅲ組 ⑥ Ⅱ、Ⅲ、Ⅳ組 ⑦ Ⅰ、Ⅲ、Ⅳ組
 ⑧ Ⅰ、Ⅱ、Ⅳ組

6、下面是快速排序演算法中的一趟劃分演算法,其中datalist是資料表,它有兩個資料成員:一是元素型別為Element的陣列V,另一個是陣列大小n。演算法中用到兩個操作,一是取某陣列元素V[i]的關鍵碼操作getKey ( ),一是交換兩陣列元素內容的操作Swap( ):
int Partition ( datalist &list, int low, int high ) {
//在區間[ low, high ]以第一個物件為基準進行一次劃分,k返回基準物件回放位置。
int k = low; Element pivot = list.V[low]; //基準物件
for ( int i = low+1; i <= high; i++ ) //檢測整個序列,進行劃分
if ( list.V[i].getKey ( ) < pivot.getKey( ) && ++ k != i )
Swap ( list.V[k], list.V[i] );//小於基準的交換到左側去
Swap ( list.V[low], list.V[k] );//將基準物件就位
return k; //返回基準物件位置
}
(1) 試畫出它的程式流程圖;
(2) 試利用路徑覆蓋方法為它設計足夠的測試用例(迴圈次數限定為0次,1次和2次)。

7、下面是選擇排序的程式,其中datalist是資料表,它有兩個資料成員:一是元素型別為Element的陣列V,另一個是陣列大小n。演算法中用到兩個操作,一是取某陣列元素V[i]的關鍵碼操作getKey ( ),一是交換兩陣列元素內容的操作Swap( ):
void SelectSort ( datalist & list ) {
//對錶list.V[0]到list.V[n-1]進行排序, n是表當前長度。
for ( int i = 0; i < list.n-1; i++ ) {
int k = i; //在list.V[i].key到list.V[n-1].key中找具有最小關鍵碼的物件
for ( int j = i+1; j < list.n; j++)
if ( list.V[j].getKey ( ) < list.V[k].getKey ( ) ) k = j;
//當前具最小關鍵碼的物件
if ( k != i ) Swap ( list.V[i], list.V[k] );//交換
}
}
(1) 試計算此程式段的McCabe複雜性;
(2) 用基本路徑覆蓋法給出測試路徑;
(3) 為各測試路徑設計測試用例。

8、根據下面給出的規格說明,利用等價類劃分的方法,給出足夠的測試用例。
“一個程式讀入三個整數。把此三個數值看成是一個三角形的三個邊。這個程式要打印出資訊,說明這個三角形是三邊不等的、是等腰的、還是等邊的。”

9、設要對一個自動飲料售貨機軟體進行黑盒測試。該軟體的規格說明如下:
“有一個處理單價為1元5角錢的盒裝飲料的自動售貨機軟體。若投入1元5角硬幣,按下“可樂”、“雪碧”或“紅茶”按鈕,相應的飲料就送出來。若投入的是2元硬幣,在送出飲料的同時退還5角硬幣。”
(1) 試利用因果圖法,建立該軟體的因果圖;
(2) 設計測試該軟體的全部測試用例。

11、應該由誰來進行確認測試?是軟體開發者還是軟體使用者?為什麼?

答案

三、選擇填空題
1、解答:A. ② B. ④ C. ① D. ④ E. ④
2、解答:A. ② B. ③ C. ② D. ③ E. ③ F. ④
到程式的測試為止,軟體開發工作已經經歷了許多環節,每個環節都可能發生問題。為了把握各個環節的正確性,人們需要進行各種確認和驗證工作。
所謂確認,是一系列的活動和過程,其目的是想證實在一個給定的外部環境中軟體的邏輯正確性。它包括需求規格說明的確認和程式的確認,而程式的確認又分為靜態確認與動態確認。靜態確認一般不在計算機上實際執行程式,而是通過人工分析或者程式正確性證明來確認程式的正確性;動態確認主要通過動態分析和程式測試來檢查程式的執行狀態,以確認程式是否有問題。
所謂驗證,則試圖證明在軟體生存期各個階段,以及階段間的邏輯協調性、完備性和正確性。下圖中所示的就是軟體生存期各個重要階段之間所要保持的正確性。它們就是驗證工作的主要物件。

確認與驗證工作都屬於軟體測試。在對需求理解與表達的正確性、設計與表達的正確性、實現的正確性以及執行的正確性的驗證中,任何一個環節上發生了問題都可能在軟體測試中表現出來。
3、解答:A. ② B. ④ C. ⑥ D. ③ E. ① F. ②
4、解答:A. ② B. ④ C. ④ D. ② E. ①

5、解答:(1) ② (2) ⑩ (3) ⑨ (4) ⑧ (5) ④

6、解答: A. ③ B. ④ C. ② D. ② E. ②
F. ① G. ④ H. ⑤ I. ① J. ①
7、解答: A. ③ B. ⑥ C. ① D. ② E. ⑥
F. ② G. ① H. ③ I. ⑤ A、B的答案可互換

8、解答:A. ① B. ⑤ C. ① D. ② E. ③
軟體測試中常用的靜態分析方法是引用分析和介面分析。介面分析用於檢查模組或子程式間的呼叫是否正確。分析方法(白盒方法)中常用的方法是路徑測試方法。非分析方法(黑盒方法)中常用的方法是等價類(劃分)方法和因果圖方法。因果圖方法根據輸出對輸入的依賴關係設計測試用例。

9、解答:A. ② B. ① C. ② D. ⑤ E. ③

10、解答:A和D,B和C,
四、問答計算題
1、解答:正確的敘述有(4)、(5)、(6)、(7)、(10)。
黑盒測試主要是根據程式的有關功能規格說明和覆蓋準則來設計測試用例,進行測試的,不是根據程式的內部邏輯來設計測試用例,這是白盒測試做的事情。在所有黑盒測試方法中,最有效的不是因果圖法,而是邊界值分析方法。測試的目的是儘可能多地發現軟體中的錯誤,其附帶的收穫才是驗證該軟體已正確地實現了使用者的要求。測試的一條重要原則是:發現錯誤多的程式模組,殘留在模組中的錯誤也多。軟體可靠性模型(Shooman)就是依據這個原則建立它的公式的。對於連鎖型分支結構,若有n個判定語句,則有2n條路徑。因此,隨著n的增大,路徑數增長非常快。單元測試時,因為樁模組要模擬子模組的功能,這不是一件容易的事情,而驅動模組只是控制被測模組的執行,所以樁模組的編寫比驅動模組的編寫要難得多。
在程式設計風格方面,如果重複的程式碼段沒有明顯的功能,不可以抽取出來形成獨立的公共過程或子程式,只有在這些程式碼段表現出獨立的功能時,才可把它們抽取出來形成獨立的公共過程或子程式。另外,程式效率的提高主要應通過選擇高效的演算法或使用高效的語言編譯器來實現。GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程式更加簡潔,這句話是正確的。
2、解答:對小程式進行窮舉測試,不見得能保證程式百分之百正確。所謂窮舉測試是拿所有可能的輸入資料來作為測試用例(黑盒測試),或覆蓋程式中所有可能的路徑(白盒測試)。對於小程式來說,實際上並不能真正作到窮舉測試。例如前面講過,一個小程式P只有兩個輸入X和Y及輸出Z,在字長為32位的計算機上執行。如果X、Y只取整數,考慮把所有的X、Y值都做為測試資料,按黑盒方法進行窮舉測試,這樣做可能採用的測試資料組(Xi,Yi),基數(radix)i的最大可能數目為:232×232=264。如果程式P測試一組X、Y資料需要1毫秒,而且假定一天工作24小時,一年工作365天,要完成264組測試,需要5億年。

3、解答:單元測試又稱模組測試,是針對軟體設計的最小單位─程式模組,進行正確性檢驗的測試工作。其目的在於發現各模組內部可能存在的各種差錯。單元測試需要從程式的內部結構出發設計測試用例。多個模組可以平行地獨立進行單元測試。單元測試是在編碼階段完成的,每編寫出一個程式模組,就開始做這個模組的單元測試,所以只要採用模組化方法開發軟體,單元測試都是必需的。它可由編寫程式的人來完成。因為它需要根據程式的內部結構設計測試用例,對於那些不瞭解程式內部細節的人,這種測試無法進行。
4、解答:針對覆蓋標準,相應的測試用例組如下

注意:測試是一個程式的執行過程。對於邏輯表示式 A or B,當A為真時不再對B做判斷,對於邏輯表示式 A and B,當A為假時不再對B做判斷。未能做判斷的條件,在解答中用“□”表示。

此測試用例組在滿足條件覆蓋的情況下又滿足了判定覆蓋的要求。

在條件組合覆蓋情形,(x?90)or(y?90)的組合有4種,與條件(x+y?140)的組合應有8種,但(x+y?140=F)and((x?90=T)or(y?90=T))不可能出現,因此,7個測試用例就夠了。

因為流程圖有3條路徑,只需3個測試用例就夠了。如果將判定中的複合條件表示式改為單個條件的巢狀選擇結構,第一個判定有3條路徑,其中兩條路徑通向第二個判定。第二個判定有4條路徑,組合起來總共應有9條路徑。但是,其中受測試條件的限制,有3條路徑不可達,因此,程式中應有6條路徑,需要6個測試用例來覆蓋它們。

5、解答:A. ④ B. ⑤ C. ⑧ D. ④ E. ⑤ F. ⑧
判定表

為判定覆蓋選取測試用例情形:對第一個判定選取測試用例組Ⅰ和Ⅱ,當用Ⅰ覆蓋判定的T分支時,不會走到第二個分支;當用Ⅱ覆蓋判定的F分支時,第二個判定需另取一個測試用例組覆蓋其T分支,此時取測試用例組Ⅲ或Ⅳ即可。因此,選擇⑤或⑧均可。
為條件覆蓋選取測試用例情形:取測試用例組Ⅰ和Ⅳ就可以覆蓋所有4個條件的取值。
為路徑覆蓋選取測試用例情形:總共3條路徑,需3個測試用例,可選使各路徑為T的測試用例。Ⅰ、Ⅱ、Ⅲ或Ⅰ、Ⅱ、Ⅳ均可,可選⑤或⑧。
6、解答:(1)流程圖如下。

(2) 測試用例設計

畫程式流程圖是設計測試用例的關鍵。從以往同學解題的經驗來看,在畫流程圖時就出錯了。所以首先要把流程圖中的邏輯關係搞清楚再畫出正確的流程圖。考慮測試用例設計需要首先有測試輸入資料,還要有預期的輸出結果。對於此例,控制迴圈次數靠迴圈控制變數i和迴圈終值high。迴圈0次時,取low = high,此時一次迴圈也不做。迴圈一次時,取low +1 = high,迴圈二次時,取low+2 = high。
若出題時特別強調要使用BRO策略,條件V[i] < pivot && ++k≠i的約束集合為 { (<, < ), (<, = ), (=, <), (>, < ) },因此,測試用例設計為:
單擊放大
7、解答:(1) McCabe環路複雜性 = 5
(2) 獨立路徑有5條:
①③
①②⑤⑧……
①②⑤⑨……
①②④⑥……
①②④⑦……
(3) 為各測試路徑設計測試用例:
路徑①③:取n = 1
路徑①②⑤⑧……:取n = 2,
預期結果:路徑⑤⑧③不可達
路徑①②⑤⑨……:取n = 2,
預期結果:路徑⑤⑨③不可達
路徑①②④⑥⑤⑧③:
取n = 2, V[0] = 2, V[1] = 1, 預期結果:k = 1, V[0] = 1, V[1] = 2
路徑①②④⑥⑤⑨③:
取n = 2, V[0] = 2, V[1] = 1, 預期結果:k = 1, 路徑⑨③不可達
路徑①②④⑦⑤⑧③:
取n = 2, V[0] = 1, V[1] = 2, 預期結果:k = 0, 路徑⑧③不可達
路徑①②④⑦⑤⑨③:
取n = 2, V[0] = 1, V[1] = 2, 預期結果:k = 0, V[0] = 1, V[1] = 2

8、解答:設三角形的三條邊分別為A, B, C。如果它們能夠構成三角形的三條邊,必需滿足:A > 0,B > 0,C > 0,且A + B > C,B + C > A,A + C > B。
如果是等腰的,還要判斷是否A = B,或B = C,或A = C。
對於等邊的,則需判斷是否A = B,且B = C,且A = C。
列出等價類表:

測試用例設計(略)
9、解答:
(1) 因果圖

(2) 測試用例設計

測試用例 每一縱列為一個測試用例
10、解答:由shooman公式:

其中,IT = 105,MTTF1 = 0.4,T1 = 160,n1 = 100,MTTF2 = 2,T2 = 320,n2 = 300。得:

(1) 解得程式中固有得錯誤總數ET = 350,此外K = 1000。
(2) 設MTTF = 10,有

 解得x = 340。由可靠性累積曲線EC (t) = ET (1-e-K1 t ),
 得  100 = 350 (1-e-160K1)
        300 = 350 (1-e-320K1)

因此,3-3*e-160K1 = 1-e-320K1
2 = 3*e-160K1- e-320K1 設 x = e-160K1
有 x2 – 3x + 2 = 0
解得 x1 = 2,x2 = 1, K1 = ln(x1)/(-160) = - 0.693/160 ? 0.00433。
因為ln(x2)/(-160) = 0,捨去
代入:340 = 350 (1-e-K1 t ) = 350(1-e-0.00433 t )
350e-0.00433 t = 10
t = (ln(35))/0.00433 ? 821 (小時)
因此求得為使MTTF = 10,測試和除錯該程式需要花費821小時。
(3) MTTF與測試時間t之間的函式關係:
因為EC (t) = ET (1-e-K1 t ),則ET - EC (t) = ET e-K1 t。代入shooman公式:

11、解答:在對照需求做有效性測試和軟體配置審查時,是由軟體開發者在開發環境下進行的測試。而接下來做驗收測試時則以使用者為主。軟體開發人員和QA(質量保證)人員也應參加。由使用者參加設計測試用例,使用使用者介面輸入測試資料,並分析測試的輸出結果。一般使用生產中的實際資料進行測試。
如果軟體是為多個客戶開發的,則需要進行α測試和β測試。α測試是由一個使用者在開發環境下進行的測試,也可以是公司內部的使用者在模擬實際操作環境下進行的測試。軟體在一個自然設定狀態下使用。開發者坐在使用者旁邊,隨時記下錯誤情況和使用中的問題。這是在受控制的環境下進行的測試。
β測試是由軟體的多個使用者在一個或多個使用者的實際使用環境下進行的測試。這些使用者是與公司簽定了支援產品預發行合同的外部客戶,他們要求使用該產品,並願意返回有關錯位錯誤資訊給開發者。與α測試不同的是,開發者通常不在測試現場。因而,β測試是在開發者無法控制的環境下進行的軟體現場應用。