软件工程第二章可行性分析2目标:了解可行性研究的步骤。当接受一个软件开发任务时,就进入软件生命周期的第一个阶段,即可行性研究。3主要内容•可行性研究的任务•可行性研究的步骤•系统流程图•成本效益分析4可行性研究的任务•可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。•一般应从经济可行性、技术可行性、运行可行性、法律可行性和开发方案可行性等方面进行研究。5经济可行性•主要是进行成本效益分析,包括估计项目的开发成本,估算开发成本是否会高于项目预期的全部经费。分析系统开发对其他产品或利润带来的影响。6技术可行性•根据客户提出的系统功能、性能及实现系统的各项约束条件,从技术的角度研究系统实现的可行性。•这是系统开发中最难且最重要的工作。包括:–风险分析:在给定的条件下能否实现所有功能。–资源分析:建立系统所需资源(人手)能否满足。–技术分析:相关技术的发展是否支持该系统。7运行可行性•确定新系统规定的运行方式是否可行。•例如服务器能不能承受负荷等。8法律可行性•系统开发中可能涉及到的合同、侵权、责任以及各种与法律相抵触的问题。9开发方案可行性•对各种系统开发方案进行比较评价,选出最优方案。10•可行性研究的结果可以作为系统规格说明书的一个附件。•其最根本的任务是对以后的行动路线提出建议,若无可行解,则应建议停止开发。•可行性研究的成本占工程总成本的5%-10%。•可行性研究的目录如下:111.引言1.1问题1.2实现条件1.3约束条件2.管理2.1重要的发现2.2注释2.3建议2.4效果3.方案选择3.1选择系统配置3.2选择方案的标准4.系统描述4.1缩写词4.2各子系统的可行性5.成本效益分析6.技术风险分析7.有关法律问题8.用户使用可能性、9.其他可行性研究目录12可行性研究的步骤1.复查系统规模和目标2.研究目前正在使用的系统3.导出新系统的高层逻辑模型4.重新定义问题5.导出和评价供选择的方案6.推荐一个方案并说明理由7.推荐行动方针8.书写计划任务书9.提交审查13系统流程图•系统流程图是描绘物理系统的传统工具。其功能包括:①制作系统流程图的过程是系统分析员全面了解系统业务处理概况的过程,是系统分析员进一步分析的依据;②系统流程图是系统分析员、管理人员、业务操作人员相互交流的工具;③系统分析员可直接利用系统流程图画出可以实现计算机处理的部分;④可利用系统流程图来分析业务流程的合理性。14系统流程图的基本符号处理(能改变数据或数据位置的加工或部件)输入/输出(广义的不指明具体设备的符号)连接(指出转到图的另一部分或转来,通常是同一页)换页连接(转到另一页去或由另一员转来)人工操作(人工完成的处理)通信链路(远程通讯线路传送数据)数据流(用于连接其它符号,指明数据流动的方向)15成本效益分析•目的是要从经济角度分析,开发一个特定的新系统是否可行,从而帮助使用部门负责人正确地做出是否投资于这项开发工程的决定。16成本估计•是软件费用管理的核心,最困难且最易出错。•主要的成本估计方法:–自顶向下成本估计–自底向上成本估计–算法模型估计17自顶向下成本估计•首先估计总的开发成本,再在项目内部进行成本分配。由少数上层技术与管理人员进行。•缺点:对开发中某些局部的问题或特殊困难容易低估,甚至没有考虑到。•当参与的专家较多时,可用Delphi法:把系统定义文件或规格说明发给各专家,分别单独进行成本估计,填入成本估计表,然后由协调人综合专家意见,并摘要通知大家,并开始新一轮估计,如此反复,直到专家们的意见接近一致。18自底向上成本估计•将开发任务分解为许多子任务,分别估计各个子任务的成本,再汇合成项目成本。•由开发人员进行,结果往往比较实际。•缺点:具体工作人员往往只注意到自已范围内的工作,对综合测试、质量管理和项目管理等涉及全局的花费可能估计不足,甚至完全忽视。可能使成本估计偏低。19算法模型估计•算法模型就是资源模型。该模型应该是根据历史数据导出的,所以比较客观。•关键是选好适用的模型。常与前两种方法结合使用。20费用估计技术•代码行技术:根据经验和历史数据估计源程序行数。•任务分解技术:把软件开发分解为若干个相对独立的任务,再分别估计成本(人月)。常用的方法是按开发阶段划分任务,大系统也可分成子系统。一般:可行性研究5%需求分析10%软件设计25%编码单元测试20%综合测试40%21度量效益的方法•货币的时间价值•投资回收期•纯收入22货币的时间价值•投资在前,收益在后•一般用利率表示货币的时间价值•设年利率为i,现存入P元,则n年后的价值:F=P(1+i)n•或者P=F/(1+i)n23投资回收期•投资回收期指积累的经济效益等于最初的投资所需要的时间。24纯收入•整个生存周期内系统的累计经济效益(折合成现在值)与投资值之差。•本质上就是把预期收益与存银行或贷款给其他企业进行比较,如果纯收入为零,意思就是投资回报与存银行相同,而投资风险一般远大于存银行,则显然不值得投资。25小结•通过可行性研究可以知道问题有无可行解,避免人力物力财力的浪费。•占总成本的5%-10%•目的是用最小的代价在尽可能短的时间内确定问题是否能得到解决。即搞清楚问题是否值得解,而不是去解决问题。•它要进行一次压缩简化了的系统分析和设计过程,即在较高层次上以较抽象的方式进行设计的过程。•介绍了可行性研究的任务、步骤和系统流程图,以及成本效益分析。完