可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决。
2.1可行性研究的任务
可行性研究的目的不是解决问题,而是确定问题是否值得去解决。
应该从下述3个方面研究每种解法的可行性:
- 技术可行性(使用现有的技术能实现这个系统吗?)
- 经济可行性(这个系统的经济效益能超过它的开发成本吗?)
- 操作可行性(系统的操作方式在这个用户组织内行得通吗)
可行性研究最根本的任务是对以后的行动方针提出建议。
2.2可行性研究的过程
1.复查系统规模目标
为了确保分析员正在解决的问题确实是要求他解决的问题。
2.研究目前正在使用的系统
如果目前的一个系统被人使用,那么这个系统必定能完成某些有用的工作,新的目标系统必须也能完成它的基本功能。如果目前的系统完美无缺,那么用户就不会提出开发新系统的要求,因此目前的系统肯定有某些缺点,新系统就必须解决这些缺点。此外,还应该考虑如果新系统的收入和旧系统相比怎么样。
3.导出新系统的高层逻辑模型
优秀的设计过程通常是从现有的物理系统出发,导出现有系统的逻辑模型,在参考现有系统的逻辑模型,设想目标系统的逻辑模型。数据流图和数据字典共同定义了新系统的逻辑模型。
4.进一步定义问题
新系统的逻辑模型实质上表达了分析员对新系统必须做什么的看法。用户是否也有同样的看法呢?分析员应该和用户一起再次复查问题定义、工程规模和目标,这次复查应亥把数据流图和数据字典作为讨论的基础。
上面4步实质上构成一个循环。分析员定义问题,分析这个问题,导出一个试探性的解;在此基础上再次定义问题,再一次分析问题,修改这个解,继续这个循环,直到提出的逻辑模型完全符合系统目标。
5.导出和评价供选择的解法
分析员应该从他建议的系统逻辑模型出发,导出若干个较高层次的物理解法供比较和选择。选择合适的解法应该从技术可行性,经济可行性,操作可行性等方面下手。
6.推荐行动方针
根据可行性研究结果应该决定的一个关键性问题是:是否继续进行这项开发工程?分析员必须清楚地表明他对这个关键性决定的建议。如果分析员认为值得继续进行这项开发工程,那么他应该选择一种最好的解法,并且说明选择这个解决方案的理由。
7.草拟开发计划
分析员应该为所推荐的方案草拟一份开发计划,除了制定工程进度表之外还应该估计对各类开发人员(例如,系统分析员、程序员)和各种资源(计算机硬件、软件工具等)的需要情况,应该指明什么时候使用以及使用多长时间。此外还应该估计系统生命周期每个阶段的成本。最后应该给出下一个阶段(需求分析)的详细进度表和成本估计。
8.书写文档提交审查
应该把上述可行性研究各个步骤的工作结果写成清晰的文档,请用户、客户组织的负责人及评审组审查,以决定是否继续这项工程及是否接受分析员推荐的方案。
2.3系统流程图
进入设计阶段以后应该把设想的新系统的逻辑模型转变成物理模型,因此需要描绘未来的物理系统的概貌。
而系统流程图是概括地描绘物理系统的传统工具。
2.3.1符号
2.3.2例子
见软件工程导论第六版p40
2.3.3分层
面对复杂的系统时,一个比较好的方法是分层次地描绘这个系统。首先用一张高层次的系统流程图描绘系统总体概貌,表明系统的关键功能。然后分别把每个关键功能扩展到适当的详细程度,画在单独的一页纸上。
2.4数据流图
数据流图是一种图形化技术,描绘信息流和数据从输入移动到输出的过程种所经受的变换。
2.4.1符号
处理并不一定是一个程序。—个处理框可以代表一系列程序、单个程序或者程序的二个模块;它甚至可以代表用穿孔机穿孔或目视检查数据正确性等人工处理过程。一个数据存储也并不等同于一个文件,它可以表示一个文件、文件的一部分、数据库的元素或记录的一部分等;数据可以存储在磁盘、磁带、磁鼓、主存、微缩胶片、穿孔卡片及其他任何介质上(包括人脑)。
数据存储和数据流都是数据,仅仅所处的状态不同。数据存储是处于静止状态的数据,数据流是处于运动中的数据。
通常在数据流图中忽略出错处理,也不包括诸如打开或关闭文件之类的内务处理。数据流图的基本要点是描绘“做什么”,而不考虑“怎样做”。
2.4.2例子
见p42,考研要求掌握如何画数据流图。
2.4.3用途
画数据流图的基本目的是利用它作为交流信息的工具。分析员把他对现有系统的认识或对目标系统的设想用数据流图描绘出来,供有关人员审查确认。由于在数据流图中通常仅仅使用4种基本符号,而且不包含任何有关物理实现的细节,因此,绝大多数用户都可以理解和评价它。
数据流图的四种基本成分:外部实体、数据流、处理、数据存储。
数据流图的另一个主要用途是作为分析和设计的工具。
检查数据流图的基本原则:
- 数据守恒,或者称为输入数据与输出数据匹配。
- 一套数据流网中的任何一个数据存储,必定有流入的数据流和流出的数据流,即写文件和读文件,缺少任何一种都意味着遗漏某些加工。
- 父图中某一处理框的输入、输出数据流必须出现在相应的子图中,否则就会出现父图与子图的不平衡。
- 任何一个数据流至少有一个端是处理框。
2.5数据字典
定义:数据字典是关于数据信息的集合。
作用:在软件分析和设计的过程中给人提供关于数据的描述信息。
数据流图和数据字典共同构成系统的逻辑模型。
2.5.1数据字典的内容
数据字典由对下列4种元素定义组成:
- 数据流;
- 数据流分量(数据元素);
- 数据存储;
- 处理。
2.5.2定义数据的方法
数据字典中的定义就是对数据自顶向下的分解。
数据元素组成数据的方式有以下四种基本类型:
- 顺序 即以确定次序连接两个或多个分量。
- 选择 即从两个或多个可能的元素中选取一个。
- 重复 即把指定的分最重复零次或多次。
- 可选 即一个分量可有可无。
虽然可以使用自然语言指述由数据元素组成数据的关系但是为了更加清晰简洁,建议采用下列符号:
= 意思是等价于(或定义为);
+ 意思是和(即连接两个分量);
[ ]意思是或(即从方括弧内列出的若干个分量中洗择一个),通常用“丨”号隔开供选择的分量;
{}意思是重复(即重复花括弧内的分量);
()意思是可选(即圆括弧里的分量可有可无)。
常常使用上限和下限进一步注释表示重复的花括弧。一种注释方法是在开括弧的左边用上角标和下角标分别表明重复的上限和下限;另一种注释方法是在开括弧左侧标明重复的下限,在闭括弧的右侧标明重复的上限。
下面举例说明上述定义数据的符号的使用方法:某程序设计语言规定,用户说明的标识符是长度不超过8个字符的字符串,其中第一个字符必须是字母字符,随后的字符既可以是字母字符也可以是数字字符。使用上面讲过的符号,可以像下面那样定义标识符:
标识符=字母字符十字母数字串
字母数字串=0{字母或数字}7
字母或数字=[字母字符丨数字字符]
2.5.3数据字典的用途
用途:作为分析阶段的工具。
在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户之间的通信,因此将消除许多可能的误解。
数据字典是开发数据库的第一步。
2.5.4数据字典的实现
数据字典几乎总是作为CASE“结构化分析与设计工具”的一部分实现的。
在开发大型软件系统的过程中,数据字典的规模和复杂程度迅速增加,人工维护数据字典几乎是不可能的。如果在开发小型系统时暂时没有数据字典处理程序,建议采用卡片形式书写数据字典,每张卡片包含 名字、别名、描述、定义、位置等信息
2.6成本/效益分析
经济效益通常表现为减少运行费用或增加收入。
成本/效益分析的目的:帮助客户的负责人正确地决定是否投资这项开发工程。
2.6.1成本估计
软件开发成本主要表现人力资源(乘以平均工资则得到开发费用)。成本估计不是精确的科学,因此使用几种不同的估计技术以便相互校验,下面是三种估算技术。
1.代码行技术
把开发每个软件功能的成本和实现这个功能需要用的源代码行数联系起来。
根据以往的历史数据估计实现一个功能需要的源代码行数,用每行代码的平均成本乘以行数就可以确定软件的成本。每行代码的平均成本主要取决于软件都复杂程度和工资水平。
2.任务分解技术
把软件开发工程分解为若干个相对独立的任务,在分别估计每个单独的开发任务的成本,最后累加起来得出软件开发工程的总成本。
估计每个任务的成本时,先估计完成该项任务需要用的人力,再乘以每人每月的平均工资。
3.自动估计成本技术
采用自动估计成本的软件工具可以减轻人的劳动,并且使结果更客观。但是,采用这种技术必须有长期搜集大量历史数据为基础,并且需要有良好的数据库系统支持。
2.6.2成本/效益分析的方法
成本/效益分析的第一步是估计开发成本、运行费用和新系统将带来的经济效益。
运行费用取决于系统的操作费用和维护费用。
系统的经济效益等于因使用新系统而增加的收入加上使用新系统可以节省的运行费用。
因为运行费用和经济效益两者在软件的整个生命周期内都存在,总的效益和生命周期的长度有关,所以应该合理地估计软件的寿命。虽然许多系统在开发时预期生命周期长达 10年以上,但是时间越长,系统被废弃的可能性也越天,为了保险起见,以后在进行成本/效益分析时一律假设生命周期为5年。
投资是现在进行的,效益是将来获得的,不能简单地比较成本和效益,应该考虑货币的时间价值。
1.货币的时间价值
通常用利率的形式表示货币的时间价值。假设年利率为i,如果现在存入P元,则 n 年后可以得到的钱数为:
F=P(1+i)ⁿ
这也就是P元钱在n年后的价值。反之,如果n年后能收入F 元钱,那么这些钱的现在
价值是
P = F/(1+i)ⁿ
例如,修改一个已有的库存清单系统,使它能在每天送给采购员一份订货报表。修改已有的库存清单程序并且编写产生报表的程序,估计共需5 000元;系统修改后能及时订货,这将消除零件短缺问题,估计因此每年可以节省2500元,5年共可节省12500元。但是,不能简单地把5 000 元和12500元相比较,因为前者是现在投资的钱,后者是若干年以后节省的钱。
假定年利率为12%,利用上面计算货币现在价值的公式可以算出修改库存清单系统后每年预计节省的钱的现在价值,如表2.3所示。
2.投资回收期
通常用投资回收期衡量一项开发工程的价值。
投资回收期就是使累计的经济效益等于最初投资所需要的时间。投资回收期越短就能越快获得利润,因此这项工程也就越值得投资。
例如,修改库存清单系统两年以后可以节省4225.12元,比最初的投资(5 000元)还少774.88元,第三年以后将再节省1779.45元。774.88/1 779.45=0.44, 因此,投资回收期是2.44年。
投资回收期仅仅是一项经济指标,为了衡量一项开发工程的价值,还应该考虑其他经济指标。
3.纯收入
衡量工程价值的另一项经济指标是工程的纯收入,也就是在整个生命周期之内系统的累计经济效益(折合成现在值)与投资之差。
这相当于比较投资开发一个软件系统和把钱存在银行中(或贷给其他企业)这两种方案的优出,如果纯收入为零,则工程的预期效益和在银行存款一样,但是开发一个系统要冒风险,因此从经济观点看这项工程可能是不值得投资的。如果纯收入小于零,那么这项工程显然不值得投资。
例如,上述修改库存清单系统,工程的纯收入预计是
9 011.94-5 000=4 011.94(元)
4.投资回收率
把资金存入银行或贷给其他企业能够获得利息,通常用年利率衡量利息多少。类似地也可以计算投资回收率,用它衡量投资效益的大小,并且可以把它和年利率相比较,在衡量工程的经济效益时,它是最重要的参考数据。
已知现在的投资额,并且已经估计出将来每年可以获得的经济效益,那么,给定软件的使用寿命之后,怎样计算投资回收率呢?设想把数量等于投资额的资金存入银行,每年年底从银行取回的钱等于系统每年预期可以获得的效益,在时间等于系统寿命时,正好把在银行中的存款全部取光,那么,年利率等于多少呢?这个假想的年利率就等于投资回收率。根据上述条件不难列出下面的方程式:
P=F₁/(1+j)ⁿ+F₂/(1+j)ⁿ+···+Fⁿ/(1+j)ⁿ
其中,P是现在的投资额;Fi是第i年年底的效益(i=1, 2....n);n是系统的使用寿命:j 是投资回收率。
解出这个高阶代数方程即可求出投资回收率(假设系统寿命n=5)。例如,上述修改库存清单系统,工程的投资回收率是41%~42%。
习题
- 可行性研究的目的和任务是什么?
- 可行性又分为哪几个方面?
- 可行性研究的过程?
- 什么是系统流程图,什么是数据流程图?
- 数据流图的四种基本成分?
- 数据流图的用途?
- 数据流图的基本原则?
- 什么是数据字典,数据字典的作用是什么?
- 数据字典的内容是什么?
- 数据元素组成数据的基本类型有哪些?
- 数据字典的用途,以及数据字典的实现?
- 成本效益分析的目的是什么?
- 成本估计的技术有哪些?
- 成本效益分析的方法?
- 经济效益是指?什么是投资回收期?