試論提高軟件質(zhì)量的利器Valgrind_第1頁
試論提高軟件質(zhì)量的利器Valgrind_第2頁
試論提高軟件質(zhì)量的利器Valgrind_第3頁
試論提高軟件質(zhì)量的利器Valgrind_第4頁
試論提高軟件質(zhì)量的利器Valgrind_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

提高軟件質(zhì)量的利器

Valgrind2010-12-24視訊產(chǎn)品線/監(jiān)控業(yè)務開發(fā)部PurifyPlus投資回報分析花費更少的時間修補BUG,每位開發(fā)人員每年節(jié)約2.6周時間研究表明假設一個中等工作團隊為5人,則每個團隊每月出現(xiàn)3次關鍵的內(nèi)存訪問錯誤。也就是每位開發(fā)人員每月0.6個錯誤。使用常規(guī)工具發(fā)現(xiàn)一個內(nèi)存訪問錯誤平均花費16小時。0.6個錯誤/月/開發(fā)人員×16小時/錯誤=9.6小時/月用來修補內(nèi)存錯誤百分之六十的被調(diào)查者認為,使用PurifyPlus發(fā)現(xiàn)運行時錯誤帶來的生產(chǎn)率系數(shù)大約是10倍,這就意味著過去用十小時發(fā)現(xiàn)并糾正的錯誤可以在不到一小時內(nèi)得以糾正。即:使用常規(guī)的工具9.6小時×1/10(Purify生產(chǎn)率系數(shù))=0.96小時/月。這說明每位開發(fā)人員每月節(jié)省8.64小時(9.6-0.96=8.64)。按這樣的方法計算一年,8.64小時/月×12月=103.7小時/年。每周40小時,這樣就可以換算成每年節(jié)省2.6周(103.7小時/40小時=2.6周)PurifyPlus投資回報分析花費更少的時間解決性能每位開發(fā)人員每年節(jié)省1.96周研究表明每位程序員花費大約5%的時間用于優(yōu)化/改進程序性能。這樣計算的話,不使用PurifyPlus,程序員每年花費2.4周改進程序性能:0.05×48周/年=2.4周/年。當使用了PurifyPlus解決性能問題后,生產(chǎn)率增益的系數(shù)估計為5倍,這就意味著以前花費5小時糾正的錯誤現(xiàn)在僅需要1小時。在贏得這個5倍的"量化的生產(chǎn)率系數(shù)"后,每位開發(fā)人員每年將僅僅使用0.48周來解決性能問題:使用常規(guī)工具需要2.4小時×1/5(量化的生產(chǎn)率因子)=0.48周/年。這表明每位開發(fā)人員每年節(jié)省將近兩周的時間(2.4-0.48=1.92)PurifyPlus投資回報分析提早發(fā)現(xiàn)BUG每年節(jié)省7000美元PurifyPlus通過突出顯示沒有完全通過測試并且可能仍舊包含BUG或性能問題的代碼段,從而改進錯誤檢測。通過提早發(fā)現(xiàn)BUG,PurifyPlus帶來了顯著的費用節(jié)省。公認的行業(yè)標準表明在軟件交付前修補BUG的花費小于10倍。使用PurifyPlus的開發(fā)人員與不使用PurifyPlus的開發(fā)人員相比,每年平均多發(fā)現(xiàn)10個BUG在軟件交付后修補一個BUG的開銷估計是700美元,而在交付前修補一個BUG的開銷僅為70美元。對于每位開發(fā)人員來說,使用PurifyPlus提前發(fā)現(xiàn)BUG節(jié)省的成本每年就是7000美元:10BUG×700美元交付后成本=7000美元好的工具可以幫助開發(fā)人員

每年多活一個月BUG的危害增加產(chǎn)品的開發(fā)時間、可能會把產(chǎn)品掛掉增加研發(fā)人員的勞動、經(jīng)常加班可能會把人掛掉不斷的消耗公司的利潤嚴重影響研發(fā)人員的自信心和學習機會導致與家人團聚的時間減少,降低幸福指數(shù)影響壽命影響同事間感情致命的BUG可能會把公司掛掉軟件BUG分類如何降低軟件的BUG使用成熟的代碼和框架少直接使用裸API多使用自己積累的開發(fā)代碼使用CBB,COTS使用成熟的開源框架ACE,ICE,BOOST,STL技術代碼與業(yè)務代碼解耦技術代碼+業(yè)務代碼=產(chǎn)品代碼 抽象技術代碼->好的設計模式->形成框架->通用中間件抽象業(yè)務代碼->好的設計模式->形成框架->領域中間件如何降低軟件的BUG對句柄資源在應用層進行資源使用統(tǒng)計文件,SOCKET,內(nèi)存等系統(tǒng)資源不直接使用系統(tǒng)的內(nèi)存管理,在應用層開發(fā)自己的內(nèi)存池可以提高運行效率,減少頻繁內(nèi)存分配內(nèi)存的分配釋放可以自己控制,避免內(nèi)存泄露如何降低軟件的BUG編寫代碼盡量符合OCP原則面對變化優(yōu)先考慮不增加代碼面對變化優(yōu)先考慮增加新的模塊面對變化優(yōu)先考慮增加新的文件面對變化優(yōu)先考慮增加新的類面對變化優(yōu)先考慮增加新的函數(shù)模塊對外接口要保持寬進嚴出原則如何降降低軟軟件的的BUG盡量少少用鎖鎖,用用鎖的的最高高境界界是不不用鎖鎖禁止使使用遞遞歸鎖鎖、交交叉鎖鎖、嵌嵌套鎖鎖建議多多使用用ScopedLocking避免忘忘記釋釋放鎖鎖對外接接口采采用Thread-SafeInterface避免自自死鎖鎖采用成成熟的的網(wǎng)絡絡I/O模型、、少用用SELECT模型單線程程能解解決問問題就就少使使用多多線程程、多多線程程下優(yōu)優(yōu)先采采用靜靜態(tài)多多線程程能用數(shù)數(shù)組就就不用用堆進程間間通信信優(yōu)先先使用用文本本協(xié)議議如何降降低軟軟件的的BUG養(yǎng)成好好的編編碼習習慣使用簡簡單的的語法法少使用用多重重繼承承、多多級繼繼承、、嵌套套、友友元編寫簡簡單的的類功能單單一、、接口口清晰晰、函函數(shù)不不要過過多編寫簡簡單的的函數(shù)數(shù)輸入?yún)?shù)[0,3]個、輸輸出參參數(shù)[0,1]、少用用**、少少用遞遞歸行數(shù)[0,20]=20%,(20,50]=70%,(50,100]=10%,(100,+~)=0%編寫簡簡單的的指令令如何降降低軟軟件的的BUG開發(fā)做好單單元測試,需要有單元元測試代碼碼長時間在Valgrind環(huán)境運行,,發(fā)現(xiàn)潛在在BUG每個模塊確確保代碼執(zhí)執(zhí)行覆蓋率率在90%以上關鍵代碼要要Review如何降低軟軟件的BUGSE要充分理解解用戶需求求、對需求求負責開發(fā)代碼要要確保設計計符合需求求、對設計計負責測試代表要要在產(chǎn)品各各個階段進進行測試、、對產(chǎn)品質(zhì)質(zhì)量負責開發(fā)人員對對代碼負責責項目經(jīng)理對對進度、質(zhì)質(zhì)量負責做好配置管管理如何降低軟軟件的性能能如何定位軟軟件BUGLOG日志做到內(nèi)部模模塊區(qū)別時間精確到到毫秒異步調(diào)用可重定向到到網(wǎng)絡如何定位軟軟件BUGTelnet診斷通過標準的的Telnet客戶端實現(xiàn)現(xiàn)遠程控制制通過命令可可以查看程程序內(nèi)部狀狀態(tài)通過命令可可以修改程程序內(nèi)部狀狀態(tài)如何定位軟軟件BUG加入捕獲代代碼LONGWINAPICocaUnhandledFilter(struct_EXCEPTION_POINTERS*lpExceptionInfo){HANDLEhFile=::CreateFile(szFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);if(hFile!=INVALID_HANDLE_VALUE){MINIDUMP_EXCEPTION_INFORMATIONExInfo;ExInfo.ThreadId=::GetCurrentThreadId();ExInfo.ExceptionPointers=lpExceptionInfo;ExInfo.ClientPointers=false;BOOLbOK=MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),hFile,MiniDumpNormal,&ExInfo,NULL,NULL);if(bOK)printf("CreateDumpFile=%sSuccess!\n",szFileName);elseprintf("MiniDumpWriteDumpFailed:%d\n",GetLastError());::CloseHandle(hFile);}returnret;}如何定位位軟件BUG診斷工具具IBMRationalPurifyPlusPurifyPlus是一套測測試工具具集合,,擁有三三個工具具PureCoverage、Quantifyis和Purify,您可以以用這套套工具完完成對代代碼覆蓋蓋率、性性能和內(nèi)內(nèi)存分析析的運行行時分析析。它可可以加強強自動化化測試工工作,改改善產(chǎn)品品性能和和質(zhì)量PureCoverage用來進行行代碼覆覆蓋率分分析:它它測量在在所有測測試用例例中多少少代碼運運行了,,多少代代碼沒有有運行Quantify用來進行行性能分分析:分分析應用用程序的的性能瓶瓶頸Purify用來進行行內(nèi)存分分析:它它幫助尋尋找應用用程序的的內(nèi)存泄泄漏和錯錯誤的內(nèi)內(nèi)存使用用,這些些有可能能導致應應用程序序崩潰支持Windows&Linux,C/C++,Java要錢的WinDbg微軟提供供的基于于源碼級級的免費費調(diào)試工工具功能上類類似Linux下的GDB支持Kernel模式調(diào)試試和User模式調(diào)試試支持DMP文件分析析支持二次次開發(fā)WinDbg-如何定位位程序崩崩潰ValgrindValgrind是一款動動態(tài)分析析工具,,能自動動檢測內(nèi)內(nèi)存管理理和線程程錯誤,,以及發(fā)發(fā)現(xiàn)程序序的性能能,以及及Cache的使用、、能直穿穿程序錯錯誤的心心臟,真真可謂是是程序員員的瑞士士軍刀Valgrind基于仿真真技術,,而非插插入目標標代碼運行環(huán)境境:X86/Linux,AMD64/Linux,ARM/Linux,PPC32/Linux,PPC64/Linux,X86/DarwinandAMD64/DarwinOnlySupportC/C++ValgrindValgrindMemcheckisamemoryerrordetector.Ithelpsyoumakeyourprograms,particularlythosewritteninCandC++,morecorrect.Cachegrindisacacheandbranch-predictionprofiler.Ithelpsyoumakeyourprogramsrunfaster.Callgrindisacall-graphgeneratingcacheprofiler.IthassomeoverlapwithCachegrind,butalsogatherssomeinformationthatCachegrinddoesnot.Helgrindisathreaderrordetector.Ithelpsyoumakeyourmulti-threadedprogramsmorecorrect.DRDisalsoathreaderrordetector.ItissimilartoHelgrindbutusesdifferentanalysistechniquesandsomayfinddifferentproblems.Massifisaheapprofiler.Ithelpsyoumakeyourprogramsuselessmemory.DHATisadifferentkindofheapprofiler.Ithelpsyouunderstandissuesofblocklifetimes,blockutilisation,andlayoutinefficiencies.Valgrind-Memcheck對未初始化內(nèi)內(nèi)存的使用讀/寫釋放后的內(nèi)內(nèi)存塊讀/寫超出malloc分配的內(nèi)存塊塊讀/寫不適當?shù)臈V袃?nèi)存塊內(nèi)存泄漏,指指向一塊內(nèi)存存的指針永遠遠丟失不正確的malloc/free或new/delete匹配memcpy()相關函數(shù)中的的dst和src指針重疊ValgrindExampvalgrind-3.5.0/memcheck/testsvalgrind-3.5.0/helgrind/testsvalgrind–tool=memcheck--leak-check=full--xml=yes--xml-file="log.xml"myprogvalgrind–tool=helgrind--xml=yes--xml-file="log.xml"myprogValgrind-HelgrindHelgrindisaValgrindtoolfordetectingsynchronisationerrorsinC,C++andFortranprogramsthatusethePOSIXpthreadsthreadingprimitivesMisusesofthePOSIXpthreadsAPI.Potentialdeadlocksarisingfromlockorderingproblems.Dat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論