提高软件质量的利器-C++ppt课件_第1页
提高软件质量的利器-C++ppt课件_第2页
提高软件质量的利器-C++ppt课件_第3页
提高软件质量的利器-C++ppt课件_第4页
提高软件质量的利器-C++ppt课件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、提高软件质量的利器Valgrind2021-12-24视讯产品线/监控业务开发部PurifyPlus投资报答分析破费更少的时间修补BUG,每位开发人员每年节约 2.6 周时间研讨阐明假设一个中等任务团队为 5 人,那么每个团队每月出现 3 次关键的内存访问错误。也就是每位开发人员每月 0.6 个错误。运用常规工具发现一个内存访问错误平均破费 16 小时。0.6 个错误/月/开发人员16 小时/错误9.6 小时/月用来修补内存错误百分之六十的被调查者以为,运用 PurifyPlus 发现运转时错误带来的消费率系数大约是 10 倍,这就意味着过去用十小时发现并纠正的错误可以在不到一小时内得以纠正。

2、即:运用常规的工具 9.6 小时1/10Purify 消费率系数0.96 小时/月。这阐明每位开发人员每月节省 8.64 小时9.6-0.968.64。按这样的方法计算一年,8.64 小时/月12 月103.7小时/年。每周 40 小时,这样就可以换算成每年节省 2.6 周103.7 小时/40小时2.6 周PurifyPlus投资报答分析破费更少的时间处理性能每位开发人员每年节省 1.96 周研讨阐明每位程序员破费大约5 的时间用于优化/改良程序性能。这样计算的话,不运用 PurifyPlus,程序员每年破费 2.4 周改良程序性能:0.0548周/年2.4 周/年。当运用了 PurifyP

3、lus 处理性能问题后,消费率增益的系数估计为5倍,这就意味着以前破费 5 小时纠正的错误如今仅需求 1 小时。在博得这个 5 倍的量化的消费率系数后,每位开发人员每年将仅仅运用 0.48 周来处理性能问题:运用常规工具需求2.4小时1/5量化的消费率因子0.48周/年。这阐明每位开发人员每年节省将近两周的时间2.40.481.92PurifyPlus投资报答分析提早发现 BUG 每年节省 7000 美圆PurifyPlus 经过突出显示没有完全经过测试并且能够仍旧包含BUG或性能问题的代码段,从而改良错误检测。经过提早发现BUG,PurifyPlus带来了显著的费用节省。公认的行业规范阐明在

4、软件交付前修补BUG的破费小于10倍。运用 PurifyPlus 的开发人员与不运用PurifyPlus的开发人员相比,每年平均多发现10个BUG在软件交付后修补一个 BUG 的开销估计是 700 美圆,而在交付前修补一个 BUG 的开销仅为70美圆。对于每位开发人员来说,运用 PurifyPlus 提早发现 BUG 节省的本钱每年就是 7000 美圆:10BUG700 美圆交付后本钱7000 美圆好的工具可以协助开发人员每年多活一个月BUG的危害添加产品的开发时间、能够会把产品挂掉添加研发人员的劳动、经常加班能够会把人挂掉不断的耗费公司的利润严重影响研发人员的自自信心和学习时机导致与家人聚会

5、的时间减少,降低幸福指数影响寿命影响同事间感情致命的BUG能够会把公司挂掉软件BUG分类如何降低软件的BUG运用成熟的代码和框架少直接运用裸API多运用本人积累的开发代码运用CBB,COTS运用成熟的开源框架ACE,ICE,BOOST,STL技术代码与业务代码解耦技术代码+业务代码=产品代码笼统技术代码-好的设计方式-构成框架-通用中间件笼统业务代码-好的设计方式-构成框架-领域中间件如何降低软件的BUG对句柄资源在运用层进展资源运用统计文件,SOCKET,内存等系统资源不直接运用系统的内存管理,在运用层开发本人的内存池可以提高运转效率,减少频繁内存分配内存的分配释放可以本人控制,防止内存泄露

6、如何降低软件的BUG编写代码尽量符合OCP原那么面对变化优先思索不添加代码面对变化优先思索添加新的模块面对变化优先思索添加新的文件面对变化优先思索添加新的类面对变化优先思索添加新的函数模块对外接口要坚持宽进严出原那么如何降低软件的BUG尽量少用锁,用锁的最高境界是不用锁制止运用递归锁、交叉锁、嵌套锁建议多运用Scoped Locking防止忘记释放锁对外接口采用Thread-Safe Interface防止自死锁采用成熟的网络I/O模型、少用SELECT模型单线程能处理问题就少运用多线程、多线程下优先采用静态多线程能用数组就不用堆进程间通讯优先运用文本协议如何降低软件的BUG养成好的编码习惯运

7、用简单的语法少运用多重承继、多级承继、嵌套、友元编写简单的类功能单一、接口明晰、函数不要过多编写简单的函数输入参数0,3个、输出参数0,1、少用*、少用递归行数0,20=20%,(20,50=70%,(50,100=10%,(100,+)=0%编写简单的指令如何降低软件的BUG开发做好单元测试,需求有单元测试代码长时间在Valgrind环境运转,发现潜在BUG每个模块确保代码执行覆盖率在90%以上关键代码要Review如何降低软件的BUGSE要充分了解用户需求、对需求担任开发代码要确保设计符合需求、对设计担任测试代表要在产品各个阶段进展测试、对产质量量担任开发人员对代码担任工程经理对进度、质量

8、担任做好配置管理如何降低软件的性能如何定位软件BUGLOG日志做到内部模块区别时间准确到毫秒异步伐用可重定向到网络如何定位软件BUGTelnet诊断经过规范的Telnet客户端实现远程控制经过命令可以查看程序内部形状经过命令可以修正程序内部形状如何定位软件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 用来进展内存分析:它协助寻觅运用程序的内存走漏和错误的内存运用,这些有能够导致运用程序解体 支持Windows&Linux,C/C+,Java要钱的WinDbg微软提供的基于源码级的免费调试工具功能上类似Linux下的GDB支持Kernel方式调试和User方式调试支持DMP文件分析支持二次开发WinDbg-如何定位程序解体ValgrindValgrind 是一款动态

12、分析工具,能自动检测内存管理和线程错误,以及发现程序的性能,以及Cache的运用、能直穿程序错误的心脏,真可谓是程序员的瑞士军刀 Valgrind基于仿真技术,而非插入目的代码运转环境: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分配的内存块读/写不适当的栈中内存块内存走漏,指向一块内存的指针永远丧失不正确的malloc/free或new/delete匹配memcpy()相关函数中的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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论