文档介绍:第八讲
静态代码质量分析技术
1
机能完整?
易生何病?
什么性格?
道德水准?
从静态代码分析动态特性:
2
主要考虑如何发现代码缺陷!
需要首先知道: 可能存在什么样的代码缺陷!
缺陷与约束:
什么是对的(约束:Constraint)
什么是不对的(缺陷:Defect)
3
关于代码 你有什么样的先验知识? 如何形式化描述这些知识? 如何使用这些知识查找缺陷?
不论是人工还是自动
都需要:
利用已有的缺陷知识查找某个特定程序
4
内容
一、静态代码缺陷查找的角色
二、静态代码缺陷基本类别
三、静态代码缺陷查找的主要方法
四、静态代码缺陷查找的常见工具
五、理论基础:不动点
5
Product (Artifact)
Analyzing
Designing
Coding
Compiling
Deploying
Developing Process
Maintaining
静态分析
动态测试
模型检测
在线监测
V&V
一、静态代码缺陷查找的角色
Review!
6
动态测试
离线运行程序
应用最广泛的缺陷查找技术
对功能性最有效
工作量大:微软(半数的测试人员?)
自动程度难以提高
基本分类
黑盒
白盒
许多缺陷靠运行很难暴露:死琐等
7
静态缺陷查找
不运行程序(广义测试包含这类活动)
静态分析可以涉及更多的路径组合
测试一次只能有一个执行轨迹
可以分析多种属性
死琐?安全漏洞?性能属性?
源码?目标码?
8
在线检测
当系统正在为用户提供服务时,一般不能进行测试:输入受限
但可以进行检测,获取各种状态、事件
进行分析,并可能据此调整目标系统
尽量减少对系统的应用
与静态分析结合?
9
二、静态代码缺陷类别
与具体应用“无关”
词法或者语法
共性特性(死锁、空指针、内存泄露、数组越界)
公共库用法(顺序、参数、接口实现,容错,安全)
与具体应用“相关”
类型定义(操作格式,不含其它信息(信息隐藏))
类型约束(调用的顺序、参数值,接口实现)
需求相关(正确)
10