导读
本篇开头介绍系统建模的定义、目的和分类,然后以分析、设计两个阶段重点阐述结构化分析的过程和工具,最后对结构化建模进行总结。
建模定义
系统建模,即建立系统模型,对系统做出抽象、无歧义的表达。通过一些工具、方法对业务(组织)进行抽象、分解、分析和设计,最终转化为系统的模型化表达(各种图形、表格和文字描述)。
建模目的
本质上来说,每个软件系统都会建模,即便是几行代码实现的小工具也会建模,只是模型可能只停留在程序员的大脑中。当系统达到一定规模时,需要分析师、设计师、程序员进行协作,成体系的模型化分析设计方法,尤为重要。模型化分析,促进系统化思考。模型化表达,直观准确,易于理解。
建模分类
一般采用结构化分析设计和面向对象分析设计两种建模方式。
结构化分析设计
结构化分析设计包含分析和设计两个阶段,分析阶段以数据流为中心,对业务(组织)进行系统分析,形成分析模型。设计阶段以分析模型作为输入,进行系统设计(包括架构设计、概要设计和详细设计),形成设计模型。
分析阶段
分析阶段采用的主要工具:数据流图(DFD)、数据字典(DD)、状态变迁图(STD)和实体关系图(ERD)。
- 数据流图:以数据传递和处理的角度,表达系统的功能逻辑,具有抽象性、概括性和层次性等特点,属于功能建模范畴。
- 数据字典:对数据流图中的所有元素进行阐述。
- 状态迁移图:指明有外部事件发生时,系统将有什么动作,属于行为建模范畴。
- 实体关系图(ERD):即概念数据模型,用实体和实体关系来描述业务(组织),属于数据建模范畴。
结合功能建模、行为建模和数据建模,形成结构化分析模型,如图:
自顶向下数据流分析
分析模型并非一蹴而就,需要自顶向下,从抽象到具体的模型细化过程。细化过程依托数据流程图的抽象性、概括性、层次性。
数据流层次结构中的顶层数据流,对业务进行系统级抽象表达。
对顶层数据流进行分解,形成第一层数据流图。示例:
继续对第一层数据流进行细化,可形成第二层、三层等数据流图,同时制作数据字典,对数据流图的细节进行详细阐述。数据字典示例:
名称 | 使用方式 | 内容描述 |
---|---|---|
购物人 | 数据:注册信息、商品 | |
注册信息 | 加工:注册 | 姓名+账号+密码+邮件+电话 |
注册 | 数据流:注册信息 | |
商品 | 编码+名称+规格+计量单位 | |
订单信息 | 加工:购买 | 购物人+收货地址+{商品+数量}n |
其中+、{}n等写法可以查阅数据字典表示法。
自底向上的概念数据模型
从数据流图和数据字典中获取实体和关系关键信息,形成局部实体关系图,再经过层层汇聚,自底而上构建全局概念数据模型。构建过程如下图:
生成的概念数据模型,包含实体、属性和关系三种元素。数据模型可按照不同的用途决定细化程度,作为概要设计的输入时,尽可能细化所有元素,确保设计的准确性。作为系统数据草图时,以核心实体+核心属性(也可不体现)+核心关系即可。以下是系统数据草图示例:
设计阶段
设计阶段以分析阶段的成果(数据流图、数据字典、状态迁移图、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