目录
第2章 可行性研究
- 并非任何问题都有简单明显的解决办法,事实上,许多问题不可能在预定的系统规模或时间期限之内解决。
- 如果问题没有可行的解,那么花费在这项工程上的任何时间、人力、软硬件资源和经费,都是无谓的浪费。
- 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
2.1 可行性研究的任务
可行性研究的目的不是解决问题,而是确定问题是否值得去解决。
可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上较抽象的方式进行的系统分析和设计的过程。
可行性研究分析过程:
- 首先,进一步分析和澄清问题定义
- 然后,分析员应该导出系统的逻辑模型
- 最后,探索若干种可供选择的主要解法
至少应该从下述3个方面研究每种解法的可行性
- 技术可行性:使用现有的技术能实现这个系统吗?
- 经济可行性:这个系统的经济效益能超过它的开发成本吗?
- 操作可行性:系统的操作方式在这个用户组织内行得通吗?
2.2 可行性研究过程
怎样进行可行性研究呢?典型的可行性研究过程有下述8个步骤。
- 复查系统规模和目标
- 研究目前正在使用的系统
- 导出新系统的高层逻辑模型
- 进一步定义问题
- 导出和评价供选择的解法
- 推荐行动方针
- 草拟开发计划书
- 书写文档提交审查
2.2.1 复查系统规模和目标
分析员访问关键人员,仔细阅读和分析有关的材料,以便对问题定义阶段书写的关于规模和目标的报告书进一步复查确认,改正含糊或不确切的叙述,清晰地描述对目标系统的一切限制和约束。这个步骤的工作,实质上是为了确保分析员正在解决的问题确实是要求他解决的问题。
2.2.2 研究目前正在使用的系统
现有的系统是信息的重要来源。
如果现有的系统是完美无缺的,用户自然不会提出开发新系统的要求,因此,现有的系统必然有某些缺点,新系统必须能解决旧系统中存在的问题。
应该仔细阅读分析现有系统的文档资料和使用手册,也要实地考察现有的系统。
常见的错误做法是花费过多时间去分析现有的系统。因为该步骤的目的是了解现有系统能做什么,而不是怎样做。
2.2.3 导出新系统的高层逻辑模型
优秀的设计过程通常是从现有的物理系统出发,导出现有系统的逻辑模型, 再参考现有系统的逻辑模型,设想目标系统的逻辑模型,最后根据目标系统的逻辑模型建造新的物理系统。
2.2.4 进一步定义问题
可行性研究的前4个步骤实质上构成一个循环。分析员定义问题,分析这个问题,导出一个试探性的解;在此基础上再次定义问题,再一次分析这个问题,修改这个解;继续这个循环过程,直到提出的逻辑模型完全符合系统目标。
2.2.5 导出和评价供选择的解法
分析员应该从他建议的系统逻辑模型出发,导出若干个较高层次的物理解法供比较和选择。
其次可以考虑操作方面的可行性。 分析员应该根据使用部门处理事务的原则和习惯检查技术上可行的那些方案,去掉其中从操作方式或操作过程的角度看用户不能接受的方案。
接下来应该考虑经济方面的可行性。分析员应该估计余下的每个可能的系统的开发成本和运行费用,并且估计相对于现有的系统而言这个系统可以节省的开支或可以增加的收入。
最后为每个在技术、操作和经济等方面都可行的系统制定实现进度表,这个进度表不需要制定得很详细,通常只需要估计生命周期每个阶段的工作量。
2.2.6 推荐行动方针
根据可行性研究结果应该决定的一个关键性问题是: 是否继续进行这项开发工程? 分析员必须清楚地表明他对这个关键性决定的建议。
如果分析员认为值得继续进行这项开发工程,那么他应该选择一种最好的解法,并且说明选择这个解决方案的理由。
通常客户主要根据经济上是否划算决定是否投资于一项开发工程,因此分析员对于所推荐的系统必须进行比较仔细的成本/效益分析。
2.2.7 草拟开发计划书
分析员应该为所推荐的方案草拟一份开发计划,除了制定工程进度表之外还应该估计对各类开发人员和各种资源的需要情况,应该指明什么时候使用以及使用多长时间。此外还应该估计系统生命周期每个阶段的成本。最后应该给出下一个阶段(需求分析)的详细进度表和成本估计。
2.2.8 书写文档提交审查
应该把上述可行性研究各个步骤的工作结果写成清晰的文档,请用户、客户组织的负责人及评审组审查,以决定是否继续这项工程及是否接受分析员推荐的方案。
2.3 系统流程图☆
在进行可行性研究时需要了解和分析现有的系统,并以概括的形式表达对现有系统的认识;进行设计阶段以后应该把设想的新系统的逻辑模型转变成物理模型,因此需要描绘未来系统的概貌。
系统流程图是概括地描绘物理系统的传统工具。
基本思想:
用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据库、人工过程等)。
系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程, 因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。
2.3.1 符号
利用符号可以把一个广义的输入输出操作具体化为读写存储在特殊设备上的文件(或数据库),把抽象处理具体化为特定的程序或手工操作等。
基本符号: 以概括的方式抽象地描绘一个实际系统时,仅用下图中列举出的基本符号就足够了
系统符号: 需要更具体地描绘一个物理系统时还需要使用下图中列出的系统符号
2.3.2 例子
某装配厂有一座存放零件的仓库,仓库中现有的各种零件的数量以及每种零件的库存量临界值等数据记录在库存清单主文件中。
当仓库中零件数量有变化时,应该及时修改库存清单主文件,如果哪种零件的库存量少于它的库存量临界值,则应该报告给采购部门以便订货,规定每天向采购部门送一次订货报告。
该装配厂使用一台小型计算机处理更新库存清单主文件和产生订货报告的任务。
零件库存量的每一次变化称为一个事务,由放在仓库中的CRT终端输入到计算机中;
系统中的库存清单程序对事务进行处理,更新存储在磁盘上的库存清单主文件,并且把必要的订货信息写在磁带上。
最后,每天由报告生成程序读一次磁带,并且打印出订货报告。
库存清单系统的系统流程图:
2.3.3 分层
面对复杂的系统时,一个比较好的方法是分层次地描绘这个系统。
- 首先用一张高层次的系统流程图描绘系统总体概貌,表明系统的关键功能。
- 然后分别把每个关键功能扩展到适当的详细程度,画在单独的一页纸上。这种分层次的描绘方法便于阅读者按从抽象到具体的过程逐步深入地了解一个复杂的系统。
2.4 数据流图☆
这部分内容放在第三章中。
2.5 数据字典☆
这部分内容放在第三章中。
2.6 成本/效益分析
2.6.1 成本估计
软件开发成本主要表现为人力消耗(乘以平均工资则得到开发费用)。
成本估计不是精确的科学,因此应该使用几种不同的估计技术以便相互校验。
① 代码行技术
比较简单的定量估算方法,估计出源代码行数以后,用每行代码的平均成本乘以行数就可确定软件的成本。
② 任务分解技术
首先把软件开发工程分解为若干个相对独立的任务,再分别估计每个单独任务的成本,最后累加得出总成本。
任务分解技术最常用的办法是按开发阶段划分任务。
典型环境下各个开发阶段需要使用的人力的百分比:
③ 自动估计成本技术
采用自动估计成本的软件工具,减轻人的劳动,估计结果更客观。
2.6.2 成本/效益分析的方法
成本/效益分析方法主要从四个方面考虑:
- 货币的时间价值
- 投资回收期
- 纯收入
- 投资回收率
① 货币的时间价值
通常用利率的形式表示货币的时间价值。
假设年利率为i,如果现在存入P元,则n年后可以得到的钱数为:
这也就是P元钱在n年后的价值。
反之,如果n年后能收入F元钱,那么这些钱的现在价值是:
例如,修改一个已有的库存清单系统,使它能在每天送给采购员一份订货报表。修改已有的库存清单程序并且编写产生报表的程序,估计共需5000元;系统修改后能及时订货,这将消除零件短缺问题,估计因此每年可以节省2500元,5年共可节省12500元。但是,不能简单地把5000元和12500元相比较,因为前者是现在投资的钱,后者是若干年以后节省的钱。
② 投资回收期
通常用投资回收期衡量一项开发工程的价值。
所谓投资回收期就是使累计的经济效益等于最初投资所需要的时间。
投资回收期越短就能越快获得利润,因此这项工程也就越值得投资。
例如,修改库存清单系统两年以后可以节省4225.12元,比最初的投资(5000元)还少774.88元,第三年以后将再节省1779.45元。744.88/1779.45=0.44,因此,投资回收期是2.44年。
③ 纯收入
衡量工程价值的另一项经济指标是工程的纯收入,也就是整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。
如果纯收入小于零,那么这项工程显然不值得投资。
例如,上述修改库存清单系统,工程的纯收入预计是
9011.94-5000=4011.94(元)
④ 投资回收率
已知现在的投资额,并且已经估计出将来每年可以获得的经济效益,那么,给定软件的使用寿命之后,怎样计算投资回收率呢?设想把数量等于投资额的资金存入银行,每年年底从银行取回的钱等于系统每年预期可以获得的效益,在时间等于系统寿命时,正好把在银行中的存款全部取光,那么年利率等于多少呢?这个假想的年利率,就是投资回收率。
根据上述条件不难列出下面的方程式:
其中,P是现在的投资额;Fi是第i年的效益;n是系统的使用寿命;j是投资回收率。
例如,上述修改库存清单系统,工程的投资回收率是41%-42%。
2.7 本章小结
- 可行性研究的目的,任务,从哪三个方面研究每种解决方案的可行性
- 可行性研究过程
- 系统流程图常用符号,会画系统流程图(重点)
- 了解成本/效益分析方法
作业
部分内容放在第三章,可结合完成。
- 可行性研究的目的、本质
- 需求分析的任务(四个准则)
- 与用户沟通的方法(访谈的四个标题)
- 系统流程图定义、 数据流图 数据字典的定义及4类元素
- 画实体联系图
某图书借阅管理系统,数据库中有三个实体集。
一是“书籍”实体集,属性有书号、类型、数量等;
二是“出版社”实体集,属性有出版社名、电话、Email、邮编等;
三是“借书人”实体集,属性有借书证号、姓名、单位等。
出版社与书籍间存在“出版”联系,一个出版社可出版多种书籍,同一本书仅为一个出版社出版;
书籍和借书人间存在“借还”联系,每个借书人可以借阅多种书籍,每种书籍可以被多个借阅人借阅;每一个借书人借阅书籍都有对应的借书日期、还书日期。
试画出E-R图,并在图上注明属性、联系的类型。