版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、提高軟件質量的利器Valgrind2021-12-24視訊產品線/監(jiān)控業(yè)務開發(fā)部PurifyPlus投資報答分析破費更少的時間修補BUG,每位開發(fā)人員每年節(jié)約 2.6 周時間研討闡明假設一個中等任務團隊為 5 人,那么每個團隊每月出現(xiàn) 3 次關鍵的內存訪問錯誤。也就是每位開發(fā)人員每月 0.6 個錯誤。運用常規(guī)工具發(fā)現(xiàn)一個內存訪問錯誤平均破費 16 小時。0.6 個錯誤/月/開發(fā)人員16 小時/錯誤9.6 小時/月用來修補內存錯誤百分之六十的被調查者以為,運用 PurifyPlus 發(fā)現(xiàn)運轉時錯誤帶來的消費率系數(shù)大約是 10 倍,這就意味著過去用十小時發(fā)現(xiàn)并糾正的錯誤可以在不到一小時內得以糾正。
2、即:運用常規(guī)的工具 9.6 小時1/10Purify 消費率系數(shù)0.96 小時/月。這闡明每位開發(fā)人員每月節(jié)省 8.64 小時9.6-0.968.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.0548周/年2.4 周/年。當運用了 PurifyP
3、lus 處理性能問題后,消費率增益的系數(shù)估計為5倍,這就意味著以前破費 5 小時糾正的錯誤如今僅需求 1 小時。在博得這個 5 倍的量化的消費率系數(shù)后,每位開發(fā)人員每年將僅僅運用 0.48 周來處理性能問題:運用常規(guī)工具需求2.4小時1/5量化的消費率因子0.48周/年。這闡明每位開發(fā)人員每年節(jié)省將近兩周的時間2.40.481.92PurifyPlus投資報答分析提早發(fā)現(xiàn) BUG 每年節(jié)省 7000 美圓PurifyPlus 經過突出顯示沒有完全經過測試并且能夠仍舊包含BUG或性能問題的代碼段,從而改良錯誤檢測。經過提早發(fā)現(xiàn)BUG,PurifyPlus帶來了顯著的費用節(jié)省。公認的行業(yè)規(guī)范闡明在
4、軟件交付前修補BUG的破費小于10倍。運用 PurifyPlus 的開發(fā)人員與不運用PurifyPlus的開發(fā)人員相比,每年平均多發(fā)現(xiàn)10個BUG在軟件交付后修補一個 BUG 的開銷估計是 700 美圓,而在交付前修補一個 BUG 的開銷僅為70美圓。對于每位開發(fā)人員來說,運用 PurifyPlus 提早發(fā)現(xiàn) BUG 節(jié)省的本錢每年就是 7000 美圓:10BUG700 美圓交付后本錢7000 美圓好的工具可以協(xié)助開發(fā)人員每年多活一個月BUG的危害添加產品的開發(fā)時間、能夠會把產品掛掉添加研發(fā)人員的勞動、經常加班能夠會把人掛掉不斷的耗費公司的利潤嚴重影響研發(fā)人員的自自信心和學習時機導致與家人聚會
5、的時間減少,降低幸福指數(shù)影響壽命影響同事間感情致命的BUG能夠會把公司掛掉軟件BUG分類如何降低軟件的BUG運用成熟的代碼和框架少直接運用裸API多運用本人積累的開發(fā)代碼運用CBB,COTS運用成熟的開源框架ACE,ICE,BOOST,STL技術代碼與業(yè)務代碼解耦技術代碼+業(yè)務代碼=產品代碼籠統(tǒng)技術代碼-好的設計方式-構成框架-通用中間件籠統(tǒng)業(yè)務代碼-好的設計方式-構成框架-領域中間件如何降低軟件的BUG對句柄資源在運用層進展資源運用統(tǒng)計文件,SOCKET,內存等系統(tǒng)資源不直接運用系統(tǒng)的內存管理,在運用層開發(fā)本人的內存池可以提高運轉效率,減少頻繁內存分配內存的分配釋放可以本人控制,防止內存泄露
6、如何降低軟件的BUG編寫代碼盡量符合OCP原那么面對變化優(yōu)先思索不添加代碼面對變化優(yōu)先思索添加新的模塊面對變化優(yōu)先思索添加新的文件面對變化優(yōu)先思索添加新的類面對變化優(yōu)先思索添加新的函數(shù)模塊對外接口要堅持寬進嚴出原那么如何降低軟件的BUG盡量少用鎖,用鎖的最高境界是不用鎖制止運用遞歸鎖、交叉鎖、嵌套鎖建議多運用Scoped Locking防止忘記釋放鎖對外接口采用Thread-Safe Interface防止自死鎖采用成熟的網絡I/O模型、少用SELECT模型單線程能處理問題就少運用多線程、多線程下優(yōu)先采用靜態(tài)多線程能用數(shù)組就不用堆進程間通訊優(yōu)先運用文本協(xié)議如何降低軟件的BUG養(yǎng)成好的編碼習慣運
7、用簡單的語法少運用多重承繼、多級承繼、嵌套、友元編寫簡單的類功能單一、接口明晰、函數(shù)不要過多編寫簡單的函數(shù)輸入參數(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í)行覆蓋率在90%以上關鍵代碼要Review如何降低軟件的BUGSE要充分了解用戶需求、對需求擔任開發(fā)代碼要確保設計符合需求、對設計擔任測試代表要在產品各個階段進展測試、對產質量量擔任開發(fā)人員對代碼擔任工程經理對進度、質量
8、擔任做好配置管理如何降低軟件的性能如何定位軟件BUGLOG日志做到內部模塊區(qū)別時間準確到毫秒異步伐用可重定向到網絡如何定位軟件BUGTelnet診斷經過規(guī)范的Telnet客戶端實現(xiàn)遠程控制經過命令可以查看程序內部形狀經過命令可以修正程序內部形狀如何定位軟件BUG參與捕獲代碼LONG WINAPI CocaUnhandledFilter(struct _EXCEPTION_POINTERS *lpExceptionInfo)HANDLE hFile = :CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTR
9、IBUTE_NORMAL, NULL );if (hFile != INVALID_HANDLE_VALUE) MINIDUMP_EXCEPTION_INFORMATION ExInfo; ExInfo.ThreadId = :GetCurrentThreadId(); ExInfo.ExceptionPointers = lpExceptionInfo; ExInfo.ClientPointers = false; BOOL bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpN
10、ormal, &ExInfo, NULL, NULL ); if (bOK)printf(Create Dump File=%s Success!n,szFileName); else printf(MiniDumpWriteDump Failed: %dn, GetLastError(); :CloseHandle(hFile);return ret;如何定位軟件BUG診斷工具IBM Rational PurifyPlusPurifyPlus是一套測試工具集合,擁有三個工具PureCoverage、 Quantifyis 和 Purify,您可以用這套工具完成對代碼覆蓋率、性能和內存分析的運
11、轉時分析。它可以加強自動化測試任務,改善產品性能和質量PureCoverage 用來進展代碼覆蓋率分析:它丈量在一切測試用例中多少代碼運轉了,多少代碼沒有運轉Quantify 用來進展性能分析:分析運用程序的性能瓶頸Purify 用來進展內存分析:它協(xié)助尋覓運用程序的內存走漏和錯誤的內存運用,這些有能夠導致運用程序解體 支持Windows&Linux,C/C+,Java要錢的WinDbg微軟提供的基于源碼級的免費調試工具功能上類似Linux下的GDB支持Kernel方式調試和User方式調試支持DMP文件分析支持二次開發(fā)WinDbg-如何定位程序解體ValgrindValgrind 是一款動態(tài)
12、分析工具,能自動檢測內存管理和線程錯誤,以及發(fā)現(xiàn)程序的性能,以及Cache的運用、能直穿程序錯誤的心臟,真可謂是程序員的瑞士軍刀 Valgrind基于仿真技術,而非插入目的代碼運轉環(huán)境:X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux, PPC64/Linux, X86/Darwin and AMD64/Darwin Only Support C/C+ValgrindValgrindMemcheckis a memory error detector. It helps you make your programs, particularly tho
13、se written in C and C+, more correct.Cachegrindis a cache and branch-prediction profiler. It helps you make your programs run faster.Callgrindis a call-graph generating cache profiler. It has some overlap with Cachegrind, but also gathers some information that Cachegrind does not.Helgrindis a thread
14、 error detector. It helps you make your multi-threaded programs more correct.DRDis also a thread error detector. It is similar to Helgrind but uses different analysis techniques and so may find different problems.Massifis a heap profiler. It helps you make your programs use less memory.DHATis a diff
15、erent kind of heap profiler. It helps you understand issues of block lifetimes, block utilisation, and layout inefficiencies.Valgrind-Memcheck 對未初始化內存的運用讀/寫釋放后的內存塊讀/寫超出malloc分配的內存塊讀/寫不適當?shù)臈V袃却鎵K內存走漏,指向一塊內存的指針永遠喪失不正確的malloc/free或new/delete匹配memcpy()相關函數(shù)中的dst和src指針重疊ValgrindExample:valgrind-3.5.0/memche
16、ck/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-HelgrindHelgrind is a Valgrind tool for detecting synchronisation errors in C, C+ and Fortran programs that use the POSIX pth
17、reads threading primitives Misuses of the POSIX pthreads API.Potential deadlocks arising from lock ordering problems.Data races - accessing memory without adequate locking or synchronisation.Problems like these often result in unreproducible, timing-dependent crashes, deadlocks and other misbehaviour, and can be difficult to find by other means Valgrind-Helgrindunlocking a not-locked mutexunlocking a mutex held by a different threaddestroying an invalid or a locked mutexrecursively locking a non-recursive mutexwhen a POSIX pthread function fails with an err
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版綠色建筑房地產轉讓合同補充協(xié)議3篇
- 二零二五年教育培訓機構教師聘用合同書3篇
- 二零二五年度特色農產品黃牛養(yǎng)殖購銷合同3篇
- 二零二五年融資租賃合同規(guī)范本2篇
- 二零二五版?zhèn)€人房產抵押借款擔保合同3篇
- 二零二五年度食堂廚房設計咨詢與服務合同2篇
- 二零二五版LOGO知識產權授權與品牌戰(zhàn)略規(guī)劃合同3篇
- 二零二五版糧食進出口貿易代理合同示范文本3篇
- 二零二五版服務器租賃與數(shù)據同步服務合同3篇
- 二零二五年度高速鐵路建設用聚乙烯管材管件采購合同3篇
- 2025年度土地經營權流轉合同補充條款范本
- 南通市2025屆高三第一次調研測試(一模)地理試卷(含答案 )
- Python試題庫(附參考答案)
- 聚酯合成副反應介紹
- DB37-T 1342-2021平原水庫工程設計規(guī)范
- 電除顫教學課件
- 廣東省藥品電子交易平臺結算門戶系統(tǒng)會員操作手冊
- DB32T 3960-2020 抗水性自修復穩(wěn)定土基層施工技術規(guī)范
- 大斷面隧道設計技術基本原理
- 41某31層框架結構住宅預算書工程概算表
- 成都市國土資源局關于加強國有建設用地土地用途變更和
評論
0/150
提交評論