Step 1:根据软件的功能描述,绘制数据流图:
问题表述:
假设的仪表板将完成下述功能:(1) 通过模数转换实现传感器和微处理机接口;(2) 在发光二极管面板上显示数据;(3) 指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4) 指示加速或减速;(5) 超速警告:如果车速超过55英里/小时,则发出超速警告铃声。
首先了解数据流图的4种基本符号:
然后,对从问题描述中提取数据流图的4种成分:
数据流图的成分 映射—>方法或实体
数据处理: 读取(轮胎)旋转信号,读取(尾气)燃料流信号,计算gph,计算燃料消耗mpg,计算里程,产生mpg显示,产生mpg显示,产生里程显示,发出超速警告,产生加速/减速显示等等。
数据源点: 传感器
数据终点: 发光二极管面板
数据存储文件: 无
数据流: (轮胎)旋转信号,(尾气)燃料流信号,每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等。
难点在于我们是否在进行问题的描述之后对问题的流程有详细的理解,我们很难通过单一的问题描述去把所有的数据流图的成分去映射完整,从而对问题的描述到实际的系统流程设计发生概念性的理解错误。
总而言之,对问题的描述部分的理解决定了一个系统的框架走向,因此,对问题的描述进行深入的咨询专业人士在实际的工业生产中也是必不可少的。
是的,我们只考虑系统的设计部分,省略了数据源点和数据终点。术业有专攻,在实际的数据流图的绘制中加入了一些我们外行人根本看不懂的东西(“读和校验”,“收集和求平均”等等),学习的是思想,切勿纠结于细枝末节,我们继续,看完我们会有所收获的。
伏尔泰说过,常识并不是大家都知道的,常见的东西。
Step 2:根据数据流图,分级绘制结构图:
•边界划分:
接下来,确定输入流和输出流的边界,从而孤立出变换中心:
•第一级分解:
软件结构代表对控制的自顶向下的分配,所谓分解就是分配控制的过程(说白了,就是把系统分成3个部分,输入部分,转换处理部分,输出部分):
•第二级分解:
把数据流图中的每个处理映射成软件结构中一个适当的模块(说白了,就是针对已经划分好的输入部分,转换处理部分,输出部分进行内部的结构划分):
以“接收传感器信号”部分为例,进行结构图的绘制,仔细观察结构图的层次关系,不就是把数据流图中接收传感器信号的部分按箭头顺序拎起来了嘛??是这样吧<—doge.gif)
“数据转换控制”的结构图如下:
“驱动仪表板”的结构图如下:
•精化减少耦合:
软件结构进一步精化,对初步分割得到的模块进行再分解或合并。
具体到数字仪表板的例子,可做如下某些可能的修改:(1)输入结构中的模块“转换成rpm”和“收集sps”可以合并;(2)模块“确定加速/减速”可以放在模块“计算mph”下面,以减少耦合;(3)模块“加速/减速显示”可以相应地放在模块“显示mph”的下面。
•添加数据/控制信号流向:
结构图中一个方框代表一个模块,框内注明模块的名字或主要功能。
方框之间的箭头(或直线)表示模块的调用关系。位于上方的方框代表的模块调用下方的模块。(尾部是空心圆表示传递的是数据。实心圆表示传递的是控制信息。)
软件工程,画图并不难,难的是如何将问题描述转化为项目功能的具体需求,难的是结构的设计和统筹。