• 浅谈软件需求建模


    http://blog.csdn.net/jjm1437/article/details/53185840

     需求分析师在需求调研分析工作中经常会用到各种分析方法,但对各种建模方法没有体系化的认识,经常讲概念混淆。本文从常用的结构化分析方法和面向对象分析方法着手,对各种建模方法进行梳理,帮助理解其含义及作用。
    1  建模概述
    1.1  什么是建模?
           建模就是采用表格化、图形化、公式化的方式,将系统的构成及其构成间的关系呈现给人们的一种技术方法。[1]可能是因为软件本身的不可见,使得软件的建模也显得抽象,但在平常生活中,建模随处可见,比如盖房子,需要画图纸,画图纸就是建模的过程,而图纸就是建模产出的模型。在楼盘预售时,房子都还没建好,地产商会先做个缩小版的原型出来,甚至做个样板房让顾客有直观的感受,这个也是建模。当房子卖出去了,屋主需要装修了,找装修公司设计,设计师根据屋主需要设计一套图纸,甚至细到水电的走线,这些也是建模。因此将开发软件比作盖房子,其建模过程就相当于绘制图纸的过程。
          可以说对软件系统进行建模的目的是帮助我们按照实际情况或按我们需求的样式对系统进行可视化;提供一种详细说明系统的结构或行为的方法;给出一个知道系统构造的模板;对我们所作出的决策进行文档化。[2]
    1.2  建模演变历程
           软件建模并不是从来就有的,而是随着软件工程的发展而不断演变。主要经过了三个阶段。
           第一阶段:程序=数据结构+算法
           出现于20世纪50~60年代,软件开发主要解决的是科学计算问题,Fortran语言是其代表。其建模关键点是选择合适的数据结构和算法。
           第二阶段:结构化分析方法
           出现于20世纪60~70年代,将解决一些与数据处理相关的问题,例如计费等。COBOL、C语言是其代表。其建模关键点有两方面,一是确定有哪些数据,格式是什么,如何存储,主要通过E/R模型表达;二是确定数据的加工、处理过程,主要通过DFD(数据流图)表达。
           第三阶段:面向对象分析方法
           出现于20世纪80~90年代,信息系统覆盖了更多业务过程,数据不再是唯一的视角,事(业务流程)、人的视角越来越重要,因此加入更多这方面的建模工具。[2]
           目前结构化分析方法和面向对象分析方法仍广泛应用。
    2  结构化分析方法
           结构化分析方法(Structured Analysis,简称SA)是将待解决的问题看做一个系统,从而用系统科学的思想方法(抽象、分解、模块化)来分析和解决问题,并基于功能分解设计系统结构,通过不断把复杂的处理逐层分解来简化问题,其最核心思想是自顶向下的分解。
           结构化分析方法模型如下图所示:
    ● 数据字典是模型的核心,是关于数据的信息集合,也就是对数据流图中包含的所有元素定义的集合。对于数据流图中出现的所有被命名的图形元素加以定义,使得每个图形元素的名字都有确切的解释。
    ● 实体关系图(ER图):描述数据对象间的关系,用于数据建模。
    ● 数据流图(DFD图):描述了数据流在系统中流动的过程,以及对数据流进行变换的功能,用于功能建模。
    ● 状态迁移图(STD图):描述了对外部事件的响应方式,表示了系统的各种行为模式(称为状态)以及在状态间进行变迁的方式,用于行为建模。
           可见,结构化分析方法包含3层建模,数据建模、功能建模以及行为建模。
    2.1  数据建模——ER图
           数据模型是为了把用户的数据要求清晰明确地表达出来所建立的一个概念性的模型,也称为概念模型,因此数据建模也称为概念建模。概念性模型是一种面向问题的数据模型,是按照用户的观点来对数据和信息进行建模。它描述了从用户角度看到的数据,也反映了用户的现实环境。
           数据建模的目标是为了明确下列与数据处理相关的特定问题:
    ● 系统处理哪些主要的数据对象?
    ● 每个数据对象的组成如何?
    ● 哪些属性描述了这些数据对象?
    ● 这些数据对象当前位于何处?
    ● 数据对象之间的关系?
    ● 数据对象和变换它们的处理之间有哪些关系?
           数据模型常用ER图表示,ER图也称实体关系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法。用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。ER图示例如下图所示,具体绘制方法不做详细说明。

           另外,对于设计方面的数据建模包括概念建模、逻辑建模和物理建模,而需求分析中的数据建模相当于设计中第一阶段的概念建模。由于是设计方面的建模方法,这里不再说明,详细信息可网上查找“详解数据建模的三个阶段”。
    2.2   功能建模——DFD图
           当数据或信息“流”过信息系统时将会被系统的功能所处理、加工活变换,再将处理或变换后的数据从系统中输出,DFD图从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程。而功能建模正是通过DFD图将系统所需实现的功能绘制出来的过程。
           DFD图的基本组成包括数据流、加工、数据存储和外部实体。通常用箭头标志数据流,用圆或椭圆表示加工,用双杠表示数据存储,用方框表示外部实体,即数据的源点或终点。DFD图示例如下图所示。
    2.3  行为建模——STD图
           STD图(State Transition Diagram)用于描述系统或对象的状态,以及导致系统或对象状态发生改变的事件,从而描述系统的行为。它指明了作为特定事件的结果(状态),在状态中包含可能执行的行为。
           STD图中,用圆圈表示可得到的系统状态,用箭头表示从一种状态向另一种状态的迁移,在箭头上要写上导致迁移的信号或事件的名称。STD图示例如下图所示。
    3  面向对象分析方法
           面向对象方法是从内部结构上模拟客观世界 ,其基本思想认为对象是对现实世界客观实体的描述 ,均由其属性和相关操作组成 ,是系统描述的基本单位。面向对象方法更强调运用人类在日常的逻辑思维中经常采用的思想方法和原则 ,例如抽象、分类、继承、聚合、封装等 ,这使得软件开发者能更有效地思考问题 ,并以其他人也能看得懂的方式把自己的认识表达出来。
           面向对象方法包括面向对象需求分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)。而面向对象分析方法主要经过3个建模过程,包括结构建模、行为建模和功能建模,3中建模均采用统一建模语言 UML (Unified Modeling Language)。
           根据UML2.0标准,一共定义了13种不同的图,其功能各有不同,而OOA主要使用到其中的5种,分别是类图、活动图、用例图、构件图和部署图。
    3.1  结构建模
           结构建模也叫领域建模或概念建模,是对业务或系统的某个时刻或某段时间内的状态进行系统化描述,一般使用结构型的UML图进行结构建模。结构建模所表示的内容一般是静态的,在一段时间内是不会变化的。如用类图表示业务及业务之间的关系,用部署图、构件图表示系统的部署及架构设计。
           类图示例如下图所示:
           构件图如下图所示:
           部署图如下图所示:
    3.2  行为建模
          行为建模是系统化地分析业务活动及业务流程的过程,一般使用行为型的UML图进行结构建模。行为建模表达的是某段时间内事情是如何发展的,这些发展最后会达到怎样的效果。
           业务流程分为生产性流程、管理性流程和支持性流程。生产性流程是流程中最重要的部分,是企业/组织价值体现的核心;管理性流程是对生产性流程的管控,通常是有管理层发现的,对一些质量、效率进行监督的控制性流程;支持性流程是对生产性流程的一种补充,通常是由协作部门、本部门员工执行的工作。如果拿软件开发过程来比喻的话,需求分析、软件设计、软件编码、软件测试是生产性流程;项目管理、质量保证是管理性流程;而文档配置等属于支持性流程。通常生产性流程是最容易标识的,而管理性流程和支持性流程比较容易忽略,因此在需求分析时要特别注意。[2]
          活动图示例如下图所示:
    3.3  功能建模
           功能建模是在结构建模和行为建模的基础上,识别出通过系统实现的部分,一般使用UML用例图表现,描述系统应具有的功能,用于实现用户的日常需要。
          另外,在用例图的基础上通过原型工具制作出可视化原型也属于功能建模的范畴,通过原型用户能更直观地感知即将开发出来的系统的模样,更好地引出客户需求,同时避免后期需求变更。目前一般采用Axure原型工具制作系统或功能原型。
           用例图示例如下图所示:
    4  结束语
           可以看出结构化分析方法和面向对象分析方法有相同的地方,那就是都需要先理清业务概念及其关系,虽然SA称为数据建模,而OOA称为结构建模,但本质是相同的。不同的地方在于SA更偏向对数据流的分析,而OOA更偏向对对象行为的分析,而且在现阶段OOA的应用更为广泛,但不得不说的是,无论SA还是OOA都只是需求分析的方法,关键还是在于使用它们的需求分析师。

    参考文献:
    [1]软件需求十步走  新一代软件需求工程实践指南_杨巨龙,周永利编著_北京:电子工业出版社
    [2]软件需求最佳实践:SERU过程框架原理与应用
  • 相关阅读:
    [No0000139]轻量级文本编辑器,Notepad最佳替代品:Notepad++
    [No0000138]软件开发基础知识
    [No0000137]字符编码详解
    [No0000144]深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing)理解堆与栈1/4
    [No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
    [No0000135]程序员修炼之道 Tips
    phpstorm 调试时浏览器显示The requested resource / was not found on this server
    php注解
    phpStorm 配置PHP_CodeSniffer自动检查代码
    php
  • 原文地址:https://www.cnblogs.com/feng9exe/p/6700944.html
Copyright © 2020-2023  润新知