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