代码质量与静态检查.ppt_第1页
代码质量与静态检查.ppt_第2页
代码质量与静态检查.ppt_第3页
代码质量与静态检查.ppt_第4页
代码质量与静态检查.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

代码质量与静态检查 目录 l 什么是代码质量 l 如何保证代码质量 l 提高代码质量的方法 l 静态检测 l PC-Lint l 动态检查 l 代码度量 l 程序员与代码质量 什么是代码质量 代码的最终载体是软件产品(Software); 软件质量(Software Quality)最终体现为代码质量(Code Quality); 对软件产品的质量要求就间接的提出了对代码的质量要求; 问:什么高质量的软件产品? 答:符合用户需求、运行稳定、性能优异、易维护、易扩展等; 间接引申出程度代码的质量要求: 可用性:正确、有效 健壮性:可靠、容错 可测试: 可读: 可维护: 可扩展: 如何保证代码质量 保证可用性 功能测试(UT/ST)、性能测试、可靠性测试 保证健壮性 压力测试、异常测试 保证可测试性 架构设计、子系统设计、模块设计、接口设计 保证可读性 编程规范、代码风格 保证可维护性/可扩展性 如何保证代码质量 软件测试的意义 发现更多的BUG,减少错误出现概率,保证软件产品是合格的产品; 如何从合格到达优秀,成为高质量软件产品? 着重体现在代码的软指标上,可测,可读,可维护,可扩展; 设计的重要性 设计可以部分保证可测、可维护、可扩展; 剩下的部分依靠什么来保证? 靠人,靠程序员。但人往往是最不可靠的东西。 东西才可靠,这东西就是工具。 提高代码质量方法 两大法宝: 测试 检查 测试后续再交流,本次主要交流代码检查部分; 代码检查的目的不单是为了提高软指标,已深入到程序逻辑、内存检测、 复杂度、优化建议等高级层面,从而反过来影响程序功能和性能。 代码检查分为: 静态检查:对程序代码的检查; 动态检查:程序运行时检查; 动态检查着重于内存和资源检查。 静态检查 静态检查 静态检查能检查出哪些问题? 变量未初始化 空指针引用 数据类型不匹配 返回局部变量 数组字符串边界溢出 内存泄露 静态检查可以通过人工进行:代码走读,代码检视。 也可以通过工具进行:编译器,专业的代码检查工具, 如pclint,splint,coverity PCLINT PC-lint(FlexeLint) Gimpel Software. 事实上的工业标准,pclint目前版本9.00i 需要安装,安装后目录结构如右图, 运行lint-nt.exe可见帮助信息; PCLINT Pclint安装完成后,下载最新的补丁包,将其PATCH到最新版本。 安装完成后,会提示是否需要设置; 按照GUI界面,一路设置即可; 主要设置了编译环境,编译器, 内存模型,使用的库,以及设置 相关的库文件目录等; 关键配置文件: std.lnt options.lnt 将pclint主目录设置到系统PATH; PCLINT 一个简单的例子: 可以看到pclint检查出一个 warning: 符号i未初始化; PCLINT Pclint对检查到的代码问题进行分级, 目前主要包含如右图几类信息: 每一个问题pclint都会具有一个对应的 编码,基本对应关系如下图: PCLINT 针对Pclint的消息级别,通常有如下特征: Syntax Errror:语法错误,通常是错误,需要修改; Internal Error:Pclint内部错误,一般不会出现; Fatal Error: 致命错误,通常是文件错误或溢出错误; Warning:告警,pclint检测的主要目的,通常都是语法上正 确但可能会导致程序错误的代码; Info:提示信息,通常和编程风格有关,存在错误的可能性; Elective Notes:可选信息,一般无需关注; Pclint的错误告警级别分为0,1,2,3,4, 数字越小错误越严重, 默认级别是3(info),也是推荐的级别; 可使用-wLevel修改消息级别(在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) */为整个表达式禁止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提供精细化的消息输出控制。 变量类型和对齐设置 -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:对强类型变量进行赋值时进行类型检测,可带参数i,r,p,a,c,z; X:把强类型变量赋给其他变量时进行类型检测; J:当强类型与其它类型进行如下的二进制操作时进行检查,J的参数 : e 忽略=、!=和?:操作符 r 忽略、=、Custom Commands, 按Add, 按照右图输入参数, 完成后通过Menu菜单定制 该命令 PCLINT 集成到UE 点击“高级-工具配置”, “插入”, 按照右图输入参数; 确定完成后在UltraEdit的 “高级”菜单中会增加一个 “PC-lint Check Current File” 菜单项 动态检查 代码动态检查主要进行内存和资源检查,通过在开辟和释放操作中进 行插桩或命令替换,进行内存和资源统计分析; 典型工具:Rational Purify, Valgrind 代码度量(Code Metric) 代码覆盖率 Rational PureCoverage 圈复杂度(Cyclomatic Complexity) Cppncss 程序员与代码质量 没有一种编程语言能阻止程序员写出糟糕的程序来,不管这种语 言结构有多良好。 - Larry F

温馨提示

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

评论

0/150

提交评论