<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>

            如何有效地調試軟件

            發(fā)表于:2016-07-11來(lái)源:infoq作者:Ben Linders點(diǎn)擊數: 標簽:調試
            Diomidis Spinellis是《代碼閱讀與代碼質(zhì)量》一書(shū)的作者。在GOTO阿姆斯特丹2016大會(huì )上,他就如何有效地調試軟件和預防錯誤做了演講。

              Diomidis Spinellis是《代碼閱讀與代碼質(zhì)量》一書(shū)的作者。在GOTO阿姆斯特丹2016大會(huì )上,他就如何有效地調試軟件和預防錯誤做了演講。

              InfoQ采訪(fǎng)了Spinellis,內容涉及發(fā)現和修復軟件中的錯誤、軟件調試的原則、如何提高調試效率、如何編寫(xiě)出不怎么需要調試的代碼以及管理人員如何為錯誤預防和處理提供支持。

              InfoQ:是什么讓軟件錯誤的發(fā)現和修復如此困難?

              Diomidis Spinellis:如果你認為編寫(xiě)代碼困難,那就嘗試下代碼調試吧。你編寫(xiě)了一個(gè)新的函數或方法,并加上一些語(yǔ)句形成某個(gè)只是貌似正確的東西。當你調試一個(gè)程序的時(shí)候,你要面對數千或數百萬(wàn)行貌似正確的代碼,并設法找出其中的錯誤。這必定要困難許多。然后,你還要應對各種系統和層次之間的復雜交互、每秒執行數十億次的CPU指令、難以再現的Bug以及來(lái)自生產(chǎn)環(huán)境系統的壓力。

              而且,課堂上很少教調試;從一切可能出錯的東西辛苦得來(lái)的經(jīng)驗很難壓縮到一次演講中。此外,由于系統失敗的方式各不相同,你必須不斷地改進(jìn)和調整你所用的工具和方法。你可以從觀(guān)察開(kāi)始,繼之以數據分析,然后做一些試驗,最后推斷出Bug的原因。沒(méi)有什么標準的初學(xué)者技能。

              InfoQ:軟件調試有什么一般原則嗎?

              Spinellis:很遺憾,由于軟件會(huì )出現各種難以想象的錯誤情況,我不認為有什么可以在軟件調試過(guò)程中遵循的一般原則。退而求其次,我歸納出了三大類(lèi)方法:

              高級策略,比如由故障特征推斷出原因,或者確保某些代碼滿(mǎn)足了其前提條件;

              方法和實(shí)踐,比如確保Bug可以有效地再現,或者著(zhù)重突出故障的影響;

              通用工具,比如Unix命令行工具、跟蹤(考慮下strace、dtrace和systemtap)工具和版本控制系統。

              InfoQ:程序員做什么能夠提高調試效率?

              Spinellis:首先要為調試成功做好準備。讓自己相信問(wèn)題將會(huì )得到解決,留出足夠的時(shí)間用于調試,不要分心,要堅持不懈,必要的時(shí)候,留待第二天解決。重要的是,要不斷地在環(huán)境、工具和知識上投入。購買(mǎi)高效工作所需的軟件和硬件。例如,如果軟件生成大量的調試日志文件,你就應該有足夠的磁盤(pán)空間、CPU處理能力和帶寬,以便可以高效地處理它們。在調試的過(guò)程中,你很容易遇到千奇百怪的問(wèn)題,因此,花些精力管理和優(yōu)化自己的環(huán)境和工具配置。這包括按鍵綁定、別名、輔助腳本、快捷方式和工具配置;所有這些都可以顯著(zhù)地提高調試生產(chǎn)力。

              InfoQ:有什么技術(shù)或方法可以編寫(xiě)出不怎么需要調試的代碼嗎?

              Spinellis:當然!編寫(xiě)可維護的代碼——可讀、穩定、易于分析和修改的代碼——帶來(lái)的Bug也比較少。此外,像單元測試、代碼審查這樣的方法以及使用斷言都有助于最小化進(jìn)入生產(chǎn)環(huán)境的錯誤。

              在設計時(shí)使用高級抽象(例如使用一個(gè)框架的算法或容器數據結構,而不是選擇自己開(kāi)發(fā)一種方案)可以減少代碼和錯誤。另外,讓程序易于調試也很重要。這包括為詳細地記錄日志提供便利,當出現內部錯誤時(shí)報告豐富的上下文信息,并將問(wèn)題及崩潰的詳細信息發(fā)送到一個(gè)中央存儲庫。

              InfoQ:管理人員如何為組織里的錯誤預防和處理提供支持?

              Spinellis:設定基本的過(guò)程有助于確保軟件錯誤不會(huì )失控。部署并采用一個(gè)問(wèn)題跟蹤系統,用它把要處理的問(wèn)題分類(lèi)并排定優(yōu)先級。將軟件變更恰當地記錄在進(jìn)一個(gè)運作良好的版本管理系統里,并將它與問(wèn)題跟蹤系統聯(lián)系起來(lái);我經(jīng)常僅僅通過(guò)仔細研究一個(gè)文件的歷史和變更就修復了Bug。在軟件建設方面,推廣單元測試的應用,把軟件的構建性能分析、靜態(tài)分析和動(dòng)態(tài)分析包含進(jìn)來(lái),并維護一個(gè)快速、精益、均衡的構建- 測試周期。這有助于幫助開(kāi)發(fā)人員盡早捕獲Bug,并迅速修復。最后,在運維方面,逐步部署軟件,允許新舊版本對比,努力確保所使用的工具和所部署的環(huán)境的多樣性,并有組織地升級工具和庫。

              GOTO阿姆斯特丹2016大會(huì )將于6月14日-15日舉行。這是一個(gè)由從業(yè)者推動(dòng)的企業(yè)級軟件開(kāi)發(fā)大會(huì ),面向團隊負責人、架構師和項目管理人員。InfoQ將以Q&A、概述、文章的形式進(jìn)行報道。

              Diomidis Spinellis是雅典經(jīng)濟與商業(yè)大學(xué)的一名教授,同時(shí)也是IEEE Software的總編輯以及《代碼閱讀與代碼質(zhì)量》一書(shū)的作者。他的新書(shū)Effective Debugging: 66 Specific Ways to Debug Software and Systems將在2016年6月1日發(fā)行。

            原文轉自:http://www.infoq.com/cn/news/2016/06/effectively-debug-software

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>