【Day 04】阿公级的系统分析方法 -- DFD

前言

上一篇谈到领域驱动设计并不是横空出世,而是经由过去几十年的逐步演化而成的,因此,我们就来看看阿公级的系统分析方法 -- 『结构化分析与设计』(俗称DFD),现在很少人在讨论了,但是它其实是一个最直觉的系统分析方法,系统开发人员可以藉由这个方法轻易的掌握使用者的需求。

初步接触

记得读研究所时,直属学长就极力推荐一本书『Structured Analysis and System Specification』,当时很讶异,我读的是工业工程研究所,不是资工啊,不过为了尊重学长,还是买了这本书,就让它躺在书架上,直到初入社会,没想到Mentor也指定一个月要看完这本书,且要周周报告,这才努力地看完,也才领略到系统分析之美,为了写这篇文章,特地查看市面上是否还销售这本书,没想到竟暴涨到4234元,跟收集古董一样,当初只花了200元,赚翻了。
https://ithelp.ithome.com.tw/upload/images/20210919/200019765tqejxO3mC.png
图一. 博客来-Structured Analysis and System Specification,图片来源:https://www.books.com.tw/products/F012874494

之後,Edward Yourdon 又出了一系列的相关书籍,其中『Modern Structured Analysis』的附录有一完整的个案研究,非常珍贵,它以自身出版社系统为例,撰写出完整的规格书。这本书便宜一点,现在只卖US$22.5,记得很多年以前,天珑书局清库存时,只卖NT$50,当时有一股冲动,想要全部买下来,只可惜没有付诸行动。
https://ithelp.ithome.com.tw/upload/images/20210921/20001976eyDoHUDsDB.png
图二. Modern Structured Analysis,图片来源:https://www.marlowesbooks.com/Modern-Structured-Analysis-Yourdon-Edward-Book-122490

核心流程

讲了这麽多废话,结构化分析(Structured Analysis)究竟有甚麽特点呢?

  1. 它以资料流程图(Data Flow Diagram, DFD)为核心,先绘制系统的功能(Function),再描述功能之间的资料流,如果需要落地,就绘制『资料储存』(Data Store),就这麽简单。
    范例一. 订单处理
    https://ithelp.ithome.com.tw/upload/images/20210921/200019769VrMWAbplD.png
    图三. Modern Structured Analysis,图片来源:https://www.conceptdraw.com/examples/data-flow-diagram-of-library-system

范例二. 生鲜蔬菜购物系统
https://ithelp.ithome.com.tw/upload/images/20210921/20001976698uGbdtrX.png
图四. 生鲜蔬菜购物系统 Level 0 DFD,图片来源:https://sites.google.com/site/gdghujy/gtgrgtr/di1jiedfd

其中包含的符号很简单:
https://ithelp.ithome.com.tw/upload/images/20210921/200019768pEg4Gd4xr.png
图五. DFD 元素

『资料储存』(Data Store)有另一派画法,Gane Sarson 以下列符号表示:
https://ithelp.ithome.com.tw/upload/images/20210922/20001976wyADtS8iUp.png

绘制的思维很直觉,先跟使用者访谈,将使用者的角色、属性、职掌记录下来,再从访谈记录中将流程萃取出来,并思考现行流程如何改善,就可画出上述的流程图,并将每一个处理的输入及输出标示出来,即为资料流。期间如果要存档或写入资料库,即绘制『资料储存』(Data Store)。注意,DFD不考虑例外状况及控制,只描述资料在处理之间的流动,细部规划留待系统设计阶段处理,避免过於钻牛角尖。

  1. 资料字典(Data Dictionary):将资料流的栏位内容列表,并注明资料型态、长度、预设值、发生频率等。
    https://ithelp.ithome.com.tw/upload/images/20210921/20001976tCRaTVbaRP.png
    图六. 资料字典

  2. 资料储存(Data Store):与资料流相同,列出包含的栏位内容。注意,在系统分析阶段,并不需要对资料储存作资料表的规划,例如正规化,现阶段主要着重『What』,而非『How』。

  3. 为每个处理撰写处理规格书(Mini Spec.):以结构化叙述(Structured English)说明输入资料流如何转换为输出资料流,如果,处理逻辑过於复杂,可绘制下一层的资料流程图,直到处理规格书可以使用一页就撰写完成为止。
    https://ithelp.ithome.com.tw/upload/images/20210921/20001976vblXgPBrvz.png
    图六. 结构化叙述(Structured English)

分层(Layer)的概念是DFD非常棒的特点,它可以把很复杂的系统描绘清楚,例如,ERP系统分为采购、库存、销售、会计、...等子系统,而每个子系统的处理又非常复杂,若使用DFD分层绘制,每个人可以聚焦在不同的层次或是不同的子系统,例如图四『生鲜蔬菜购物系统』 Level 0 DFD 中的『2.0 订单管理』可以再展开,另画一张DFD说明细节,如下图:
https://ithelp.ithome.com.tw/upload/images/20210922/20001976FQcFOumMX3.png
图七. 『生鲜蔬菜购物系统』 Level 1 DFD,图片来源:https://sites.google.com/site/gdghujy/gtgrgtr/di1jiedfd

完稿後DFD结构如下:
https://ithelp.ithome.com.tw/upload/images/20210922/20001976Nln98v7N1l.png
图八. DFD 分层(Layer)

上述工作完成後,就是一本很完整的系统分析报告书,系统设计人员再把控制/例外细节、资料料库设计、程序规格补上,就可以交给程序设计师开发了。

当年市面上有许多辅助的CASE Tools,可以把图形超连结,只要点选上层DFD的处理,就可跳到下一层的DFD或处理规格书,点选资料流或资料储存,就可以弹出资料字典,看到详细的内容。只可惜价格过高,并没有被普遍采用,否则,今天搞不好还是『结构化分析』独霸的局面。

结语

从以上的介绍,结构化分析有几项特点:

  1. 它是一个完整的方法论,不是单纯的图形工具,只要照着作,就可以完成系统分析的工作,它还有很多检查清单(Check List),可以自我审查报告书是否有疏漏,另外针对复杂的逻辑,还有其他的图形工具辅助,如Decision tree、Decision table、State Transition Diagram。
  2. 分层的DFD是一个由上往下(Top Down)的分析方式,先看全貌,再展开为细节,见树又见林。编码系统,可以串联上下层的关系,例如DFD 1 可以展开为 1.1、1.2、1.3...。
  3. 将处理转为函数非常直觉,因为输入/输出(资料流)都描绘清楚了。
  4. 只有处理、资料流、资料储存、外部系统四种符号,非常容易说明。

相对的,它也有一些缺点,导致此方法论被取代:

  1. 现在物件导向程序设计(OOP)当道,DFD以处理为核心,并没有与OOP有直接的连结,虽然,Yourdon 出版了几本书,试图与物件导向连结,不过,似乎未能挽回颓势。
  2. 瀑布型的开发期程过长,不符合瞬息万变的企业环境,导致RUP、SCRUM等并行开发方式崛起。
    https://ithelp.ithome.com.tw/upload/images/20210922/20001976gT3RC3zIFm.png

我还记得当年主管的提醒,不断的练习才能熟能生巧,从早上醒来到出发上班,都可以练习画DFD,应用无所不在,例如,这一篇访谈记录『引进日本经验打好物流基本功,新竹物流下一步要迈向智慧物流』谈到货运业的货品追踪系统,如何以DFD描绘系统功能就是一个很好的个案研究。

这系列的文章虽然以领域驱动设计(DDD)为主,但笔者认为结构化分析的思维,仍有许多值得参考的地方,值得大家品尝,其中的细节可以讲个一天,避免文章过长,只能浅嚐即止了。


<<:  InnoDB统计资料是如何收集的

>>:  Day 8 中断服务处理机制与分配器

【Day 03】第一个小程序

今天,就让我们写一个小程序,向 C 语言这个世界打招呼吧! #include<stdio.h&...

Day 16 留言是种互动!

好奇是知识的萌芽,萌芽之後,就要给予养分,让知识茁壮,没有养分的知识,只是一个没有办法萌芽的种子而已...

[Day 10] 每家公司都有资料产品

(https://www.manmonthly.com.au/news/graphene-help...

[Day28]用Canvas打造自己的游乐场-labyrinth 收尾

今天要来把迷宫游戏做个收尾,其实也就检查一下有没有哪里有问题,那因为後来觉得55块砖的范围还有有点大...