系统建模-结构化分析与设计

导读


       本篇开头介绍系统建模的定义、目的和分类,然后以分析、设计两个阶段重点阐述结构化分析的过程和工具,最后对结构化建模进行总结。


建模定义

       系统建模,即建立系统模型,对系统做出抽象、无歧义的表达。通过一些工具、方法对业务(组织)进行抽象、分解、分析和设计,最终转化为系统的模型化表达(各种图形、表格和文字描述)。

建模目的

       本质上来说,每个软件系统都会建模,即便是几行代码实现的小工具也会建模,只是模型可能只停留在程序员的大脑中。当系统达到一定规模时,需要分析师、设计师、程序员进行协作,成体系的模型化分析设计方法,尤为重要。模型化分析,促进系统化思考。模型化表达,直观准确,易于理解。

建模分类

       一般采用结构化分析设计和面向对象分析设计两种建模方式。

结构化分析设计

       结构化分析设计包含分析和设计两个阶段,分析阶段以数据流为中心,对业务(组织)进行系统分析,形成分析模型。设计阶段以分析模型作为输入,进行系统设计(包括架构设计、概要设计和详细设计),形成设计模型。

分析阶段

       分析阶段采用的主要工具:数据流图(DFD)、数据字典(DD)、状态变迁图(STD)和实体关系图(ERD)。

  • 数据流图:以数据传递和处理的角度,表达系统的功能逻辑,具有抽象性、概括性和层次性等特点,属于功能建模范畴。
  • 数据字典:对数据流图中的所有元素进行阐述。
  • 状态迁移图:指明有外部事件发生时,系统将有什么动作,属于行为建模范畴。
  • 实体关系图(ERD):即概念数据模型,用实体和实体关系来描述业务(组织),属于数据建模范畴。

       结合功能建模、行为建模和数据建模,形成结构化分析模型,如图:

结构化分析模型.png
自顶向下数据流分析

       分析模型并非一蹴而就,需要自顶向下,从抽象到具体的模型细化过程。细化过程依托数据流程图的抽象性、概括性、层次性。


数据流层次结构.png

数据流层次结构中的顶层数据流,对业务进行系统级抽象表达。


数据流图-顶层.jpg

对顶层数据流进行分解,形成第一层数据流图。示例:


数据流图-1层.jpg

继续对第一层数据流进行细化,可形成第二层、三层等数据流图,同时制作数据字典,对数据流图的细节进行详细阐述。数据字典示例:

名称 使用方式 内容描述
购物人 数据:注册信息、商品
注册信息 加工:注册 姓名+账号+密码+邮件+电话
注册 数据流:注册信息
商品 编码+名称+规格+计量单位
订单信息 加工:购买 购物人+收货地址+{商品+数量}n

其中+、{}n等写法可以查阅数据字典表示法。

自底向上的概念数据模型

       从数据流图和数据字典中获取实体和关系关键信息,形成局部实体关系图,再经过层层汇聚,自底而上构建全局概念数据模型。构建过程如下图:


image.png

       生成的概念数据模型,包含实体、属性和关系三种元素。数据模型可按照不同的用途决定细化程度,作为概要设计的输入时,尽可能细化所有元素,确保设计的准确性。作为系统数据草图时,以核心实体+核心属性(也可不体现)+核心关系即可。以下是系统数据草图示例:


概念模型.jpg

设计阶段

       设计阶段以分析阶段的成果(数据流图、数据字典、状态迁移图、ER图)作为输入,进行系统设计。包括架构设计、概要设计和详细设计。
       架构设计充分考虑设计约束、制定设计原则,使用应用架构、数据架构、技术架构(含系统集成、分层架构、事务支持、错误处理机制、日志等)、部署架构,对系统进行分解、集成、复用,形成功能、数据、开发、部署等多维度系统草图,指导概要设计、详细设计和开发。
       概要设计在架构设计的基础上,深入到子模块层级进一步分解。主要包括系统结构设计、数据设计、接口设计、出错设计等。

  • 系统结构设计:基于应用架构,包括系统结构图、模块设计。

  • 数据设计:基于数据架构,包括数据逻辑模型和其他数据设计(如文件)。

  • 接口设计:基于系统集成,包括界面接入、内部接口设计、外部接口设计等。

  • 出错设计:基于错误处理机制,细化描述错误处理的细节。
    以下是概要设计的工具示例:

  • 系统结构图:


    系统结构图
  • 逻辑数据模型:

    逻辑数据模型.jpg

           详细设计,在系统架构的规范下,对概要设计进行实现设计,使用物理数据模型、程序流程图、伪代码等工具。以下为详细设计工具示例:

  • 物理数据模型:较常用,图略。

  • 程序流程图:


    程序流程图.jpg
  • 伪代码:

Begin transaction
     Queue  message   callserviceA
     Queue  message   callserviceB
End transaction
For each message in queue
     peek message
     consume message :callservice 
     remove message 
End For

总结

       面对一个新的领域,系统化的分析和设计,能帮助我们梳理业务,获取领域知识,形成系统的分析模型和设计模型。在部分项目中,可能我们没经过分析和设计,就能快速发掘订单、出库单、物流单等实体,甚至包含实体关系和模块分解结构,只是因为我们长期累积了某方面的领域知识。

参考文章:
http://www.iigrowing.cn/shu_ju_liu_tu_dfd_jian_jie.html
https://www.cnblogs.com/huhaibo/p/3409664.html
https://blog.csdn.net/hu19930613/article/details/82708292

你可能感兴趣的:(系统建模-结构化分析与设计)