1、第二章可行性研究与计划2.1 可行性研究与计划阶段的基本概念2.2 可行性研究的步骤2.3 系统流程图2.4 数据流图2.5 成本/效益分析习题二第二章可行性研究与计划 当你接受一个软件开发任务时,就意味着进入软件生命周期的第一个阶段,即可行性研究与计划阶段,亦称计划时期。众所周知,世界上所有问题并不都是有简单明显的解决办法的,许多问题不能在预定的系统规模之内解决。如果问题没有可行的解,那么花费在这项开发工程上的任何时间、资源、人力和经费都是无谓的浪费。2.1 可行性研究与计划阶段的基本概念可行性研究与计划阶段的基本概念第二章可行性研究与计划 可行性研究的目的就是用最小的代价在尽可能短的时间内
2、确定问题是否能够解决。请注意,可行性研究的目的不是解决问题,而是确定问题是否值得去解。也就是说,研究在当前的具体条件下,开发新系统是否具备必要的资源和其它条件。为了达到这个目的,必须认真了解用户的要求及现实环境,探索若干种可供选择的主要解法,并对每种解法的可行性进行仔细论证。一般来说应从以下几个方面进行论证:第二章可行性研究与计划 1)技术可行性:使用现有的技术能实现这个系统吗?2)经济可行性:这个系统的经济效益能超过它的开发成本吗?3)操作可行性:系统的操作方式在这个用户组织内行得通吗?在可行性研究与计划阶段中主要做两件事:问题定义和可行性研究。其具体实施步骤见.图2.1。第二章可行性研究与
3、计划 图 2.1第二章可行性研究与计划 由图2.1可知,首先需要进一步分析和澄清问题定义,经过初步调查后,确定系统的规模和目标,书写一份非常简单的报告,即关于系统的目标和规模报告书,一般只需一页纸,如表2.1所示。在澄清了问题定义之后,分析员应该进行可行性研究,对以后的行第二章可行性研究与计划动路线提出建议:如果问题没有可行的解,应该建议停止这项工程的开发;如果问题值得解,应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。第二章可行性研究与计划 可行性研究与计划需要的时间长短取决于工程的规模。一般来说,可行性研究的成本只是预期的工程总成本的(5l 0),编写一份质量较高的可行性研究报告
4、是计划期完成的主要标志。第二章可行性研究与计划第二章可行性研究与计划 怎样进行可行性研究呢?典型的可行性研究由下述8步组成:1.复查系统目标和规模复查系统目标和规模 分析员应访问关键人员,仔细阅读和分析有关材料,以便进一步复查确认系统的目标和规模,改正含糊或不确切的叙述,清晰地描述对目标系统的一切限制和约束。这个步骤的工作,实质上是为了确保分析员正在解决的问题确实是要求他解决的问题。2.2 可行性研究的步骤可行性研究的步骤 第二章可行性研究与计划 2.研究目前正在使用的系统研究目前正在使用的系统 分析员应该仔细阅读分析现有系统的文档资料和使用手册,也要实地考察现有的系统,注意了解它怎样做,还要
5、了解使用这个系统的代价以及其存在的缺点。请注意,这个步骤的目的是了解现有系统能做什么,而不是了解它怎样做这些工作,故不必花费太多时间去了解系统实现的细节。在这个步骤中,分析员应该画出描绘现有系统的高层系统流程图(见2.3节),记录现有系统和其它系统之间的接口情况,并请有关人员检验其正确与否。第二章可行性研究与计划 3.导出新系统的高层逻辑模型导出新系统的高层逻辑模型 通过前一步的工作,分析员对目标系统应具有的基本功能和约束条件已有一定的了解,能够从现有的物理系统出发,导出现有系统的逻辑模型,描绘数据在系统中流动和处理情况,从而概括地表达出对新系统的设想。高层逻辑模型用数据流图来表示(参见2.4
6、节)。4.重新定义问题重新定义问题 新系统的逻辑模型实质上表达了分析员对新系统必须做什么的看法。那么用户是否也有同样的看法呢?分析员应该和用户一起再次复查问题定义,再次确定工程规模、目标和约束条件,并修改已发现的错误。第二章可行性研究与计划 可行性研究的前四个步骤实质上构成一个循环:分析员定义问题,分析这个问题,导出一个试探性的解,在此基础上再次定义问题,再次分析,再次修改,继续这个过程,直到提出的逻辑模型完全符合系统目标为止。第二章可行性研究与计划 5.导出和评价供选择的方案导出和评价供选择的方案 分析员从系统的逻辑模型出发,导出若干较高层次的(较抽象的)物理解法供比较和选择。从技术、经济、
7、操作等方面进行分析比较,并估算开发成本、运行费用和纯收入。在此基础上对每个可能的系统进行成本效益分析。6.推荐一个方案并说明理由推荐一个方案并说明理由 如果分析员认为值得继续进行这项开发工程,则应推荐一个最好的方案,并且说明选择这个方案的理由。对被推荐的方案还需进行仔细的成本效益分析,才能让使用部门负责人根据经济上是否划算来决定该工程能否上马。第二章可行性研究与计划 7.草拟开发计划草拟开发计划 分析员进一步为推荐的系统草拟一份开发计划,包括工程进度表,各种开发人员和各种资源的需要情况,并指明什么时候使用以及使用多长时间。8.书写文档提交审查书写文档提交审查 把上述可行性研究各步骤的结果写成清
8、晰的文档,即可行性研究报告,请用户和使用部门的负责人仔细审查,以决定是否继续这项工程以及是否接受分析员推荐的方案。第二章可行性研究与计划 在进行可行性研究时,需以概括的形式描绘现有的系统;在推荐新方案时,需把设想的新系统的逻辑模型转变成物理模型,因此需要描绘新系统的概貌。怎样概括地描绘一个物理系统呢?系统流程图是描绘物理系统的工具,它用物理符号以黑盒子的形式描绘系统里面的每个部件。它表达的仅是信息在系统各部件之间流动的情况,而不是对信息进行加工处理的控制过程,因此尽管系统流程图使用的某些符号和程序流程图中用的符号相同,但它却是物理数据流图而不是程序流程图。2.3 系统流程图系统流程图第二章可行
9、性研究与计划 系统流程图的基本符号见图2.2所示,系统符号见图2.3所示。基本符号用以抽象地描绘一个物理系统,其中每个符号表示系统中的一个部件。而系统符号用以具体地描绘一个物理系统,它可以把一个广义的输入输出操作具体化为读写存储设备上的文件(或数据库),把一般的处理具体化为特定的程序或手工操作等。例如图2.4是一个库存清单系统的流程图。第二章可行性研究与计划图2.2第二章可行性研究与计划图2.3第二章可行性研究与计划图2.4第二章可行性研究与计划 数据流图(Data Flow Diagram)简称DFD,它是一种描述“分解”的图示工具。它用直观的图形清晰地描绘了系统的逻辑模型,图中没有任何具体
10、的物理元素,只是描述数据在系统中的流动和处理的情况,具有直观、形象、容易理解的优点。如图2.5(a)所示,数据流图有4种基本符号:2.4 数据流图数据流图 第二章可行性研究与计划 数据源点或 终点(用正方形表示);加工(用圆表示);文件(用直线段表示);数据流(用箭头表示)。图2.6就是一个定货系统的数据流图。图中,数据的源点是:仓库管理员;数据的终点是:采购员。加工有两个:处理事务和产生报表,其编号分别为:加工1、加工2。文件也有两个:库存清单和定货信息。用箭头来表示的都是数据流,数据流可以由加工流向加工、加工流向文件或从文件流向加工,也可以由数据的源点终点流向加工或由加工流向数据的源点终点
11、。一般说来,除了流向文件或由文件流向加工的数据流可不必命名外(因文件命名已非常明确了),每个数据流都必须有一个合适的名字。在图2.6中,事务、定货报表都是数据流名。第二章可行性研究与计划 这里只简单介绍用四种基本符号表示的数据流图,但有时也使用附加符号。例如,星号(*)表示数据流之间是“与”关系(同时存在);加号(+)表示“或”关系;号表示只能从中选一个(互斥关系)。图2.5(b)给出了这些附加符号的含义。有关数据流图的其它概念以及具体画法在这里不作详细介绍,请看第三章3.3节数据流图。第二章可行性研究与计划图2.5 第二章可行性研究与计划图2.6 第二章可行性研究与计划投资开发新系统往往要冒
12、一定风险,系统的开发成本可能比预计的高,经济效益比预期的低。那么,在什么情况下投资开发新系统更划算呢?成本效益分析的目的正是要从经济的角度分析开发一个特定的新系统是否划算,从而帮助使用部门负责人正确地作出是否投资于这项开发工程的决定。成本效益分析的第一步是估计开发成本、运行费用和新系统将带来的经济效益。下面先介绍成本估算技术。2.5 成本效益分析成本效益分析第二章可行性研究与计划2.5.1 成本估算技术成本估算技术直接购买的各种软件包的成本往往都是固定的,要估算由自己开发的软件成本就较为复杂了,一般可使用几种不同的估算技术以便相互校验。下面简单地介绍几种估算技术。1.代码行技术代码行技术(简称
13、简称LOC技术技术)代码行技术是比较简单的定量估算方法,它把开发每个软件功能的成本和实现这个功能需要用的源代码行数联系起来。通常根据经验和历史数据来估计实现一个功能需要的源程序行数。当有以往开发类似工程的历史数据可供参考时,这个方法是非常有效的。第二章可行性研究与计划 代码行技术估算步骤如下:1)确定功能:将项目功能反复分解到足够细,直到可以对为实现该功能所需要的源代码行数做出可靠的估算为止。2)算出各子功能代码行数的平均值:首先根据经验和历史数据对每个子功能估计其程序规模的大小,即最小规模口,最大规模6和最可能的规模m,然后用下式计算出该子功能源代码的行数的平均值Le:64bmaLe(2.5
14、.1)第二章可行性研究与计划 3)确定各子功能的代码行成本和生产率:代码行成本指生产一条有效代码需要的花费(用元行表示),生产率指每个人一个月所能生产的有效源代码行数(用行人月表示)0根据历史提供数据和开发人员工资率就可以估算出每行代码的成本。同样,凭经验和开发人员的技术水平、软件复杂程度等因素可以估算出软件生产率。第二章可行性研究与计划 4)计算各子功能的成本和人力(工作量):每个子功能的成本等于其代码行平均值乘以其代码行成本,每个子功能的人力等于其代码行平均值除以其生产率。5)计算该项目的总代码行数、总成本和总工作量。表2.2是用代码行技术来估算开发一个图形软件包成本的例子。假设该软件包有
15、四个主要功能,即用户接口控制、二维几何分析、计算机图形显示、外部设备控制(见表中第一列)。实现每个子功能所需要的代码行数Le(见表中第二列)是由已知的a,m,6代入代码行平均值公式计算而得的。表中第三列是生产率,第四列是每行代码的成本,第五列成本和第六列人力都是计算而得的。第二章可行性研究与计划 由表2.2中可知,开发图形软件包所需代码行总数是:行000 15810 14L)(727.71:000 309180 309:人月总人力元元总成本第二章可行性研究与计划第二章可行性研究与计划2.任务估算技术任务估算技术这种方法实际上是一种任务分析技术,它首先把软件开发工程分解为若干个相对独立的任务,再
16、分别估计每个单独开发任务的成本,最后累加起来得出软件开发工程的总成本。在估计每个任务的成本时,通常先估计完成该项任务需要用的人力(以人月为单位),再乘以每人每月的平均工资而得出每个任务的成本。第二章可行性研究与计划 通常按开发阶段划分任务。典型环境下各个开发阶段需要使用的人力的百分比大致如图2.7所示。当然,应该针对每个开发工程的具体特点,并且参照以往的实际经验尽可能准确地估计每个阶段实际需要使用的人力。下面仍以图形软件包为例,用任务估算技术来估算其开发成本(见表2.3所示)。第二章可行性研究与计划第二章可行性研究与计划 由表2.3可知,用任务估算技术得到图形软件包的开发总成本是339 950
17、 元,取整千位得340 000元,总人力是76个人月。然后把代码行技术和任务估算技术所得到的结果进行比较,计算出其总成本和总人力的相对误差为:%5%100767276:%9%100000 340000 309000 340:总人力总成本第二章可行性研究与计划 一般约定若相对误差在20,以内被认为估算基本正确,当然误差越小越好。若误差相差太大,则说明估算不正确,需重新进行估算。3.Putnam估算模型估算模型 l979年,Putnam在软件开发生存期雷利(RayLeigh)曲线模型的基础上提出sLlM商业化的成本估算模型,又称Putnam估算模型。其基本估算方程为3/43/1dktKCL(2.5
18、.2)第二章可行性研究与计划其中:L是源代码行数;K是开发需用的人力(以人年为单位);td是开发需用的时间(以年为单位);Ck是技术水平常数,它的典型值如下:对于差的开发环境 Ck=2500;对于好的开发环境 Ck=10 000;对于优越的开发环境 Ck=12 500。第二章可行性研究与计划当已知源代码行数厶和所需用的人力,选择适当Ck常数时,就可计算出该软件开发所需要的实际时间td,(2.5.3)4/133KCLtkd以上面所举的图形软件包为例,用代码行技术估算源代码行总数是15000行,开发所需的人力是72人月,折算成6人年,取Ck=10 000,代入Putman估算模型,得到开发图形软件
19、包所需用的实际时间是0.866年。第二章可行性研究与计划 4.COCOMO模型模型 所谓COCOM0模型就是Boehm提出的构造性成本模型(ConstructjVe Cost Model)。在这种模型中,软件开发工作量被表示成估计的代码行数的非线性函数:iiafC1511KLOCMM第二章可行性研究与计划其中:MM是开发工作量(以人月为单位);C1是模型系数;KLoc是估计的代码行数(以千行为单位);a是模型指数;fi(i=1到1 5)是成本因素。每个成本因素都根据它的重要程度和影响大小赋予一定数值。成本因素可以划分成生产因素、计算机因素、人员因素和项目工程因素等。生产因素包括要求的软件可靠性
20、(RELY)、数据库规模(D八TA)和软件产品的复杂程度(CPIX)。第二章可行性研究与计划 计算机因素包括执行时间的约束(TlME)、存储约束(STOR)、环境变更率(VIRT)和计算机换向时间(TuRT)。人员因素指系统分析员的能力(AcAP)和应用经验(AEXP)、程序员的能力(PCAP)、开发人员的环境知识(VEXP)和对选定的程序设计语言的知识(LExP)。项目因素包括程序设计实践(MODP)、使用的软件工具(T00L)、对工程进度限制和约束(SCED)。第二章可行性研究与计划 COCOM0模型是层次型模型,按详细程度分成三级:上层、中层和下层。下面简单介绍中层COCOM0模型。软件
21、开发项目可以分成组织式、半独立式和嵌入式三种模式。对组织式软件的要求通常不苛刻,开发人员经验丰富,对软件的使用环境很熟悉,程序的规模一般不大。嵌入式软件的要求通常十分苛刻,需要在很强的约束条件下运行。对半独立式软件的要求通常介于上述两类软件之间,但这类软件的规模一般都比较大。上述三种开发模式的正常开发工作量方程列在表2.4中。第二章可行性研究与计划第二章可行性研究与计划 所谓正常开发工作量也就是所有影响成本的因素都取正常值,即在COCOMO模型方程(2.5.4)式中的 fi=1 (i=l,2,l 5)如果某些因素不能取正常值,则需要把这些因素的实际值(称为工作量系数)乘以正常开发工作量,才能得
22、出对系统实际开发工作量的正确估计。表2.5列出了影响软件开发成本的工作量系数,不仅可以估算软件开发的实际成本,还可以分析、比较不同开发条件的成本和效益,从而能够制定出正确的开发方针。第二章可行性研究与计划第二章可行性研究与计划 2.5.2 成本成本/效益分析的方法效益分析的方法 上面介绍了几种估算开发成本的技术,至于运行费用则取决于系统的操作费用和维护费用。系统的经济效益等于因使用新系统而增加的收入加上使用新系统可以节省的运行费用。总的效益与生存周期的长度有关,为了保险起见,以后在进行成本效益分析时一律假设生存周期为5年。在对新系统进行成本效益分析时应考虑货币的时间价值,因为投资是在现在进行的
23、,然而效益确是在未来获得的。第二章可行性研究与计划 1.货币的时间价值货币的时间价值 通常以利率形式表示货币的时间价值。假设年利率为i,如果现在存入P元,则n年后可得到钱数为n1iPF(2.5.5)F就是P元钱在n年后的价值。反之,如果n年后能收入F元钱,那么这些钱的现在价值是 P=F(1+i)n (2.5.6)第二章可行性研究与计划例如,有一项工程,最初投资为5000元,估计使用该工程后每年可节省2500元,五年共节省125 00元。但不能简单地把5000元和l25 00元相比较,因为前者是现在投资的钱,后者是若干年后节省的钱。假定年利率为12,利用上面计算货币现在价值的公式可以算出每年预计
24、节省的钱的现在价值,如表2.6所示。第二章可行性研究与计划第二章可行性研究与计划 根据表2.6,可以算出衡量工程效益的几个经济指标:工程投资回收期、纯收入和投资回收率。2.投资回收期投资回收期 什么是投资回收期呢?所谓投资回收期就是工程累计经济效益等于最初投资所需要的时间。显然,投资回收期越短获得的利润越快,这项工程就值得投资。如表2.6中,该工程最初投资额是5000元,经过两年后可以节省4225.12元,比最初投资还少774.88元,第三年以后再次节省1779.45元,则77 4.881779.45一0.44,2+0.442.44年,因此这项工程的投资回收期是2.44年。第二章可行性研究与计
25、划 3.纯收入纯收入 纯收入就是在整个生存周期内新系统的累计经济效益与投资之差。如果纯收入小于等于零,则单从经济观点来看,这项工程不值得投资。在表2.6中,该工程的纯收入为:901.945000=4011.9 4元 4.投资回收率投资回收率 利用工程投资回收率,可以衡量投资效益的大小,并且可以用它和年利率相比较。第二章可行性研究与计划假定已知现在的投资额,并已估计出将来每年可以获得的经济效益,给定软件的使用寿命,如何计算投资回收率呢?设想把数量等于投资额的资金存入银行,每年从银行取回的钱等于系统每年可以获得的效益,在时间等于系统寿命时,正好把银行中的存款全部取完,那么,年利率等于多少呢?这个假
26、想的年利率就等于投资的回收率。根据上述条件不难列出下面的方程式:(2.5.7)nnjFjFjFP1/1/1/221第二章可行性研究与计划其中:P是现在的投资额;Fi是第i年年底的效益(i=l,2,n);n是系统的使用寿命;j是投资回收率。解出上述的方程式就可求出投资回收率。假定:n=5,P=5000,F=2500,则其投资回收率是4142。第二章可行性研究与计划 1.什么是可行性研究?在软件开发的早期阶段为什么要进行可行性研究?可行性研究的实施步骤是什么?2.已知某软件包具有三个主要功能:输入数据、更新数据、产生报表。根据历史资料记载,实现每个功能所需源代码行数估算如下:输入数据:a=100
27、m=200 b=300 更新数据:a=200 m=300 b=400 产生报表:a=300 m=400 b=500习习 题题 二二 第二章可行性研究与计划 三个功能的软件生产率都是200行月,每行成本l 0元行。请用LOC技术估算出该软件包的成本和工作量。3.某计算机系统投入使用后,5年内每年可节省人民币2000元,假设系统的投资额为6000元,年利率为12。试计算投资回收期和纯收入。4.一个4万行规模的组织型应用程序,花5 0万美元可在 市场上买到。如果自己开发,则每人月的总花费需要4000美元,试问购买合算还是自己开发合算?请用COCOMO中层模型估算其开发成本。第二章可行性研究与计划 5.某航空公司拟开发一个飞机票预订系统。旅行社把预订机票的旅客信息(姓名,性别,年龄,工作单位,旅行时间,旅行目的地)输入该系统,系统为旅客安排航班,印出取票通知蕈和帐萱,旅客在飞机起飞前两天凭取票通知单和帐单交款取票,系统校对无误即取出机票给旅客。请对该系统进行可行性研究,并写出可行性分析报告。