软件代码的自动开发的制作方法

文档序号:6422701阅读:138来源:国知局
专利名称:软件代码的自动开发的制作方法
技术领域
本发明涉及基于软件的代码开发方面的方法及其实现,例如,该方法可以用于诸如航空电子设备的系统的控制。
背景技术
这些年来,随着为了提供更加复杂的控制操作而对软件的依赖的增长,在硬件中控制功能的基于软件的实现变得越来越复杂。这导致了要开发非常大量的软件代码,以备复杂的控制操作之用。
一个这样的示例是,开发用于诸如Eurofighter的现代战斗机的航空电子设备系统内的实现的软件代码。这种飞行器的性能特性在于其运行在空气动力学非稳定的状态下。这需要大量极端复杂的计算机软件的帮助。这种软件的开发和认证可能是非常耗时的过程。就Eurofighter而言,飞行控制系统已经开发了12年以上。已知的是,包括用于安全关键系统的软件在内,没有软件可以被绝对地证实为没有差错或故障。过去已经发生的基于陆、海和空实时和非实时系统的众多的引人关注的失败证实了这一结论。因此,这就需要广泛的认证过程,以确定软件在所有情况下都以所期望的方式运行。当初始开发软件时,以及随后对软件或软件运行其中的系统进行修改的任何时候,都需要这种认证。这有助于确保软件的运行方式被认证为是正确的。
对软件的需求从系统规范导出。一旦软件需求已被最终确定,就可以将规范写为软件需求的数学描述。然后开发软件代码以准确地反映所述规范。尤其是对于安全关键软件,这是通常由手工完成的非常辛苦的过程。这是开发任何软件的非常低效的方法。
大约20年前,出现了一种称作形式方法(EM)的软件开发的数学方法,其是用于确保软件代码将准确地反映规范的潜在方法。FM使用了写为数学描述的形式规范。从这种形式规范可以通过各种数学技术来产生精确地实现所述形式规范的软件代码。这种数学技术可以经受证明——一种称作验证的技术。不过,由于FM非常难于理解,FM尚未开发成广泛可用的格式,还主要在学术界使用。FM使用了非常难理解的数学分支,这可能导致了人们不愿使用,从而没能获得更广泛的认可。尤其是,提供证明是非常费力、耗时并且极端需要技巧的过程。此外,FM即使对于小的应用程序都是笨拙的,并且由于缺少从业者而受到阻碍,这进而使得它的实施成本昂贵。
上面的后果就是厂商明显不愿利用软件来实现安全关键过程。不过,在过去的几年中,在自动化软件开发领域中工作有所进展。尤其是,Malvern,Worcs,England的Defence Evaluation&Research Agency(DERA)已经开发了用于自动推导形式验证的飞行控制规则代码的工具。该方法被用于验证Eurofighter的飞行控制系统代码。它通过使用现有的商业软件包生成Simulink模型来运行。Simulink形成了称作MATLAB的商业软件包的部分,MATLAB是MathWorks Inc.的产品。Simulink模型是软件需求的数学描述。Simulink自动地生成SPARK Ada代码,SPARK Ada是计算机编程语言。Simulink模型还由称作ClawZ的工具使用,以自动地用称作“Z”的数学语言生成形式规范。ClawZ是由DERA开发的工具,其用于在Simulink模型与“Z”之间对控制规则模型的表达式进行翻译。接着对采用“Z”和SPARK Ada的形式规范进行比较,按照要求改变SPARKAda,以使用ProofPower内的一致标记工具构建一致变量;这是自动完成的。ProofPower是Lemma 1 Ltd的产品。一致标记工具接着生成修改过的SPARK Ada作为可编辑的文件和验证条件(VC)。通过使用ProofPower的定理证明器部分,就可以对VC是数学上“真”进行软件工具辅助的数学证明。这进而证实了修改过的SPARK Ada代码是形式规范的正确描述,因此也是Simulink模型的正确描述,或者相反。很多证明工作都是自动进行的。
与上述独立地,还有一些工作是利用基于状态的建模来开发商业软件包,状态模型根据软件需求来开发。
状态模型的概念最好通过示例来解释;这里所选的示例是飞行器的喷气发动机上的推力反向器的示例。推力反向器的状态模型将利用对应的“规则”列表对推力反向器可能占用的每个“状态”进行建模[例如,状态1未工作;状态2部分工作;状态3完全工作],所述“规则”控制着每个状态内的许可动作和每个状态间的过渡。同样的原理还可应用于软件代码的开发和操作。

发明内容
因此,提供了一种用于根据需求生成验证的软件代码的方法,该方法包括以下步骤i.使用软件以生成需求的状态模型,ii.使用状态模型开发该状态模型的软件代码描述和该状态模型的数学描述,iii.对软件代码描述和数学描述进行比较,以验证软件代码描述是所述数学描述的正确实现。
当开发系统包括多个、同时激活并且彼此交互的组件时,可能发生诸如活锁(live-lock)和死锁(dead-lock)的差错。这些差错可能导致较差的性能、不可预测的行为和系统失效。为了避免这些问题,可以使用一种称作模型检查(Model Checking)的技术,模型检查是用于形式地验证有限状态并发系统的技术。因此,上述方法可以包括附加的步骤执行模型检查以证明没有诸如死锁和活锁的状态相关差错。
该方法使得可以通过使用基于状态的建模来自动进行软件代码的开发。尽管这尤其在安全关键软件的领域中有用,但没有理由说它不能应用于任何软件的开发。与使用现有方法(例如FM)的情况相比,通过使开发可以在大大缩短的时间范围内完成,这将导致软件开发成本可观的节省。这对于减少设备的终身成本而言也有特殊的价值,因为任何改变都可在需求级上进行,并且剩余工作的大部分都是自动进行的。尤其是,该方法在航空电子设备系统领域中有用。因此,可以使用该方法,以便所产生的验证的软件代码是软件控制代码。
可以使用合适的商业软件包(诸如Stateflow)来开发状态模型。Stateflow是Mathworks Inc.的产品。可以使用能够适应并行程序设计需求的语言的自动生成的安全子集(例如Ravenscar profile for Ada(现在称作“RavenSPARK”))或者某种其他的类似方法来开发状态模型的软件代码描述。可以使用诸如“Circus”的自动生成的形式语言或某种其他可比的形式语言来开发状态模型的数学描述。“Circus”本质上是结合了两种其他的形式语言的语言,即Communicating SequentialProcesses(CSP)和“Z”。可以使用诸如FDR(Failures-DivergenceRefinement)的工具进行模型检查。
根据本发明的进一步的实施例,提供了一种用于生成验证的软件代码的方法,该方法包括以下步骤i.开发需求声明,ii.根据需求声明使用软件以生成状态模型,iii.根据状态模型用数学描述开发形式规范,iv.使用状态模型开发表达该状态模型的软件代码,v.使用数学描述和所开发的软件代码来构建一致变量,以提供验证条件,vi.如果在数学描述与所开发的软件代码之间存在不同,则生成新的软件代码。
vii.取出验证条件,以证明新的软件代码是数学描述的正确描述,因此也是需求声明的正确描述。
上面的方法可以包括附加的步骤对所述形式规范执行模型检查。
本发明被认为在航空电子设备系统领域中具有特殊的价值,尤其是通过按Advanced Avionics Architectures(AAA)(高级航空电子设备体系)来实现后。AAA的原则是从分立的系统中去除公共的功能,然后将这些公共功能实现在“共有”资源上。这使得诸如飞行控制、武器控制和传感(例如雷达)的不同系统可以共享公共的资源。AAA系统具有固有的冗余度,这使得系统可以重新配置其自身以妥善处理多个硬件组件的失效,同时保持功能。不过,提供了拥有这种冗余度的AAA的特征使底层软件的认证非常困难。AAA的主要驱动力是军用硬件组件的缺乏。因此,必须使用行业现成的(COTS)组件。使用基于COTS的可重配置航空电子设备系统的成本收益是它们易于升级,具有由此带来的长期益处。不过,给这种系统提供功能的软件必须是独立于平台(微处理器)的,并且软件设计尽可能自动进行并可容易地认证。它还采用了开放系统方法,因此可以很广泛地应用。本发明具有如下的目的,即,生成按照每个实例中的规范可以认证的软件代码。其他方法具有不可认证的高风险,会浪费开发等所致的成本。本发明使系统设计人员可以对设计进行大量的复用,而在实现用于每个复用的认证系统中只用了很小的成本。这对于在用的安全关键软件尤其有用,其在过去已花了极高的代价修改。利用本发明,任何修改都是相对简单的,因为它是自动进行的,并且结果是可认证的。这对于升级也具有重要的意义,其可能需要在运行至关重要的时间进行。这在战斗期间的军用设备(例如,战斗机航空电子设备)的升级领域中尤其是正确的。不过,本发明在其他领域中也是有价值的,例如在产品召回极端昂贵的汽车工业中。


下面参照附图,仅通过示例来说明本发明,图中图1示出以软件实现的高级航空电子设备体系(AAA)的示意性示例,图2示意性地示出在开发认证的软件控制代码中使用的已知方法,即,传统的基于ClawZ的方法,图3示意性地示出在开发认证的软件控制代码中使用的本发明的方法,即使用基于状态的建模,和图4示意性地示出当本发明可以应用于AAA时的应用的概貌。
具体实施例方式
可以将如图1中所示的AAA内的软件看作三个分立的部分。它们包括由虚线所示的实时操作系统层(1),由虚线所示的应用层软件(2),和AAA控制软件(3)。操作系统层(1)包括操作系统(1a)。应用层软件(2)包括大量的功能应用程序(4)。操作系统层(1)和应用层软件(2)通过AAA控制软件(3)链接在一起,AAA控制软件(3)包括与应用层软件(2)相关联的应用管理代码(5)和与操作系统层(1)相关联的一般系统管理软件(6)。这三个部分全由底板支持层(7)和处理器(8)支持。
为了认证AAA软件,必须对三个部分中的每一部分进行认证。AAA的关键是平台独立性。因此,重要的是三个部分要尽可能与处理器(8)隔离。AAA控制软件(3)根据需要分配资源优先级,并且在硬件失效时为处理器重新指定功能。它通常是根据预编码算法的“if-then-else”函数和优先级。这导致对与应用层软件(2)的认证的困难,因为在不破坏AAA的主要优点的情况下不能隔离上述函数。这使对AAA控制代码软件和应用软件的认证本身就难以实现。
如图2所示,使用专家软件的已知方法使得可以生成已开发的应用层软件(2)的Simulink模型(9)。接着可以使用该模型来自动地生成Simulink模型(9)的采用SPARK Ada的软件代码描述(10)和采用ClawZ“Z”文件形式的数学描述(11)。然后比较软件代码描述(10)与ClawZ“Z”文件(11),以构建ProofPower中的一致变量,并生成由(12)所示的验证条件。如果验证了ClawZ“Z”文件(11)和软件代码描述(10)一致,那么取出(13)提供所需的认证的验证条件。
图3所示本发明的方法示出通过将控制系统的需求输入到合适的软件包,例如Stateflow,就可以直接发展出状态模型(14)。接着使用该状态模型(14)来为CSP/Z文件(15)的自动生成提供输入,CSP/Z文件(15)是状态模型(14)的数学描述。状态模型(14)还用于为RavenSPARKAda软件控制代码(16)的自动生成作准备。使用CSP/Z文件(15)和软件控制代码(16)来构建ProofPower中的一致变量,其将生成由(17)所示的验证条件。如果验证了CSP/Z文件(15)和软件控制代码(16)一致,那么取出(18)提供所需认证依据的验证条件。最后,模型检查(未示出)将显示是否还有任何状态相关的差错。
图4示意性地示出可以使用AAA(19)来生成用于飞行控制系统(21)、武器控制系统(22)和公用设施控制系统(23)的Stateflow输入(20)。然后可以容易地将飞行控制系统(21)转换成ClawZ文件(24)。武器控制系统(22)和公用设施控制系统(23)被示出分别具有Stateflow输出25和26。
权利要求
1.一种用于按照需求生成验证的软件代码的方法,该方法包括以下步骤i.使用软件生成所述需求的状态模型,ii.使用所述状态模型开发该状态模型的软件代码描述和该状态模型的数学描述,iii.对所述软件代码描述和所述数学描述进行比较,以验证所述软件代码描述是所述数学描述的正确实现。
2.根据权利要求1的方法,其中,该方法包括附加步骤执行模型检查以证明没有诸如死锁和活锁的状态相关差错。
3.根据权利要求1或2的方法,其中,用于生成所述需求的状态模型的软件是Stateflow。
4.根据权利要求1至3中的任何一项的方法,其中,所述状态模型的软件代码描述利用RavenSPARK Ada来产生。
5.根据权利要求1至4中的任何一项的方法,其中,所述状态模型的数学描述利用“Circus”或某种其他的可比形式语言来产生。
6.根据前述权利要求中的任何一项,其中,所产生的验证软件代码是软件控制代码。
7.一种用于生成验证的软件代码的方法,该方法包括以下步骤i.开发需求声明,ii.根据所述需求声明使用软件生成状态模型,iii.根据所述状态模型用数学描述开发形式规范,iv.使用所述状态模型开发表达该状态模型的软件代码,v.使用所述数学描述和所开发的软件代码来构建一致变量,以提供验证条件,vi.如果在所述数学描述与所开发的软件代码之间存在不同,则生成新的软件代码,vii.取出验证条件,以证明所述新的软件代码是所述数学描述的正确描述,因此也是所述需求声明的正确描述。
8.根据权利要求7所述的方法,其中,该方法包括附加的步骤对所述形式规范执行模型检查。
9.根据权利要求1至8中的任何一项生成的验证的软件代码。
全文摘要
开发验证的软件代码是非常费力的过程,也是重要的,尤其是对于考虑安全关键应用程序的情况而言。提供了一种用于按照需求生成验证的软件代码的方法,该方法包括以下步骤i.使用软件生成所述需求的状态模型,ii.使用所述状态模型开发该状态模型的软件代码描述和该状态模型的数学描述,iii.对所述软件代码和所述数学描述进行比较,以验证所述软件代码描述是所述数学描述的正确实现。
文档编号G06F9/44GK1531681SQ02811465
公开日2004年9月22日 申请日期2002年6月6日 优先权日2001年6月8日
发明者尼古拉斯·詹姆士·都铎, 尼古拉斯 詹姆士 都铎 申请人:英国国防部
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1