高级软件工程 静态代码的可信性分析概述1145 如何得到这些知识? 与具体应用无关 词法或者语法:语言设计人员 共性特性:基础知识 公共库用法:库开发人员(形成文挡) 用户整理(分析实现代码、分析使用代码) ●与具体应用相关 类型定义:应用设计人员 类型约束:应用设计人员、编程人员 需求相关:用户
高级软件工程 静态代码的可信性分析概述 11/45 ⚫ 与具体应用无关 – 词法或者语法:语言设计人员 – 共性特性: 基础知识 – 公共库用法:库开发人员(形成文挡) 用户整理(分析实现代码、分析使用代码) ⚫ 与具体应用相关 – 类型定义: 应用设计人员 – 类型约束: 应用设计人员、编程人员 – 需求相关: 用户 如何得到这些知识?
高级软件工程 静态代码的可信性分析概述12/45 静态代码缺陷查找的主要方法 1、静态代码分析 2、编译过程中的代码缺陷查找 3、形式化分析方法 4、缺陷模式匹配
高级软件工程 静态代码的可信性分析概述 12/45 1、静态代码分析 2、编译过程中的代码缺陷查找 3、形式化分析方法 4、缺陷模式匹配 三、静态代码缺陷查找的主要方法
高级软件工程 静态代码的可信性分析概述13/45 1、静态代码分析 静态代码缺陷査找属于静态代码分析的范畴 静态代码分析是在不运行代码的前提下,获 取关于程序信息的过程 ●静态代码分析还可以用于 获取设计结构 理解代码功能 演化代码
高级软件工程 静态代码的可信性分析概述 13/45 ⚫ 静态代码缺陷查找属于静态代码分析的范畴 ⚫ 静态代码分析是在不运行代码的前提下,获 取关于程序信息的过程 ⚫ 静态代码分析还可以用于 – 获取设计结构 – 理解代码功能 – 演化代码 – …… 1、静态代码分析
高级软件工程 静态代码的可信性分析概述1445 给定一个程序,可以问许多问题: ·对于某个输入,停机吗? ·执行过程需要多少内存? ·对于某个输入的输出是什么? 变量ⅹ被使用前是否已经初始化过了 变量ⅹ的值将来被读取吗? 变量x的值是否一直大于0? 变量ⅹ的值取值范围是多少 变量ⅹ的当前值是什么时候赋予的? 指针p会是空吗?
高级软件工程 静态代码的可信性分析概述 14/45 给定一个程序,可以问许多问题: • 对于某个输入,停机吗? • 执行过程需要多少内存? • 对于某个输入的输出是什么? • 变量 x 被使用前是否已经初始化过了 • 变量 x 的值将来被读取吗? • 变量 x 的值是否一直大于0? • 变量 x 的值取值范围是多少? • 变量 x 的当前值是什么时候赋予的? • 指针p会是空吗?
高级软件工程 静态代码的可信性分析概述15/45 Rce定理 Rice’s定理(1953)非正式地指出: 所有关于程序“行为”的问题是不可判定的 (undecidable) 例如:能否判定如下变量x的值? X=17 if TMO)x=18; 第j个图灵机的停机问题是不可判定的
高级软件工程 静态代码的可信性分析概述 15/45 Rice 定理 Rice’s 定理 (1953) 非正式地指出: 所有关于程序“行为”的问题是不可判定的 (undecidable) 例如:能否判定如下变量 x 的值? x = 17; if (TM(j)) x = 18; 第 j 个图灵机的停机问题是不可判定的 x的值也就不能判定