下面繼續本書第二部分的讀書筆記部分
第二部分 軟件測試基礎
包括第4章 測試用例設計;第5章 單元(模塊)測試;第6章 更高級別的測試
第5章 單元(模塊)測試
單元(模塊)測試時構建大型程序測試的第一個步驟。模塊測試時對程序中的單個子程序、子程序或過程進行測試的過程。單元(模塊)測試的動機:1.一種管理組合的測試元素的手段;2.減輕調試的難度(錯誤被發現,可以知道在哪個具體的模塊中);3.為同時測試多個模塊提供可能。分為三個部分進行探討:1.單元(模塊)測試的測試用例設計方法;2.模塊測試及集成的順序;3.對執行模塊測試的建議;
1、模塊測試的測試用例設計方法
設計測試用例時,需要兩種信息:1.模塊的規格說明(規格說明規定了模塊的輸入和輸出以及模塊的功能);2.模塊的源代碼。
模塊測試總體上時面向白盒的測試。模塊測試用例的設計過程如下:使用一種或多種白盒測試方法分析模塊的邏輯結構,然后使用黑盒測試方法對照模塊的規格說明以補充測試用例。
首先,找出程序中所有的條件判斷,如下圖所示
然后,使用判定覆蓋准則設計設計用例;接着,使用條件覆蓋准則設計測試用例,如果不滿足要求,需要將判定和條件合並后進行測試用例的設計;
最后,如果都不太完善,則需要使用多重條件覆蓋准則進行設計。設計測試用例的方法是:挑選一個測試用例盡可能覆蓋多種組合,然后再挑選一個測試用例覆蓋剩余的准則。
以上是通過模塊的源代碼進行用例設計,然后需要通過模塊的規格說明書設計測試用例,這種設計用例的方法,需要借鑒黑盒設計方法(等價類、邊界值,錯誤推測方法等)。
2、模塊測試及集成的順序
2.1 增量測試和非增量測試區別
非增量測試:一個模塊一個模塊的進行測試,最后將所有模塊集成到一起測試(先獨立測試每個模塊,然后將模塊組裝成完整程序)。
如下圖所示,分別對A、B、C、D、E、F分別進行單獨測試。而每個單獨的模塊需要一個驅動模塊(driver module)和一個或多個樁模塊(stub module)
驅動模塊:編寫的小模塊,用於將測試用例傳輸到被測模塊中。樁模塊:用於代替真實模塊的臨時模塊(需具有真實模塊的控制功能並能夠編譯通過)。
增量測試:將未測試的模塊添加到測試好的模塊中進行測試(將下一步要測試的模塊組裝到測試完成的模塊集合中,再進行測試)。
如下圖所示,如果按照從底部往上進行測試,先測試模塊E、C、F,同時為他們准備驅動模塊;然后,測試模塊B、D,會將模塊E、F合並到B、D模塊中進行測試;最后測試到模塊A。
增量測試和非增量測試優點:
1)增量測試工作量少
非增量測試,每個模塊都需要驅動模塊和樁模塊;增量測試,自底向上,無需樁模塊;自頂向下,無需驅動模塊。
2)增量測試可較早發現接口不匹配和不正確錯誤
增量測試,早早的對模塊進行組合測試,非增量測試,最后階段才進行模塊組合。
3)增量測試讓調試會容易些
模塊接口間錯誤會較早定位解決。
4)增量測試會將測試進行的更徹底
增量測試使用先前測試過的模塊,取代非增量測試中使用的樁模塊或驅動模塊。
5)增量測試需要時間多些
6)非增量測試可以並行操作
2.2 自頂向下測試與自底向上測試
1.自頂向下測試:從程序頂部或初始模塊開始測試。
原則:1)后續測試模塊的從屬模塊須經過測試;
2)編寫樁模塊很關鍵;
3)程序中關鍵部分應盡早添加測試;
4)I/O模塊應盡早測試;
2.自底向上測試:從程序底部往上進行測試。
原則:1)后續測試模塊的從屬模塊須經過測試;
2)每個模塊都需要特殊的驅動模塊;
3.比較
3、執行模塊測試的建議
1)應在執行測試之前對測試用例集進行審核或檢查
測試用例造成輸出的實際結果與預期結果不匹配時,要么是模塊有問題,要么是測試用例不正確。
2)應使用自動化工具提升效率
使用工具生成驅動模塊;使用流程分析工具列舉程序路徑。
3)執行模塊測試時,應遵守軟件測試的心理和經濟學原則
比如,對預期輸出進行定義;執行測試時,應查找模塊執行了那些不該執行的操作;程序員不應測試自己編寫的模塊;對模塊的調試應由編程人員本人進行。
參考文獻:
[1].百度文庫,PL1初學指南.https://wenku.baidu.com/view/a4fc2eefb8f67c1cfad6b81b.html
[2].shenghuiping2001,PL/1基礎入門教程.https://blog.csdn.net/shenghuiping2001/article/details/4155294
[3].PL/I Language Programmer's Guide.http://bitsavers.informatik.uni-stuttgart.de/pdf/digitalResearch/pl1/PL1_Language_Programmers_Guide_Dec82.pdf
[4].茹炳晟,軟件測試52講.https://time.geekbang.org/column/article/10275