梁文新 办公室:综合楼108 电 话: 87571625 liang@computer.org 软件工程导论 梁文新 办公室:综合楼108 电 话: 87571625 liang@computer.org
第二章 可行性研究(Feasibility Study) 2.1 可行性研究的任务 2.2 可行性研究过程 2.3 系统流程图 2.4 数据流图 2.5 数据字典 2.6 成本/效益分析 2.7 小结 2019/5/23 liang@computer.org
Why Feasibility Study? 并非所有问题都有简单明显的解法 许多问题不可能在预定的系统规模或时间期限之内解决 目的:用最小的代价在尽可能短的时间内确定问题是否能解决 没有解:放弃; 有解:寻找出最佳的解决方案 2019/5/23 liang@computer.org
2.1 可行性研究的任务 不是解决问题,而是确定问题是否值得去解决 较高层次上以抽象的方式进行的系统分析和设计过程 分析可能解法的利弊 判定系统规模和目标是否能够实现 效益是否可观 较高层次上以抽象的方式进行的系统分析和设计过程 2019/5/23 liang@computer.org
2.1 可行性研究的任务 问题定义 导出系统逻辑模型探索主要解法(实现方案)研究其可行性 了解系统应解决的问题,这些问题是如何提出的 设想这些问题如何去解决才能满足要求 确定的系统规模和目标是否正确,如有错误应及时纠正 对目标系统的约束和限制必须清楚的列出 导出系统逻辑模型探索主要解法(实现方案)研究其可行性 2019/5/23 liang@computer.org
2.1 可行性研究的任务 主要研究四个方面的可行性 预期工程总成本的5%~10% 技术可行性 经济可行性 操作可行性 法律、社会效益可行性 现有技术能否实现目标系统? 经济可行性 能否收回投资并获得利润? 操作可行性 操作方式是否适用于用户组织? 法律、社会效益可行性 《中华人民共和国著作权法》(1990) 《计算机软件保护条例》(1991) 预期工程总成本的5%~10% 2019/5/23 liang@computer.org
2.2 可行性研究过程 1. 复查系统规模和目标 通过访问关键人物,仔细阅读和分析相关材料对问题阶段书写的系统规模和目标进行进一步确认和复查 改正含糊或不确切的叙述 清晰地描述限制和约束 最终以确保所要解决的问题确实正确无误的 2019/5/23 liang@computer.org
2.2 可行性研究过程 2. 研究目前正在使用的系统 通过访问和调研,阅读相关文档和手册及实地考察等,了解系统能够做什么,为什么这样做,以及使用现有系统的代价 实现现有系统的基本功能和性能要求 发现和解决现有系统的问题 新系统应能给用户带来更多收益(增加收入或降低使用代价) 绘制出高层系统数据流图并请有关人员检验 掌握与其他系统的接口,作为约束条件之一 2019/5/23 liang@computer.org
2.2 可行性研究过程 3. 导出新系统的高层逻辑模型 现有物理系统现有系统的逻辑模型设想目标系统逻辑模型新的物理目标系统 定义目标系统的逻辑模型 高层数据流图 初步的数据字典 2019/5/23 liang@computer.org
2.2 可行性研究过程 4. 进一步定义问题 以数据流图和数据字典为基础,由系统分析员和用户一起复查问题定义、工程规模和目标 重复1~4步,直至提出的逻辑模型完全符合系统目标 定义问题分析问题导出试探性解再次定义…… 2019/5/23 liang@computer.org
2.2 可行性研究过程 5. 导出和评价供选择的解法 从系统逻辑模型出发,导出若干个较高层次物理解法进行比较和选择 技术可行性:排除不现实的系统 从数据流图划分出不同自动化边界从而导出不同的物理实现方案 用组合法导出若干可能的物理系统 操作可行性,排除用户不能接受的方案 经济可行性,排除无效益或低效益的方案 制定进度表以估计生命周期每个阶段的工作量 2019/5/23 liang@computer.org
2.2 可行性研究过程 6. 推荐行动方针 7. 草拟开发计划 8. 书写文档(可行性研究报告)提交审查 若值得开发,则选择最好的解法,并说明理由 详细的成本/效益分析 7. 草拟开发计划 工程进度表 各类开发人员、各种资源需求情况(when, how many, how long) 估计生命周期每个阶段的成本 下一阶段(需求分析)的详细进度表和成本估计 8. 书写文档(可行性研究报告)提交审查 由用户、客户组织项目负责人、专家评审组进行审查 2019/5/23 liang@computer.org
2.3 系统流程图(System Flowchart) 概括描绘物理系统的传统工具 用图形符号,以黑盒子形式描述组成系统的每个部件(程序、文档、数据库、人工过程) 表达系统各部件间数据流动的情况,而非对数据进行加工和控制 2019/5/23 liang@computer.org
2.3 系统流程图(System Flowchart) 2.3.1 符号 基本符号 2019/5/23 liang@computer.org
2.3 系统流程图(System Flowchart) 系统符号 2019/5/23 liang@computer.org
2.3 系统流程图(System Flowchart) 系统符号 2019/5/23 liang@computer.org
2.3 系统流程图(System Flowchart) 2.3.2 例子 某装配厂有一座存放零件的仓库,仓库中现有的各种零件的数量及每种零件的库存临界值等数据记录在库存清单主文件中 当仓库中零件数量发生变化时,应及时修改库存清单主文件 若某种零件库存量低于其库存临界值,则应报告给采购部门以便订货,规定每天向采购部门提交一次订货报告 2019/5/23 liang@computer.org
2.3 系统流程图(System Flowchart) 2.3.2 例子 2019/5/23 liang@computer.org
2.3 系统流程图(System Flowchart) 2.3.3 分层 高层系统流程图 描绘总体概貌,说明关键功能 低层系统流程图 分别描绘每个关键功能 2019/5/23 liang@computer.org
2.4 数据流图(DFD) 当数据在软件系统中移动时,它将被一系列“变换”所修改 数据流图(Data Flow Diagram, DFD) 是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换 在数据流图中没有任何具体的物理部件,只是描绘数据在软件中流动和被处理的逻辑过程 是系统逻辑功能的图形表示,便于用户理解以及用户和分析员之间的沟通 只考虑系统基本逻辑功能,而不考虑具体的物理实现 2019/5/23 liang@computer.org
2.4.1 符号 数据流与程序流程图中用箭头 表示的控制流有本质不同,切勿混淆! 基本图形元素 起点/终点或源/宿 (source/sink) 存在于软件系统外的人或组织,表示数据I/O的来源和去向 处理/加工 (process) 将输入数据加工成输出数据流 M:M,但至少1:1 数据存储或文件 (file) 存放数据;R/W/RW 数据流 (data flow) 从一个加工流向另一个加工 从加工流入文件(W);从文件流入加工(R) 从起点流向加工;从加工流向终点 数据流与程序流程图中用箭头 表示的控制流有本质不同,切勿混淆! 2019/5/23 liang@computer.org
附加符号 2019/5/23 liang@computer.org
数据流图的层次结构 按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统 在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统 其输入流是该系统的输入数据(一个或多个起点),输出流是系统所输出数据(一个或多个终点) 底层流图是指其加工不需再做分解(基本加工)的数据流图,其处于分层流图的最底层 中间层流图则表示对其上层父图的细化,其每一加工可能继续细化,形成子图 2019/5/23 liang@computer.org
分层的数据流图 2019/5/23 liang@computer.org
2.4.2 示例 假设采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件 2.4.2 示例 假设采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件 对于每个需要再次定货的零件应该列出下述数据;零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者 零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统 当某种零件的库存数量少于库存量临界值时就应该再次定货 2019/5/23 liang@computer.org
2.4.2 示例 2019/5/23 liang@computer.org
2.4.2 示例 顶层数据流图 给出了定货系统的基本系统逻辑模型,反映了目标系统的基本功能 2019/5/23 liang@computer.org
图2.6 定货系统的功能级数据流图(第一层数据流图) 2.4.2 示例 图2.6 定货系统的功能级数据流图(第一层数据流图) 2019/5/23 liang@computer.org
2.4.2 示例 图2.7 把处理事务的功能进一步分解后的数据流图 2019/5/23 liang@computer.org
数据流图的注意事项:一致性(1) 父图与子图平衡 保持信息的连续性 任何一张数据流图子图边界上的I/O数据流必须与父图对应加工的I/O数据流保持一致 父图中出现的文件也应该在子图中出现 F 2.3 B A B C 1 2 2.1 E C 2.2 父图 子图 2019/5/23 liang@computer.org
数据流图的注意事项:一致性(2) 数据守恒 一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生 加工未使用其输入数据流中的某些数据项,即这些数据项是多余的,可以从输入数据流中删除 2019/5/23 liang@computer.org
数据流图的注意事项:一致性(3) 局部文件 一个加工的输出数据流不能与该加工的输入数据流同名 子图内出现的局部文件不应出现在父图中 父图中出现的文件却应根据父图与子图平衡的原则在子孙图中画出 一个加工的输出数据流不能与该加工的输入数据流同名 即使组成成分相同也应取不同名称以示区别 2019/5/23 liang@computer.org
数据流图的注意事项:完整性 每个加工至少有一个输入数据流和一个输出数据流 分层数据流中的每个数据流和文件都必须命名,并且与数据字典保持一致 分层DFD中每个基本加工(不再分子图的加工)都应有一个加工规约(加工小说明)来描述加工的功能及其处理流程(加工逻辑) 结构化语言、判定表、判定树 2019/5/23 liang@computer.org
数据流图的注意事项:适当命名 适当命名 命名中应注意的问题 DFD中每个基本元素都应适当命名,名字应符合被命名对象的实际含义 数据流名:表单名称,如“订单”,“收款单”等 加工名:动词或及物动词加宾语,如“编辑订单”等 文件名:名词,如“商品库存”,“商品名册”等 源或宿:实际的人员或组织,如“顾客”,“供应商”等 命名中应注意的问题 名字应反映整个对象,而非仅反映其局部 避免使用空洞、含义不清的名字,如“数据”、“信息”等 若发现DFD中某个元素难以命名,则往往是DFD分解不当造成的,可考虑重新分解 2019/5/23 liang@computer.org
数据流图的其他注意事项 画数据流而非画控制流 避免一个加工有过多的数据流 数据流图强调的是数据的流向,而非控制的流向 一个加工数据流过多时,应重新分解DFD 2019/5/23 liang@computer.org
2.4.4 用途 基本目的:交流信息的工具 分析和设计的工具 不涉及物理细节,便于用户理解和评价 2.4.4 用途 基本目的:交流信息的工具 不涉及物理细节,便于用户理解和评价 当一张数据流图处理多于9个时,需要进行分层细化 分析和设计的工具 在数据流图上划分自动化边界 不同的边界划分可对应不同的物理系统 2019/5/23 liang@computer.org
2.4.4 用途 2019/5/23 liang@computer.org
2.4.4 用途 图2.8 这种划分自动化边界的方法暗示以批量方式更新库存清单 D2没有也罢 2019/5/23 2.4.4 用途 D2没有也罢 图2.8 这种划分自动化边界的方法暗示以批量方式更新库存清单 2019/5/23 liang@computer.org
2.4.4 用途 图2.9 另一种划分自动化边界的方法建议以联机方式更新库存清单 2019/5/23 liang@computer.org
2.4.4 用途 意味着什么样的系统? 2019/5/23 liang@computer.org
2.4.4 用途 D2没有也罢 联机更新库存,批量处理定货 2019/5/23 liang@computer.org
2.5 数据字典(Data Dictionary) 数据字典是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合 字典条目组成、每个条目描述DFD中的一个元素 数据字典是所有与系统相关的数据元素的有组织的列表 包含了对这些数据元素的精确、严格的定义,从而使得用户和系统分析员双方对输入、输出、存储的成分甚至中间计算结果有共同的理解 系统的逻辑模型由DFD和数据字典共同构成 相辅相成,缺一不可 2019/5/23 liang@computer.org
2.5 数据字典(Data Dictionary) 2.5.1 数据字典的内容 数据流 数据项(组成数据流和文件的数据) 文件(数据存储) 加工(处理) 源或宿 2019/5/23 liang@computer.org
2.5 数据字典(Data Dictionary) 字典条目描述的主要内容 DFD元素的基本信息:名称、别名、简述、注解等 定义:数据类型、数据组成等 使用特点:取值范围、使用频率、激发条件等 控制信息:来源、去向、访问权限等 分组信息:从属结构、物理位置等 2019/5/23 liang@computer.org
数据流条目 名称:数据流名(可用中文或英文名) 别名:名称的另外一个名字 简述:简要介绍作用即它产生的原因和结果 数据流组成:描述数据流由哪些数据项组成 数据流来源:来自何方(加工或源) 数据流去向:去向何处(加工或宿) 数据量流通量:数据量,流通量 2019/5/23 liang@computer.org
文件条目 名称:数据文件名 别名:文件名别名 文件编号:该文件在DFD中的编号 简述:对文件的简单说明,如存放的是什么数据 写文件的加工:描述哪些加工写此文件 读文件的加工:描述哪些加工读此文件 文件组织:描述文件的存储方式 (顺序、索引),排序的关键字 使用权限:描述各类用户对文件的读、写、修改的使用权限 数据量:文件的最大记录个数 存取频率:描述对该文件的读写频率 注解:其他说明 2019/5/23 liang@computer.org
数据项条目 名称:数据项名 别名:数据项别名 简述:对数据项的简单描述 数据类型:描述数据项的类型,如整型、实型、字符串型等 计量单位:指明数据项值的计量单位,如厘米、公斤等 取值范围:描述数据项允许的值域,如1-100 与其他数据项的关系:描述该数据项与字典中其他数据项的关系 注解:其他补充说明 2019/5/23 liang@computer.org
加工条目 名称:加工名 别名:加工别名 加工编号:该加工在DFD中的编号 简述:对加工功能的简述 输入数据流:描述加工的输入数据流,包括读哪些文件 输出数据流:描述加工的输出数据流,包括写哪些文件 加工逻辑:简述加工逻辑,加工顺序或对加工规约的索引 异常处理:描述加工工程中可能出现的异常情况及其处理方式 加工激发条件:描述执行加工的条件,如“身份认证正确” 执行频率:描述加工的执行频率,如每小时执行一次等 注解:其他补充说明 2019/5/23 liang@computer.org
源或宿条目 名称:源或宿的名称(外部实体名) 别名:源或宿的别名 简述:对源或宿的简要描述,包括指明该外部实体在DFD中是用作“源”还是“宿”,或者两者兼顾 输入数据流:描述源向系统提供哪些输入数据流 输出数据流:描述宿向系统提供哪些输出数据流 注解:其他补充说明 2019/5/23 liang@computer.org
2.5 数据字典(Data Dictionary) 2.5.2 定义数据的方法 对数据自上而下的分解 数据元素组成数据的方式 顺序:分量的连接次序 选择:两个或多个元素中选取一个 重复:可指定重复次数 可选:重复0或1次 2019/5/23 liang@computer.org
数据字典中使用的描述符号 符 号 含 义 解 释 = + [...,...] [...|...] { ... } m{...}n (...) 含 义 解 释 = + [...,...] [...|...] { ... } m{...}n (...) “...” .. 被定义为 与 或 重复 可选 基本元素 连结符 例如,x=a+b,表示x由a和b组成。 例如,x=[a, b],x=[a|b],表示x由a或由b组成 例如,x={a},表示x由0个或多个a组成 例如,x=3{a}8,表示x中至少出现3次a, 至多 出现8次a 例如,x=(a),表示a可在x中出现,也可不出现 例如,x=“a”,表示x为取值为a的数据元素 例如,x=1..9,表示x可取1到9之中的任一值 2019/5/23 liang@computer.org
示例 2019/5/23 liang@computer.org
2.5 数据字典(Data Dictionary) 2.5.3 数据字典的用途 分析阶段的工具 便于分析员和用户之间的交互 开发阶段的公共标准 避免模块间接口出现问题 容易估计改变数据对其相应模块所产生的影响 设计和开发数据库的第一步 2019/5/23 liang@computer.org
2.5 数据字典(Data Dictionary) 2.5.4 数据字典的实现 CASE工具 PowerDesigner Visio 人工卡片 2019/5/23 liang@computer.org
2.6 成本/效益分析(Cost/Profit Analysis) 投资开发新系统目的 降低成本 增加收入 2.6.1 成本估计 人力成本 代码行技术 根据经验和历史数据估计源代码行数 人力成本=每行代码成本*代码行数 每行代码成本取决于软件复杂度和工资水平 2019/5/23 liang@computer.org
2.6 成本/效益分析(Cost/Profit Analysis) 任务分解技术 分解为若干个相对独立的任务 对于每个任务,估计人力成本(人月为单位) 2019/5/23 liang@computer.org
2.6 成本/效益分析(Cost/Profit Analysis) 自动估计成本技术 采用相关软件自动估算 大量历史数据为基础 良好的数据库系统支持 2019/5/23 liang@computer.org
2.6 成本/效益分析(Cost/Profit Analysis) 2.6.2 成本/效益分析的方法 1. 货币的时间价值(Time value of money) 现在存入P元(Present value),则n年后应得的钱数(Future value)为: F=P(1+i)n n年后能收入F元,则需要现存的钱数为: P=F/(1+i)n 2019/5/23 liang@computer.org
2.6 成本/效益分析(Cost/Profit Analysis) 2019/5/23 liang@computer.org
2.6 成本/效益分析(Cost/Profit Analysis) 2. 投资回收期(Payback period) 使累计的经济效益等于最初投资所需要的时间 越短越好 3. 纯收入(Net Profit) 整个生命周期之内系统的累计经济效益与投资之差 越大越好 4. 投资回报率(Rate of return, ROR) 最重要的参考数据 P=F1/(1+j)+F2/(1+j)2+…+Fn/(1+j)n J=41%~42% 2019/5/23 liang@computer.org
思考题 一个修改磁带上主文件的系统。文件管理员把修改信息穿孔在卡片上,系统读入穿孔卡片上的信息并按照记录号把修改信息顺序排列好。然后系统逐个读入主文件上的记录,根据记录上的校验码核对每个读入的记录,丢掉出错的记录,按照修改信息修改余下的记录,产生的新文件存储在磁盘上。最后,系统输出一份修改报告供文件管理员参阅。 分层画出上述主文件修改系统的数据流图。 2019/5/23 liang@computer.org
思考题参考答案 源点:文件管理员,提供修改信息 终点:文件管理员,接收修改报告 2019/5/23 liang@computer.org
思考题参考答案 处理: 数据流: 数据存储: 接收修改信息、读主文件、校核记录、修改原始记录、产生报表 修改信息、主文件、正确的记录、修改后的主文件、修改报告 数据存储: 修改信息、主文件、修改后的主文件 2019/5/23 liang@computer.org
思考题答案 2019/5/23 liang@computer.org
作业 P53-54:第4和第5题 2019/5/23 liang@computer.org