操作系統錯誤:這類錯誤主要是由于不了解操作系統的工作機制而導致出錯。當然,操作系統本身也有錯誤,但是一般用戶很難發現這種錯誤。
軟件結構錯誤:由于軟件結構不合理或不清晰而引起的錯誤。這種錯誤通常與系統的負載有關,而且往往在系統滿載時才出現。這是最難發現的一類錯誤。例如,錯誤地設置局部參數或全局參數;錯誤地假定寄存器與內存單元初始化了;錯誤地假定不會發生中斷而導致不能封鎖或開中斷;錯誤地假定程序可以繞過數據的內部鎖而導致不能關閉或打開內部鎖;錯誤地假定被調用子程序常駐內存或非常駐內存等等,都將導致軟件出錯。
控制與順序錯誤:這類錯誤包括:忽視了時間因素而破壞了事件的順序;猜測事件出現在指定的序列中;等待一個不可能發生的條件;漏掉先決條件;規定錯誤的優先級或程序狀態;漏掉處理步驟;存在不正確的處理步驟或多余的處理步驟等。
資源管理錯誤:這類錯誤是由于不正確地使用資源而產生的。例如,使用未經獲準的資源;使用后未釋放資源;資源死鎖;把資源鏈接在錯誤的序列中等等。
?、?加工錯誤
算術與操作錯誤:指在算術運算、函數求值和一般操作過程中發生的錯誤。包括:數據類型轉換錯;除法溢出;錯誤地使用關系比較符;用整數與浮點數做比較等。
初始化錯誤:典型的錯誤有:忘記初始化工作區,忘記初始化寄存器和資料區;錯誤地對循環控制變量賦初值;用不正確的格式,數據或類型進行初始化等等。
控制和次序錯誤:這類錯誤與系統級同名錯誤類似,但它是局部錯誤。包括:遺漏路徑;不可達到的代碼;不符合語法的循環嵌套;循環返回和終止的條件不正確;漏掉處理步驟或處理步驟有錯等。
靜態邏輯錯誤:這類錯誤主要包括:不正確地使用CASE語句;在表達式中使用不正確的否定(例如用“>”代替“<”的否定);對情況不適當地分解與組合;混淆“或”與“異或”等。
?、?數據錯誤
動態數據錯誤:動態數據是在程序執行過程中暫時存在的數據。各種不同類型的動態數據在程序執行期間將共享一個共同的存儲區域,若程序啟動時對這個區域未初始化,就會導致數據出錯。由于動態數據被破壞的位置可能與出錯的位置在距離上相差很遠,因此要發現這類錯誤比較困難。
靜態數據錯誤:靜態數據在內容和格式上都是固定的。它們直接或間接地出現在程序或數據庫中。由編譯程序或其它專門程序對它們做預處理。這是在程序執行前防止靜態錯誤的好辦法,但預處理也會出錯。
數據內容錯誤:數據內容是指存儲于存儲單元或數據結構中的位串、字符串或數字。數據內容本身沒有特定的含義,除非通過硬件或軟件給予解釋。數據內容錯誤就是由于內容被破壞或被錯誤地解釋而造成的錯誤。
數據結構錯誤:數據結構是指數據元素的大小和組織形式。在同一存儲區域中可以定義不同的數據結構。數據結構錯誤主要包括結構說明錯誤及把一個數據結構誤當做另一類數據結構使用的錯誤。這是更危險的錯誤。
數據屬性錯誤:數據屬性是指數據內容的含義或語義。例如,整數、字符串、子程序等等。數據屬性錯誤主要包括:對數據屬性不正確地解釋,比如錯把整數當實數,允許不同類型數據混合運算而導致的錯誤等。
?、?代碼錯誤
主要包括:語法錯誤;打字錯誤;對語句或指令不正確理解所產生的錯誤。
2.3按軟件生存期階段分類
Good enough-Gerhart分類方法把軟件的邏輯錯誤按生存期不同階段分為4類。
?、?問題定義(需求分析)錯誤
它們是在軟件定義階段,分析員研究用戶的要求后所編寫的文檔中出現的錯誤。換句話說,這類錯誤是由于問題定義不滿足用戶的要求而導致的錯誤。
?、?規格說明錯誤
這類錯誤是指規格說明與問題定義不一致所產生的錯誤。它們又可以細分成:
不一致性錯誤:規格說明中功能說明與問題定義發生矛盾。
冗余性錯誤:規格說明中某些功能說明與問題定義相比是多余的。
不完整性錯誤:規格說明中缺少某些必要的功能說明。
不可行錯誤:規格說明中有些功能要求是不可行的。
原文轉自:http://www.uml.org.cn/Test/201511262.asp