糾正軟件中錯誤的方法 軟件測試
1、跟蹤法
跟蹤執行可疑的程序段,是對小型程序糾錯又一種常用的策略。它的要求是,就是讓帶錯的程序“分步執行”,即每執行完一條語句(或指令),就暫時停下檢查執行的結果,確認正常后再繼續進行。許多高級語言都設有專用于跟蹤糾錯的語句或命令。他們都具有讓程序分步執行的功能。
對于較小的程序,用跟蹤執行來確定錯誤部位是相當有效的。例如:倘若再某一PASCAL程序中把語句
FOR I:=1 to 10 中的10 誤寫為-10,則程序執行到語句就會直接跳過循環體中的語句,轉到for循環之后的語句去執行。
但有些時候,發現程序出錯的語句其本身并無錯誤,問題倒出在位于它前面的一些語句上。例如,當某FORTRAN程序執行到語句ix=iy/(k/n)時發生了運行出錯,屏幕上顯示“整數上溢”。順著這條語句返回尋找,在它的前數行找到了給k,n賦值的語句:
k=5
n=6
則不難想到,由于k/n整除所得結果為0,才導致iy被0除后發生上溢。像這樣從出錯處逐句返回探尋錯誤的根由,一般稱為回溯(back tracking)或反向跟蹤。而通常高級語言所設置的跟蹤命令都只提供正向跟蹤,反向跟蹤只能人工進行。
當程序較長,包含的分支與嵌套又相當多時,跟蹤尤其是反向跟蹤的路徑變得多而且復雜。這是使用跟蹤法糾錯不僅效率不高,而且會變得難于執行,最好改用推理法進行糾錯。
2、推理法
推理法來源于定理證明,又可區分為歸納法和演繹法兩大類。
歸納法是從個別到整體的推理過程。它從收集個別的故障癥狀開始,分析各種癥狀的相互關系后,就有可能將它們歸納為某一些假想的錯誤。如果這一些假想能被證實,就找到了真實的病根。
演繹法是從一般到特殊的推理過程。根據測試獲得的錯誤癥狀,可以先列出一批可能的病因。接著在這一大范圍的設想中,逐一的排除根據不足或與其他測試結果有明顯矛盾的病因,然后對余下的一種或數種病因作詳細的鑒別,確定真正的病因。由于真正的病因是從大量可能病因中篩選得來的,所以此法有時也稱為“病因排除法(Cause Elimination)”
3、試湊法
這是一種不甚嚴格的糾錯策略。根據測試中暴露達到錯誤征兆,首先可設定一個可疑區。然后采用一些簡單的糾錯手段(例如在程序中插入打印語句),進一步獲取與可疑區有關的信息,借以肯定或修改原來的設想。如果可疑區沒有找準,便再來一遍,重置新的可疑區。這種“邊試邊瞧”的做法,糾錯的效率一般較低(這也是試湊(trial and error)一名的由來),故僅適用于結構比較簡單的小程序。
原文轉自:http://www.anti-gravitydesign.com