三、典型缺陷與Bug模式
軟件開發有設計模式,測試其實也有模式存在,需要測試人員進行總結和歸納。測試人員應從經常出現的Bug中學習,總結出Bug模式,用于指導測試。如果開發人員能關注這些Bug模式,還能起到預防錯誤的效果。
要成為典型缺陷,必須滿足以下條件:
重復出現、經常出現;
能代表某種類型的錯誤;
能通過相對固定的測試方法或測試手段來發現這些錯誤。
總結這些典型缺陷出現的現象,出現的原因,以及測試方法,就能成為一個Bug模式。
說明:根據不同的開發平臺、開發工具、開發語言、產品類型、采用的架構等,可以總結出不同的Bug模式,不同的Bug模式可能在不同的平臺、語言、產品類型中才會出現。測試人員應該總結適合自己項目特點的Bug模式。
提煉Bug模式的一般步驟如下:
步驟1:分析缺陷報告,找出經常出現的Bug類型。
步驟2:分析Bug的根源,找出Bug產生的深層次原因。
步驟3:分析找到Bug的方法,總結如何才能每次都發現該類型的Bug。
下面舉一個例子來說明這個過程。
首先,測試人員在分析缺陷報告時發現,有一類Bug經常出現,并且錯誤現象一致:執行某功能時提示Time Out。
測試人員與程序員一起分析原因,發現這些錯誤都是在操作數據庫時發生,發送的SQL語句被數據庫長時間執行未返回,因此提示Time Out。通過進一步地分析表明,.NET的SqlCommand的CommandTimeOut屬性是用于獲取或設置在終止執行命令的嘗試并生成錯誤之前的等待時間。等待命令執行的時間(以秒為單位)默認為30s,而數據庫操作在較大數據量的情況下一般都超過這個時間,因此會提示超時的錯誤信息。
這樣就可以把這種類型的Bug歸納為“數據庫操作超時Bug模式”。
那么,如何才能找出這樣的Bug呢?一般情況下,這類Bug基本上不會出現,只有數據量足夠大時才會出現,因此需要設置大批數據,結合性能測試或壓力測試來發現此類問題。也可以通過白盒的方式,查找程序在使用SqlCommand時是否合理地設置了Command TimeOut屬性,這樣將更有針對性地揭露上述的錯誤。
至此就完成了一個Bug模式的歸納、提煉和總結,如果程序員積極地參與到該總結和分析過程中來,則可形成一個良性的反饋,當下次程序員編寫相同的程序時就會避免類似的錯誤發生。
四、測試中的PDCA循環
PDCA循環是一種放之四海皆準的原則。在軟件測試的過程中,也充斥著各種PDCA循環。PDCA循環是一個自我完善和改進的全閉環模型,如圖7.34所示,對質量的不斷提高和改進非常有效。