大连理工大学软件学院软件工程2020/2/9大连理工大学软件学院2第2章可行性研究•许多问题不可能在预定的系统规模或时间期限内解决•目的:使用最小的代价,尽可能在短的时间内,确定问题是否能够解决2020/2/9大连理工大学软件学院3第2章可行性研究•2.1可行性研究的任务•2.2可行性研究过程•2.3系统流程图•2.4数据流图•2.5数据字典•2.6成本/效益分析2020/2/9大连理工大学软件学院42.1可行性研究的任务•确定问题是否值得去解–分析可能的解法–判定系统规模和目标是否能够实现–效益是否可观•较高层次的系统分析和设计过程2020/2/9大连理工大学软件学院52.1可行性研究的任务•问题定义–是否正确–如有错误加以改正–如有约束和限制必须清楚的列出•系统逻辑模型主要解法研究可行性。。。2020/2/9大连理工大学软件学院62.1可行性研究的任务•可行性的4个方面–技术可行性–经济可行性–操作可行性–法律可行性•预期工程总成本的5%~10%2020/2/9大连理工大学软件学院72.2可行性研究过程•1.复查系统规模和目标–改正含糊或不确切的叙述–清晰地描述限制和约束•——解决正确的问题2020/2/9大连理工大学软件学院82.2可行性研究过程•2.研究目前正在使用的系统–完成现有系统的基本功能–解决现有系统的问题–绘制高层系统流程图–掌握与其他系统的接口2020/2/9大连理工大学软件学院92.2可行性研究过程•3.导出新系统的高层逻辑模型–现有物理系统现有系统的逻辑模型目标系统逻辑模型新的目标系统–高层数据流图–初步的数据字典2020/2/9大连理工大学软件学院102.2可行性研究过程•4.进一步定义问题–分析员和用户–以数据流图和数据字典为基础–复查问题定义、工程规模和目标–重复1~4步,直至提出的逻辑模型完全符合系统目标2020/2/9大连理工大学软件学院112.2可行性研究过程•5.导出和评价供选择的解法–从技术角度出发,考虑解决问题的不同方案–技术可行性,排除不现实的系统–操作可行性,排除用户不能接受的方案–经济可行性,排除利润低的方案•(成本/效益分析)–制定进度表(估算生命周期每个阶段的工作量)2020/2/9大连理工大学软件学院122.2可行性研究过程•6.推荐行动方针–如果值得开发,则选择最好的解法–成本/效益分析•7.草拟开发计划–工程进度表–各类开发人员、各种资源需求情况–生命周期每个阶段的成本–下一个阶段详细进度表和成本估计2020/2/9大连理工大学软件学院132.2可行性研究过程•8.书写文档提交审查–用户、客户组织负责人、评审组审查–见《可行性报告格式.doc》2020/2/9大连理工大学软件学院142.3系统流程图•系统流程图–概括描绘物理系统的传统工具–用图形符号,以黑盒子形式描述组成系统的每个部件–程序、文档、数据库、人工过程–数据在各部件之间的流动情况(非处理过程)2020/2/9大连理工大学软件学院152.3系统流程图•2.3.1符号–基本符号2020/2/9大连理工大学软件学院162.3系统流程图–系统符号(符号具体化)2020/2/9大连理工大学软件学院172.3系统流程图–系统符号(符号具体化)2020/2/9大连理工大学软件学院18系统流程图例子•例子•每个符号用黑盒子形式定义了组成系统的一个部件。•没有部件内部的具体工作过程•箭头确定通过系统的逻辑路径(信息流动路径)2020/2/9大连理工大学软件学院192.3系统流程图•分层(逐层细化的思想)–高层次系统流程图描绘总体概貌–分别描绘每个关键功能2020/2/9大连理工大学软件学院202.4数据流图•当数据在软件系统中移动时,它将被一系列“变换”所修改。•数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。•在数据流图中没有任何具体的物理部件,只是描绘数据在软件中流动和被处理的逻辑过程。2020/2/9大连理工大学软件学院212.4.1符号•数据流图有四种基本符号:•数据流与程序流程图中用箭头表示的控制流有本质不同,千万不要混淆。2020/2/9大连理工大学软件学院22附加符号2020/2/9大连理工大学软件学院23•假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。•对于每个需要再次定货的零件应该列出下述数据;零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者。•零件入库或出库称为事务。•通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。2.4.2示例2020/2/9大连理工大学软件学院242.4.2示例2020/2/9大连理工大学软件学院252.4.2示例•一旦把数据流图的四种成分都分离出来以后,就可以着手画数据流图。•任何系统的基本模型都由若干个数据源点/终点以及一个处理组成,这个处理就代表了系统对数据加工变换的基本功能。定货系统的基本系统模型(突出表明了数据的源点和终点)26/130结构化分析方法中的抽象与分解•抽象:从作为整体的软件系统开始(第一层),每一抽象层次上只关注于系统的输入输出•分解:将系统不断分解为子系统、模块……•随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)2.42.32.22.121431.31.21.1X2020/2/92020/2/9大连理工大学软件学院27•把基本系统模型细化,描绘系统的主要功能。•在图2.6中给处理和数据存储都加了编号,这样做的目的是便于引用和追踪。2.4.2示例2020/2/9大连理工大学软件学院282.4.2示例图2.6定货系统的功能级数据流图2020/2/9大连理工大学软件学院292.4.2示例图2.7把处理事务的功能进一步分解后的数据流图2020/2/9大连理工大学软件学院30•注意:–当进一步分解将涉及如何具体实现一个功能时,就不应该再分解了。–当对数据流图分层细化时必须保持信息连续性,也就是说,当把一个处理分解为一系列处理时,分解前和分解后的输入/输出数据流必须相同。–对处理进行编号的方法。2.4.2示例2020/2/9大连理工大学软件学院31•数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。•命名时应注意的问题:1.为数据流(或数据存储)•名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的•不要使用空洞的、缺乏具体含义的名字(如“数据”、“信息”、“输入”之类)•如果在为某个数据流(或数据存储)起名字时遇到了困难,则很可能是因为对数据流图分解不恰当造成的,应该试试重新分解,看是2.4.3命名2020/2/9大连理工大学软件学院322.•通常先为数据流命名,然后再为与之相关联的处理命名。这样命名比较容易,而且体现了人类习惯的“由表及里”的思考过程。•名字应该反映整个处理的功能,而不是一部分功能。•名字最好由一个具体的及物动词,加上一个具体的宾语组成。应该尽量避免使用“加工”、“处理”等空洞笼统的动词作•通常名字中仅包括一个动词,如果必须用两个动词才能描述整个处理的功能,则把这个处理再分解成两个处理可能更恰•如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的迹象,应考虑重新分解。2.4.3命名2020/2/9大连理工大学软件学院33工资计算系统的顶层(0层)数据流图人事部门后勤部门出勤表业绩表水电扣款表职工银行工资条工资存款清单工资计算系统2020/2/9大连理工大学软件学院34工资计算系统第一层数据流图人事部门后勤部门出勤表业绩表水电扣款表职工银行工资条1计算工资实发工资表3工资转存2打印工资清单工资存款清单工资清单F32020/2/9大连理工大学软件学院35工资计算系统的第二层数据流图(a)“计算工资”子数据流图;(b)“工资转存”子数据流图2020/2/9大连理工大学软件学院36工资计算系统的第三层数据流图人事部门1.1.2计算业绩奖出勤表业绩表请假、旷工时数出勤时数1.1.3计算出勤奖1.1.4计算缺勤扣款业绩奖奖惩条例F1缺勤扣款表1.1.5计算各项奖金之和奖金发放表1.1.1统计出勤、请假及旷工时数出勤奖1.2.1计算各项基本数据之和1.2.2计算工资奖金之和工资档案F2应发工资表奖金发放表基本工资37分层数据流图的审查•检查图中是否存在错误或不合理(不理想)的部分–一致性:分层DFD中不存在矛盾和冲突–完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素2020/2/9大连理工大学软件学院38分层数据流图的一致性•父图与子图平衡–任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致•数据守恒–一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生•一个加工的输出数据流不能与该加工的输入数据流同名2020/2/9大连理工大学软件学院39父图与子图不平衡的实例•加工2的输入数据流有M和N,输出数据流是T•而子图(右图)边界上的输入数据流是N,输出数据流是S和T123ABCMNT2.12.22.3NPSTQ2020/2/9大连理工大学软件学院40父图与子图平衡的实例•注意:如果父图某加工的一个数据流,对应于子图中几个数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这个数据流,那么它们仍算是平衡的e2.52.42.32.22.1b2b1acdb21acde(a)父图(b)子图a:考生通知单;b:统计分析表;b1:分类统计表;b2:难度分析表;c:错误成绩清单;d成绩清单;e合格标准。2020/2/9大连理工大学软件学院41数据不守恒的实例由于“正式成绩清单”中缺少“考生通知单”中的姓名、通信地址等数据,这些数据也无法由加工2.3自己产生,因此,加工2.3不满足数据守恒的条件考生名册2.5分析试题难度难度分析表2.4分类统计成绩分类统计表2.3制作通知单考生通知单2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正确成绩清单错误成绩清单由此可见:1.数据流的组成对DFD是有影响的2.构建DFD与建立数据字典应交替进行,以便于对分层DFD的校验42加工的输出数据流不能与该加工的输入数据流同名•同一个加工的输出数据流和输入数据流即使组成成份相同,仍应对它们取不同的名字,以表示它们是不同数据流–例如,“报名单”和“合格报名单”•允许一个加工有两个相同的数据流分别流向两个不同的加工2020/2/9大连理工大学软件学院43分层数据流图的完整性•每个加工至少有一个输入数据流和一个输出数据流•在整套分层数据流中,每个文件应至少有一个加工读该文件,有另一个加工写该文件•分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致•分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约2020/2/9大连理工大学软件学院44其它需注意的问题-1•适当命名:每个数据流、加工、文件、源和宿都应被适应地命名,名字应符合被命名对象的实际含义–名字应反映整个对象(如数据流、加工),而不是仅反映它的某一部分–避免使用空洞的、含义不清的名字,如数据、信息、处理、统计等–如果发现某个数据流或加工难以命名时,往往是DFD分解不当的征兆,此时应考虑重新分解•画数据流而不是画控制流–判断准则:这条线上是否有数据流过2020/2/9大连理工大学软件学院45其它需注意的问题-2•避免一个加工有过多的数据流–当一个加工存在许多数据流时往往意味着分解不合理–解决办法:重新分解•1)把需要重新分解的某张图(含有该复杂加工的图)的所有子图连接成一张图•2)把连接后的图重新划分成几个部分,使各部分之间的联系最小•3)重新定义父图,即第2)步中的每个部分作为父图中的一个加工•4)重新建立各子图,即第2)步中的每个部分都是一张子图•5)为所有的加工重新命名和编号2020/2/9大连理工大学软件学院46