qileilove

          blog已經(jīng)轉移至github,大家請訪問 http://qaseven.github.io/

          如何有效地解Bug (RED方法)

            (譯注 :解Bug時常發(fā)生分析時總感覺快找到答案了,而后面卻一再陷入僵局。比如,將線程同步問題引起的一些時而有,時而沒有的問題。分析時可能會認為這是個典型的線程同步問題,A線程沒有按照預期的方式改變某個變量,導致了B線程處理出錯。這樣的分析結果如果沒有調試(Debug)的支持,就有可能將開發(fā)者帶入死胡同,找出一大堆的解決方案可能都無法完整地解掉Bug。一定要在每次陷入困境的時候,回頭想一想,還有沒有什么被忽略了。在一開始就對問題進行充分的了解是十分必要的。下文中作者提供了一個簡單的流程可供參考。)

            過去兩年工作中,我竟然成了一個擅長解Bug的家伙。真不知道為什么偏偏是解Bug成了自然而然的事。在這段時間里我總結出了一套解bug的流程,簡稱為RED方法吧(譯注:感 覺可以像是紅色警戒!)。不過,這也不是什么新的方法論了。事實上,它成為標準的軟件開發(fā)實踐已經(jīng)有些年頭了。但是我依然見到許多開發(fā)者無法系統(tǒng)運用這個方法,總是被解Bug弄得頭大。這就是寫這篇文章的原因。

            RED方法是什么?它其實上就是三個步驟: 重現(xiàn)(Reproduce),評估(Evaluate),和調試(Debug)。這三個步驟已經(jīng)讓我能夠快速識別Bug的來源并快速的除掉它。c以下是詳細的步驟:

            重現(xiàn)(Reproduce)

            重現(xiàn)一個 bug,除了驗證它確實存在,也是為了找到一個測試用例供解決時使用。能夠自信地測試您的解決方案對確保解掉這個bug 至關重要。(譯注:常常有程序員看到Bug描述,就想當然的認為如何如何,結果可與之相反,這樣的狀況屢見不鮮。重現(xiàn)是第一步,特別是理解Bug背后的意圖,就像是軟件開發(fā)中的需求之于設計一樣重要。)

            評估(Evaluate)

            面對Bug, 大多數(shù)開發(fā)者會將時間花在這里。坦率地說,這是錯誤的。評估應當用于找出一些顯而易見的問題 (錯誤字符、 錯誤的常量等),然后調試程序,這樣可以快速從代碼中隔離出來這個Bug。解bug需要更多地關注代碼。評估很重要,但不能靠它來解掉bug。

            調試(Debug)

            這是最重要的一步。一旦確定了Bug出現(xiàn)的位置,就要以單步執(zhí)行的方式跟蹤代碼并加以分析。Bug 往往更多地取決于程序的狀態(tài),而不是它的位置。如果一個Bug發(fā)生是因為某個不應該為NULL的變量卻賦成了NULL,那么這個Bug的根本原因可能在此位置之前了。(代碼死掉的位置并不一定是Bug存在的位置)。

            代碼的運行狀態(tài)比代碼本身更重要。運用調試可以讓你真正了解程序的運行狀態(tài)。一行一行地逐步執(zhí)行程序可以最終發(fā)現(xiàn)您的代碼在哪里出錯了和什么狀態(tài)導致了這個問題。只有了解了代碼為什么出錯,而不是只了解代碼在什么位置出錯,才能找出最佳的解決方案。

            例如,剛剛提到的那個Bug可以有兩種方案:

            1、添加判斷,以確認該變量不是NULL。

            2、消除所有可能導致此變量為NULL值的情況。

            第一種方法有時可能是正確的。但如果在設計時該變量無論在哪里都不應為空,那這樣做就有問題了。這樣做只會暫時掩飾掉它,而以后可能就要花更多的時間來解決變量為NULL的情況了。

            如果先確定導致該變量為NULL的所有情況,對于先前的設計,消除掉這些異常的情況,這樣才算真正解掉了這個bug。解bug應當是修復代碼中的缺陷,而不只是隱藏起來。

            原文出自:http://blog.csdn.net/horkychen/article/details/7686204

          posted on 2012-07-11 09:30 順其自然EVO 閱讀(256) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2012年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 昌图县| 太湖县| 木兰县| 田阳县| 建始县| 彩票| 隆回县| 韩城市| 湾仔区| 逊克县| 新干县| 双城市| 神农架林区| 安达市| 耒阳市| 彭泽县| 黄山市| 浑源县| 高雄市| 资中县| 永康市| 峨边| 林周县| 石门县| 石楼县| 古蔺县| 宁蒗| 龙岩市| 施秉县| 梁山县| 西充县| 乌什县| 罗源县| 沅陵县| 鹤壁市| 桂林市| 囊谦县| 时尚| 广西| 山丹县| 萨迦县|