[软件工程] 形式化说明技术

形式化说明技术

  • 一、概述
    • (一) 非形式化方法的缺点
    • (二) 形式化方法的优点
    • (三) 应用形式化方法的准则
      • 1.应该选用适当的表示方法
      • 2. 应该形式化,但不要过分形式化
      • 3. 应该估算成本
      • 4.应该有形式化方法顾问随时提供咨询
      • 5.不应该放弃传统的开发方法
      • 6. 应该建立详尽的文档
  • 二、有穷状态机
    • (一) 概念
  • 三、 Petri
    • (一) 概念

一、概述

按照形式化的程度,可以把软件工程使用的方法划分成3类:非形式化 、半形式化、形式化。

  • 用自然语言描述需求规格说明,是典型的非形式化方法。
  • 用数据流图或实体-联系图建立模型,是典型的半形式化方法。

所谓形式化方法,是描述系统性质的基于数学的技术,也就是说,如果一种方法有坚实的数学基础,那么它就是形式化的。

(一) 非形式化方法的缺点

用自然语言书写的系统规格说明书,可能存在矛盾、二义性、含糊性、不完整性及抽象层次混乱等问题。
所谓矛盾是指一组相互冲突的陈述。
二义性是指读者可以用不同方式理解的陈述。

(二) 形式化方法的优点

为了克服非形式化方法的缺点,人们把数学引入软件开发过程,创造了基于数学的形式化方法。
  
  在开发大型软件系统的过程中应用数学,能够带来下述的几个优点:

  • 能够简洁准确地描述物理现象、对象或动作的结果,因此是理想的建模工具。

数学特别适合于表示状态,也就是表示“做什么”,数学比自然语言更适于描述详细的需求。
  在软件开发过程中使用数学的另一个优点是,可以在不同的软件工程活动之间平滑地过渡。
不仅功能规格说明,而且系统设计也可以用数学表达,当然,程序代码也是一种数学符 (虽然是一种相当繁琐、冗长的数学符 )。
  数学作为软件开发工具的最后一个优点是,它提供了高层确认的手段。可以使用数学方法证明,设计符合规格说明,程序代码正确地实现了设计结果。

(三) 应用形式化方法的准则

对形式化方法应该“一分为二”,既不要过分夸大它的优点也不要一概排斥。
下面给出应用形式化方法的几条准则:

1.应该选用适当的表示方法

通常,一种规格说明技术只能用自然的方式说明某一类概念,如果用这种技术描述其不适于描述的概念,则不仅工作量大而且描述方式也很复杂。因此,应该仔细选择一种适用于当前项目的形式化说明技术。

2. 应该形式化,但不要过分形式化

目前的形式化技术还不适于描述系统的每个方面。带使用之,有助于防止含糊和误解。

3. 应该估算成本

为了使用形式化方法,通常需要事先进行大量的培训。最好预先估算所需的成本并编入预算。

4.应该有形式化方法顾问随时提供咨询

绝大多数软件工程师对形式化方法中使用的数学和逻辑并不很熟悉,而且没受过使用形式化方法的专业训练,因此,需要专家指导和培训。

5.不应该放弃传统的开发方法

把形式化方法和结构化方法或面向对象方法集成起来是可能的,而且由于取长补短往往能获得很好的效果。

6. 应该建立详尽的文档

建议使用自然语言注释形式化的规格说明书,以帮助用户和维护人员理解系统。

  • 不应该放弃质量标准
  • 不应该盲目依赖形式化方法
  • 应该测试、测试再测试
  • 应该重用
      即使采用了形式化方法,软件重用仍然是降低软件成本和提高软件质量的惟一合理的方法。而且用形式化方法说明的软件构件具有清晰定义的功能和接口,使得它们有更好的可重用性。

二、有穷状态机

(一) 概念

有穷状态机可以准确描述一个系统,是表达规格说明的一种形式化方法。

通过一个简单例子介绍有穷状态机的基本概念:
一个保险箱上装了一个复合锁,锁有三个位置,分别标记为1、2、3,转盘可向左(L)或向右?转动。这样,在任意时刻转盘都有6种可能的运动,即1L、1R、2L、2R、3L和3R。保险箱的组合密码是1L、3R、2L,转盘的任何其他运动都将引起 警。如图描绘了保险箱的状态转换情况。

三、 Petri

(一) 概念

并发系统中需要解决的主要问题是定时问题:包括同步问题、竞争条件以及死锁问题。
定时问题常常是因不好的设计或有错误的实现引起的,归根到底又是由不好的规格说明造成的.
Petri 技术可用于确定系统中隐含的定时问题。
Petri 技术在计算机领域应用较多,已经证明,用Petri 可以有效地描述并发活动。
Petri 包含4种元素:
一组位置P、一组转换T、输入函数I及输出函数O。
如图举例说明了Petri 的组成:
一组位置P为{P1,P2,P3,P4}:用圆圈代表;
一组转换T为{t1,t2}:图中用短直线表示转换;
两个用于转换的输入函数,用由位置指向转换的箭头表示,它们是:I(t1)={P2,P4}
I(t2)={P2}
两个用于转换的输出函数,用由转换指向位置的箭头表示,它们是:O(t1)={P1}
O(t2)={P3,P3}

如图4.6,P2上有权标,因此t2也可以被激发。当t2被激发时,P2上将移走一个权标,而P3上新增加两个权标(1,1,2,1)。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年9月26日
下一篇 2019年9月26日

相关推荐