第八章 除錯
從成功執行了乙個測試用例,發現乙個錯誤之後開始,第一步:確定程式中可以錯誤的準確性質和位置;第二步,修改錯誤。
8.1 蠻力法除錯
第一種型別:使用記憶體資訊輸出進行除錯;
第二種型別:再是小的程式中插入輸出變數值的語句;
第三種型別:使用自動化除錯工具進行除錯。
8.2 歸納法除錯
歸納除錯的步驟如下
1.確定相關資料。除錯人員犯的乙個主要錯誤是未能將所有可用的資料或症狀都考慮進去。第一步是列舉出所有知道的程式執行的正確和不正確之處,這些不正確之處即是症狀,讓我們相信確實存在錯誤。那些相似卻不相同且未引起症狀出現的測試用例提供了額外的有價值的線索;
2.組織資料。記住,歸納意味著從特殊到一般,因此,第二步是組織這些相關資料,以便觀察線索間的模式。尤其重要的是要找到矛盾、事件,比如僅當客戶的保險金賬戶收支不太平衡時出現的錯誤。
4.證明假設。考慮到除錯在進行時所承受的壓力,這個時期最主要的錯誤是忽略了這個階段,直接跳到結論去改正問題。但是在繼續下一步之前,證明這些假設的合理性是非常重要的。如果忽略了這一步,可能接下去只修改了問題症狀,而沒解決問題本身。應將假設與其最初的線索或資料相比較,以此來證明假設的合理性,確定這些假設可以完全解釋這些線索的存在。如果無法解釋,要麼這些假設是無效的或不完整的,要麼還有更多的錯誤存在。
5.解決問題。一且完成前面幾步,便意味著可以進一步修復這個問題。要在每一步花一些時間做充分的調研,你也能夠對解決問題變得越來越自信。但是請務必記住這一條:仍然需要做一些回歸測試以確保問題和錯誤修復沒有引入其他錯誤。隨著軟體規模擴大,修復老問題的同時引入新問題的可能性也更大。
8.3 演繹法除錯
演繹的過程是從一些普遍的理論或前提出發,使用排除和精煉的過程,達到乙個結論(錯誤的位置)。
1.列舉出所有可能的原因或假設;
2.利用資料排除可能 的原因;
3.提煉剩下的假設;
4.證明剩下的假設;
5.修復問題。
8.4 回溯法除錯
沿著程式的邏輯結構回溯不正確的結果,直到找出程式邏輯出錯的位置。
8.5 測試法除錯
供測試的測試用例:其目的是發現錯誤;
供除錯的測試用例:其目的是提供有用資訊,供定位某個被懷疑的錯誤之用。
8.6 除錯的原則
8.6.1 定位錯誤的原則
1.動腦經
2.如遇到僵局,就留到稍後處理
3.如果遇到困境,就把問題描述給其他人聽
4.僅將除錯工具作為第二種手段
5.避免使用試驗法--僅將其作為最後的手段
8.6.2 修改錯誤的技術
1.存在乙個缺陷的地方,很有可能還存在其他缺陷
2.應糾正錯誤本身,而不僅是其症狀
3.正確糾正錯誤的可能性並非100%
4.隨著程式規模的增加,正確修改錯誤的可能性反而降低
5.應意識改正錯誤會引入新錯誤的可能性
6.修改錯誤的過程也是臨時回到設計階段的過程
7.應修改源**,而不是目標**。
8.7 錯誤分析
1.錯誤出現在什麼地方?
2.誰製造了這個錯誤?
3.哪些做得不正確?
4.如何避免該錯誤的發生
5.為什麼錯誤沒有早發現?
6.該如何更早的發現錯誤?
C C 單元測試理論精要(六)
2.1 可測性問題詳解 2 接下來我們討論重點問題 覆蓋輸入。乙個函式,輸入會有哪些呢?輸入包括兩方面 外部輸入,內部輸入。外部輸入容易理解,就是函式外部可以設定的輸入,包括引數,全域性變數,成員變數。關鍵是內部輸入。因為很少有文獻討論內部輸入,對很多人來說,內部輸入可能是乙個陌生的詞,我們首先來看...
軟體測試理論筆記 軟體測試的質量六屬性
軟體測試的目標 首先我們軟體測試的目標是 驗證軟體產品是否滿足使用者的需求 軟體質量屬性 那麼如何驗證我們的軟體產品是否符合使用者需求,這需要從多個方面維度入手。通常我們把乙個軟體產品需要滿足的質量標準劃分為六大屬性分別為 功能性 易用性 可靠性 效率性 可維護性 可移植性。功能性軟體產品的功能性是...
軟體測試理論之測試用例設計六把刀
日常設計 的時候,有許多經典的測試理論。比如邊界法 等價法,這些經常用到我們日常的 工作中。當然也有許多的理論,比如正交分解法是使用起來非常費勁。往往轉化為實際的容易理解的測試語言就非常困難。測試用例 測試的時候,我們也會碰到難堪的場景,那就是測試遺漏。我們來分析下,開發的過程。開發拿到需求後,就會...