Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » 技术文章库  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 [原創] 軟體除錯
tzutolin



版主


发贴: 581
积分: 65
于 2004-11-25 07:14 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
軟體除錯

Author: tzutolin
Date: 23/11/2004
Catalog: Software Engineering

介紹

絕大多數的軟體工程師都必須維護程式。他們必須一再地替設計不良,或是好幾年沒有維護,且文件內容錯誤甚至殘缺不全的程式來進行整治的工作。
雖然大多數的工程師在維護軟體的工作上做的不錯,但總是有少數一些工程師能青出於藍! 大多的人們都認為,除錯的過程非常單調,總括都是先閱讀問題的描述,並開始尋找方法並解決系統中的問題,但只要我們仔細的觀察,會發現這當中還是有些小竅門。本文將介紹這將會幫助我們更容易地把軟體除錯的過程,並分成數個明確的步驟列出來。

何謂軟體除錯?

除錯 (就軟體工程的範疇來說) 這項工作指的是找出導致系統不正常運作的行為,並且修正此行為。用更簡單的話來定義的話,也就是除去軟體中的害蟲。事實上,在軟體維護的過程中,有絕大部分的時間,都是花在除錯的動作之上。

軟體除錯的生命週期

假設我們已經標示出軟體中所發生的錯誤,下面將粗略的介紹在軟體團隊中可採用的數個除錯的步驟:

A. 標示與確認系統中的問題

1. 標示系統中已知的問題並且建立錯誤報告

2. 指定這些問題給團隊中的軟體工程師

3. 當軟體工程師分析錯誤報告之後,執行下列動作:

a. 了解團隊所開發系統中具有的期望(也就是需求)或本來該有的行為(也就是功能)。
b. 了解目前系統實際上的行為。
c. 確認此問題是否真正是系統中的一個錯誤。
d. 確認此錯誤是否會重新上演

B. 錯誤分析

假設軟體工程師得到的結論為分析師所呈報問題是名副其實的,那麼軟體工程師應該把焦點轉移到導致此錯誤發生的根本原因之上。一般來說,此步驟是在整個軟體除錯的過程之中最為棘手也最具有挑戰性的,尤其是當軟體工程師所面對的是個複雜且架構龐大的軟體系統。
許多軟體工程師利用除錯工具作為軟體除錯的起始點,並在程式執行時,一行接著一行追蹤程式碼去找出導致問題發生的根本原因。雖然,依據這種方式可能會得到除錯的最終目的,然而,在許多情況之下,這種方式非常沒有效率,且會花掉許多時間,在某些情況之下(例如某些程式本身就具有先天性複雜度)並不是顯得那麼的可行。

C.錯誤修正

一旦導致問題發生的根本原因被確認了,軟體工程師可以適度的調適系統來修正錯誤,並解決根本的問題。

重新探討錯誤

這個小節用更正式的名稱來定義一些專有名詞:

預期行為
系統在接受一連串輸入之下應有的理想行為。

實際行為
系統在接受一連串輸入之下的實際行為。

錯誤行為
系統顯示的錯誤行為,也就是實際行為已經脫離預期行為應有的表現。

問題的根本原因
當發生錯誤的系統初次脫離系統預期行為的現象稱之為問題的根本原因。通常使用者察覺到錯誤的時候已經離發生問題時的最初點有一段距離了。

根本原因分析
針對問題發生的根本原因來做全盤的分析與檢討。現在我們可以很明顯的看到,錯誤分析基本上就是包含了對於問題根本原因的分析。

以模型為基礎的錯誤分析

介紹

錯誤分析的目的就是要標示出導致系統行為發生錯誤的根本原因。錯誤的行為可能是由軟體設計,實作,或是部署時候所導致的。以模型為單位來做錯誤分析,就可以軟體開發流程的角度來觀看整個系統。這種方式包含了以下幾種步驟:

1. 首先,將系統以模型化的方式呈現

2. 確認系統之中可能的發生問題或瑕疵

3. 測試這些可能發生的問題或瑕疵與系統中實際發生的問題是否相吻合

4. 假如有需要的話,必需重複步驟一至三

以上每一個動作都需要不同種類的技能,經驗,以及工具才能達成。在剩下的文章裡頭,我們將會仔細探討這些動作。

將系統模型化

幫系統建立模型的目的,就是要來確認系統中可能發生的問題。我們應該要以一個運作正常系統為基礎(通常可以透過需求分析的文件來達成),來建立我們的模型。

這邊在強調一次,發現錯誤及分析問題的工作,是所有維護軟體過程的步驟之中最花時間的。

將一個不正常運作的系統模型化(在沒有正常系統拿來當建立模型的基礎時),通常需要對於與該系統類似的相關系統的內部運作及其撰寫方式,有良好的基礎。換句話說,在做錯誤分析的工程師們應當對於該系統領域中有專門的知識。

舉個例來說,當嘗試去分析編譯器中的一個錯誤時,必須要對於編譯器的結構有相當程度的了解,也就是編譯器包含了哪些解析器,目的碼產生器,最佳化程式,組合程式以及連結器等等。除此之外,針對不同種類的編譯器,以及目的碼產生的技術,或是最佳化程式的原理都要有所涉獵。就一般而言,在做錯誤分析之前必須要具備這些技能,或是具有處理過相關問題的經驗才行。
但即使我們僅具備少許或是先前根本沒有任何經驗,其實只要透過閱讀系統文件,以及靠著現有的知識建立一個簡單及抽象的系統模型,我們仍然可以循序漸進地完成以上這些步驟。

確認並分析系統中的潛在問題

一旦當系統的模型建立好之後,我們必須捫心自問,下面這個問題:

在系統模型之中,究竟是哪一個特定的弱點,導致整個系統中的錯誤行為?

很明顯地,這個問題有超過一個以上的答案。( 如果只有一個, 系統就不需要除錯了.) 通常一個軟體工程師的經驗越充足,他辨認系統中瑕疵的能力就越強。在分析過系統中的所有發生問題的地方之後,工程師們應該建立一個導致系統中出狀況的所有弱點及瑕疵的資料庫。額外的資訊通常可以透過軟體記錄檔或是追蹤軟體中所呈現的訊息中得知。

一個設計良好的系統通常會把記錄檔及提示訊息列為必備或是選用的項目,如此一來便能大大提升弱點分析的效果了。

Best Regards,
tzutolin


tzutolin edited on 2004-11-25 07:28


flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923