SPASVO首页 | 测试工具 | 高校频道 | 技术文档 | 测试专题
  • 问题提出
  • 工具介绍
  • 使用说明
  • 产品构成
  • 工具价值
应用越来越复杂,代码的质量越来越重要
外包人员越来越多,难以保证代码质量
人为方式提升代码质量成本居高不下
对代码的自定义规范要求更多
对代码的缺陷需要跟踪管理
团队化、自动化的代码质量管理
CA静态分析工具
CA静态分析工具
代码审查:
--发现不符合编码规范的代码
--检测代码中的缺陷
--发现安全漏洞
--用户自定义规则
跟踪发现的问题
--CA发现的问题日志直接登记在[测试中心(TestCenter)]
--根据日志来提交缺陷
--自定义缺陷管理流程来跟踪缺陷
--缺陷统计分析
CodeAnalyzer能做什么
规则示例:
--代码的编写格式、缩进
--变量命名规范
--变量初始化
--返回值
--控制流编写、循环的编写
支持的规则分类:
--词法规则(例:变量需要有含义的英文字母)
--语法规则(例:变量初始化的位置、package编写规范)
--语义规则(例:数据库连接管理)
发现不符合编码规范的代码
原理:
--对代码进行编译检查,生成语法树
--生成执行分支
--对每个分支进行模拟执行,发现缺陷
缺陷:
--内存管理
--文件管理
--变量管理(参数、类变量、局部变量)
发现代码中的缺陷
根据定义的安全规则,检查漏洞:
--代码安全处理规则
--扫描代码,生成路径分支
--模拟执行,发现安全漏洞
发现安全漏洞
面向团队的分析日志
面向团队的分析日志
登录到测试中心
登录到测试中心
设置静态分析计划
设置静态分析计划
查看分析日志
查看分析日志
根据日志来提交缺陷
根据日志来提交缺陷
缺陷查看与跟踪
缺陷查看与跟踪
缺陷报告与缺陷分析
缺陷报告与缺陷分析
扫描分析报告
扫描分析报告
静态分析的问题管理流程
静态分析的问题管理流程
功能:
--与语法无关的元素的规范性检查
详细处理:
--缩进
--空行处理
--换行管理
--注释
代码预处理
原理(编译算法):
--根据c/java的语法BNF范式,编写语法分析器,对源代码进行语法分析
--优化BNF范式为LL1文法
--编写词法分析器
--根据文法对编码进行解析处理
处理的结果:
--语法树
--变量登记表
----本地变量
----临时变量
----类变量
----全局变量(c语言的情况)
----参数变量
----特殊变量(数据库连接、文件句柄等)
语法分析
语法分析过程:
--定义BNF规则处理
--定义处理状态机
--根据输入的关键字、语法符号了决定:
----推演
----应用的规则
语法分析状态机
BNF的一个例子
BNF的一个例子
BNF范式定义(JavaBNF范式)
BNF范式定义(JavaBNF范式)
元素:
--终结符
----关键字
------if/else ……
----字符串
----标识符
--非终结符
BNF范式的元素
代码语法树
代码语法树
对代码树的处理:语义分析
对代码树的处理:语义分析
根据变量登记表:
--处理变量的规则:命名规则、初始化规则
--处理变量的状态变更:
----open-close规则
--报告错误(写入日志)
语义分析
根据路径来检验规则
根据路径来检验规则
根据实际情况来对c/java定义规则:
--对于数据库联接处理的规则
--对于文件处理的规则
--对于安全处理的规则
--对于result处理规则
--对于返回处理规则
--对于内存管理的规则
--……
自定义规则
不需要测试用例
--可以捕获测试用例集漏掉的问题
--不需要人力投入来设计用例、执行用例
尽早的检测出代码的缺陷
--每次checkin时刻,检查代码
--可以更容易更便宜的得到修复
--容易的获取代码分析报告
从数据和程序来分析, 更容易发现潜在问题
--分析考虑了程序内部的过程交互,是上下文关联、路径敏感和对象敏感的。
--使用数据流分析和控制流分析
与编译器无关
--不需要编译和额外开销
支持代码走查
--支持逆向工程
--支持面向类的检查
--生成逆向工程文件
报告
--生成xml的报告
--生成在TestCenter中的报告
集成
--能够与其他工具集成,如版本管理工具等
CodeAnalyzer的价值
集成方案:unix C
集成方案:unix C
扫描整个项目
扫描整个项目
增加属性:
--提交人
--程序文件名
--错误类型
--函数/方法名
--位置(行,列)
缺陷属性修改
项目集成
项目集成
沪ICP备07036474号 2003-2016 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd