• 软件工程导论——第四章——形式化说明技术


    软件工程导论——第四章——形式化说明技术

    1、概述

    按照形式化的程度,可以把软件工程使用的方法划分为非形式化、半形式化和形式化三类。用自然描述需求规格说明,是典型的非形式化方法。用数据流图或实体联系图建立模型,是典型的的半形式化方法。所谓形式化方法,是描述系统性质的基于数学的技术,也就是说,如果一种方法有坚实的数学基础,那么它就是形式化的。

    2、非形式化方法的缺点:

    1. 矛盾:一组相互冲突的陈述。
    2. 二义性:指读者可以用不同的方式理解的陈述。
    3. 含糊性:指没有指明任何欧勇信息的笼统的陈述。
    4. 不完整性:指没有指明具体功能的陈述。
    5. 抽象层次混乱:指非抽象的陈述中混进了一些关于细节的低层次陈述。

    3、形式化方法的优点:

    1. 能够简洁准确地描述物理现象、对象或动作的结果。准确到几乎没有二义性,而且可以用数学方法来验证,以发现存在的矛盾和不完整性,再这样的规格说明中完全没有含糊性。
    2. 可以在不同的软件工程活动之间平滑地过度。不仅功能规格说明,而且系统设计也可以用数学表达,当然,程序代码也是一种数学符号。
    3. 提供了高层确认的手段,可以使用数学方法证明,设计符合规格说明,程序代码正确地实现了设计结果。

    4、应用形式化的准则

    1. 应该选用适当的表示方法。
    2. 应该形式化,但不要过分形式化
    3. 应该估算成本
    4. 应该有形式化方法顾问随时提供咨询
    5. 不应该放弃传统的开发方法
    6. 应该建立详尽的文档
    7. 不应该放弃质量标准
    8. 不应该盲目依赖形式化方法
    9. 应该测试、测试再测试
    10. 应该重用:即使采用了形式化方法,软件重用仍然是降低软件成本和提高软件质量的唯一合理的方法,而且用形式化方法说明的软件构件具有清晰定义的功能和接口,使得它们有更好的可重用性。

    5、有穷状态机

    有穷状态机是表达规格说明的一种形式化方法

    一个有穷状态机包括下述五个部分:状态集J,输入集K,由当前状态和当前输入确定下一个状态(次态)的转换函数T,初始状态S和终态集F。一个有穷状态机可以表示为一个5元组(J、K、T、S、F)

    举例:在这里插入图片描述

    上述例子中:

    状态集J:{保险箱锁定,A,B,保险箱解锁,报警}

    输入集K:{1L,1R,2L,2R,3L,3R}

    转换函数T:

    初始态S:保险箱锁定。

    终态集F:{保险箱解锁,报警}

    其中:J是一个有穷的非空状态集,K是一个有穷的非空输入集;T是一个从(J-F)* K到J的转换函数;S∈J,是一个初始状态,F包含于J,是终态集。

    状态转换

    状态的每个转换都具有下面的形式:

    当前状态[菜单] + 时间[所选择 的项] =》下个状态

    扩展

    对有穷状态机做一个扩展,即在前述的5元组中加入第6个组件——谓词集P,从而把有穷状态机扩展为一个6元组,其中每个谓词都是全局状态Y的函数,转换函数T现在是一个从(J-F)* K * P到J的函数。

    现在的转换规则形式如下:
    当前状态[菜单] + 事件[所选择的项] + 谓词 =》下个状态

    优点

    • 有穷状态机方法次啊哟管理一种简单的格式来描述规格说明:当前状态+事件+谓词=》下个状态。这种形式的规格说明易于书写、易于验证,而且可以比较容易地把它转变成设计或程序代码。
    • 有穷状态机方法比数据流图更精确,而且易于理解。

    缺点

    • 在开发大系统时,三元组(即状态、事件、谓词)的数量会迅速增长。
    • 形式化的有穷状态机方法没有处理定时需求。

    6、Petri网

    (1)功能

    并发系统中遇到的一个主要问题是定时问题。定时问题通常是由不好的设计或有错误的实现引起的。而这样的设计或实现又是由不好的规格说明造成的,如果规格说明不恰当,则有导致不完善的设计或实现的危险,Petri网技术一个很大的优点是它可以用于设计中

    (2)构成

    一般构成:
    Petri网包含4种元素:一组位置P、一组转换T、输入函数I、输出函数O。举例如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NkvlFDBM-1656168358803)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220625220451552.png)]

    • 一组位置P为{P1,p2,p3,p4},在图中用圆圈代表位置。

    • 一组转换T为{T1,T2}在图中用短直线表示转换

    • 两个用于转换的输入函数,用由为主席指向转换的箭头表示,他们是I(t1) = {P2, P4}

      I(t2) = {P2}

    • 两个用于转换的输出函数,用由转换指向位置灯箭头表示,他们是:O(t1) = {P1}

    O(t2) = {P3, P4}

    其中,P = {P1,……Pn}是一个有穷位置集

    T = {t1,……,tm}是一个有穷转换集,m>=0

    (3)分配权标

    ①带标记的Petri网

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gamheAgT-1656168358803)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220625221707658.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iDPtLoPl-1656168358804)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220625221734929.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uBgPYylo-1656168358804)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220625221801564.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fn6AYYCA-1656168358805)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220625221813498.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TIumZhWu-1656168358806)(C:\Users\W\AppData\Roaming\Typora\typora-user-images\image-20220625221908283.png)]

    7、Z语言

    用Z语言描述的、最贱的形式化规格说明有下述四个部分:

    (1)给定的集合

    一个Z规格说明从一系列给定的初始化集合开始,所谓初始化集合就是不需要详细定义的集合,这种集合用带方括号的形式表示。

    (2)状态定义

    一个Z规格说明由若干个“格”组成,每个格含有一组变量说明和一系列限定变量取值范围的谓词。

    (3)初始状态

    抽象的初始状态是指系统第一次开启时的状态。

    (4)操作:

    1. 当一个格被用在另一个格中时,要在它的前面加上一个三角形符号作为前缀、问号”?“表示输入变量,而感叹号”!“代表输出变量
    2. 谓词部分,包含了一组调用操作的前置条件,以及操作完全结束后的后置条件,如果前置条件成立,则操作执行完成后可得到后置条件,但是,如果在前置条件不成立的情况下调用该操作,则不能得到指定的结果。

    Z语言获得成功的主要原因为:

    1. 可以比较容易的发现用Z写的规格说明的错误,特别是在自己审查规格说明,及根据形式化的规格说明来审查设计与代码时,情况更是如此。
    2. 要求十分精确地使用Z说明符写规格说明。减少了模糊性、不一致性和遗漏。
    3. Z只是一种形式化语言,在需要时开发者可以严格地验证规格说明的正确性。
    4. 只用比较短的时间就能够让开发人员学会编写Z规格说明
    5. 使用Z语言通过减少开发过程所需要的总时间来降低软件开发费用
    6. 用户可以依据Z规格说明用自然语言重写比直接用自然语言写出的非形式化规格说明更加清楚和准确。

    是一种形式化语言,在需要时开发者可以严格地验证规格说明的正确性。
    4. 只用比较短的时间就能够让开发人员学会编写Z规格说明
    5. 使用Z语言通过减少开发过程所需要的总时间来降低软件开发费用
    6. 用户可以依据Z规格说明用自然语言重写比直接用自然语言写出的非形式化规格说明更加清楚和准确。

  • 相关阅读:
    基于nodejs的预约上门维修服务系统
    标定系列——OpenCV中CV_16S的常用场合(二十六)
    [R] Underline your idea with ggplot2
    C语言 | Leetcode C语言题解之第49题字母异位词分组
    将Android进行到底之服务(service)
    【Purple Pi OH RK3566鸿蒙开发板】OpenHarmony音频播放应用,真实体验感爆棚!
    [WesternCTF2018]shrine
    Qt QSS 属性 vs QObject属性
    VScode快捷键(win + mac)
    【Redis】hash数据类型-常用命令
  • 原文地址:https://blog.csdn.net/qiangqiang103/article/details/125465097