3.1 项目立项概述
任何一个完整的软件工程项目都是从项目立项开始的。项目立项全过程包括项目发起、项目论证、项目审核和项目立项4个步骤。
在发起一个项目时,项目发起人或单位为寻求他人的支持,要将书面材料递交给项目的支持者和领导,使其明白项目的必要性和可行性。这种书面材料称为项目发起文件或项目建议书。
项目论证过程,也就是可行性研究过程。可行性研究就是指在项目进行开发之前,根据项目发起文件和实际情况,对该项目是否能在特定的资源、时间等制约条件下完成做出评估,并且确定它是否值得去开发。可行性研究的目的不在于确定如何去解决问题,而在于确定问题是否值得去解决、是否能够解决。
之所以要进行可行性研究是因为在实际情况中,许多问题都不能在预期的时间范围内或资源限制下得到解决。如果开发人员能够尽早地预知问题没有可行的解决方案,那么尽早地停止项目的开发就能够避免时间、资金、人力、物力的浪费。
可行性研究的结论有以下3种:
①可行:按计划进行。
②基本可行:需要对解决方案做出修改。
③不可行:终止项目。
项目经过可行性研究并认为项目可行后,还需要报告主管领导或单位,以获得项目的进一步审核,并得到他们的支持。
项目通过可行性研究和主管领导或单位的批准后,将其列入项目计划的过程,称为项目批准。经过项目发起、项目论证、项目审核和项目批准4个步骤后,一个软件工程项目就正式立项了。
3.2 可行性研究的内容
可行性研究需要从多个方面进行评估,主要包括战略可行性、操作可行性、计划可行性、技术可行性、社会可行性、市场可行性、经济可行性和风险可行性等。
战略可行性研究主要从整体的角度考虑项目是否可行,例如提出的系统对组织目标具有怎样的贡献;新系统对目前的部门和组织结构有何影响;系统将以何种方式影响人力水平和现存雇员的技术:它对组织整个人员开发策略有何影响等。
操作可行性研究主要考虑系统是否能够直正解决问题,系统一旦安装后,是否有足够的人力资源来运行系统;用户对新系统具有抵触情绪是否可能使操作不可行;人员的可行性等问题。
计划可行性研究主要估计项目完成所需的时间并评估项目预留的时间是否足够。
技术可行性研究主要考虑项目使用技术的成熟程度;与竞争者的技术相比,所采用技术的优势及缺陷;技术转换成本;技术发展趋势及所采用技术的发展前景;技术选择的制约条件等。
社会可行性研究主要考虑项目是否满足所有项目涉及者的利益;是否满足法律或合同的要求等。
市场可行性研究主要包括研究市场发展历史与发展趋势,说明本产品处于市场的什么发展阶段;本产品和同类产品的价格分析;统计当前市场的总额、竞争对手所占的份额,分析本产品能占多少份额;产品消费群体特征、消费方式以及影响市场的因素分析;分析竞争对手的市场状况;分析竞争对手在研发、销售、资金、品牌等方面的实力;分析自己的实力等。
经济可行性研究主要是把系统开发和运行所需要的成本与得到的效益进行比较,进行成本效益分析。
风险可行性研究主要是考虑项目在实施过程中可能遇到的各种风险因素,以及每种风险因素可能出现的概率和出现后造成的影响程度。
3.2.1.技术可行性研究
技术可行性研究主要关注待开发的系统的功能性的确限制条件,确定现有技术能否实现有关的系统解决方案,在现有的资源条件下实现新系统的技术风险有多大。这里的资源条件是指已有的或可以得到的软硬件资源、现有的项目开发人员的技术水平和已有的工作基础。
在评估技术可行性时,需要考虑以下情况:了解当前最先进的技术,分析相关技术的发展是查支接新系统;确定资源的有效性,如新系统的软硬件资源是否具备、开发项目的人员在技术和时间上是否可行等;分析项目开发的技术风险,即能否在给定的资源和时间等条件下,设计并实现系统的功能和性能等。
技术可行性研究往往是系统开发过程中难度最大的工作,也是可行性研究的关键。
3.2.2 操作可行性研究
操作可行性研究是对开发系统在一个给定的工作环境中能否运行或运行好坏程度的衡量。操作可行性研究决定在当前的政治意识形态、法律法规、社会道德、民族意识以及系统运行的组织机构或人员等环境下,系统的操作是否可行。操作可行性往往最容易被忽视或被低估,或者认为系统一定是可行的。
3.2.3经济可行性研究
成本效益分析是经济可行性研究的重要内容,它用于评估项目的经济合理性,给出项目开发的成本论证,并将估算的成本与预期的利润进行比较。
由于项目开发成本受项目的特性、规模等多种因素的制约,同时要对软件设计进行反复优化以获得用户更为满意的质量,因此开发项目的人员很难直接估算基于项目的成本和利润,换句话讲,得到完全精确的成本效益分析结果易十分困难的。
一般说来,项目的成本由4部分组成:购置并安装软硬件及有关设备的费用,项目开发费用;软硬件系统安装、运行和维护费用;人员的培训费用。在项目的分析和设计阶段只能得到上述费用的预算,即估算成本。在项目开发完毕并将系统交付用户运行后,上述费用的统计结果就是实际成本。项目开发效益包括经济效益和社会效益两部分。经济效益是指所使用的系统为用户增加的收,可以通过直接的或统计的方法估算。
社会效益只能用定性的方法估算。
1. 成本估算
成本估算最好使用几种估算技术以便相互校验。下面简单介绍两种估算技术:
(1)代码行技术。代码行技术是比较简单的定量估算方法,它将开发每个软件功能的成本和实现这个功能需要用的源代码行数联系起来。通常根据经验和历史数据估算实现一个功能所需要的源代码行数。一旦估算出源代码行数后,用每行代码的平均成本乘以行数即可确定软件的成本。每行代码的平均成本主要取决于软件的复杂程度和薪资水平。
(2)任务分解技术。首先将开发项目分解为若干个相对独立的任务,再分别估算每个任务单独开发的成本,最后累加起来就可得出开发项目的总成本。
任务分解技术最常用的方法是按开发阶段划分任务。如果项目比较复杂,如由若干个子系统组成,则可以将若干个子系统按开发阶段再进一步划分成更小的任务。
典型环境下各个阶段需要投入的人力百分比如表3-1所示。
2. 成本效益分析
成本效益分析的第一步是估算开发成本、运行费用和新系统将带来的经济效益。
·开发成本:使用代码行技术或任务分解技术进行估算。
·运行费用:取决于系统操作的费用(操作员人数、工作时间和消耗物资等),以及维护费用。•新系统将带来的经济效益:为因使用新系统而增加的收入加上使用新系统可以节省的运行费用。
因为运行费用和新系统将带来的经济效益这两项在软件的生命周期中都会产生,而且总效益和软件生命周期的长度有关,所以应该合理地估算软件的生命周期。
这里需要比较新系统的开发成本和新系统将带来的经济效益,以便从经济角度判断这个系统是否值得投资。但是,投资是现在进行的,效益是将来获得的,不能简单地比较成本和效益,还应该考虑货币的时间价值。
3. 货币的时间价值
通常以利率的形式表示货币的时间价值。假设年利率为i,如果现在存入P元,则n年后可以得到的价值为:
F=P(1+i)n (n为次方)
F就是P元在n年后的价值。反之,如果n年后能收入F元,那么这些钱的现在价值就是:P=F/(1+i)
例如,有这样一个库房管理系统,它每天能产生一份订货报告。假定开发该系统共需50000元,系统开发完后能及时订货,以免商品短缺,估算一下,如果每年可以节省25000元,那么5年可以总共节省125000元。假定年利率为5%,利用上面计算货币现在价值的公式,可以计算出开发完该库房管理系统后每年预计节省费用的现在价值,如表3-2所示。
4.投资回收期
投资回收期是衡量一个项目价值的常用方法。投资回收期就是使累计的经济效益等于最初投资所需要的时间。很明显,投资回收期越短,获得利润就越快,项目就越值得开发。
例如,根据上述的例子,使用库房管理系统两年以后可以节省46485.26元,比最初的投资(50000元)还少3513.74元。因此,投资回收期为两年多一点的时间。
投资回收期是一项经济指标,但它并不是唯一的经济指标。为了衡量一个项目的价值,还应该考虑其他经济指标。
5. 纯收入
纯收入是衡量一个项目价值的另一项经济指标。(纯收入就是在软件生命周期中软件系统的累计经济效益(折合成现在价值)与投资之差。这相当于比较投资开发一个软件系统和将钱存在银行中(或贷给其他企业)这两种方案的优劣。如果纯收入较少,则项目的预期效益可能与在银行存款一样,而且开发一个软件系统存在风险,从经济观点来看,这个项目可能是不值得投资的。如果纯收入小于0,这个项目显然是不值得投资开发的。
例如,针对上述的库房管理系统,这个系统的纯收入预计为:
108236.92-50000=58236.92(元)
显然,这个项目是值得投资开发的。
3.3 可行性研究的步骤
可行性研究的步骤不是固化的,而是根据项目的性质、特点以及开发团队的能
力有所区别。一个典型的可行性研究的步骤可以归结为以下5步,如图3-1所示。
(1)明确系统目标
在这一步,可行性分析人员要访问相关人员,阅读并分析可以掌握的材料,确认用户需要解决的问题的实质,进而明确系统的目标以及为了达到这些系统目标所需的各种资源。
(2)分析并研究现行系统
现行系统是新系统重要的信息来源。新系统应该完成现行系统的基本功能,并在此基础上对现行系统中存在的问题进行改善或修复。我们可以从3个方面对现有系统进行分析:系统组织结构定义、系统处理流程分析和系统数据流分析。系统组织结构定义可以用组织结构图来描述。系统处理流程分析的对象是各部门的业务流程,可以用系统流程图来描述。系统数据流分析与业务流程紧密相连,可以用数据流图和数据字典来描述。
(3)设计新系统的高层逻辑模型
这一步从较高层次来设想新系统的逻辑模型,概括地描述开发人员对新系统的理解和设想。
(4)获得并比较可行的方案
开发人员可根据新系统的高层逻辑模型提出实现此模型的不同方案。在设计方案的过程中从技术、经济等角度考虑各方案的可行性。然后,从多个方案中选择出最合适的方案。
(5)撰写可行性研究报告
可行性研究的最后一步就是撰写可行性研究报告。此报告包括项目简介、可行性分析过程和结论等内容。
可行性研究的结论一般有以下3种:
(1)可以按计划进行软件项目的开发。
(2)需要解决某些存在的问题(如资金短缺、设备陈旧和开发人员短缺等)或者需要对现有的解决方案进行一些调整或改善后才能进行软件项目的开发。
(3)待开发的软件项目不具有可行性,应立即停正该软件项目的开发。
上述可行性研究的步骤只是一个经过长期实践总结出来的框架。在实际的使用过程中,它并不是固定的,根据项目的性质、特点以及开发团队对业务领域的熟悉程度会有所变化。
经过可行性研究后,对于值得开发的项目,就要制定软件开发计划,并写出软件开发计划书。