欢迎来到天天文库
浏览记录
ID:37729023
大小:2.67 MB
页数:24页
时间:2019-05-29
《代码质量与静态检查》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、代码质量与静态检查目录什么是代码质量如何保证代码质量提高代码质量的方法静态检测PC-Lint动态检查代码度量程序员与代码质量什么是代码质量代码的最终载体是软件产品(Software);软件质量(SoftwareQuality)最终体现为代码质量(CodeQuality);对软件产品的质量要求就间接的提出了对代码的质量要求;问:什么高质量的软件产品?答:符合用户需求、运行稳定、性能优异、易维护、易扩展等;间接引申出程度代码的质量要求:※可用性:正确、有效※健壮性:可靠、容错※可测试:※可读:※可维护:※可扩展:如何保证代码质量※保证可用性功能测试(UT/ST)、性能测试、可
2、靠性测试※保证健壮性压力测试、异常测试※保证可测试性架构设计、子系统设计、模块设计、接口设计※保证可读性编程规范、代码风格※保证可维护性/可扩展性如何保证代码质量软件测试的意义发现更多的BUG,减少错误出现概率,保证软件产品是合格的产品;如何从合格到达优秀,成为高质量软件产品?着重体现在代码的软指标上,可测,可读,可维护,可扩展;设计的重要性设计可以部分保证可测、可维护、可扩展;剩下的部分依靠什么来保证?靠人,靠程序员。但人往往是最不可靠的东西。东西才可靠,这东西就是工具。提高代码质量方法两大法宝:※测试※检查测试后续再交流,本次主要交流代码检查部分;代码检查的目的不单是
3、为了提高软指标,已深入到程序逻辑、内存检测、复杂度、优化建议等高级层面,从而反过来影响程序功能和性能。代码检查分为:※静态检查:对程序代码的检查;※动态检查:程序运行时检查;动态检查着重于内存和资源检查。静态检查静态检查静态检查能检查出哪些问题?变量未初始化空指针引用数据类型不匹配返回局部变量数组字符串边界溢出内存泄露……静态检查可以通过人工进行:代码走读,代码检视。也可以通过工具进行:编译器,专业的代码检查工具,如pclint,splint,coverityPCLINTPC-lint(FlexeLint)GimpelSoftware.事实上的工业标准,pclint目前版
4、本9.00i需要安装,安装后目录结构如右图,运行lint-nt.exe可见帮助信息;PCLINTPclint安装完成后,下载最新的补丁包,将其PATCH到最新版本。安装完成后,会提示是否需要设置;按照GUI界面,一路设置即可;主要设置了编译环境,编译器,内存模型,使用的库,以及设置相关的库文件目录等;关键配置文件:std.lntoptions.lnt将pclint主目录设置到系统PATH;PCLINT一个简单的例子:可以看到pclint检查出一个warning:符号i未初始化;PCLINTPclint对检查到的代码问题进行分级,目前主要包含如右图几类信息:每一个问题pcl
5、int都会具有一个对应的编码,基本对应关系如下图:PCLINT针对Pclint的消息级别,通常有如下特征:SyntaxErrror:语法错误,通常是错误,需要修改;InternalError:Pclint内部错误,一般不会出现;FatalError:致命错误,通常是文件错误或溢出错误;Warning:告警,pclint检测的主要目的,通常都是语法上正确但可能会导致程序错误的代码;Info:提示信息,通常和编程风格有关,存在错误的可能性;ElectiveNotes:可选信息,一般无需关注;Pclint的错误告警级别分为0,1,2,3,4,数字越小错误越严重,默认级别是3(i
6、nfo),也是推荐的级别;可使用-wLevel修改消息级别(在options.lnt文件中添加);如-w2,不输出无关Info消息;PCLINT常用配置:-wLevel设置消息输出级别-wlib(Level)设置库消息级别,通常设置为-wlib(0)-e#禁止输出编号为#的消息+e#恢复输出编号为#的消息#编号支持元字符,?代表任意一个字符,*代表任意多个字符+(-)e设置均可通过注释植入到代码,如:/*lint-e530*/lint前不能有空格,注释长度不大于80典型形式:/*lint-e530*/从当前行以后禁止530输出;/*lint-e(530)*/为下一个表达式
7、禁止530,其后自动恢复;/*lint--e(530)*/为整个表达式禁止530,其后自动恢复/*lint-e{530}*/为下一个语句或声明禁止530,其后自动恢复/*lint--e{530}*/为当前{}语句块禁止530,其后自动恢复/*lint!e530*/仅对当前行禁止530PCLINT高级消息输出设置-efile(#,file[,file]…)禁止文件相关的错误;-efunc(#,symbol[,symbol]…)禁止函数内的错误;-esym(#,symbol[,symbol]…)禁止某个符号的错误;-emacro(
此文档下载收益归作者所有