02 【可行性研究】
02 【可行性研究】
1.可行性研究的任务
1.1 目的和任务
可行性研究的目的不是解决问题,而是确定问题是否值得去解决。
可行性研究最根本的任务是对以后的行动方针提出建议。
1.2 本质
可行性研究的本质是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
1.3 步骤
- 首先需要进一步分析和澄清问题定义
- 在澄清了问题定义之后,分析员应该导出系统的逻辑模型。
- 再从逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案)。对每种解法都应该仔细研究它的可行性,一般说来,至少应该从下述三个方面研究每种解法的可行性:
- 技术可行性:使用现有的技术能够实现这个系统
- 经济可行性:这个系统的经济效益能超过它的开发成本?
- 操作可行性:系统的操作方式在这个用户组织内行得通吗
- 必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。
1.4 投入时间
可行性研究需要的时间长短取决于工程的规模。一般来说,可行性研究的成本只是预期的工程总成本的5%~10%。
2.可行性研究过程
典型的可行性研究过程有下述一些步骤:
2.1 复查系统规模和目标
分析员对问题定义阶段书写的关于规模和目标的报告书进一步复查确认,改正含糊或不确切的叙述,清晰地描述对目标系统的一切限制和约束
2.2 研究目前正在使用的系统
现有的系统是信息的重要来源,新的目标系统必须也能完成它的基本功能 现有的系统必然有某些缺点,新系统必须能解决旧系统中存在的问题 运行使用旧系统所需要的费用是一个重要的经济指标,如果新系统不能增加收入或减少使用费用,那么从经济角度看新系统就不如旧系统。
2.3 导出新系统的高层逻辑模型
优秀的设计过程通常总是从现有的物理系统出发,导出现有系统的逻辑模型,再参考现有系统的逻辑模型,设想目标系统的逻辑模型,最后根据目标系统的逻辑模型建造新的物理系统。
通过前一步的工作,分析员能够使用数据流图,描绘数据在系统中流动和处理的情况,从而概括的表达出对新系统的设想。为了把系统描绘的更清洗准确,还应该有一个初步的数据字典,定义系统中使用的数据。
2.4 进一步定义问题
新系统的逻辑模型实质上表达了分析员对新系统必须做什么的看法。分析员应该和用户一起再次复查问题定义、工程规模和目标,这次复查应该把数据流图和数据字典作为讨论的基础
前4个步骤构成一个循环,直到提出的逻辑模型完全符合系统目标。
2.5 导出和评价供选择的解法
分析员应该从他建议的系统逻辑模型出发,导出若干个较高层次的物理解法供比较和选择。
导出供选择的解法的最简单的途径,是从技术角度出发考虑解决问题的不同方案。
首先,根据技术可行性的考虑初步排除一些不现实的系统方案 其次,考虑操作方面的可行性。分析员应该根据使用部门处理事务的原则和习惯检查技术上可行的哪些方案。 最后考虑经济方面的可行性。分析员应该估计余下的每个可能的系统的开发成本和运行费用,并且估计相对于现有的系统而言这个系统可以节省的开支或可以增加的收入。
2.6 推荐行动方针
根据可行性研究结果应该做出的一个关键性决定是,是否继续进行这项开发工程 如果分析员认为值得继续进行这项开发工程,那么他应该选择一种最好的解法,并且说明选择这个解决方案的理由 通常使用部门的负责人主要根据经济上是否划算决定是否投资于一项开发工程,因此分析员对于所推荐的系统必须进行比较仔细的成本/效益分析。
2.7 草拟开发计划
分析员应该为所推荐的方案草拟一份开发计划,除了制定工程进度表之外还应该估计对各类开发人员和各种资源的需要情况,应该指明什么时候使用以及使用多长时间。
此外,还应该估计系统生命周期每个阶段的成本。
最后,应该给出下一个阶段(需求分析)的详细进度表和成本估计。
2.8 书写文档提交审查
应该把上述可行性研究各个步骤的工作结果写成清晰的文档,请用户、客户组织的负责人及评审组审查,以决定是否继续这项工程及是否接受分析员推荐的方案。
3.系统流程图
系统流程图是概括地描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个组件(程序、文档、数据库、人工过程等)
系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。
4.数据流图 DFD
4.1 概念
数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换(加工、处理)。
它是以图示的方式来表示软件模型
- 在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。
- 数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具
- 设计数据流程图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能。
4.2 符号
四种基本符号:
- 正方形或立方体表示数据的源点或终点
- 圆角矩形或圆形代表变换数据的处理
- 开口矩形或两条平行横线代表数据存储
- 箭头表示数据流,即特定数据的流动方向
4.3 例子
假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下述数据:零件编号,零件名称,订货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给订货系统。当某种零件的库存数量少于库存量临界值时就应该再次订货。
第一步可以从问题描述中提取数据流图的4种成分:
首先考虑数据的源点和终点,从上面对系统的描述可以知道“采购部每天需要一张订货报表”,“通过放在仓库中的CRT终端把事务报告给订货系统”,所以采购员是数据终点,而仓库管理员是数据源点。
第二步:再一次阅读问题描述,“采购部需要报表”
因此必须有一个用于产生报表的处理。事务的后果是改变零件库存量,然而任何改变数据的操作都是处理,因此对事务进行的加工是另一个处理。注意,在问题描述中并没有明显地提到需要对事务进行处理,但是通过分析可以看出这种需要。
把数据流图的4种成分都分离出来以后,就可以着手画数据流图了
第三步:考虑数据流和数据存储
系统把订货报表送给采购部,因此订货报表是一个数据流;事务需要从仓库送到系统中,显然事务是另一个数据流。产生报表和处理事务这两个处理在时间上明显不匹配——每当有一个事务发生时立即处理它,然而每天只产生一次订货报表。因此,用来产生订货报表的数据必须存放一段时间,也就是应该有一个数据存储。
把基本系统模型细化,描绘系统的主要功能
对功能级数据流图中描绘的系统主要功能进一步细化
4.4 命名
数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。因此,给这些成分起名字时应该仔细推敲。
数据流命名时应注意的问题
名字应代表整个数据流的内容,而不是仅仅反映它的某些成分
不要使用空洞的、缺乏具体含义的名字
在为某个数据流(或数据存储)起名字时遇到了困难,则很可能是因为对数据流图分解不恰当造成的,应该试试重新分解
为处理命名时应注意的问题
通常先为数据流命名,然后再为与之相关联的处理命名。
名字应该反映整个处理的功能,而不是它的一部分功能。
名字最好由一个具体的及物动词加上一个具体的宾语组成。
通常名字中仅包括一个动词,如果必须用两个动词才能描述整个处理的功能,则把这个处理再分解成两个处理可能更恰当些。
如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的迹象,应考虑重新分解。
4.5 用途
画数据流图的基本目的是利用它作为交流信息的工具。
数据流图的另一个主要用途是作为分析和设计的工具。
数据流图辅助物理系统的设计时,以图中不同处理的定时要求为指南,能够在数据流图上画出许多组自动化边界,每组自动化边界可能意味着一个不同的物理系统。
5.数据字典 DD
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
5.1 内容
数据字典有以下四类条目:数据项(数据流分量)、数据流、文件(数据存储)、基本加工(处理)。
除了数据定义之外,数据字典中还应该包含关于数据的一些其他信息。典型的情况是,在数据字典中记录数据元素的下列信息: 一般信息(名字,别名,描述等),定义(数据类型,长度,结构等),使用特点(值的范围,使用频率,使用方式——输入、输出、本地,条件值等),控制信息(来源,用户,使用它的程序,改变权,使用权等)和分组信息(父结构,从属结构,物理位置——记录、文件和数据库等)。
数据元素的别名就是该元素的其他等价的名字,出现别名主要有下述3个原因:
- 对于同样的数据,不同的用户使用了不同的名字。
- 一个分析员在不同时期对同一个数据使用了不同的名字。
- 两个分析员分别分析同一个数据流时,使用了不同的名字。
5.2 定义数据的方法
由数据元素组成数据的方式只有下述3种基本类型:
- 顺序即以确定次序连接两个或多个分量。
- 选择即从两个或多个可能的元素中选取一个。
- 重复即把指定的分量重复零次或多次。
关系算符
- = 意思是等价于(或定义为);
- + 意思是和(即连接两个分量);
- []意思是或(即从方括弧内列出的若干个分量中选择一个),通常用“|”号隔开供选择的分量;
- {} 意思是重复(即重复花括弧内的分量);
- () 意思是可选(即圆括弧里的分量可有可无)。
5.3 数据字典的用途
- 数据字典最重要的用途是作为分析阶段的工具
- 数据字典中包含的每个数据元素的控制信息是很有价值的
- 数据字典是开发数据库的第一步,而且是很有价值的一步。
5.4 数据字典的实现
目前,数据字典几乎总是作为CASE“结构化分析与设计工具”的一部分实现的。在开发大型软件系统的过程中,数据字典的规模和复杂程度迅速增加,人工维护数据字典几乎是不可能的。
在开发小型软件系统时暂时没有数据字典处理程序,建议采用卡片形式书写数据字典,每张卡片上保存描述一个数据的信息。
下面给出第4.3节的例子中几个数据元素的数据字典卡片,以具体说明数据字典卡片中上述几项内容的含义。
6.成本/效益分析
6.1 成本估计
软件开发成本主要表现为人力消耗(乘以平均工资则得到开发费用)。成本估计不是精确的科学,因此应该使用几种不同的估计技术以便相互校验。
下面简单介绍3种估算技术。
- 代码行技术
- 任务分解技术
- 自动估计成本技术
任务分解技术最常用的办法是按开发阶段划分任务。典型环境下各个开发阶段需要使用的人力的百分比大致如下表所示:
6.2 成本/效益分析的方法
成本/效益分析方法主要从四个方面考虑
货币的时间价值
投资回收期
纯收入
投资回收率
货币的时间价值
例如,修改一个已有的库存清单系统,使它能在每天送给采购员一份订货报表。修改已有的库存清单程序并且编写产生报表的程序,估计共需5000元;系统修改后能及时订货,这将消除零件短缺问题,估计因此每年可以节省2500元,5年共可节省12500元。但是,不能简单地把5000元和12500元相比较,因为前者是现在投资的钱,后者是若干年以后节省的钱。
假定年利率为12%,利用上面计算货币现在价值的公式可以算出修改库存清单系统后每年预计节省的钱的现在价值,如下表所示。
7.本章小结
了解可行性研究的必要性,以及如何进行可行性研究
学习系统流程图、数据流图
学习数据字典的概念、用途及实现
成本/效益分析方法