[软件工程导论(第六版)]第4章 形式化说明技术(复习笔记)

news2024/9/25 7:24:15

文章目录

    • 4.1 概述
    • 4.2 有穷状态机
    • 4.3 Petri网
    • 4.4 Z语言


  • 按照形式化程度,可以把软件工程使用的方法划分成非形式化、半形式化、形式化三类
  • 非形式化方法:使用自然语言描述需求规格说明
  • 半形式化方法:使用数据流图或实体-联系图建立模型
  • 形式化方法:描述系统性质的基于数学的技术,即有坚实的数学基础的方法就是形式化方法

4.1 概述

  • 非形式化方法的缺点
    • (1)矛盾,一组相互冲突的描述;
    • (2)二义性,读者可有不同的理解;
    • (3)含糊性,说明不清楚;
    • (4)不完整性;
    • (5)抽象层次混乱,非常抽象的陈述中有关于细节的低层陈述。
    • 【注意】用自然语言描述需求规格说明,是典型的非形式化方法。
  • 形式化方法的优点
    • (1)能保证规格说明中尽可能没有矛盾、二义性、含糊性和不完整性。
    • (2)可以在不同的软件工程活动之间平滑地过渡。
    • (3)提供了高层确认的手段,可以使用数学方法进行证明验证。
  • 形式化方法的缺点
    • (1)难于表示问题的时序、控制和行为等方面的需求。
    • (2)相比欠形式化方法,它更难学习,培训的投资过大。
    • 【注意】如果一种方法有坚实的数学基础,那么它就是形式化的。
  • 应用形式化方法的准则
    • (1)应该选用适当的表示方法。
    • (2)应该形式化,但不要过分形式化。
    • (3)应该估算成本。
    • (4)应该有形式化方法顾问随时提供咨询。
    • (5)不应该放弃传统的开发方法。
    • (6)应该建立详尽的文档。
    • (7)不应该放弃质量标准。
    • (8)不应该盲目依赖形式化方法。
    • (9)应该测试、测试再测试。
    • (10)应该重用。

4.2 有穷状态机

  • 概念
    • (1)定义
      • 有穷状态机是表达规格说明的一种形式化方法。
    • (2)构成
      • 一个有穷状态机包括下述5个部分:状态集J、输入集K、由当前状态和当前输入确定下一个状态(次态)的转换函数T、初始态S和终态集F。一个有穷状态机可以表示为一个5元组(J,K,T,S,F)。其中:J是一个有穷的非空状态集;K是一个有穷的非空输入集;T是一个从(J-F)×K到J的转换函数;S∈J,是一个初始状态;F⊆J,是终态集。
    • (3)状态转换形式
      • 当前状态[菜单]+事件[所选择的项]⇒下个状态
    • (4)谓词集P
      • ① 谓词集P把有穷状态机扩展为一个6元组,其中每个谓词都是系统全局状态Y的函数。
      • ② 加入谓词集后转换规则形式为:当前状态[菜单]+事件[所选择的项]+谓词⇒下个状态。
  • 评价
    • (1)优点
      • ① 采用易于书写、易于验证的格式来描述规格说明,能容易地把规格说明转变成设计或程序代码。
      • ② 比数据流图技术更精确且易于理解。
    • (2)缺点
      • ① 在开发一个大系统时,三元组(即状态、事件、谓词)的数量会迅速增长。
      • ② 形式化的有穷状态机方法没有处理定时需求。

4.3 Petri网

  • 概念
  • (1)构成
    • ① 一般构成
      • Petri网包含4种元素:一组位置P、一组转换T、输入函数I,以及输出函数O。如图4-1为Petri网的实例。
      • 在这里插入图片描述
      • a.一组位置P为{P1,P2,P3,P4},在图中用圆圈代表位置。
      • b.一组转换T为{T1,T2},在图中用短直线表示转换。
      • c.两个用于转换的输入函数,用由位置指向转换的箭头表示,它们是:
        • I(t1)={P2,P4}
        • I(t2)={P2}
      • d.两个用于转换的输出函数,用由转换指向位置的箭头表示,它们是:
        • O(t1)={P1}
        • O(t2)={P3,P3}
      • 【注意】输出函数O(t2)中有两个P3,是因为有两个箭头由t2指向P3。
    • ② 形式化的Petri网
      • 更形式化的Petri网结构是一个四元组:
      • C=(P,T,I,O)
      • 其中:
        • a.P={P1,…,Pn}是一个有穷位置集,n≥0。
        • b.T={t1,…,tm}是一个有穷转换集,m≥0,且T和P不相交。
        • c.I:T→P^∞为输入函数,是由转换到位置无序单位组(bags)的映射。
        • d.O:T→P^∞为输出函数,是由转换到位置无序单位组的映射。
  • (2)作用
    • 用于确定系统中隐含的定时问题,可以有效地描述并发活动。

4.4 Z语言

  • 组成部分
    • (1)给定的集合;
    • (2)状态定义;
    • (3)初始状态;
    • (4)操作。
  • 优点
    • (1)可以比较容易地发现用Z写的规格说明的错误;
    • (2)使用Z写规格说明时对精确性要求高,减少了模糊性、不一致性和遗漏;
    • (3)可以降低软件开发费用;
  • 用Z写规格说明,更加清楚和正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P2P视频聊天技术分析

整个P2P视频过程需要知道双方的媒体类型、流和候选者,所以这里就会用到一下技术: ​ 信令服务器socket.io ​ 状态机 ​ ICE服务器 ​ WebRTC框架 ​ 媒体协商 信令服务器Socket.io 信令服务器说白了作用就是发消息的中转站,A把msg发到…

网络流与图(二)

上一节我们讲到了退化圈方向搜索算法,它能得到全局最优解。然而算法运行过程中需要选择一个可行改进圈方向,对于一个大型网络流来说,这并非容易的。我们需要找到在每次循环中确认可行改进圈方向或者证明不存在的方法。我们现在就来探讨这个问…

Andriod入门级开发

这学期有个课设,我们组我负责一个手机APP的开发,虽然刚开始说要实现什么智能导航,类似高德地图那种,但最后阉割的只剩一个Socket通信了,因为之前没有接触过(可能之后也不会再接触),记…

【数据管理】谈谈哈希原理和散列表

一、说明 提起哈希,有人要说:不就是一个稀疏表格么,谈的上什么原理?我说:非也,哈希是是那种看似无物,其实解决大问题的东西。如何提高数据管理效率?这是个问题,随着这个问…

测试2:编写测试用例的方法

2.编写测试用例的方法 7种 测试常用的方法:code review 代码静态分析、CI/CD CI–持续集成–开发成员经常集成它们的工作,尽快发现集成错误 CD–持续部署–将集成后的代码部署到更贴近真实运行的环境 2.1 测试用例的描述: 用例编号 用例…

Python纯Numpy手撕SGD

文章目录简介问题建模数据加载和预处理数据加载预处理分batch损失函数训练运行简介 本博客用多元线性回归展示如何从零实现一个随机梯度下降SGD, 不使用torch等AI框架 问题建模 给定一个数据集X∈RN(D1)\large X \in \R^{N \times (D1)}X∈RN(D1)和对应标签向量Y∈RN\large …

centos7防火墙工具firewall-cmd使用

centos7防火墙工具firewall-cmd使用防火墙概述centos7防火墙工具firewall-cmd使用介绍firewalld的基本使用服务管理工具相关指令配置firewalld-cmd防火墙概述 防火墙是可以帮助计算机在内部网络和外部网络之间构建一道相对隔绝的保护屏障,从而保护数据信息的一种技…

Vulnhub 渗透练习(七)—— FRISTILEAKS: 1.3

环境搭建 下载链接 virtualbox 打开靶机设置为 host-only,攻击机同样。 具体可点此处 信息收集 开了个 80 端口。 用的是 apache 2.2.15 ,这个版本有个解析漏洞。 目录 根据首页的图片猜测 /fristi/ 目录(不过我没想到 -_-&#x…

由浅入深掌握各种 Python multiprocessing 进程间通信方式

由浅入深掌握各种 Python 多进程间通信方式1、为什么要掌握进程间通信2、进程间各类通信方式简介3、消息机制通信1) 管道 Pipe 通信方式2) 消息队列Queue 通信方式4、同步机制通信(1) 进程间同步锁 – Lock(2) 子进程间协调机制 -- Event5、共享内存方式通信(1) 共享变量(2) 共…

【Python】控制自己的手机摄像头拍照,并自动发送到邮箱

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 今天这个案例,就是控制自己的摄像头拍照, 并且把拍下来的照片,通过邮件发到自己的邮箱里。 想完成今天的这个案例,只要记住一个重点:你需要一个摄像头 思路…

Android 7.0 OTA升级(高通)

文章目录1. Full OTA 方式升级介绍1.1 Full OTA 制作第一步:生成 msm89xx-target_files-eng.XXX.zip1.2 Full OTA 制作第二步:Modem 等非 HLOS 加入升级包的方法1.3 Full OTA 制作第三步:生成 update.zip 升级包2. Incremental OTA 方式升级介…

Android 基础知识4-2.6LinearLayout(线性布局)

一、LinearLayout的概述 线性布局(LinearLayout)主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能…

Java基础-xml

1.xml 1.1概述 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者: Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为止&#…

python基础语法【自用】

✨始发站🚩Python的基础语法,冲冲冲! 🚩注:本篇为python基础语法篇,因博主之前使用java,所以本基础语法篇实为自用丐版! 🌲 你好,世界! 安装环境…

虚拟机快照

1. 快照有什么作用? 通俗理解:快照就是备份。 2. VMware Workstation 和 VMware Fusion 都支持制作快照去使用 一、快照 保存当前虚拟机状态。可以恢复 二、 在VMware Workstation Pro中制作并还原快照 三、在VMware Fusion Pro中制作并还原快照 快照制…

210天从外包踏进华为跳动那一刻,我泪目了

前言 没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力幸运,但如果你不够幸运,那就只能拉高努力的占比。 2021年4月,我有幸成为了华为的一名高级测试工程师,正如标题所…

【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 接口测试&#xff0…

美团前端一面手写面试题

实现斐波那契数列 // 递归 function fn (n){if(n0) return 0if(n1) return 1return fn(n-2)fn(n-1) } // 优化 function fibonacci2(n) {const arr [1, 1, 2];const arrLen arr.length;if (n < arrLen) {return arr[n];}for (let i arrLen; i < n; i) {arr.push(arr[…

vulnhub Kioptrix4

总结&#xff1a;sql注入&#xff0c;受限shell绕过&#xff0c;mysql提权 目录 下载地址 漏洞分析 信息收集 sql注入 ssh登录绕过受限shell 提权 下载地址 Kioptrix4_Hyper_v.rar (Size: 210 MB)Download: http://www.kioptrix.com/dlvm/Kioptrix4_Hyper_v.rarDownload …

Linux驱动开发详细解析

Linux驱动开发详细解析 驱动概念 驱动与底层硬件直接打交道&#xff0c;充当了硬件与应用软件中间的桥梁。 具体任务 读写设备寄存器&#xff08;实现控制的方式&#xff09;完成设备的轮询、中断处理、DMA通信&#xff08;CPU与外设通信的方式&#xff09;进行物理内存向虚…