〔七〕 =====[ 可測性 ]=====
¹7-1 :在同一項目組或產品組內,要有一套統一的為集成測試與系統聯調準備的調測開關及相應打印函數,并且要有詳細的說明
說明:本規則是針對項目組或產品組的。
¹7-2 :在同一項目組或產品組內,調測打印出的信息串的格式要有統一的形式。信息串中至少要有所在模塊名(或源文件名)及行號
說明:統一的調測信息格式便于集成測試。
¹7-3 :編程的同時要為單元測試選擇恰當的測試點,并仔細構造測試代碼、測試用例,同時給出明確的注釋說明。測試代碼部分應作為(模塊中的)一個子模塊,以方便測試代碼在模塊中的安裝與拆卸(通過調測開關)
說明:為單元測試而準備。
¹7-4 :在進行集成測試/ 系統聯調之前,要構造好測試環境、測試項目及測試用例,同時仔細分析并優化測試用例,以提高測試效率
說明:好的測試用例應盡可能模擬出程序所遇到的邊界值、各種復雜環境及一些極端情況等。
¹7-5 :使用斷言來發現軟件問題,提高代碼可測性
說明:斷言是對某種假設條件進行檢查(可理解為若條件成立則無動作,否則應報告),它可以快速發現并定位軟件問題,同時對系統錯誤進行自動報警。斷言可以對在系統中隱藏很深,用其它手段極難發現的問題進行定位,從而縮短軟件問題定位時間,提高系統的可測性。實際應用時,可根據具體情況靈活地設計斷言。
示例:下面是C語言中的一個斷言,用宏來設計的。(其中NULL為0L)
#ifdef _EXAM_ASSERT_TEST_ // 若使用斷言測試
void exam_assert( char * file_name, unsigned int line_no )
{
printf( "\n[EXAM]Assert failed: %s, line %u\n",
file_name, line_no );
abort( );
}
#define EXAM_ASSERT( condition )
if (condition) // 若條件成立,則無動作
NULL;
else // 否則報告
&, nbsp; exam_assert( __FILE__, __LINE__ )
#else // 若不使用斷言測試
#define EXAM_ASSERT(condition) NULL
#endif /* end of ASSERT */
¹7-6 :用斷言來檢查程序正常運行時不應發生但在調測時有可能發生的非法情況
¹7-7 :不能用斷言來檢查最終產品肯定會出現且必須處理的錯誤情況
說明:斷言是用來處理不應該發生的錯誤情況的,對于可能會發生的且必須處理的情況要寫防錯程序,而不是斷言。如某模塊收到其它模塊或鏈路上的消息后,要對消息的合理性進行檢查,此過程為正常的錯誤檢查,不能用斷言來實現。
¹7-8 :對較復雜的斷言加上明確的注釋
說明:為復雜的斷言加注釋,可澄清斷言含義并減少不必要的誤用。
¹7-9 :用斷言確認函數的參數
示例:假設某函數參數中有一個指針,那么使用指針前可對它檢查,如下。
int exam_fun( unsigned char *str )
{
EXAM_ASSERT( str != NULL ); // 用斷言檢查“假設指針不為空”這個條件
... //other program code
}
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/