第二章 可行性研究


可行性研究的内容

1. 技术可行性:

使用现有的技术能否实现这个系统?
是否有胜任开发该项目的熟练技术人员?
能否按期得到开发该项目所需的软件、硬件资源?

2. 经济可行性:

这个系统的经济效益能否超过它的开发成本?
需要对项目进行价格/利益分析,即“投入/产出”分析。
由于利益分析取决于软件系统的特点,因此在软件开发之前,很难对新系统产生的效益作出精确的定量描述,所以往往采用一些估算方法。

3. 操作可行性:

操作可行性评价系统运行后会引起的各方面变化,如:对组织机构管理模式、用户工作环境等产生的影响。

4. 社会可行性:

社会可行性主要讨论法律方面和使用方面的可行性。
例如,被开发软件的权利归属问题、软件所使用的技术是否会造成侵权等问题。


可行性研究过程(7步骤)

  1. 复查定义,确定系统规模和目标;

    确认目标问题(用户需要的是否等于我们认为用户需要的)

  2. 研究目前正在使用的系统;

    确认成本,缺点,流程图,接口等

  3. 导出新系统的高层逻辑模型(数据流图、数据字典);

    输入输出,数据格式

  4. 重新定义问题;

前 4 个步骤实质上构成一个循环

  1. 导出和评价供选择的解法(物理解决方案);

    技术、操作、经济和市场上接受同时满足,给出供选择的方案。

  2. 推荐行动方案;

    哪一种方案最好,为什么,给出定论和原因。

  3. 草拟开发计划(粗略);
    • 任务分解,确定负责人
    • 大致进度规划
    • 财务预算
    • 风险分析及对策
  4. 书写文档提交审查。 (作为下一个阶段工作的基础)

可行性报告,必须给出明确结论:

  • 行或不行。
  • 或者给出系统开始前需要首先具备哪些条件
  • 或系统目标需要先行修改等。

系统流程图概念,特点、符号和应用;

  • 概念和特点:

    系统流程图是概括的描述物理系统的传统工具。
    系统流程图反映的是信息在系统各部分之间流动的情况;
    系统流程图 $\neq$ 控制、处理信息(不同于程序流程图)

  • 符号:
    基本符号
    系统符号
  • 应用

  • 分层:

    面对复杂的系统时,一个比较好的方法是分层次地描绘这个系统。首先用一张高层次的系统流程图描绘系统总体概貌,表明系统的关键功能。然后分别把每个关键功能扩展到适当的详细程度,画在单独的一页纸上。这种分层次的描绘方法便于阅读者按从抽象到具体的过程逐步深入地了解一个复杂的系统。


数据流图概念、要素、特点、符号和应用;

  • 定义:

    数据流图是系统逻辑功能的图形表示, 图中没有任何具体的物理部件。
    数据流图描绘数据在软件系统内从输入移动到输出过程中所经受的变换。通常用数据流图建立软件结构的功能模型。

  • 要素及符号:



    基本符号
    附加符号

注意:

  • “处理”可表示:单个程序、一系列程序、程序的一个模块、人工处理过程等等;
  • “数据存储”可表示:一个文件、文件的一部分、数据库记录等等;
  • 数据流图 忽略 出错处理、打开文件、关闭文件。
  • 特点:

    抽象性,概括性,层次性

  • 应用:

    见课本

怎样画数据流图?

  1. 提取数据流图的4种成分
    1. 考虑数据的源点和终点
    2. 考虑处理
    3. 考虑数据流和数据存储
  2. 画出基本系统模型并将其细化, 描绘系统的主要功能
    一旦把数据流程图中的四种成份都分离出来之后,就可着手绘制系统的数据流程图了。数据流程图的绘制也是采用自顶向下的方法,由粗到细,逐层细化,最后形成一套完整的拟建系统的数据流程图。

命名:

  1. 为数据流(或数据存储)命名
    1. 名字应该代表整个数据流(或数据存储)的内容;
    2. 不要使用空洞的、缺乏具体含义的名字(如“数据”、“输入”);
    3. 如果为某个数据流(或数据存储)起名字时遇到困难,则很可能是因为对数据流图的分解不恰当造成的,应该试试重新分解数据流图;
  2. 为处理命名
    1. 通常先为数据流命名,然后再为与之相关联的处理命名;
    2. 名字应该反映整个处理的功能;
    3. 应该尽量避免空洞笼统的动词做名字,如“处理”、“加工”;
    4. 通常用一个动词命名,如果必须用两个动词才能描述整个处理的功能,则可能要把这个处理分解成两个处理更恰当;
    5. 如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的情况,应考虑重新分解。
  3. 数据源点/终点并不需要在开发目标系统的过程中设计和实现,它并不属于数据流图的核心内容,只不过是目标系统的外围环境部分(可能是人员、计算机外部设备或传感器装置)。通常,为数据源点/终点命名时采用它们在问题域中习惯使用的名字(如“采购员”、“仓库管理员”等)。

作用:

  • 利用它作为交流信息的工具;
  • 作为软件分析和设计的工具。

数据字典定义、包含内容:

关于数据的信息的集合,也就是对数据流图中包含元素的定义的集合。
与数据流图共同构成系统的 逻辑模型

数据字典由下列四类元素的定义组成:

  • 数据流;
  • 数据流分量(即数据元素)
  • 数据存储;
  • 处理。
定义数据的方法
  1. 数据元素字典 定义基本内容:
    • 数据元素编号、名称及其含义;
    • 数据类型和长度;
    • 合理取值;
    • 其他内容,如它和其它数据的逻辑关系等。
      数据元素字典定义实例
  2. 数据流字典 定义基本内容:
    • 数据流编号及名称;
    • 数据流来源;
    • 数据流去处;
    • 数据流的组成;
    • 流通量;
    • 峰值。
      数据流字典定义实例
  3. 数据存储 字典定义基本内容:
    • 数据存储编号及名称;
    • 数据存储的组成;
    • 其它要求。
  4. 数据处理 字典定义基本内容:
    • 数据处理编号及名称;
    • 简单描述;
    • 输入/输出;
    • 功能描述;
    • 有关数据存储。
      数据处理字典定义实例
  5. 数据元素组成数据的表示方法:
    • 顺序:即以确定次序连接两个或多个分量。
    • 选择:即从两个或多个可能的元素中选取一个。
    • 重复:即把指定的分量重复零次或多次。
    • 可选:即一个分量是可有可无的(重复零次或一次)。
数据字典的用途:
  1. 作为分析阶段的重要工具;
  2. 数据元素的控制信息非常有用;
  3. 有助于开发数据库。

定义数据的方法

定义数据的方法


成本估算技术

1. 代码行技术

软件成本 = 每行代码的平均成本×估计的源代码总行数

2. 任务分解技术

软件开发项目分解为若干个相对独立的任务,分别估计每个单独任务的成本;
单独任务成本 = 任务所需人力估计值×每人每月平均工资;
软件开发项目总成本估计 = 各个单独任务成本估计值之和。
任务分解技术

3. 自动估计成本技术

采用自动估计成本的软件工具估计

成本/效应分析的方法

1. 货币的时间价值

假设年利率为i,如果现在存入P元钱,则n年以后可以得到的钱数为:

反之,如果 n 年后能收入 F 元钱,那么这些钱现在的价值是:



2. 投资回收期

  • 第一、第二年回收:4225元
  • 第三年回收投资要:(5000 - 4225)/1779 = 0.44 年
  • 总的投资回收期 = 2.44 年

3. 纯收入: 9011.94 - 5000 = 4011.94 (元)
4. 投资回收率

其中:

P是现在的投资额;
Fi是第i年年底的效益(i=1,2,3,…,n);
n是系统的使用寿命(一般假设n=5);
j是投资回收率。

上述修改系统的工程的投资回收率是41%-42%