代码质量与静态检查.ppt

上传人:小飞机 文档编号:6361511 上传时间:2023-10-20 格式:PPT 页数:24 大小:2.07MB
返回 下载 相关 举报
代码质量与静态检查.ppt_第1页
第1页 / 共24页
代码质量与静态检查.ppt_第2页
第2页 / 共24页
代码质量与静态检查.ppt_第3页
第3页 / 共24页
代码质量与静态检查.ppt_第4页
第4页 / 共24页
代码质量与静态检查.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《代码质量与静态检查.ppt》由会员分享,可在线阅读,更多相关《代码质量与静态检查.ppt(24页珍藏版)》请在三一办公上搜索。

1、代码质量与静态检查,目录,什么是代码质量 如何保证代码质量 提高代码质量的方法 静态检测 PC-Lint 动态检查 代码度量 程序员与代码质量,什么是代码质量,代码的最终载体是软件产品(Software);软件质量(Software Quality)最终体现为代码质量(Code Quality);对软件产品的质量要求就间接的提出了对代码的质量要求;问:什么高质量的软件产品?答:符合用户需求、运行稳定、性能优异、易维护、易扩展等;间接引申出程度代码的质量要求:可用性:正确、有效 健壮性:可靠、容错 可测试:可读:可维护:可扩展:,如何保证代码质量,保证可用性功能测试(UT/ST)、性能测试、可靠

2、性测试 保证健壮性压力测试、异常测试 保证可测试性架构设计、子系统设计、模块设计、接口设计 保证可读性编程规范、代码风格 保证可维护性/可扩展性,如何保证代码质量,软件测试的意义发现更多的BUG,减少错误出现概率,保证软件产品是合格的产品;如何从合格到达优秀,成为高质量软件产品?着重体现在代码的软指标上,可测,可读,可维护,可扩展;设计的重要性设计可以部分保证可测、可维护、可扩展;剩下的部分依靠什么来保证?靠人,靠程序员。但人往往是最不可靠的东西。东西才可靠,这东西就是工具。,提高代码质量方法,两大法宝:测试 检查测试后续再交流,本次主要交流代码检查部分;代码检查的目的不单是为了提高软指标,已

3、深入到程序逻辑、内存检测、复杂度、优化建议等高级层面,从而反过来影响程序功能和性能。代码检查分为:静态检查:对程序代码的检查;动态检查:程序运行时检查;动态检查着重于内存和资源检查。,静态检查,静态检查静态检查能检查出哪些问题?变量未初始化空指针引用数据类型不匹配返回局部变量数组字符串边界溢出内存泄露静态检查可以通过人工进行:代码走读,代码检视。也可以通过工具进行:编译器,专业的代码检查工具,如pclint,splint,coverity,PCLINT,PC-lint(FlexeLint)Gimpel Software.事实上的工业标准,pclint目前版本9.00i需要安装,安装后目录结构如

4、右图,运行lint-nt.exe可见帮助信息;,PCLINT,Pclint安装完成后,下载最新的补丁包,将其PATCH到最新版本。安装完成后,会提示是否需要设置;按照GUI界面,一路设置即可;主要设置了编译环境,编译器,内存模型,使用的库,以及设置相关的库文件目录等;关键配置文件:std.lntoptions.lnt将pclint主目录设置到系统PATH;,PCLINT,一个简单的例子:,可以看到pclint检查出一个warning:符号i未初始化;,PCLINT,Pclint对检查到的代码问题进行分级,目前主要包含如右图几类信息:,每一个问题pclint都会具有一个对应的编码,基本对应关系如

5、下图:,PCLINT,针对Pclint的消息级别,通常有如下特征:Syntax Errror:语法错误,通常是错误,需要修改;Internal Error:Pclint内部错误,一般不会出现;Fatal Error:致命错误,通常是文件错误或溢出错误;Warning:告警,pclint检测的主要目的,通常都是语法上正确但可能会导致程序错误的代码;Info:提示信息,通常和编程风格有关,存在错误的可能性;Elective Notes:可选信息,一般无需关注;Pclint的错误告警级别分为0,1,2,3,4,数字越小错误越严重,默认级别是3(info),也是推荐的级别;可使用-wLevel修改消息

6、级别(在options.lnt文件中添加);如-w2,不输出无关Info消息;,PCLINT,常用配置:-wLevel 设置消息输出级别-wlib(Level)设置库消息级别,通常设置为-wlib(0)-e#禁止输出编号为#的消息+e#恢复输出编号为#的消息#编号支持元字符,?代表任意一个字符,*代表任意多个字符+(-)e设置均可通过注释植入到代码,如:/*lint-e530*/lint前不能有空格,注释长度不大于80典型形式:/*lint-e530*/从当前行以后禁止530输出;/*lint-e(530)*/为下一个表达式禁止530,其后自动恢复;/*lint-e(530)*/为整个表达式禁

7、止530,其后自动恢复/*lint-e530*/为下一个语句或声明禁止530,其后自动恢复/*lint-e530*/为当前语句块禁止530,其后自动恢复/*lint!e530*/仅对当前行禁止530,PCLINT,高级消息输出设置-efile(#,file,file)禁止文件相关的错误;-efunc(#,symbol,symbol)禁止函数内的错误;-esym(#,symbol,symbol)禁止某个符号的错误;-emacro(#,symbol,.)禁止某个宏的错误;-etype,-estring,-etemplate,-elib,-efreeze总之,pclint提供精细化的消息输出控制。变

8、量类型和对齐设置-sb#一个字节的位数,默认-sb8-si#int类型的字节数,默认-sb4,某些平台需要修改-so#,-sc#,-sl#,-sp#,-sw#.-ai#int对齐字节数-al#long对齐字节数类型与-s一致,和对齐相关的消息为Notes 958,959,PCLINT,库文件检查设置,PCLINT,强类型检查设置(Strong Types)C/C+语言本身即为强类型语言,但由于typedef存在,可能会导致编译器对某些类型匹配检测失效;Pclint通过-strong和-index选择配置强类型检测;-strong(flags,name.)flags取值:A:对强类型变量进行赋值

9、时进行类型检测,可带参数i,r,p,a,c,z;X:把强类型变量赋给其他变量时进行类型检测;J:当强类型与其它类型进行如下的二进制操作时进行检查,J的参数:e 忽略=、!=和?:操作符r 忽略、=、和=o 忽略+、-、*、/、%、|、&和c 忽略该强类型与常量进行以上操作时的检查z 忽略该强类型与Zero进行以上操作时的检查还存在Bblf等选项;,PCLINT,强类型检查设置-index(flags,ixtype,sitype,sitype.)flag取值:c:使用ixtype和常量索引sitype;d:允许在不使用ixtype的情况下指定数组的长度,PCLINT,PCLINT的其他功能变量值

10、跟踪(Value Tracking)SEMANTICS多线程检测(Multi-Thread)格式检测(Format Checking)赋值顺序检测(Order of Evaluation)弱定义检测(Weak Definials)缩进检测(Indentation Checking)常量检测(Const Checking)更多详细功能,请参考pclint使用手册;,PCLINT,pclint与开发环境集成pclint可集成到VS、UE、SourceInsight等支持外部工具的开发环境;集成到SourceInsight点击Options-Custom Commands,按Add,按照右图输入参数

11、,完成后通过Menu菜单定制该命令,PCLINT,集成到UE点击“高级-工具配置”,“插入”,按照右图输入参数;确定完成后在UltraEdit的“高级”菜单中会增加一个“PC-lint Check Current File”菜单项,动态检查,代码动态检查主要进行内存和资源检查,通过在开辟和释放操作中进行插桩或命令替换,进行内存和资源统计分析;典型工具:Rational Purify,Valgrind,代码度量(Code Metric),代码覆盖率Rational PureCoverage圈复杂度(Cyclomatic Complexity)Cppncss,程序员与代码质量,没有一种编程语言能阻止程序员写出糟糕的程序来,不管这种语言结构有多良好。-Larry Flon 永远要这样写代码,好像最终维护你代码的人是个狂暴的、知道你住在哪里的精神病患者。-Martin Golding 优秀的工具可以使优秀的程序员更优秀,但无法使糟糕的程序员做到优秀。-The Practise of Programming 代码质量不能完全依靠人来保证,但最终还是依靠人来保证。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号