软件验证方法、装置、计算机设备和存储介质制造方法及图纸

技术编号:22329963 阅读:16 留言:0更新日期:2019-10-19 12:15
本申请涉及一种软件验证方法、装置、计算机设备和存储介质。所述方法包括:获取规约,其中,所述规约包括状态机规约和声明规约,所述状态机规约和所述声明规约按照预先定义的书写规则书写;将所述状态机规约转换为实现代码;通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求;通过验证器验证所述状态机规约是否满足所述声明规约的要求;若转换后的所述实现代码满足所述状态机规约的要求,且所述状态机规约满足所述声明规约的要求,则通过验证。采用本方法能够快速进行软件验证,提高软件验证效率,同时实现验证通用性。

Software verification methods, devices, computer equipment and storage media

【技术实现步骤摘要】
软件验证方法、装置、计算机设备和存储介质
本申请涉及信息处理
,特别是涉及一种软件验证方法、装置、计算机设备和存储介质。
技术介绍
随着互联网技术的发展,通过形式化验证的方式提前验证系统软件的正确性能够有效避免由于软件出现问题而导致整个系统崩溃。当前现有的形式化验证工具,基于一阶逻辑求解的形式化验证工具中,以SMT求解器的较多。传统的形式化验证方式主要包括模型检测和定理证明,模型检测方式是基于有限模型并检验该模型期望特性的验证技术,然而,模型检测方式无法直接验证代码本身,同时很难表达复杂的系统;定理证明方式是将系统及其特性均以某种数学逻辑公式表示的验证技术,然而,定理证明方式需要专业的数学定理知识以及定理证明器的支持,这种半自动化的验证工具不仅需要花费大量的人力来编写相关规约,而且对研发人员的门槛要求较高,需要专业人员设计和开发相关软件。
技术实现思路
基于此,有必要针对上述技术问题,提供一种能够快速进行软件验证,提高软件验证效率,同时实现验证通用性的软件验证方法、装置、计算机设备和存储介质。一种软件验证方法,所述方法包括:获取规约,其中,所述规约包括状态机规约和声明规约,所述状态机规约和所述声明规约按照预先定义的书写规则书写;将所述状态机规约转换为实现代码;通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求;通过验证器验证所述状态机规约是否满足所述声明规约的要求;若转换后的所述实现代码满足所述状态机规约的要求,且所述状态机规约满足所述声明规约的要求,则通过验证。在其中一个实施例中,所述状态机规约和所述声明规约按照预先定义的书写规则书写包括:所述状态机规约通过Python语言书写,所述状态机规约用于描述系统功能及系统接口的正确性;在所述状态机规约的基础上书写所述声明规约,所述声明规约用于描述系统属性及系统不变量信息;其中,所述状态机规约包括抽象状态机规约和状态转换规约;优选地,在Python语言的函数定义中增加返回值信息;将Python函数的第一个参数设置为系统状态空间的对象参数;通过预设符号对所述Python函数的其他参数的参数类型和参数名称进行分割。在其中一个实施例中,所述状态机规约通过Python语言书写包括:通过抽象状态模型描述所述状态机规约的状态空间,其中,所述抽象状态模型包括系统对外接口集合、状态机状态集合、输出集合、初始化状态以及操作转换;优选地,利用数据结构构建多种系统对象,其中,所述数据结构包括:数据类型、数据变量、系统对象类型以及状态机对象;根据所述多种系统对象构建所述抽象状态机规约;进一步优选地,设置至少一种前置条件,所述前置条件用于判断系统调用能否执行;若满足所述前置条件,则系统状态机由第一状态空间转换为第二状态空间。在其中一个实施例中,所述将所述状态机规约转换为实现代码包括:通过翻译器将所述状态机规约转换为初始C语言代码;对所述初始C语言代码进行人工修改,得到最终C语言代码;将所述最终C语言代码转换为编译系统的中间表示,并将所述中间表示作为系统能够识别的所述实现代码。在其中一个实施例中,所述通过翻译器将所述状态机规约转换为初始C语言代码包括:数据结构转换和函数转换,其中,所述数据结构转换包括将所述状态机规约中的内核对象转换为所述初始C语言代码中的struct结构体,其中,所述内核对象以类的方式描述;所述函数转换包括将所述状态机规约中的函数转换为Python语法树。在其中一个实施例中,所述方法还包括:若通过验证,则将所述中间表示编译为系统镜像;优选地,所述方法还包括:遍历已知的抽象语法树,收集相关信息并对所述相关信息进行分类;根据所述抽象语法树的结构以及预先定义的语法转换规则,将所述抽象语法树转换为符合C语言语义规范的形式,得到所述Python语法树;根据所述Python语法树进行函数的内部转换,包括所述类函数的转换、状态空间变量的删除以及引用指针的转换;将所述Python语法树转换成所述初始C语言代码。在其中一个实施例中,所述通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求包括:将转换后的所述实现代码分别输入求解器和符号执行引擎中,依次通过所述求解器和所述符号执行引擎对转换后的所述实现代码进行求解,验证转换后的所述实现代码是否满足所述状态机规约的要求;优选地,分别获取所述状态机规约和所述实现代码的状态空间;获取系统与所述状态机规约之间的对等函数;将所述状态机规约的状态空间、所述实现代码的状态空间以及所述对等函数按照满足一阶逻辑的方式提供给求解器进行求解,得到求解结果;根据所述求解结果判断所述实现代码是否满足所述状态机规约的要求;进一步优选地,所述通过验证器验证所述状态机规约是否满足所述声明规约的要求包括:将所述状态机规约通过所述符号执行引擎获取所述状态空间,其中,所述状态空间通过一阶逻辑表达式表示,将按照一阶逻辑表达式表示的所述状态空间与所述声明规约同时输入求解器中进行求解,验证所述状态机规约是否满足所述声明规约的要求。一种软件验证装置,所述装置包括:规约获取模块,用于获取规约,其中,所述规约包括状态机规约和声明规约,所述状态机规约和所述声明规约按照预先定义的书写规则书写;转换模块,用于将所述状态机规约转换为实现代码;第一验证模块,用于通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求;第二验证模块,用于通过验证器验证所述状态机规约是否满足所述声明规约的要求;判断模块,用于若转换后的所述实现代码满足所述状态机规约的要求,且所述状态机规约满足所述声明规约的要求,则通过验证。一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:获取规约,其中,所述规约包括状态机规约和声明规约,所述状态机规约和所述声明规约按照预先定义的书写规则书写;将所述状态机规约转换为实现代码;通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求;通过验证器验证所述状态机规约是否满足所述声明规约的要求;若转换后的所述实现代码满足所述状态机规约的要求,且所述状态机规约满足所述声明规约的要求,则通过验证。一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:获取规约,其中,所述规约包括状态机规约和声明规约,所述状态机规约和所述声明规约按照预先定义的书写规则书写;将所述状态机规约转换为实现代码;通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求;通过验证器验证所述状态机规约是否满足所述声明规约的要求;若转换后的所述实现代码满足所述状态机规约的要求,且所述状态机规约满足所述声明规约的要求,则通过验证。上述软件验证方法、装置、计算机设备和存储介质,通过获取按照预先定义的书写规则书写的状态机规约和声明规约,并将该状态机规约转换为实现代码输入验证器中进行验证输入验证器中进行验证,若转换后的实现代码满足状态机规约的要求,且状态机规约满足声明规约的要求,则通过验证。从而达到快速验证软件及函数正确性的目的。附图说明图1为一个实施例中软件验证方法的形式化验证框架图;图2为一个实施例中软件验证方法的流程示意图;图3为一个实施例中状态机规约转换步骤的流程示意图;图4为另一个实本文档来自技高网...

【技术保护点】
1.一种软件验证方法,其特征在于,所述方法包括:获取规约,其中,所述规约包括状态机规约和声明规约,所述状态机规约和所述声明规约按照预先定义的书写规则书写;将所述状态机规约转换为实现代码;通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求;通过验证器验证所述状态机规约是否满足所述声明规约的要求;若转换后的所述实现代码满足所述状态机规约的要求,且所述状态机规约满足所述声明规约的要求,则通过验证。

【技术特征摘要】
1.一种软件验证方法,其特征在于,所述方法包括:获取规约,其中,所述规约包括状态机规约和声明规约,所述状态机规约和所述声明规约按照预先定义的书写规则书写;将所述状态机规约转换为实现代码;通过验证器验证转换后的所述实现代码是否满足所述状态机规约的要求;通过验证器验证所述状态机规约是否满足所述声明规约的要求;若转换后的所述实现代码满足所述状态机规约的要求,且所述状态机规约满足所述声明规约的要求,则通过验证。2.根据权利要求1所述的方法,其特征在于,所述状态机规约和所述声明规约按照预先定义的书写规则书写包括:所述状态机规约通过Python语言书写,所述状态机规约用于描述系统功能及系统接口的正确性;在所述状态机规约的基础上书写所述声明规约,所述声明规约用于描述系统属性及系统不变量信息;其中,所述状态机规约包括抽象状态机规约和状态转换规约;优选地,在Python语言的函数定义中增加返回值信息;将Python函数的第一个参数设置为系统状态空间的对象参数;通过预设符号对所述Python函数的其他参数的参数类型和参数名称进行分割。3.根据权利要求2所述的方法,其特征在于,所述状态机规约通过Python语言书写包括:通过抽象状态模型描述所述状态机规约的状态空间,其中,所述抽象状态模型包括系统对外接口集合、状态机状态集合、输出集合、初始化状态以及操作转换;优选地,利用数据结构构建多种系统对象,其中,所述数据结构包括:数据类型、数据变量、系统对象类型以及状态机对象;根据所述多种系统对象构建所述抽象状态机规约;进一步优选地,设置至少一种前置条件,所述前置条件用于判断系统调用能否执行;若满足所述前置条件,则系统状态机由第一状态空间转换为第二状态空间。4.根据权利要求1所述的方法,其特征在于,所述将所述状态机规约转换为实现代码包括:通过翻译器将所述状态机规约转换为初始C语言代码;对所述初始C语言代码进行人工修改,得到最终C语言代码;将所述最终C语言代码转换为编译系统的中间表示,并将所述中间表示作为系统能够识别的所述实现代码。5.根据权利要求4所述的方法,其特征在于,所述通过翻译器将所述状态机规约转换为初始C语言代码包括:数据结构转换和函数转换,其中,所述数据结构转换包括将所述状态机规约中的内核对象转换为所述初始C语言代码中的struct结构体,其中,所述内核对象以类的方式描述;所述函数转换包括将所述状态机规约中的函数转换为Python语法树。6.根据权利要求5所述的方法,其...

【专利技术属性】
技术研发人员:张强周博
申请(专利权)人:北京谦川科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1