对软件工程课中数据流图教学的探讨

2014-05-30 10:48彭立
新校园·上旬刊 2014年7期
关键词:软件工程教学

彭立

摘 要:数据流图是软件工程实践中一种非常重要的建模工具。因为缺乏足够的重视,加之没有全面掌握数据流图的画法,学生对该知识点的掌握情况往往不尽如人意。本文对数据流图的教学进行了探讨,强调了数据流图对整个项目开发的重要性,阐明了数据流图中各种元素的含义以及绘图的原则。

关键词:软件工程;数据流图;教学;绘图原则

一、引言

软件工程是人们为了应对软件危机而提出并研究的一门学科,对于大型软件的开发和维护,它具有极其重要的指导作用,因而一直以来都是高校计算机专业的必修课。软件工程提出了软件生命周期这个概念,而需求分析是软件生命周期中最为重要的一个阶段,因为这个阶段工作的好坏决定了开发出的系统是否满足用户的要求。在该阶段,分析员需要建立系统的逻辑模型,其中包括系统的功能模型。无论是采用结构化分析方法还是面向对象分析方法,数据流图都是功能建模的最好工具,原因有二:一方面,数据流图中的符号少而简单,且易于理解和掌握,对于用户而言也是如此;另一方面,数据流图描绘了数据从输入到输出的过程中所经历的变换,使系统的功能可从一个比较高的层面被展现出来,从而便于分析员和用户之间的交流。数据流图对需求分析的重要性决定了它是软件工程教学中的一项重要内容,教师往往会花大量的时间对该知识点进行讲解。尽管如此,笔者从作业、课程设计和毕业设计等方面发现许多学生对该知识点的掌握情况并不理想。究其原因主要有两点:一是没有真正意识到数据流图对整个项目开发的重要性;二是没有全面掌握数据流图的画法。本文从这两方面原因入手,就如何抓好数据流图的教学进行了探讨。

二、数据流图对整个项目开发的重要性

因为数据流图只是在一个比较抽象的层面对软件系统的功能进行描述,学生很难认识到它对整个项目开发的重要性,他们往往觉得绘制数据流图只是做做样子而已,流图的质量无关紧要。为了纠正学生的错误认识,教师在教学中应跟学生讲清楚并强调以下事实。

数据流图的重要性主要体现在需求分析阶段,在该阶段,数据流图被用于建立系统的完整逻辑模型,它明确了系统的边界以及数据在系统内部流动及变换的逻辑过程。通过绘制分层数据流图,系统的所有功能以一种由抽象到具体的方式被展现出来。数据流图是分析员和用户之间交流的工具。通过数据流图,分析员表达了他们对用户需求的理解,用户能判断分析员是否真正理解了他们的需求。数据流图是需求规格说明书的重要组成部分,在描述业务流程较为复杂的功能项时,它具有文字说明所无法比拟的优势,而需求规格说明书是系统设计和测试的主要依据。

除了在需求分析阶段,数据流图在软件生命周期的其它阶段也能发挥作用。可行性研究是一个简化和压缩了的分析和设计过程,在该阶段,数据流图能被用于建立系统的高层逻辑模型。在总体设计阶段,基于自动化边界划分,数据流图能帮助设计人员确定系统的物理实现方案,此外,若采用结构化设计方法,从数据流图能直接导出系统的体系结构。在系统测试中,数据流图能指导测试人员设计测试用例。

三、数据流图的画法

1.数据流图中的元素

在讲授数据流图的画法之前,首先要让学生弄清楚图中各种元素的含义。流图中的元素有5种:源点、终点、数据流、加工、数据存储。

(1)源点和终点。源点和终点是与系统存在数据交换的外部实体,它们可以是人,也可以是其它系統。其中,源点为系统提供输入,终点接收系统的输出。

(2)数据流。数据流代表了流图中不同元素之间传递的数据,它具有一定的数据结构,更具体地说,它是由若干个数据项按一定的方式(例如顺序、选择和循环或这三种方式的组合)组织而成。

(3)加工。将接收到的输入流变换成输出流,这种变换主要体现在以下几个方面:

*数据的转移。例如将数据从一个文件取出来,存入另一个文件。

*执行计算。例如根据所采购的商品的数量和单价计算总价。

*做出判断。例如根据用户名和密码判断当前登陆的用户是否合法。

*基于内容和业务规则划分数据流。例如将某个订单划分为可供货的订单或不可供货的订单。

*过滤或汇总数据记录以产生新的数据流。例如过滤掉班级学生记录中女生的记录,只保留男生的记录;或者将不同班级的学生记录组合在一起构成全年级的学生记录。

(4)数据存储。数据存储是为加工存放数据的地方。例如文件和表都可看成是数据存储。加工可对数据存储进行读写删改操作。数据存储和数据流的不同之处在于,前者存放的是静态数据,而后者中的数据是动态数据。

2.绘制数据流图的原则

为了绘制有效的数据流图,必须掌握绘图的原则。在软考中,有关数据流图的试题很多都涉及到绘图原则,因此在教学中,教师应通过案例教学法跟学生讲清楚每一条原则。通过查找资料,笔者总结了一套完整的绘图原则,现分两部分说明如下。

(1)总的原则

①为流图中的每一个元素采用合适的命名。数据流或数据存储的名字应反映其全部内容,而不仅仅是它的某些成分,一般采用名词或名词短语。加工的名字应反映它全部的功能,而不仅仅是它的部分功能,最好是由一个及物动词加上一个宾语组成。绝不要用“如果,则”这样的声明作为加工的名字。源点和终点的名字可采用它们在问题域中习惯使用的名字。

②流图中每个元素都必须有名字,与数据存储相连的数据流除外。

③加工的输入数据流和输出数据流不能同名,即使它们有相同的结构。

④每一个加工至少有一个输入数据流和一个输出数据流。

⑤所有的数据流必须以一个加工开始或者结束。

根据以上原则,可发现图1中有5处错误:数据流X不应出现在流图中;数据流H不应出现在流图中;加工2的的输入数据流和输出数据流同名,都为Z;加工4只有输入数据流;加工5只有输出数据流。

图1 数据流图绘图原则例1

⑥流图中不可夹带控制流。这条原则指出数据流图不能和程序流程图混为一谈。数据流图中的加工代表的都是对数据的处理,数据流的方向反映的是数据流动的方向,而不是加工执行的顺序。程序流程图中所包含的步骤既可以是对数据的处理,也可以是控制转移,图中的箭头线指明了步骤执行的顺序。图2中的两张流图违背了该原则。(a)中的“取下一张卡片”并不代表数据流动,而是表明“检查卡片合理性”结束后,应由“操作员”取出下一张卡片,所以它是控制流。類似地,(b)中的“每月第一天”也不代表数据流动,它只是“计算工资”的激发条件。

图2 数据流图绘图原则例2

⑦为了避免流图中出现线条交叉,同一个源点、终点或数据存储均可在不同位置多次出现,对于相同的源点或终点,要在其符号的右下方画小斜线,对于相同的数据存储,要在其符号左边画竖线。

⑧若某个数据存储只被一个加工访问,它应隐含在该加工内部,而不应出现在流图中。

⑨保持数据守恒。一个加工的输出流中的数据项要么来自该加工的输入流,要么是该加工所产生的数据。例如:某个加工有两个输入流“学生信息”和“教材”,其输出流为“订书单”,其中,学生信息=学号+姓名,教材=教材ISBN+教材价格,订书单=教材ISBN+教材价格+教材数量;若该加工能根据“学生信息”计算出“教材数量”,则对其而言数据是守恒的。

⑩自顶向下逐层分解,绘出分层数据流图。对于一个大型的软件系统,若在一张流图中画出其所有的数据流和加工,则该图将极其庞大复杂且难以理解。而绘制分层数据流图是控制画图复杂性的最好方法。一套分层数据流图可分为顶层、中间层和底层三个层次。顶层中的流图只有一张,它明确了系统的边界。该图中只有一个加工,它代表整个系统,它的输入流代表了系统的输入数据,它的输出流代表了系统的输出数据。底层中的每一张流图由一些无需分解的加工组成,这些加工都已足够简单,称为基本加工。中间层位于底层和顶层之间。中间层的每一张流图是对其上层父图中某个加工的细化,它包含的每一加工可能还会继续分解,从而形成子图。

(2)绘制分层数据流图的原则

①保持父图与子图的平衡。对于父图中任意一个加工,其输入数据流(或输出数据流)必须与其分解后产生的子图的输入数据流(或输出数据流)保持“一致”。这并不意味着两者在数量上和名称上必须完全相同,而意味着两者所包含的数据项在数量上和名称上必须完全相同。在图3中,(b)为(a)中的加工“开领书单”细化后得到的子图,若“发票”包含的数据项=“学生”包含的数据项+“教材”包含的数据项,则(a)和(b)是平衡的。

图3 数据流图绘图原则例3

②注意分解的速度。一般来说,一个加工最好分解为2~4个子加工,最多不得超过7个。

③遵守图和加工的编号规则。顶层图只有一张,图中的加工也只有一个,该图和图中的加工都无需编号。0层图(位于顶层图下方)只有一张,该图无需编号,图中的加工编号分别是1,2,……,n。对于其余层次中的每一张流图,其编号就是父图中相应加工的编号,图中加工的编号由图号、圆点和序号组成,例如1.1,1.2,……,1.n。

四、结语

除了让学生掌握数据流图的画法外,教师还应设法为学生提供更多的练习素材。考虑到教材上的习题太少且与实际脱节,教师应从网络或其它途径搜集习题和资料,并从中挑选难度适中的题目作为学生的练习素材。我们相信,学生只要树立了对数据流图重要性的正确认识,全面掌握了其画法并勤于练习,他们就能在软件项目开发中真正用好这个工具。

参考文献:

[1]Donald S Le Vie,Jr.Understanding Data Flow Diagrams[EB/OL].http://ratandon.mysite.syr.edu/cis453/notes/DFD_over_Flowcharts.pdf.

[2]张海藩.软件工程导论[M].北京:清华大学出版社,2008.

[3]Data flows:Note on Data-Driven Process Modeling[EB/OL].http://faculty.babson.edu/dewire/Readings/dfdintro.htm.

[4]张雅军.浅析软件工程中的数据流图的画法[J].天津职业院校联合学报,2008,10(2):70-73.

猜你喜欢
软件工程教学
微课让高中数学教学更高效
如何让高中生物教学变得生动有趣
“自我诊断表”在高中数学教学中的应用
对外汉语教学中“想”和“要”的比较
依托工作室的软件工程实践教学研究
应用瀑布模型的MOOC制作方法
融合APTECH体系的软件产业人才培养探究
基于工程教育认证的《软件工程》课程教学质量建设研究 
关于如何创新和完善计算机软件工程管理的探讨
跨越式跳高的教学绝招