可行性研究实质上是要进行一次简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。这个过程通常结合了初步的需求分析,不做需求分析,就无法对需求进行可行性分析。它所需要的时间长短取决于工程的规模。一般说来,可行性研究的成本只是预期的工程总成本的5%到10%。
因此,可行性研究的目的不是解决问题,而是确定问题是否能够并且值得去解决。
并非任何问题都有简单明显的解决办法,事实上,许多问题不可能在预定的系统规模或时间期限之内解决。如果问题没有可行的解,那么花费在这项工程上的任何时间、人力、软硬件资源和经费,都是无谓的浪费。可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
如果问题没有可行的解,分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费;如果问题值得解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。
展开来说,典型的可行性研究过程有下述一些步骤
系统流程图是概括地描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序,文档,数据库,人工过程等)。
系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。
利用符号可以把一个广义的输入输出操作具体化为读写存储在特殊设备上的文件(或数据库),把抽象处理具体化为特定的程序或手工操作等。
以一个简单的例子进行讲解
某装配厂有一座存放零件的仓库,仓库中现有的各种零件的数量以及每种零件的存量临界值等数据,记录在库存清单主文件中。当仓库中零件数量有变化时,应该及时修改库存清单主文件,如果那种零件的库存量少于它的库存量临界值,则应该报告给采购部门以便订货,规定每天向采购部门送一次订货报告。
该装配厂使用一台小型计算机处理更新库存清单主文件和产生订货报告的任务,流程如下:
面对复杂的系统时,一个比较好的方法是分层次地描绘这个系统。
首先用一张高层次的系统流程图描绘系统总体概貌,表明系统的关键功能。然后分别把每个关键功能扩展到适当的详细程度,画在单独的一页纸上。这种分层次的描绘方法便于阅读者按从抽象到具体的过程逐步深入地了解一个复杂的系统。
数据流图(DFD)是一种图形化的交流工具和分析设计工具,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程,是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。
此外,设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能。
下面的顶级DFD高度概括了数据流图的处理过程,数据从外部实体流入目标系统进行加工,然后又流出到外部实体。
数据流图有四种基本符号:
如下图所示:
图符 | 含义 |
---|---|
数据的源点或终点 | |
数据的加工处理 | |
数据存储 | |
数据流 |
除了4个基本符号以外,数据流图还有一个附加符号,如下图所示:
图符 | 含义 |
---|---|
数据A和B同时输入才能变换成数据C | |
数据A变换成B和C | |
数据A或B,或A和B同时输入变换成C | |
数据A变换成B或C,或B和C | |
只有数据A或只有数据B(但不能A、B同时)输入时变换成C | |
数据A变换成B或C,但不能变换成B和C |
概括地说:自外向内,自顶向下,逐层细化,完善求精。
数据流图的细化可以连续进行,直到每一个加工只执行一个简单操作为止。就是说,直到每一个加工执行一个可以用程序实现的功能为止。
数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。在命名时应注意的问题:
假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。
对于每个需要再次订货的零件应该列出下述数据:零件编号、零件名称、订货数量、目前价格、主要供应者、次要供应者。
零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给订货系统。当某种零件的库存数量少于库存量临界值时就应该再次订货。
按步骤对题干进行分析,提取数据流图的四种成分:
在弄清楚数据流图的成分之后,就开始画数据流图了,首先画出一个顶级数据流图:
从基本系统模型这样非常高的层次开始画数据流图是一个好办法。在这个高层次的数据流图上是否列出了所有给定的数据源点和终点是一目了然的,因此它是很有价值的通信工具。
下一步应该把基本系统模型细化,描绘系统的主要功能。“产生报表"和"处理事务"是系统必须完成的两个主要功能,它们将代替图的"定货系统”,如下面的一级数据流图:
接下来应该对功能级数据流图中描绘的系统主要功能进一步细化。
考虑通过系统的逻辑数据流:当发生一个事务时必须首先接收它;随后按照事务的内容修改库存清单;最后如果更新后的库存量少于库存量临界值时,则应该再次定货,也就是需要处理定货信息。
因此,把"处理事务"这个功能分解为"接收事务"、"更新库存清单"和"处理定货"三个步骤,这在逻辑上是合理的,如下面的二级数据流图所示。
至此,一个详细的数据流图才算画完了。
当用数据流图辅助系统的设计时,以图中不同处理的定时要求为指南,能够在数据流图上画出许多组自动化边界,每组自动化边界可能意味着一个不同的物理系统,因此可以根据系统的逻辑模型考虑系统的物理实现。
例如,事务随时可能发生,因此处理1.1(“接收事务”)必须是联机的;采购员每天需要一次定货报表,因此处理2(“产生报表”)应该以批量方式进行。问题描述并没有对其他处理施加限制。对 L 2 L2 L2划分自动化边界的结果如下图所示:
以上绘制数据流图的步骤可以用下面这张分层数据流图来表示,首先绘制最上面一层的顶级数据流图 L 0 L0 L0,然后是第二层的一级数据流图 L 1 L1 L1,再是最下面的二级数据流图 L 2 L2 L2,理论上还可以画出 L 3 L3 L3、 L 4 L4 L4等等。
如果要产生详细的数据流图就要把所有加工处理都分解成基本加工,所谓基本加工,就是数据流图中所有不能进一步分解的加工,一般有父项、无子项的加工就是基本加工。
PSPEC用来说明DFD中的每个基本加工
可以用的描述工具有:结构化语言、决策树、决策表、盒图、数学公式等等
其中结构化语言也叫作伪代码或者过程设计语言,其介于自然语言和计算机语言之间,通过顺序语句、条件语句和循环语句对基本加工进行描述,例如:
IF 发货单金额超过$500 THEN
IF 欠款超过60天 THEN
在偿还欠款前不予批准
ELSE 欠款未超期
发批准书及发货单
ENDIF
ELSE 发货单金额未超过$500
IF 欠款超过60天 THEN
发批准书、发货单及催款通知
ELSE 欠款未超期
发批准书及发货单
ENDIF
ENDIF
决策树是一种图形工具,适合于描述加工中具有多个策略,而且每个策略和若干条件有关的逻辑功能,例如:
决策表的内涵与决策树一致,但是适用于如果判断的条件较多,各条件又相互组合的情况,如下表所示:
1 | 2 | 3 | 4 | ||
---|---|---|---|---|---|
条件 | 发货单金额 | >$500 | >$500 | <=$500 | <=$500 |
赊欠情况 | >60天 | <=60天 | >60天 | <=60天 | |
操作 | 不发出批准书 | √ | |||
发出批准书 | √ | √ | √ | ||
发出发货单 | √ | √ | √ | ||
发出赊欠报告 | √ |
数据字典是对数据流图中包含的所有元素的定义的集合。它是分析阶段的交流工具,也是数据库设计的基础。在结构化系统分析中,数据字典是分析的核心。
任何字典最主要的用途都是供人查阅对不了解的条目的解释,数据字典的作用也正是在软件分析和设计的过程中给人提供关于数据的描述信息。数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用,它们两个要放在一起才能发挥作用。
一般说来,数据字典应该由对下列五类元素的定义组成:
但是,对于数据处理,用其他工具描述更方便,通常是使用IPO图或PDL。
典型的情况是,在数据字典中记录数据元素的下列信息:
数据是通过下面五种运算符由数据元素:
例如:
学生成绩通知= { \{ {学号+姓名+ { \{ {课程名称+成绩 } \} }+(补考课程名称+补考时间+补考地点) } \} }所有注册学生
学生奖励通知= { \{ {学号+姓名+[一等奖 | 二等奖 | 三等奖] } \} }所有获奖学生
目前,数据字典几乎总是作为CASE"结构化分析与设计工具"的一部分实现的。在开发大型软件系统的过程中,人工维护数据字典几乎是不可能的。
如果在开发小型软件系统时暂时没有数据字典处理程序,建议采用卡片形式书写数据字典,每张卡片上主要应该包含下述这样一些信息:名字、别名、描述、定义、位置。
例如下面就是一张描绘数据流的数据字典卡片:
数据流 | |||||
---|---|---|---|---|---|
系统名 | 编号 | ||||
条目名 | 别名 | ||||
来源 | 去处 | ||||
数据流结构 | |||||
简要说明 | |||||
修改记录 | 编写 | 日期 | |||
审核 | 日期 |
成本/效益分析的目的正是要从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地作出是否投资于这项开发工程的决定。
为了对比成本和效益,首先需要估计它们的数量。软件开发成本主要表现为人力消耗(乘以平均工资则得到开发费用)。当然成本估计不是精确的科学,因此应该使用几种不同的估计技术以便相互校验。下面简单介绍3种估算技术。
成本/效益分析的第一步是估计开发成本、运行费用和新系统将带来的经济效益。
其中,运行费用取决于系统的操作费用(操作员人数,工作时间,消耗的物资等等)和维护费用;系统的经济效益等于因使用新系统而增加的收入加上使用新系统可以节省的运行费用。
因为运行费用和经济效益两者在软件的整个生命周期内都存在,总的效益和生命周期的长度有关,I 所以应该合理地估计软件的寿命。为了保险起见,在进行成本/效益分析时一律假设生命周期为5年。
在以上条件的基础上,可以从四个方面来考虑对成本/效益进行分析:
通常用利率的形式表示货币的时间价值。假设年利率为 i i i,如果现在存入 p p p元,则 n n n年后可以得到的钱数为: F = p ( 1 + i ) n F=p(1+i)^n F=p(1+i)n 这也就是 p p p元钱在 n n n年后的价值。反之,如果 n n n年后能收入 F F F元钱,那么这些钱的现在价值是 p = F ( 1 + i ) n p=\frac{F}{(1+i)^n} p=(1+i)nF
例如,修改一个已有的库存清单系统,使它能在每天送给采购员一份订货报表。修改已有的库存清单程序并且编写产生报表的程序,估计共需5000元; 系统修改后能及时订货,这将消除零件短缺问题,估计因此每年可以节省2500元,5年共可节省12500元。
但是,不能简单地把5000元和12500元相比较,因为前者是现在投资的钱,后者是若干年以后节省的钱。假定年利率为12%,利用上面计算货币现在价值的公式可以算出修改库存清单系统后每年预计节省的钱的现在价值,如下表所示。
年 | 将来值(元) | ( 1 + i ) n (1+i)^n (1+i)n | 现在值(元) | 累计的现在值((元) |
---|---|---|---|---|
1 | 2500 | 1.12 | 2232.14 | 2232.14 |
2 | 2500 | 1.25 | 1992.98 | 4225.12 |
3 | 2500 | 1.40 | 1779.45 | 6004.57 |
4 | 2500 | 1.57 | 1588.80 | 7593.37 |
5 | 2500 | 1.76 | 1418.57 | 9011.94 |