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. dagger和butterknife使用冲突

    两者会冲突的主要原因是因为两者都有:javax.annotation.processing.Processor 于是在build.gradle中添加如下配置即可: // 注释冲突 packagingO ...

  2. Sublime Text2上搭建C/C++环境

    环境:Sublime Text2            win7 64位 1.下载Sublime Text2并安装     下载地址:http://www.sublimetext.com/ 2.需要用 ...

  3. nginx install in centos

    1.在nginx下载rpm包,如nginx-release-centos-6-0.el6.ngx.noarch.rpm ,并安装(可用yum直接安装): 注:rpm包只是提供一个nginx源. 2.使 ...

  4. (转)TCP注册端口号大全

    分类: 网络与安全 cisco-sccp 2000/tcp Cisco SCCPcisco-sccp 2000/udp Cisco SCCp# Dan Wing <dwing&cisco ...

  5. GNU iconv

    GNU iconv 一.关键函数 1.iconv_open() iconv_open(DestinationCharsets, SourceCharSets) 2.iconv() [XSI] [Opt ...

  6. 学习C++ Primer 的个人理解(十)

    标准库没有给每个容器都定义成员函数来实现 查找,替换等操作.而是定义了一组泛型算法,他们可以用于不同类型的元素或多种容器类型. 迭代器令算法不依赖与容器 算法永远不会执行容器的操作 算法本身不会执行容 ...

  7. Poj 1006 / OpenJudge 2977 1006 Biorhythms/生理周期

    1.链接地址: http://poj.org/problem?id=1006 http://bailian.openjudge.cn/practice/2977 2.题目: Biorhythms Ti ...

  8. 把URL传递参数转变成自定义实体方法

    先定义下要获取的实体: public class InputClass { public long Id { get; set; } public int Status { get; set; } p ...

  9. highcharts图表

    最近项目中用到highcharts雷达图,如下 其实echarts就不错,echarts用canvas,highcharts用svg,各有特点 代码如下: index.html <!doctyp ...

  10. svn执行clean up 操作时报错 "Previous operation has not finished; run 'cleanup' if it was interrupted"解决如下!

    今天在项目中更新的时候,突然间爆了一个svn的这个错误,当时提示我去clean up操作,结果我执行clean up操作时候,还是报错,后来坚持出来,是因为ios项目中的一个图标出了问题,使svn进入 ...