试论提高软件质量的利器-Valgrind_第1页
试论提高软件质量的利器-Valgrind_第2页
试论提高软件质量的利器-Valgrind_第3页
试论提高软件质量的利器-Valgrind_第4页
试论提高软件质量的利器-Valgrind_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

试论提高软件质量的利器-ValgrindPurifyPlus投资回报分析花费更少的时间修补BUG,每位开发人员每年节约2.6研究表明假设一个中等工作团队为5人,则每个团队每月出现3次关键的内存访问错误。也就是每位开发人员每月0.6个错误。使用常规工具发现一个内存访问错误平均花费16小时。0.6个错误/月/开发人员×16小时/错误=9.6小时/月用来修补内存错误百分之六十的被调查者认为,使用PurifyPlus发现运行时错误带来的生产率系数大约是10倍,这就意味着过去用十小时发现并纠正的错误可以在不到一小时内得以纠正。即:使用常规的工具9.6小时×1/10(Purify生产率系数)=0.96小时/月。这说明每位开发人员每月节省8.64小时(=8.64)。按这样的方法计算一年,8.64小时/月×12月=103.7小时/40小时,这样就可以换算成每年节省2.6103.7小时/40小时=2.6PurifyPlus投资回报分析花费更少的时间解决性能每位开发人员每年节省1.96周研究表明每位程序员花费大约5%的时间用于优化/改进程序性能。这样计算的话,不使用PurifyPlus,程序员每年花费2.4周改进程序性能:0.05×48周/年=2.4周/年。当使用了PurifyPlus解决性能问题后,生产率增益的系数估计为5倍,这就意味着以前花费5小时纠正的错误现在仅需要1小时。在赢得这个5倍的"量化的生产率系数"后,每位开发人员每年将仅仅使用0.48周来解决性能问题:使用常规工具需要2.4小时×1/5(量化的生产率因子)=0.48周/年。这表明每位开发人员每年节省将近两周的时间(2.4-0.48=1.92)PurifyPlus投资回报分析提早发现BUG每年节省7000美元PurifyPlus通过突出显示没有完全通过测试并且可能仍旧包含BUG或性能问题的代码段,从而改进错误检测。通过提早发现BUG,PurifyPlus带来了显著的费用节省。公认的行业标准表明在软件交付前修补BUG的花费小于10倍。使用PurifyPlus的开发人员与不使用PurifyPlus的开发人员相比,每年平均多发现10个BUG在软件交付后修补一个BUG的开销估计是700美元,而在交付前修补一个BUG的开销仅为70美元。对于每位开发人员来说,使用PurifyPlus提前发现BUG节省的成本每年就是7000美元:10BUG×700美元交付后成本=7000美元好的工具可以帮助开发人员

每年多活一个月BUG的危害增加产品的开发时间、可能会把产品挂掉增加研发人员的劳动、经常加班可能会把人挂掉不断的消耗公司的利润严重影响研发人员的自信心和学习机会导致与家人团聚的时间减少,降低幸福指数影响寿命影响同事间感情致命的BUG可能会把公司挂掉软件BUG分类如何降低软件的BUG使用成熟的代码和框架少直接使用裸API多使用自己积累的开发代码使用CBB,COTS使用成熟的开源框架ACE,ICE,BOOST,STL技术代码与业务代码解耦技术代码+业务代码=产品代码 抽象技术代码->好的设计模式->形成框架->通用中间件抽象业务代码->好的设计模式->形成框架->领域中间件如何降低软件的BUG对句柄资源在应用层进行资源使用统计文件,SOCKET,内存等系统资源不直接使用系统的内存管理,在应用层开发自己的内存池可以提高运行效率,减少频繁内存分配内存的分配释放可以自己控制,避免内存泄露如何降低软件的BUG编写代码尽量符合OCP原则面对变化优先考虑不增加代码面对变化优先考虑增加新的模块面对变化优先考虑增加新的文件面对变化优先考虑增加新的类面对变化优先考虑增加新的函数模块对外接口要保持宽进严出原则如何降低软件的BUG尽量少用锁,用锁的最高境界是不用锁禁止使用递归锁、交叉锁、嵌套锁建议多使用ScopedLocking避免忘记释放锁对外接口采用Thread-SafeInterface避免自死锁采用成熟的网络I/O模型、少用SELECT模型单线程能解决问题就少使用多线程、多线程下优先采用静态多线程能用数组就不用堆进程间通信优先使用文本协议如何降低软件的BUG养成好的编码习惯使用简单的语法少使用多重继承、多级继承、嵌套、友元编写简单的类功能单一、接口清晰、函数不要过多编写简单的函数输入参数[0,3]个、输出参数[0,1]、少用**、少用递归行数[0,20]=20%,(20,50]=70%,(50,100]=10%,(100,+~)=0%编写简单的指令如何降低软件的BUG开发做好单元测试,需要有单元测试代码长时间在Valgrind环境运行,发现潜在BUG每个模块确保代码执行覆盖率在90%以上关键代码要Review如何降低软件的BUGSE要充分理解用户需求、对需求负责开发代码要确保设计符合需求、对设计负责测试代表要在产品各个阶段进行测试、对产品质量负责开发人员对代码负责项目经理对进度、质量负责做好配置管理如何降低软件的性能如何定位软件BUGLOG日志做到内部模块区别时间精确到毫秒异步调用可重定向到网络如何定位软件BUGTelnet诊断通过标准的Telnet客户端实现远程控制通过命令可以查看程序内部状态通过命令可以修改程序内部状态如何定位软件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诊断工具IBMRationalPurifyPlusPurifyPlus是一套测试工具集合,拥有三个工具PureCoverage、Quantifyis和Purify,您可以用这套工具完成对代码覆盖率、性能和内存分析的运行时分析。它可以加强自动化测试工作,改善产品性能和质量PureCoverage用来进行代码覆盖率分析:它测量在所有测试用例中多少代码运行了,多少代码没有运行Quantify用来进行性能分析:分析应用程序的性能瓶颈Purify用来进行内存分析:它帮助寻找应用程序的内存泄漏和错误的内存使用,这些有可能导致应用程序崩溃

支持Windows&Linux,C/C++,Java要钱的WinDbg微软提供的基于源码级的调试工具功能上类似Linux下的GDB支持Kernel模式调试和User模式调试支持DMP文件分析支持二次开发WinDbg-如何定位程序崩溃ValgrindValgrind是一款动态分析工具,能自动检测内存管理和线程错误,以及发现程序的性能,以及Cache的使用、能直穿程序错误的心脏,真可谓是程序员的瑞士军刀Valgrind基于仿真技术,而非插入目标代码运行环境:X86/Linux,AMD64/Linux,ARM/Linux,PPC32/Linux,PPC64/Linux,X86/DarwinandAMD64/DarwinOnlySupportC/C++ValgrindValgrindMemcheck

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.Valgrind-Memcheck

对未初始化内存的使用读/写释放后的内存块读/写超出malloc分配的内存块读/写不适当的栈中内存块内存泄漏,指向一块内存的指针永远丢失不正确的malloc/free或new/delete匹配memcpy()相关函数中的dst和src指针重叠ValgrindExle:valgrind–tool=memcheck--leak-check=full--xml=yes--xml-file="log.xml"myprogvalgrind–tool=helgrind--xml=yes--xml-file="log.xml"myprogValgrind-HelgrindHelgrindisaValgrindtoolfordetectingsynchronisationerrorsinC,C++andFortranprogramsthatusethePOSIXpthreadsthreadingprimitives

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

Valgrind-Helgrindunlockinganot-loc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论