软件工程——形式化方法概述

目录

  • 前言
  • 一、形式化方法定义
  • 二、形式化方法分类
  • 三、形式化方法意义
  • 四、形式化方法作用
  • 五、形式化方法优缺点
    • 1.优点
    • 2.缺点


前言

形式化方法英文的名称是formalmethods,形式化方法模型的主要活动是生成计算机软件形式化的数学规格说明。形式化方法使软件开发人员可以应用严格的数学符号来说明、开发和验证基于计算机的系统。


一、形式化方法定义

软件形式化方法是指建立在严格数学基础上的软件开发方法。在逻辑科学中是指分析、研究思维形式结构的方法。它把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出其中各个部分相互联结的方式,如命题中包含概念彼此间的联结,推理中则是各个命题之间的联结,抽取出它们共同的形式结构;再引入表达形式结构的符号语言,用符号与符号之间的联系表达命题或推理的形式结构。

二、形式化方法分类

根据说明目标软件系统的方式,形式化方法可以分为两类:

  • 面向模型的形式化方法。面向模型的方法通过构造一个数学模型来说明系统的行为。
  • 面向属性的形式化方法。面向属性的方法通过描述目标软件系统的各种属性来间接定义系统行为。

根据表达能力,形式化方法可以分为五类:

  • 1.基于模型的方法
  • 2.基于逻辑的方法
  • 3.代数方法:
  • 4.过程代数方法
  • 5.基于网络的方法

三、形式化方法意义

形式化方法的意义在于它能帮助发现其它方法不容易发现的系统描述的不一致、不明确或不完整,有助于增加软件开发人员对系统的理解,因此形式化方法是提高软件系统,特别是Safety-Critical系统的安全性与可靠性的重要手段。最早的形式化方法是逻辑与逻辑推理,它的目标是使推理机械化。从广义上讲,这一目标受到许多挫折,比如说逻辑系统的不完备性(incompleteness)、逻辑系统的不可判定性(undecidability)、自动推理的难处理性(intractability)。但是在一些实际应用上,逻辑方法和自动推理还是起着非常大的作用。

四、形式化方法作用

形式化方法在软件开发中能够起到的作用是多方面的。首先是对软件需求的描述,软件需求的描述是软件开发的基础。比如说一般非形式化的描述很可能导致描述的不明确和不一致,如果描述的不明确和不一致将导致设计、编程的错误,将来的修改所要付出的代价就非常大了,如果导致的错误没有被发现,则影响程序的可靠和使用。形式化方法则要求描述的明确性,而描述的不一致性也就相对易于发现。其次是对软件设计的描述。软件设计的描述和软件需求的描述一样重要,形式化方法的优点对于软件需求的描述同样适用于软件设计的描述,另外由于有了软件需求的形式化描述,我们可以检验软件的设计是否满足软件的要求。对于编程来讲,我们可以考虑自动代码生成。对于一些简单的系统,形式化的描述有可能直接转换成可执行程序,这就简化了软件开发过程,节约了资源和减少了出错的可能性。另外,形式化方法可以用于程序的验证,以保证程序的正确性。对于测试来讲,形式化方法可用于测试用例的自动生成,这可以节约许多时间和在一定程度上保证测试用例的覆盖率。

五、形式化方法优缺点

1.优点

形式化开发方法存在以下七个主要优点:

  1. 形式化说明以逻辑精确性为特色, 除去了在非形式化说明中不可避免的大部分含糊不清的描述, 这种精确性为开发人员与用户对需求的一致性理解, 及需求的正确执行提供了更大的可能性。
  2. 形式化证明通过对需求分析中所描述的系统行为提供逻辑的精确论证, 除去了需求分析中的模糊性和主观性。
  3. 通过形式化说明和证明实现了系统的重复分析、一致性分析以及一个较少依赖特定分析者技术和毅力的分析过程。
  4. 形式化说明和证明可以通过“裁剪”以适合于给定的项目及技术要求, 也就是说能被调整以满足具体项目的需要。
  5. 形式化说明和证明能够应用于任何开发阶段, 包括目前最需要分析方法的开发早期, 越早发现和确定错误比晚一些发现付出的代价要小的多。
  6. 形式化说明和证明是基于计算机的工具所支持, 这使得一致性检查和证明等实现了自动化, 提高了系统的可靠性, 减少了在分析方面的费用。同时, 这些工具容许证明能够被重复执行而大大增强了分析的重复性。
  7. 形式化说明和证明弥补了现有的测试方法, 通过提供一个精确的形式化说明而得以获取一个好的测试计划。

2.缺点

形式化开发方法的一些争议或缺陷主要体现在:

  1. 形式化方法中所包含的数学理论,限制了大多数程序设计人员的学习和使用。
  2. 认为采用形式化方法会延误项目开发周期、增加开发费用。
  3. 许多流行的形式化方法对于较小规模的项目是有效的,但却很难应用于一些大型系统。
  4. 形式化方法不能确保开发出完全正确的软件。
  5. 缺乏对软件生命周期内各个阶段提供全面支持的形式化方法。

你可能感兴趣的:(软件工程,团队开发,个人开发,设计模式,需求分析)