提高軟件質(zhì)量的利器-C++課件_第1頁(yè)
提高軟件質(zhì)量的利器-C++課件_第2頁(yè)
提高軟件質(zhì)量的利器-C++課件_第3頁(yè)
提高軟件質(zhì)量的利器-C++課件_第4頁(yè)
提高軟件質(zhì)量的利器-C++課件_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

Valgrind2010-12-24視訊產(chǎn)品線/監(jiān)控業(yè)務(wù)開(kāi)發(fā)部提高軟件質(zhì)量的利器

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

每年多活一個(gè)月好的工具可以幫助開(kāi)發(fā)人員

每年多活一個(gè)月BUG的危害增加產(chǎn)品的開(kāi)發(fā)時(shí)間、可能會(huì)把產(chǎn)品掛掉增加研發(fā)人員的勞動(dòng)、經(jīng)常加班可能會(huì)把人掛掉不斷的消耗公司的利潤(rùn)嚴(yán)重影響研發(fā)人員的自信心和學(xué)習(xí)機(jī)會(huì)導(dǎo)致與家人團(tuán)聚的時(shí)間減少,降低幸福指數(shù)影響壽命影響同事間感情致命的BUG可能會(huì)把公司掛掉BUG的危害增加產(chǎn)品的開(kāi)發(fā)時(shí)間、可能會(huì)把產(chǎn)品掛掉軟件BUG分類軟件BUG分類如何降低軟件的BUG使用成熟的代碼和框架少直接使用裸API多使用自己積累的開(kāi)發(fā)代碼使用CBB,COTS使用成熟的開(kāi)源框架ACE,ICE,BOOST,STL技術(shù)代碼與業(yè)務(wù)代碼解耦技術(shù)代碼+業(yè)務(wù)代碼=產(chǎn)品代碼 抽象技術(shù)代碼->好的設(shè)計(jì)模式->形成框架->通用中間件抽象業(yè)務(wù)代碼->好的設(shè)計(jì)模式->形成框架->領(lǐng)域中間件如何降低軟件的BUG使用成熟的代碼和框架如何降低軟件的BUG對(duì)句柄資源在應(yīng)用層進(jìn)行資源使用統(tǒng)計(jì)文件,SOCKET,內(nèi)存等系統(tǒng)資源不直接使用系統(tǒng)的內(nèi)存管理,在應(yīng)用層開(kāi)發(fā)自己的內(nèi)存池可以提高運(yùn)行效率,減少頻繁內(nèi)存分配內(nèi)存的分配釋放可以自己控制,避免內(nèi)存泄露如何降低軟件的BUG對(duì)句柄資源在應(yīng)用層進(jìn)行資源使用統(tǒng)計(jì)如何降低軟件的BUG編寫(xiě)代碼盡量符合OCP原則面對(duì)變化優(yōu)先考慮不增加代碼面對(duì)變化優(yōu)先考慮增加新的模塊面對(duì)變化優(yōu)先考慮增加新的文件面對(duì)變化優(yōu)先考慮增加新的類面對(duì)變化優(yōu)先考慮增加新的函數(shù)模塊對(duì)外接口要保持寬進(jìn)嚴(yán)出原則如何降低軟件的BUG編寫(xiě)代碼盡量符合OCP原則如何降低軟件的BUG盡量少用鎖,用鎖的最高境界是不用鎖禁止使用遞歸鎖、交叉鎖、嵌套鎖建議多使用ScopedLocking避免忘記釋放鎖對(duì)外接口采用Thread-SafeInterface避免自死鎖采用成熟的網(wǎng)絡(luò)I/O模型、少用SELECT模型單線程能解決問(wèn)題就少使用多線程、多線程下優(yōu)先采用靜態(tài)多線程能用數(shù)組就不用堆進(jìn)程間通信優(yōu)先使用文本協(xié)議如何降低軟件的BUG盡量少用鎖,用鎖的最高境界是不用鎖如何降低軟件的BUG養(yǎng)成好的編碼習(xí)慣使用簡(jiǎn)單的語(yǔ)法少使用多重繼承、多級(jí)繼承、嵌套、友元編寫(xiě)簡(jiǎn)單的類功能單一、接口清晰、函數(shù)不要過(guò)多編寫(xiě)簡(jiǎn)單的函數(shù)輸入?yún)?shù)[0,3]個(gè)、輸出參數(shù)[0,1]、少用**、少用遞歸行數(shù)[0,20]=20%,(20,50]=70%,(50,100]=10%,(100,+~)=0%編寫(xiě)簡(jiǎn)單的指令如何降低軟件的BUG養(yǎng)成好的編碼習(xí)慣如何降低軟件的BUG開(kāi)發(fā)做好單元測(cè)試,需要有單元測(cè)試代碼長(zhǎng)時(shí)間在Valgrind環(huán)境運(yùn)行,發(fā)現(xiàn)潛在BUG每個(gè)模塊確保代碼執(zhí)行覆蓋率在90%以上關(guān)鍵代碼要Review如何降低軟件的BUG開(kāi)發(fā)做好單元測(cè)試,需要有單元測(cè)試代碼如何降低軟件的BUGSE要充分理解用戶需求、對(duì)需求負(fù)責(zé)開(kāi)發(fā)代碼要確保設(shè)計(jì)符合需求、對(duì)設(shè)計(jì)負(fù)責(zé)測(cè)試代表要在產(chǎn)品各個(gè)階段進(jìn)行測(cè)試、對(duì)產(chǎn)品質(zhì)量負(fù)責(zé)開(kāi)發(fā)人員對(duì)代碼負(fù)責(zé)項(xiàng)目經(jīng)理對(duì)進(jìn)度、質(zhì)量負(fù)責(zé)做好配置管理如何降低軟件的BUGSE要充分理解用戶需求、對(duì)需求負(fù)責(zé)如何降低軟件的性能如何降低軟件的性能如何定位軟件BUGLOG日志做到內(nèi)部模塊區(qū)別時(shí)間精確到毫秒異步調(diào)用可重定向到網(wǎng)絡(luò)如何定位軟件BUGLOG日志如何定位軟件BUGTelnet診斷通過(guò)標(biāo)準(zhǔn)的Telnet客戶端實(shí)現(xiàn)遠(yuǎn)程控制通過(guò)命令可以查看程序內(nèi)部狀態(tài)通過(guò)命令可以修改程序內(nèi)部狀態(tài)如何定位軟件BUGTelnet診斷如何定位軟件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); else printf("MiniDumpWriteDumpFailed:%d\n",GetLastError());

::CloseHandle(hFile); } returnret;}如何定位軟件BUG加入捕獲代碼LONGWINAPICoc如何定位軟件BUG診斷工具如何定位軟件BUG診斷工具IBMRationalPurifyPlusPurifyPlus是一套測(cè)試工具集合,擁有三個(gè)工具PureCoverage、Quantifyis和Purify,您可以用這套工具完成對(duì)代碼覆蓋率、性能和內(nèi)存分析的運(yùn)行時(shí)分析。它可以加強(qiáng)自動(dòng)化測(cè)試工作,改善產(chǎn)品性能和質(zhì)量PureCoverage用來(lái)進(jìn)行代碼覆蓋率分析:它測(cè)量在所有測(cè)試用例中多少代碼運(yùn)行了,多少代碼沒(méi)有運(yùn)行Quantify用來(lái)進(jìn)行性能分析:分析應(yīng)用程序的性能瓶頸Purify用來(lái)進(jìn)行內(nèi)存分析:它幫助尋找應(yīng)用程序的內(nèi)存泄漏和錯(cuò)誤的內(nèi)存使用,這些有可能導(dǎo)致應(yīng)用程序崩潰

支持Windows&Linux,C/C++,Java要錢(qián)的IBMRationalPurifyPlusPurifyPWinDbg微軟提供的基于源碼級(jí)的免費(fèi)調(diào)試工具功能上類似Linux下的GDB支持Kernel模式調(diào)試和User模式調(diào)試支持DMP文件分析支持二次開(kāi)發(fā)WinDbg微軟提供的基于源碼級(jí)的免費(fèi)調(diào)試工具WinDbg-如何定位程序崩潰WinDbg-如何定位程序崩潰ValgrindValgrind是一款動(dòng)態(tài)分析工具,能自動(dòng)檢測(cè)內(nèi)存管理和線程錯(cuò)誤,以及發(fā)現(xiàn)程序的性能,以及Cache的使用、能直穿程序錯(cuò)誤的心臟,真可謂是程序員的瑞士軍刀Valgrind基于仿真技術(shù),而非插入目標(biāo)代碼運(yùn)行環(huán)境:X86/Linux,AMD64/Linux,ARM/Linux,PPC32/Linux,PPC64/Linux,X86/DarwinandAMD64/DarwinOnlySupportC/C++ValgrindValgrind是一款動(dòng)態(tài)分析工具,能自動(dòng)ValgrindValgrindValgrindMemcheck

isamemoryerrordetector.Ithelpsyoumakeyourprograms,particularlythosewritteninCandC++,morecorrect.Cachegrind

isacacheandbranch-predictionprofiler.Ithelpsyoumakeyourprogramsrunfaster.Callgrind

isacall-graphgeneratingcacheprofiler.IthassomeoverlapwithCachegrind,butalsogatherssomeinformationthatCachegrinddoesnot.Helgrind

isathreaderrordetector.Ithelpsyoumakeyourmulti-threadedprogramsmorecorrect.DRD

isalsoathreaderrordetector.ItissimilartoHelgrindbutusesdifferentanalysistechniquesandsomayfinddifferentproblems.Massif

isaheapprofiler.Ithelpsyoumakeyourprogramsuselessmemory.DHAT

isadifferentkindofheapprofiler.Ithelpsyouunderstandissuesofblocklifetimes,blockutilisation,andlayoutinefficiencies.ValgrindMemcheck

isamemoryeValgrind-Memcheck

對(duì)未初始化內(nèi)存的使用讀/寫(xiě)釋放后的內(nèi)存塊讀/寫(xiě)超出malloc分配的內(nèi)存塊讀/寫(xiě)不適當(dāng)?shù)臈V袃?nèi)存塊內(nèi)存泄漏,指向一塊內(nèi)存的指針永遠(yuǎn)丟失不正確的malloc/free或new/delete匹配memcpy()相關(guān)函數(shù)中的dst和src指針重疊Valgrind-Memcheck

對(duì)未初始化內(nèi)存的使用ValgrindExample:valgrind-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"myprogValgrindExample:valgrind-3.5.0Valgrind-HelgrindHelgrindisaValgrindtoolfordetectingsynchronisationerrorsinC,C++andFortranprogramsthatusethePOSIXpthreadsthreadingprimitives

MisusesofthePOSIXpthreadsAPI.Potentialdeadlocksarisingfromlockorderingproblems.Dataraces--accessingmemorywithoutadequatelockingorsynchronisation.Problemsliketheseoftenresultinunreproducible,timing-dependentcrashes,deadlocksandothermisbehaviour,andcanbedifficulttofindbyothermeans

Valgrind-HelgrindHelgrindisaValgrind-Helgrindunlockinganot-lockedmutexunlockingamutexheldbyadifferentthreaddestroyinganinvalidoralockedmutexrecursivelylockinganon-recursivemutexwhenaPOSIXpthreadfunctionfailswithanerrorcodethatmustbehandledwhenathreadexitswhilststillholdinglockedlocksValgrind-HelgrindunlockinganValkyrieValkyrie參考資源參考資源軟件質(zhì)量歸根結(jié)底要靠“人”軟件質(zhì)量歸根結(jié)底要靠“人”提高軟件質(zhì)量的利器-C++課件提高軟件質(zhì)量的利器

Valgrind2010-12-24視訊產(chǎn)品線/監(jiān)控業(yè)務(wù)開(kāi)發(fā)部提高軟件質(zhì)量的利器

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

每年多活一個(gè)月好的工具可以幫助開(kāi)發(fā)人員

每年多活一個(gè)月BUG的危害增加產(chǎn)品的開(kāi)發(fā)時(shí)間、可能會(huì)把產(chǎn)品掛掉增加研發(fā)人員的勞動(dòng)、經(jīng)常加班可能會(huì)把人掛掉不斷的消耗公司的利潤(rùn)嚴(yán)重影響研發(fā)人員的自信心和學(xué)習(xí)機(jī)會(huì)導(dǎo)致與家人團(tuán)聚的時(shí)間減少,降低幸福指數(shù)影響壽命影響同事間感情致命的BUG可能會(huì)把公司掛掉BUG的危害增加產(chǎn)品的開(kāi)發(fā)時(shí)間、可能會(huì)把產(chǎn)品掛掉軟件BUG分類軟件BUG分類如何降低軟件的BUG使用成熟的代碼和框架少直接使用裸API多使用自己積累的開(kāi)發(fā)代碼使用CBB,COTS使用成熟的開(kāi)源框架ACE,ICE,BOOST,STL技術(shù)代碼與業(yè)務(wù)代碼解耦技術(shù)代碼+業(yè)務(wù)代碼=產(chǎn)品代碼 抽象技術(shù)代碼->好的設(shè)計(jì)模式->形成框架->通用中間件抽象業(yè)務(wù)代碼->好的設(shè)計(jì)模式->形成框架->領(lǐng)域中間件如何降低軟件的BUG使用成熟的代碼和框架如何降低軟件的BUG對(duì)句柄資源在應(yīng)用層進(jìn)行資源使用統(tǒng)計(jì)文件,SOCKET,內(nèi)存等系統(tǒng)資源不直接使用系統(tǒng)的內(nèi)存管理,在應(yīng)用層開(kāi)發(fā)自己的內(nèi)存池可以提高運(yùn)行效率,減少頻繁內(nèi)存分配內(nèi)存的分配釋放可以自己控制,避免內(nèi)存泄露如何降低軟件的BUG對(duì)句柄資源在應(yīng)用層進(jìn)行資源使用統(tǒng)計(jì)如何降低軟件的BUG編寫(xiě)代碼盡量符合OCP原則面對(duì)變化優(yōu)先考慮不增加代碼面對(duì)變化優(yōu)先考慮增加新的模塊面對(duì)變化優(yōu)先考慮增加新的文件面對(duì)變化優(yōu)先考慮增加新的類面對(duì)變化優(yōu)先考慮增加新的函數(shù)模塊對(duì)外接口要保持寬進(jìn)嚴(yán)出原則如何降低軟件的BUG編寫(xiě)代碼盡量符合OCP原則如何降低軟件的BUG盡量少用鎖,用鎖的最高境界是不用鎖禁止使用遞歸鎖、交叉鎖、嵌套鎖建議多使用ScopedLocking避免忘記釋放鎖對(duì)外接口采用Thread-SafeInterface避免自死鎖采用成熟的網(wǎng)絡(luò)I/O模型、少用SELECT模型單線程能解決問(wèn)題就少使用多線程、多線程下優(yōu)先采用靜態(tài)多線程能用數(shù)組就不用堆進(jìn)程間通信優(yōu)先使用文本協(xié)議如何降低軟件的BUG盡量少用鎖,用鎖的最高境界是不用鎖如何降低軟件的BUG養(yǎng)成好的編碼習(xí)慣使用簡(jiǎn)單的語(yǔ)法少使用多重繼承、多級(jí)繼承、嵌套、友元編寫(xiě)簡(jiǎn)單的類功能單一、接口清晰、函數(shù)不要過(guò)多編寫(xiě)簡(jiǎn)單的函數(shù)輸入?yún)?shù)[0,3]個(gè)、輸出參數(shù)[0,1]、少用**、少用遞歸行數(shù)[0,20]=20%,(20,50]=70%,(50,100]=10%,(100,+~)=0%編寫(xiě)簡(jiǎn)單的指令如何降低軟件的BUG養(yǎng)成好的編碼習(xí)慣如何降低軟件的BUG開(kāi)發(fā)做好單元測(cè)試,需要有單元測(cè)試代碼長(zhǎng)時(shí)間在Valgrind環(huán)境運(yùn)行,發(fā)現(xiàn)潛在BUG每個(gè)模塊確保代碼執(zhí)行覆蓋率在90%以上關(guān)鍵代碼要Review如何降低軟件的BUG開(kāi)發(fā)做好單元測(cè)試,需要有單元測(cè)試代碼如何降低軟件的BUGSE要充分理解用戶需求、對(duì)需求負(fù)責(zé)開(kāi)發(fā)代碼要確保設(shè)計(jì)符合需求、對(duì)設(shè)計(jì)負(fù)責(zé)測(cè)試代表要在產(chǎn)品各個(gè)階段進(jìn)行測(cè)試、對(duì)產(chǎn)品質(zhì)量負(fù)責(zé)開(kāi)發(fā)人員對(duì)代碼負(fù)責(zé)項(xiàng)目經(jīng)理對(duì)進(jìn)度、質(zhì)量負(fù)責(zé)做好配置管理如何降低軟件的BUGSE要充分理解用戶需求、對(duì)需求負(fù)責(zé)如何降低軟件的性能如何降低軟件的性能如何定位軟件BUGLOG日志做到內(nèi)部模塊區(qū)別時(shí)間精確到毫秒異步調(diào)用可重定向到網(wǎng)絡(luò)如何定位軟件BUGLOG日志如何定位軟件BUGTelnet診斷通過(guò)標(biāo)準(zhǔn)的Telnet客戶端實(shí)現(xiàn)遠(yuǎn)程控制通過(guò)命令可以查看程序內(nèi)部狀態(tài)通過(guò)命令可以修改程序內(nèi)部狀態(tài)如何定位軟件BUGTelnet診斷如何定位軟件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); else printf("MiniDumpWriteDumpFailed:%d\n",GetLastError());

::CloseHandle(hFile); } returnret;}如何定位軟件BUG加入捕獲代碼LONGWINAPICoc如何定位軟件BUG診斷工具如何定位軟件BUG診斷工具IBMRationalPurifyPlusPurifyPlus是一套測(cè)試工具集合,擁有三個(gè)工具PureCoverage、Quantifyis和Purify,您可以用這套工具完成對(duì)代碼覆蓋率、性能和內(nèi)存分析的運(yùn)行時(shí)分析。它可以加強(qiáng)自動(dòng)化測(cè)試工作,改善產(chǎn)品性能和質(zhì)量PureCoverage用來(lái)進(jìn)行代碼覆蓋率分析:它測(cè)量在所有測(cè)試用例中多少代碼運(yùn)行了,多少代碼沒(méi)有運(yùn)行Quantify用來(lái)進(jìn)行性能分析:分析應(yīng)用程序的性能瓶頸Purify用來(lái)進(jìn)行內(nèi)存分析:它幫助尋找應(yīng)用程序的內(nèi)存泄漏和錯(cuò)誤的內(nèi)存使用,這些有可能導(dǎo)致應(yīng)用程序崩潰

支持Windows&Linux,C/C++,Java要錢(qián)的IBMRationalPurifyPlusPurifyPWinDbg微軟提供的基于源碼級(jí)的免費(fèi)調(diào)試工具功能上類似Linux下的GDB支持Kernel模式調(diào)試和User模式調(diào)試支持DMP文件分析支持二次開(kāi)發(fā)WinDbg微軟提供的基于源碼級(jí)的免費(fèi)調(diào)試工具WinDbg-如何定位程序崩潰WinDbg-如何定位程序崩潰ValgrindValgrind是一款動(dòng)態(tài)分析工具,能自動(dòng)檢測(cè)內(nèi)存管理和線程錯(cuò)誤,以及發(fā)現(xiàn)程序的性能,以及Cache的使用、能直穿程序錯(cuò)誤的心臟,真可謂是程序員的瑞士軍刀Valgrind基于仿真技術(shù),而非插入目標(biāo)代碼運(yùn)行環(huán)境:X86/Linux,AMD64/Linux,ARM/Linux,PPC32/Linux,PPC64/Linux,X86/DarwinandAMD64/DarwinOnlySupportC/C++ValgrindValgrind是一款動(dòng)態(tài)分析工具,能自動(dòng)ValgrindValgrindValgrindMemcheck

isamemoryerrordetector.Ithelpsyoumakeyourprograms,particularlythosewritteninCandC++,morecorrect.Cachegrind

isacacheandbranch-predictionprofiler.Ithelpsyoumakeyourprogramsrunfaster.Callgrind

isacall-graphgeneratingcacheprofiler.IthassomeoverlapwithCachegrind,butalsogatherssomeinformationthatCachegrinddoesnot.Helgrind

isathreaderrordetector.Ithelpsyoumakeyourmulti-threadedprogramsmorecorrect.DRD

isalsoathreaderrordetector.ItissimilartoHelgrindbutusesdifferentanalysistechniquesandsomayfinddifferentproblems.Massif

isaheapprofiler.Ithelpsyoumakeyourprogramsuselessmemory.DHAT

isadifferentkindofheapprofiler.Ithelpsyouunderstandissuesofblocklifetimes,blockutilisation,andlayoutinefficiencies.ValgrindMemcheck

isamemoryeValgrind-Memcheck

對(duì)未初始化內(nèi)存的使用讀/寫(xiě)釋放后的內(nèi)存塊讀/寫(xiě)超出malloc分配

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論