关于形式化方法与软件可靠性

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

形式化方法与软件可靠性

作者:郭洋

摘要:形式化方法是一种基于数学的表示方法。它能帮助发现其它方法不容易发现的系统描述的不一致,不明确或不完整,有助于增加软件开发人员对系统的理解,因此形式化表示方法是提高软件系统,特别是提高安全苛刻系统的安全性与可靠性的重要手段。软件测试作为提高软件可靠性的一种形式化方法,在不同层次不同阶段可采取不同的方式方法。测试覆盖准则是判断测试充分性的重要手段。

关键词:形式化方法;软件;可靠性;软件测试;测试覆盖

形式化表示方法的出发点是数学逻辑方法。其目的是开发可靠的软件产品。以目前常用软件开发方法为出发点,主要研究怎样将这些方法形式化,使软件系统的描述更精确化,以减少可能的误解所带来的问题;或以目前常用的软件开发过程为出发点,研究怎样在软件开发过程中增加一些形式化方法的应用,以提高软件的可靠性。

1 什么是形式化方法

形式化方法是描述系统性质的基于数学的技术。这样的形式化方法提供了一个框架,人们可以在框架中以系统的而不是特别的方式刻划、开发和验证系统。如果一个方法有良好的数学基础,那么它是形式化的,典型地以形式化规约语言给出的。这个基础提供一系列精确定义的概念,如一致性和完整性,以及更进一

步,定义规约、实现和正确性。

形式化方法的一个重要研究内容是形式规约,它是对程序“做什么”的数学描述,是用具有精确语义的形式语言书写的程序功能描述,它是设计和编制程序的出发点,也是验证程序是否正确的依据。对形式规约通常要讨论其一致性和完备性等性质。形式规约的方法主要可分为两类:一类是面向模型的方法也称为系统建模,该方法通过构造系统的计算模型来刻画系统的不同行为特征;另一类是面向性质的方法也称为性质描述,该方法通过定义系统必须满足的一些性质来描述一个系统。不同的形式规约方法要求不同的形式规约语言,即用于书写形式规约的语言,如代数语言One/Two等;进程代数语言;时序逻辑语言等;这些规约语言由于基于不同的数学理论及规约方法,因而也千差万别,但它们有一个共同的特点,即每种规约语言均由基本成分和构造成分两部分构成。前者用来描述基本规约,后者把基本部分组合成大规约。构造成分是形式规约研究和设计的重点,也是衡量规约语言优劣的主要依据。

形式化方法的分类:(1)根据说明目标软件系统的方式,形式化方法可以分为面向模型的形式化方法和面向属性的形式化方法。(2)根据表达能力,形式化方法可以划分为基于模型的方法、基于逻辑的方法、代数方法、过程代数方法、基于网络的方法。

2 软件可靠性的定义

软件可靠性是软件系统固有特性之一,它表明了一个软件系统按照用户的要求和设计的目标,执行其功能的正确程度。软件可靠性与软件缺陷有关,也与系统输入和系统使用有关。理论上说,可靠的软件系统应该是正确、完整、一致和健壮的。但是实际上任何软件都不可能达到百分之百的正确,而且也无法精确度

量。一般情况下,只能通过对软件系统进行测试来度量其可靠性。软件可靠性给出如下定义:“软件可靠性是软件系统在规定的时间内及规定的环境条件下,完成规定功能的能力”。根据这个定义,软件可靠性包含了以下三个要素:(1)规定的时间:软件可靠性只是体现在其运行阶段,所以将“运行时间”作为“规定的时间”的度量。“运行时间”包括软件系统运行后工作与挂起的累计时间。由于软件运行的环境与程序路径选取的随机性,软件的失效为随机事件,所以运行时间属于随机变量。

(2)规定的环境条件:环境条件指软件的运行环境。它涉及软件系统运行时所需的各种支持要素。不同的环境条件下软件的可靠性是不同的。

(3)规定的功能:软件可靠性还与规定的任务和功能有关。由于要完成的任务不同,软件的运行剖面会有所区别,则调用的子模块就不同,其可靠性也就可能不同。所以要准确度量软件系统的可靠性必须首先明确它的任务和功能。

3 形式化方法与软件可靠性的关系

随着软件的广泛应用,特别是软件在尖端领域的应用,软件可靠性成为一个非常重要的问题。软件的可靠取决于两个方面,一个是软件产品的测试与验证,另一个是软件开发的方法与过程。对简单的软件开发,应该是先有对软件的需求,然后对软件进行设计,然后是编写程序,最后是对程序进行测试。对复杂的软件系统,总的过程基本还是这样,只是各个阶段也相应复杂一些。形式化表示方法在软件开发中能够起到的作用是多方面的:

(1)首先是对软件要求的描述。软件要求的描述是软件开发的基础。比如说一般非形式化的描述很可能导致描述的不明确和不一致。如果描述的不明确和不一致导致设计,编程的错误,将来的修改所要付出的代价就非常大了。如果导

致的错误没有被发现,则影响程序的可靠和使用。形式化方法则要求描述的明确性,而描述的不一致性也就相对易于发现。

(2)其次是对软件设计的描述。软件设计的描述和软件要求的描述一样重要。形式化方法的优点对于软件要求的描述同样适用于软件设计的描述。另外由于有了软件要求的形式化描述,我们可以检验软件的设计是否满足软件的要求。对于编程来讲,我们可以考虑自动代码生成。对于一些简单的系统,形式化的描述有可能直接转换成可执行程序,这就简化了软件开发过程,节约了资源和减少了出错的可能性。

(3)另外,形式化方法可以用于程序的验证,以保证程序的正确性。对于测试来讲,形式化方法可用于测试用例的自动生成,这可以节约许多时间和在一定程度上保证测试用例的覆盖率。

形式化方法的意义在于它能帮助发现其它方法不容易发现的系统描述的不

一致,不明确或不完整,有助于增加软件开发人员对系统的理解,因此形式化方法是提高软件系统,特别是安全苛刻系统的安全性与可靠性的重要手段。

早期形式化方法在软件验证的应用是串行程序的验证,后来随着软件研究和应用的发展,逐渐多样化。近年来,由于认识到形式化方法重视的是严谨性,逐渐有许多结合图形化软件方法、面向对象方法和形式化方法的工作。对于复杂的软件系统的验证,最好是能够结合多种方法的使用。这些方法对提高软件可靠性的探索和应用都极为重要。

4 软件测试

软件测试作为软件可靠性保障的重要手段,本身就是一种形式化方法。测试是基于给定的准则对系统的执行进行抽样的一个过程。测试过程将系统的每次执

相关文档
最新文档