基于类型系统的程序验证方法研究

基于类型系统的程序验证方法研究

论文摘要

今天软件在我们的生活中已经无处不在,它对人们的影响越来越大,虽然有时会觉察不到它的存在。在许多领域如航空航天、金融、医疗、汽车电子等,软件的可信性具有十分重要的意义。随着软件工程技术的不断发展,软件的规模不断扩大,复杂度越来越高,应用场景更加广泛,运行环境网络化、动态化,形态更加多样化。这些因素导致保证软件的可信性变得十分困难。寻找更加有效的方法提高软件的可信性一直是学术界和工业界关注的重点。软件的可信性可以在软件开发周期的各个阶段及各种制品上进行保证。基于代码的可信性保障方法是一个有效的重要方法,因为代码直接反映了软件的运行行为。在这种方法中,传统的测试方法无法保证软件完全的可信性,而程序验证方法由于完备性和可靠性,越来越受到重视。在系统软件中,存在大量的C代码。而对类似C这样包含指针操作、变量引用、堆操作的程序的验证一直是程序验证面临的挑战。本文主要研究针对类C语言的基于类型系统的静态程序验证方法,基本思想是通过确保程序具有合法的类型来保证其可信性。已有的验证方法要么难以使用,要么验证的性质有限。提出的方法将类型系统和基于霍尔逻辑的程序验证进行有机的结合,可以在不增加编程复杂度的情况下实现对程序较为深刻性质的验证,从而提高程序验证的易用性和有效性。为了对较低级的类C语言给出精确的安全形式化语义,我们首先提出了一个安全的类型化内存模型。这个内存模型既支持较低级的内存操作,又具备一定的抽象性,方便程序验证等其它需要屏蔽细节的应用。内存模型可以描述访问控制同时类型化特征保证了内存操作的严格安全性,即读取的数据具有合法的类型状态。给出了内存模型完整的抽象性质,同时实现了一个具体的内存模型。为了实现对类C语言的验证,我们设计了一种扩展的类型系统,它是建立在精化类型、子类型、动态类型等高级类型系统的基础上,因而可以对指针变量及操作进行精确的刻画,对堆中数据结构的性质进行隐式描述。类型系统具有开放性的特点,易于扩展。给出了类型系统的形式化描述,在类型化内存模型的基础上形式化的定义了源语言的操作语义,利用操作语义证明了类型系统的安全性。为了提高类型检测的自动化程度和精度,我们利用高效的自动定理证明器如可满足性模理论求解器来实现类型检测。首先将含扩展类型的待验证代码转换成普通代码,使用传统的类型检测算法进行检测。如果检测通过,则将待验证代码转换成中间验证语言Boogie代码。这个转换过程是对源代码的动态和静态语义进行编码的过程,从而保证了用于程序验证的信息不会丢失。这种方式的类型检测算法只需要设计一个语法指导的转换算法,不需要设计特定的复杂类型检测算法,具有通用性好、易于扩展、自动化程度高的特点。

论文目录

  • 论文创新点
  • 目录
  • 摘要
  • ABSTRACT
  • 1 绪论
  • 1.1 研究背景
  • 1.2 研究动机
  • 1.3 相关研究工作
  • 1.4 论文主要创新点
  • 1.5 论文组织结构
  • 2 类型安全内存模型
  • 2.1 引言
  • 2.2 经典内存模型
  • 2.2.1 字节序列模型
  • 2.2.2 分块内存模型
  • 2.2.3 Burstall内存模型
  • 2.3 内存数据类型
  • 2.4 内存数据表示
  • 2.5 抽象内存模型
  • 2.5.1 抽象内存模型定义
  • 2.5.2 内存访问控制
  • 2.5.3 抽象内存操作定义
  • 2.5.4 抽象内存模型基本性质
  • 2.6 具体内存模型
  • 2.7 内存模型评估及应用实例
  • 2.7.1 内存模型在程序验证中的应用
  • 2.7.2 内存模型在语言语义上的应用
  • 2.8 本章小结
  • 3 用于程序验证的类型系统
  • 3.1 引言
  • 3.2 类型理论基础知识
  • 3.2.1 依赖类型
  • 3.2.2 精化类型
  • 3.2.3 子类型
  • 3.2.4 动态类型
  • 3.3 语法
  • 3.3.1 表达式
  • 3.3.2 语句
  • 3.3.3 声明语句和整个程序
  • 3.4 类型系统
  • 3.4.1 类型抽象语法
  • 3.4.2 类型环境及类型相关辅助函数
  • 3.4.3 类型合法性规则及子类型规则
  • 3.4.4 常量类型规则
  • 3.4.5 表达式类型规则
  • 3.4.6 语句类型规则
  • 3.4.7 整个程序的类型规则
  • 3.5 动态语义
  • 3.5.1 语义定义基本要素
  • 3.5.2 表达式左值求值规则
  • 3.5.3 表达式右值求值规则
  • 3.5.4 语句语义规则
  • 3.6 类型系统可靠性证明
  • 3.7 应用实例
  • 3.8 本章小结
  • 4 基于类型的程序验证
  • 4.1 引言
  • 4.2 程序验证基础知识
  • 4.2.1 模型检验
  • 4.2.2 定理证明
  • 4.2.3 程序分析
  • 4.3 BOOGIE介绍
  • 4.4 基于类型的程序验证
  • 4.5 标准C语言类型检测过程
  • 4.5.1 类型的转换
  • 4.5.2 表达式的转换
  • 4.5.3 语句的转换
  • 4.5.4 声明语句及整个程序的转换
  • 4.5.5 转换示例
  • 4.6 基于BOOGIE的类型检测
  • 4.6.1 内存模型建模
  • 4.6.2 表达式语义转换
  • 4.6.3 表达式类型检测转换
  • 4.6.4 语句的转换
  • 4.6.5 函数调用语句转换
  • 4.6.6 变量声明语句转换
  • 4.6.7 函数声明语句转换
  • 4.6.8 整个程序的转换
  • 4.7 应用实例
  • 4.8 实验结果与分析
  • 4.8.1 实验基准数据集
  • 4.8.2 实验环境与方案
  • 4.8.3 实验结果
  • 4.9 本章小结
  • 5 总结与展望
  • 6 参考文献
  • 7 攻博期间发表的科研成果及参与的项目
  • 7.1 科研成果(论文、专著)
  • 7.2 项目
  • 致谢
  • 相关论文文献

    标签:;  ;  ;  ;  

    基于类型系统的程序验证方法研究
    下载Doc文档

    猜你喜欢