1.前言


今天开始上课学习软件需求分析与VDM++,经过一节课的学习,我又增长了见识。

软件需求工程在软件工程中处于十分核心的地位;需求分析的好坏直接决定软件工程的成败。这一点是我之前对需求工程的理解和认识,然而今天的学习又进一步扩展了我的认识。

2.需求分析的发展阶段


说起需求分析,首先想到的是用例,然后就是各种各样的用例图,功能描述;接下来我会想到产品原型,业务流程描述等等;然而这些其实都只是需求工程的某一阶段的一小部分。实际上,需求分析大致可划分为以下3个阶段:

(1)上世纪70年代兴起的结构化需求分析技术。以传统的结构化开发方法为代表,典型工具是数据流图,数据字典,业务流程图等。我在12年写毕业论文时曾用过此技术,拜读管理信息系统的教科书,仍然能看到这种技术;

(2)上世纪80年代-90年代兴起的面向对象的需求分析技术。以OOAD为核心,典型工具是UML,上面提到的用例图就属于此类。现在UML在业内仍然非常流行,是当代软件开发的主流技术。

(3)上世纪90年代至今兴起的形式化方法。为了克服自然语言和上述分析语言主观性强的弱点,真正实现需求的精确化定义,就必须依赖于数学,形式化方法遵循严格的数学和逻辑实现软件需求的精确定义,真正实现软件开发的精确化和自动化。势必将成为未来软件业界需求分析之主流。本系列所讲述的VDM正是由IBM提出的最早的一种形式化方法。

3.什么是VDM++


VDM是上世纪60-70年代由IBM开发的第一个形式化方法语言,VDM++是1993年对VDM的扩展。作为形式化方法,VDM++基于离散数学和一阶谓词逻辑,为软件需求定义、需求检查、回归测试、软件证明等提供了可能性。

由于其形式化的特点,使它本身也成为一种编程语言。描述精确,便于与C++、Java语言转化是它的显著优势。此外,VDM++不仅支持命令式风格的开发,同时也支持函数风格的开发。闲话少说,具体等到后面就看到啦。

4.系列简介


本系列基本上会与课程进度保持同步更新,大致上每周二更新一次。下次将图文并茂地展示VDM++开发环境VDMTools的安装和使用,敬请期待。

下一篇:【形式化方法:VDM++系列】2.VDMTools环境的搭建

【形式化方法:VDM++系列】1.前言的更多相关文章

  1. 【形式化方法:VDM++系列】3.基于VDM++的图书管理系统需求定义

    接前文:http://www.cnblogs.com/Kassadin/p/4091040.html 1.Before We Start: 在开始图书管理系统需求定义之前,需要先进行一些说明. 1.1 ...

  2. 【形式化方法:VDM++系列】2.VDMTools环境的搭建

    接前文:http://www.cnblogs.com/Kassadin/p/3975853.html 上次讲了软件需求分析的演化过程,本次进入正题——VDM开发环境的搭建 (自从发现能打游戏以来,居然 ...

  3. 【形式化方法:VDM++系列】4.VDM实战1——铁路费用计算

    又有将近2个月没更新博客了啊!winter holiday简直玩儿疯了的说!结果假期前学习的形式化方法已经忘了大半!面对期末作业,大脑一片空白.于是,赶快复习了一下之前学习的姿势! 这次的主要任务是完 ...

  4. “Ceph浅析”系列之一——前言

    开源技术专家章宇同学(@一棹凌烟)在C3沙龙分享过Ceph之后,最近来了劲头,一口气写了一系列<Ceph浅析>的博文,共8篇: "Ceph浅析"系列之一--前言 &qu ...

  5. [转]C#中基于GDI+(Graphics)图像处理系列之前言

    直接给出原文链接吧: C#中基于GDI+(Graphics)图像处理系列之前言 链接:https://pan.baidu.com/s/1zm5TCOHqkqEfiLZuqO0UMA 提取码:qz0h

  6. webpack4 系列教程: 前言

    1. 什么是webpack? 前端目前最主流的javascript打包工具,在它的帮助下,开发者可以轻松地实现加密代码.多平台兼容.而最重要的是,它为前端工程化提供了最好支持.vue.react等大型 ...

  7. Chapter 5 软件工程中的形式化方法

    从广义上讲,形式化方法是指将离散数学的方法用于解决软件工程领域的问题,主要包括建立精确的数学模型以及对模型的分析活动.狭义的讲,形式化方法是运用形式化语言,进行形式化的规格描述.模型推理和验证的方法. ...

  8. [转]HTTPS网络流量解密方法探索系列(一)

    前言 分析网络流量总是绕不开HTTPS,因其广泛使用甚至是强制使用逐渐被大众熟知,在保证其安全的同时也提高了对流量进行研究的难度.目前解析HTTPS协议的文章很多,有很多不错的文章可以带着入门,老实说 ...

  9. Java工程师之SpringBoot系列教程前言&目录

    前言 与时俱进是每一个程序员都应该有的意识,当一个Java程序员在当代步遍布的时候,你就行该想到我能多学点什么.可观的是后端的框架是稳定的,它们能够维持更久的时间在应用中,而不用担心技术的更新换代.但 ...

随机推荐

  1. ruby sass Encoding::CompatibilityError for changes

    在'compass create projectName','cd projectName'之后,show "Encoding::CompatibilityError on line [&q ...

  2. dedecms安装步骤

    GD支持:PHP设置-PHP扩展-php_gd2 初始化数据体验包:点击下载:或者点击取消     如果是本地安装在数据库的在数据库用户名选择默认的(root),密码为空 主要是如果是基于远程服务器的 ...

  3. HTML5吧!少年

     一.为了能使IE9以下的IE浏览器也能支持html5的标签,所以首先得在文档头部用条件注释的方法引入那段著名的代码. 1 2 3 <!--[if lt IE 9]> <script ...

  4. JavaScript学习笔记(9)——JavaScript语法之流程控制

    javascript的流程控制语句与大部分类c语言一致.大致如下: 一.if if...else if...else if....else if....else..... 二.switch(变量){ ...

  5. Kafka-0.10.0.0入门

    搭建环境略(伪集群即可以),但要注意Kafka的配置必须配置的,少配了也一样可以用,但是只能单机使用,外部机器无法连接,网上也有说. host.name=192.168.1.30 advertised ...

  6. Ant 入门

    参考: Ant官网     http://ant.apache.org/ 轻量级java ee企业应用实战(李刚)      Ant当前版本1.9.6      Ant基于Java     配置环境变 ...

  7. C语言经典案例

    题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%:20万到40万 ...

  8. 霍纳法则(Horner's rule)

    卡在hdu 1402 的高精度乘法了,要用FFT(快速傅里叶变换),然后看到了这个霍纳法则,顺便就写下来了. 霍纳法则:求多项式值的一个快速算法. 简单介绍: 假设有n+2个数 , a0,a1,a2, ...

  9. Linux下UDP收/发广播消息简单实现

    发送广播消息 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/typ ...

  10. linux 定时执行 cron指令

    linux 中的 cron 定时执行命令,先上例子:每间隙两分钟把 "Hello world"写到 /tmp/hello.txt crontab -e */2 * * * * ec ...