基于形式化验证的软件开发模型的验证方法与流程

文档序号:17987826发布日期:2019-06-22 00:32阅读:839来源:国知局
基于形式化验证的软件开发模型的验证方法与流程

本发明涉及形式化验证领域,具体涉及软件开发模型的验证方法。



背景技术:

软件开发模型是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。

最早出现的软件开发模型是1970年w·royce提出的瀑布模型。瀑布模型给出了固定的顺序,将生存期活动从上一个阶段向下一个阶段逐级过渡,如同流水下泻,最终得到所开发的软件产品,投入使用。瀑布模型划分为计划、需求分析、设计、编码、测试、运行/维护阶段,其中计划属于定义阶段的活动,需求分析、设计、编码、测试属于开发阶段的活动,运行、维护属于维护阶段得到活动,瀑布模型适用于需求固定的软件开发过程,它为项目提供了按阶段划分的检查点,当前一阶段完成后,只需要关注后续阶段。

瀑布模型之后出现了快速原型模型软件开发模型。常见的软件开发模型还有演化模型、螺旋模型、喷泉模型、智能模型等。不同的软件模型适合于不同的情况,开发过程根据现有情况来分析需要采用哪种软件开发模型。

近年来,随着硬件成本的降低和处理器等设备的微型化,嵌入式设备在人们生产生活中日益普及。软件开发模型如何保障开发软件的安全性和可靠性成为人们关注的重点,特别在一些关键领域,如航天、医疗、军事、核能等,如果嵌入式软件存在程序漏洞,导致程序非正常状态运行,这往往会带来灾难性的后果。为了解决这些问题,无数资金和人力被投入到软件安全的研究中,推动着相关领域的发展。

传统的软件开发模型如图3所示,都是通过软件测试方法,保证软件安全性、可靠性或是其他一些性质。软件测试通过代码覆盖率这个指标衡量测试效果。现代一些大型程序有着数百万行的代码,软件测试并不能完全覆盖所有路径,只能对一些执行频率高的重点路径进行测试,未覆盖到的路径往往是安全隐患所在。因此,软件测试只能发现错误,并不能完整保证软件的安全性和正确性。随着软件规模的提高,软件更新速度的加快,软件测试所耗费的人力物力也与日俱增。与软件测试通过实例去发现问题所在,程序验证探寻一条数理逻辑为基础的道路。程序验证克服了软件测试无法证明整个系统不存在缺陷的问题,同时能够证明程序符合一定性质,从而保证软件的可靠性,所以本发明构建基于形式化验证的软件开发模型来为软件开发模型引入形式化验证环节提供思路。

现有技术的缺点:

1)目前的各类型软件开发模型都没有引入形式化验证环节;

2)现代一些大型程序有着数百万行的代码,软件测试并不能完全覆盖所有路径,只能对一些执行频率高的重点路径进行测试,未覆盖到的路径往往是安全隐患所在;

3)高安全领域,如航天、医疗、军事、核能等,需要更可靠的技术方案来尽可能地保障软件的安全可靠,解决软件在非正常状态下的运行出现的问题;

4)嵌入式软件存在系统漏洞导致程序在非正常状态运行的问题的解决方案,需要借助形式化验证技术来实现。

目前,没有具体关于形式化验证如何与软件开发过程进行配合的验证模型。



技术实现要素:

为了克服现有技术的不足,本发明提供一种基于形式化验证的软件开发模型的验证方法,本发明的目的是将形式化验证与软件开发过程结合起来,提高软件的高可信程度,从逻辑上保障开发软件的可靠性;发挥形式化验证在软件检错领域的对于软件开发过程中开发逻辑进行验证的作用;降低程序在非正常状态运行的可能性。

本发明解决其技术问题所采用的技术方案的详细步骤如下:

步骤1:在需求验证时,进入步骤2,进行程序正确性验证时,进入步骤3;

步骤2:需求验证;

根据需求分析进行形式化需求模型的建立,并使用该模型对软件的需求进行符合性验证,构建形式化需求模型并进行验证的步骤如下:

(1)使用event-b形式化方法描述软件需求,建立软件的event-b软件系统抽象模型,event-b软件系统抽象模型包含静态部分和动态部分,分别用context和machine进行描述(machine也称为model),静态部分代表软件系统的静态属性,动态部分代表软件系统的行为属性;

(2)通过逐步精化的方式向抽象模型中添加属性和功能,达到扩展和丰富模型的目的,其中,event-b模型精化方式包括单一事件精化、合并精化、添加新事件精化和状态精化,在精化过程中要确保精化后的模型无死锁性;

(3)使用rodin平台对event-b软件系统抽象模型进行验证,模型验证是检验软件系统模型正确性的唯一手段,使用event-b形式化方法建立模型的过程生成要证明的义务,证明义务由rodin平台的工具自动生成的,所述工具为证明义务生成器,证明义务生成器对context和machine进行静态文本检查;决定证明目标,并产生相继式,相继式被转送给证明器,rodin平台默认安装newpp证明器;

(4)使用证明器对证明义务进行自动证明或者交互证明,完成需求模型的验证;

步骤3:程序正确性验证的总体步骤如下:

搭建软件逻辑正确性验证框架,建立具体抽象机器模型,在该框架下对程序正确性进行验证;使用定理证明工具coq进行验证,通过函数的逻辑验证,及时发现软件开发过程中的逻辑错误,具体步骤如下:

步骤3.1:根据在coq中归纳抽象语法树将c语言写的代码转化为coq语言的代码;

步骤3.2:对每一个内部函数书写规范,首先每个内部函数均有一个对应的规范,一个基本的函数规范包含该函数前条件和后条件,通过书写规范分别提供函数的前断言和函数的后断言中的前条件和后条件;

步骤3.3:构造程序语句推理规则,采用csl-r和并发分离逻辑风格的推理方式将程序语句推理规则写成如下格式:

其中,γ表示函数当前的上下文,i描述共享资源,前后断言描述局部资源,ρ表示前断言,ρ表示后断言;其中,函数前断言包含函数规范中的前条件、函数形参和局部变量;后断言包含函数规范中的后条件、函数形参和局部变量,s表示步骤3.1中转化为coq语言的程序,即需要进行正确性推理的程序;

步骤3.4:使用证明策略对构造程序语句推理规则进行推理验证。

所述步骤3的程序正确性验证可与编码与调试同阶段进行。

本发明的有益效果在于将形式化验证的技术引入到软件开发过程中有如下优点:

(1)提高软件的高可信程度,从逻辑上保障开发软件的可靠性;

(2)在需求阶段进行验证,可以避免因为软件需求分析不合理导致重新开发的严重后果;

(3)及时发挥形式化验证在软件检错领域的对于软件开发过程中函数逻辑正确性进行验证的作用;

(4)将形式化方法引入软件开发过程,并给出具体的模型,解决了测试技术在软件检错领域的局限性问题;

(5)将形式化验证技术与软件开发过程结合起来,是未来高可信要求高的行业的趋势。

附图说明

图1是本发明的基于形式化验证的软件开发模型示意图。

图2是本发明的程序正确性推理流程图。

图3是传统软件开发模型示意图。

图4是本发明的优化后的基于形式化验证的软件开发模型示意图。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

本发明解决其技术问题所采用的技术方案的详细步骤如下:

步骤1:在需求验证时,进入步骤2,进行程序正确性验证时,进入步骤3;

步骤2:需求验证;

根据需求分析进行形式化需求模型的建立,并使用该模型对软件的需求进行符合性验证,构建形式化需求模型并进行验证的步骤如下:

(1)使用event-b形式化方法描述软件需求,建立软件的event-b软件系统抽象模型,event-b软件系统抽象模型包含静态部分和动态部分,分别用context和machine进行描述(machine也称为model),静态部分代表软件系统的静态属性,动态部分代表软件系统的行为属性;

(2)通过逐步精化的方式向抽象模型中添加属性和功能,达到扩展和丰富模型的目的,其中,event-b模型精化方式包括单一事件精化、合并精化、添加新事件精化和状态精化,在精化过程中要确保精化后的模型无死锁性;

(3)使用rodin平台对event-b软件系统抽象模型进行验证,模型验证是检验软件系统模型正确性的唯一手段,使用event-b形式化方法建立模型的过程生成要证明的义务,证明义务由rodin平台的工具自动生成的,所述工具为证明义务生成器,证明义务生成器的作用有三方面:第一,对context和machine进行静态文本检查;第二,决定证明目标;第三,证明义务生成器产生各种各样的相继式,相继式被转送给证明器,rodin平台默认安装newpp证明器;

(4)使用证明器对证明义务进行自动证明或者交互证明,通过这样的方式完成需求模型的验证;

步骤3:程序正确性验证的总体步骤如下:

搭建软件逻辑正确性验证框架,建立具体抽象机器模型,在该框架下对程序正确性进行验证,本发明介绍一种对c语言开发的软程序正确性验证的方法,搭建软件逻辑正确性验证框架可直接使用c语言验证开源框架;

进行函数的逻辑正确性验证其流程如图2所示,使用定理证明工具coq进行验证,通过函数的逻辑验证,及时发现软件开发过程中的逻辑错误,具体步骤如下:

步骤3.1:根据在coq中归纳抽象语法树将c语言写的代码转化为coq语言的代码;

步骤3.2:对每一个内部函数书写规范,首先每个内部函数均有一个对应的规范,一个基本的函数规范包含该函数前条件和后条件,通过书写规范分别提供函数的前断言和函数的后断言中的前条件和后条件;

步骤3.3:构造程序语句推理规则,采用csl-r和并发分离逻辑风格的推理方式将程序语句推理规则写成如下格式:

其中,γ表示函数当前的上下文,i描述共享资源,前后断言描述局部资源,p表示前断言,ρ表示后断言;其中,函数前断言包含函数规范中的前条件、函数形参和局部变量;后断言包含函数规范中的后条件、函数形参和局部变量,s表示步骤3.1中转化为coq语言的程序,即需要进行正确性推理的程序;

步骤3.4:使用证明策略对构造程序语句推理规则进行推理验证。

所述步骤3的程序正确性验证可与编码与调试同阶段进行。

本发明将形式化验证引入传统软件开发模型,主要包含两种形式化验证,第一种是对需求进行验证,第二种是程序正确性验证。目前传统的模型为图3,将形式化验证引入传统软件开发模型如图1,各个阶段按照顺序执行。针对于专利提出的模型,本专利提供两形式化验证的具体实施步骤。在实际开发过程,我们再次改良了基于形式化验证的软件开发模型如图4所示,改良地方在于:可以将程序正确性验证和程序开发同阶段进行,不用等到所有开发工作进行完成后再进行形式化地验证程序正确性,从而提高形式化验证程序正确性的效率。

本发明提出一个基于形式化验证的软件开发模型,具体如图1所示,在软件开发过程中引入需求验证和程序正确性验证,各个阶段按照顺序执行。在需求验证和程序正确性验证的方法也分别提供了主流的方式,但本发明提出的模型中的方法并不限于这两种方法。本发明同时提出优化版本的基于形式化验证的软件开发模型如图4,具体优化表现在,程序正确性验证可与编码与调试同阶段进行,这样能够提高程序正确性验证的效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1