㈠ 软件项目的成本如何估算
定制软件开发是软件开发的一个领域,开发定制的数字技术解决方案以满足特定业务组织的特定需求。话虽如此,任何投资于定制软件开发的组织都必须有适当的计划和预算。定制软件开发项目有两个非常重要的限制需要考虑:时间和成本。(准确估算软件开发项目的成本是保障其整体成功的关键)。
在为某个定制软件开发项目制定计划时,组织或个人会问两个问题。
“多少钱?”
“多长时间?”
一、确定定制软件开发的基础工作
要确定和估算某个软件开发项目的成本,必须了解定制软件开发的基础知识。更具体地说,您必须知道问题的答案:
“定制软件开发是如何执行的?”
为了最简单、最全面地回答这个问题,需要讨论以下几点,它们是定制软件开发的基础。
确定需求——它有助于更好地估算成本,还可以正确开发和执行开发任务。
计划整个过程并设定目标——为整个软件项目开发周期制定适当的计划可以在时间和成本管理方面大有帮助。
详细文档——必须记录项目计划、实施计划、测试计划、范围说明书和培训计划中的所有内容。
为定制软件寻找合适的专业团队——能够高效工作并且能够同时处理多项任务,为整个过程提升效益。
二、确定影响定制软件开发成本的因素
在下面这一部分,讨论影响自定义软件开发项目的关键因素。确定软件开发项目的成本需要组织或个人考虑并考虑这些因素。
软件的规模和类型:软件的规模和类型是决定开发成本的两个关键因素。
例如,移动应用程序或电子商务商店将比银行或医院 ERP 解决方案等其他类型的软件便宜。自定义软件、仓库管理、安全应用程序和 CRM 解决方案的类型通常更加昂贵和耗时。
复杂性:开发的复杂性是影响整体定制软件开发估算的关键因素。
设计结构:设计结构有两个关键领域:创意设计和UI/UX设计。这两个因素对于项目的总成本都是必不可少的。
集成:第三方集成需要大量的精力和资源。
数据迁移:数据迁移是一个非常具体和准确的过程,需要自定义脚本和多个渠道。
开发时间:开发时间是影响定制软件开发成本的关键因素,人力成本是最大的支出。
功能和平台:尽管听起来很明显,软件运行的平台及其功能对您需要在产品上进行的整体投资有重大影响。
测试:有助于确定软件的效率和功能,还涉及一些影响项目总成本的支出。
维护:在成本估算时,还必须考虑某种定制软件产品的维护和支持类型。
三、如何估算定制软件的规模
快速功能点方法是依据国际标准《ISO/IEC 24570-2005软件工程NESMA功能尺度测量法2.1版功能点分析应用的定义和计数指南》提出的一种软件规模度量方法。
该方法适用于软件项目早期、中期、后期等各个阶段的规模估算或测量。
快速功能点方法进行规模估算或测量的基本过程或步骤如下:
确定计数类型
识别系统边界
识别功能点计数项
计算未调整的功能点数
计算调整后的功能点数。
那么就让新星为大家详细对每个步骤进行剖析:
1、确定计数类型
根据需求或项目的类型确定计数类型。
计数类型分为三种:新开发、延续开发及已有系统计数。
对于新开发需求或项目,对预计(或实际)投产的功能进行计数;
对于延续开发需求或项目,对预计(或实际)新增、修改及删除的功能均进行计数;
对于已有系统,对实际的功能进行计数。
2、识别系统边界
在识别系统边界的时候应注意:
应从用户视角出发,不受系统实现影响;
主要是为了区分内部逻辑文件(ILF)和外部接口文件(EIF);
事务功能应穿越识别的系统边界。
3、识别功能点计数项
功能点计数项分为数据功能和交易功能两类。
数据功能——包括内部逻辑文件(ILF)、外部接口文件(EIF);
交易功能——包括外部输入(EI)、外部输出(EO)、外部查询(EQ)。
数据功能:系统提供给用户的满足产品内部和外部数据需求的功能,即本系统管理或使用那些业务数据(业务对象),如“客户信息”“账户交易记录”等。内部逻辑文件或外部接口文件所指的“文件”不是传统数据处理意义上的文件,而是指一组客户可识别的、逻辑上相互关联的数据或者控制信息。因此,这些文件和物理上的数据集合(如数据库表)没有必然的对应关系。
交易功能:系统提供给用户的处理数据的功能,即本系统如何处理和使用那些业务数据(业务对象),如“转账”“修改黑名单生成规则”“查询交易记录”等。交易功能又称为基本过程,是用户可识别的,业务上的一组原子操作,可能由多个处理逻辑构成。例如,“添加柜员信息”这个基本过程可能包含“信息校验”“修改确认”“修改结果反馈”等一系列处理逻辑。
3、计算未调整的功能点数
a.采用预估功能点进行计数,计算公式如下:
FP=35ILF+15EIF
——FP:未调整的功能点数,单位为功能点;
——ILF:内部逻辑文件的数量;
——EIF:外部接口文件的数量。
b.采用估算功能点进行计数,计算公式如下:
FP=10ILF+7EIF+4EI+5EO+4*EQ
——FP:未调整的功能点数,单位为功能点;
——ILF:内部逻辑文件的数量;
——EIF:外部接口文件的数量;
——EI:外部输入的数量;
——EO:外部输出的数量;
——EQ:外部查询的数量。
5、计算调整后的功能点数
根据不同的规模测算阶段,需要考虑隐含需求及需求变更对规模的影响,因此,需要根据规模计数时机进行规模调整。
调整后的功能点数(AFP),计算公式如下:
AFP=FP*CF
——AFP:调整后的功能点数,单位为功能点;
——FP:未调整的功能点数,单位为功能点;
——CF:规模变更调整因子,依据行业数据,项目估算早期(如概预算阶段)通常取值为1.5;项目估算中期(如招投评标、项目立项、技术方案阶段)通常取值为1.26;项目估算中后期(如需求分析完成及后评价)通常取值为1.0。
四、估算软件项目开发成本
得出功能点数后,结合当地人力成本成本费率和项目非人力成本支出可以估算出软件项目开发成本。
㈡ 所有软件的成本评估都适合用功能点方法吗哪些软件适合使用功能点方法进行成本度量,哪些软件不适合
功能点规模计数方法适合以数据和交互处理为中心,以功能多少为主要造价制约因素的系统。例如,电子政务,银行、电信的用户和业务管理系统,办公自动化、ERP、信息管理系统等。
不适合用于估算包含大量复杂算法的软件,或创意型软件,或以非功能性需求为主的系统。例如,视频和图像处理软件、杀毒软件、网络游戏、性能优化任务。
㈢ 功能点估算法的规模估算
1. 识别功能点的类型。
2. 识别待估算应用程序的边界和范围。
3. 计算数据类型功能点所提供的未调整的功能点数量。
4. 计算人机交互功能所提供的未调整的功能点数量。
5. 确定调整因子。
6. 计算调整后的功能点数量。 通过对需求说明书的分析,我们可以使用“功能点”来对软件产品所提供给用户的功能加以度量。程序长度和复杂性都是对程序的事后分析,软件功能性却可在软件开发的初期进行分析,这对我们预测项目规模,规划项目时间表非常有帮助。
Albrecht的度量方式是先按需求描述对功能点计数,得到未调整功能点,再按系统涉及到的技术功能点对该数值进行修正。
按照软件表示技术,一项需求可描述为若干外部输入、外部输出、外部请求、外部文件、内部文件的集合。对集合中每一子项进行计数,并按其复杂性指派相应的权重,可得未调整功能点UFC:
n
UFC = ∑ (项目i的权重*权重i)
i=1
任何需求的实现,总与一定的技术有关。Albrecht定义了14项技术特性,对应每一特性有一个从0到5的关联值Fi(0说明此项技术特性与功能实现毫无关系,5说明此项技术特性是系统建立必不可少的组成部分)。一项需求的技术复杂性特性值TCF即由这些评分合成,公式如下:
14
TCF = 0.65 + 0.01 ∑ Fi
i=1
最后,功能点的度量值FP,为以上二者的乘积:
FP = UFC * TCF
㈣ 一个软件项目如何评估工作量和成本
软件开发成本估算过程可进一步细分为软件规模估算、工作量估算、成本估算和确定软件开发成本等四个过程。
其中成本估算需要对直接人力成本、间接人力成本、间接非人力成本及直接非人力成本分别进行估算。
国家标准《GB/T 36964-2018 软件工程 软件开发成本度量规范》中建议的软件开发成本估算基本流程如下图所示:
国家准中的四个估算过程,层层递进,逐步细化,最终达到科学、一致的成本估算。
一、软件规模估算
通常情况下,规模估算是软件成本估算过程的起点。
估算规模是后续计算软件项目的工作量、成本和进度的主要输入,是项目范围管理的关键,因此,在条件允许的情况下,应首先进行规模估算。
在规模估算过程中,需要注意以下情况:
在规模估算开始前,应根据可行性研究报告或类似文档明确项目需求及系统边界。项目需求除包含最基本的业务需求外,还应进行初步的子系统/模块划分,并对每一子系统或模块的基本用户需求进行说明,以保证可以根据项目需求进行规模预估。
依据项目特点和需求详细程度不同,通常估算人员在选择估算方法时应采用纳入国际标准的功能点方法进行功能规模估算,在适用IFPUG或NESMA方法时,可以根据需求的粒度和管理需要,选择预估功能点方法、估算功能点方法或者详细功能点方法。
若当前的项目需求极其模糊或不确定,可不进行规模估算,而直接采用类比法或类推法估算工作量和成本。
二、工作量估算
在完成规模估算后,应当开展工作量估算工作,若当前项目未开展规模估算,也可直接启动工作量估算工作。
工作量估算时,可采用方程法、类比法、类推法、功能点法:
方程法:即基于基准数据建立参数模型,通过输入各项参数,确定估算值。
类比法:即将待估算项目的部分属性与类似的一组基准数据进行比对,进而确定估算值。
类推法:即将待估算项目的部分属性与高度类似的一个或几个已完成项目的数据进行比对,并进行适当调整后确定估算值。
功能点法:从用户视角出发,通过量化系统功能来度量软件的规模,这种度量主要基于系统的逻辑设计。功能点规模度量方法在国际上的应用已经比较广泛,并且已经取代代码行成为最主流的软件规模度量方法。
在开展工作量估算的过程中,需要注意以下情况:
当需求极其模糊或不确定时,如果此时具有高度类似的历史项目,则可直接采用类推法,充分利用历史项目数据来粗略估算工作量。
当需求极其模糊或不确定时,如果此时具有与本项目部分属性类似的一组基准数据,则可直接采用类比法,充分利用基准数据来粗略估算工作量。
对于规模估算已经开展的项目,可采用方程法,通过输入各项参数,确定待估算项目的工作量。若客户或高层对项目的工期有明确的要求时,在采用方程法估算工作量时,工期要求有可能是方程的参数之一。
为追求估算的准确性,建议在条件允许的情况下,可采用两种估算方法,对估算结果进行交叉验证,若估算结果差别不大,可直接使用两种估算结果的平均值或以某种估算结果为准,若差别较大,需进行差异分析。
工作量的估算结果宜为一个范围而不是单一的值。
三、成本估算
在获得了工作量估算结果后,可采用科学的方法进行成本估算。
在成本估算过程中,应需要注意的情况:
类比法和类推法,同样适用于需求极其模糊或不确定时的成本估算;
间接成本是否与工作量估算结果相关取决于间接成本分摊计算方式。在绝大多数组织,项目周期越长,项目组成员越多,其分摊的间接成本就越高,此时项目的间接成本与工作量估算结果直接相关;
直接非人力成本通常与工作量估算结果无关,宜单独分项测算;
成本估算结果,也通常为一个范围,而不是单一的值。
四、确定软件开发成本
在《软件工程 软件开发成本度量规范》中,将软件开发成本分为四类,主要是为便于对成本构成(即哪些成本属于开发成本,哪些不属于开发成本)进行清晰界定。
而在实际确定软件开发成本时,通常并不是分别测定四类成本,加和后获得总成本,而是通常采用以下两种方式确定总成本:
根据人力成本费率及工作量估算直接人力成本和间接成本之和,再加上直接非人力成本,获得总成本;
根据规模综合单价和软件规模,测算出直接人力成本和间接成本之和,再加上直接非人力成本,获得总成本。
在进行软件的规模、工作量、成本估算时应遵循以下原则:
在规模估算时,应根据项目特点和需求的详细程度选择合适的估算方法;
充分利用基准数据,采用方程法、类比法或类推法,对工作量和成本进行估算;
工作量和成本的估算结果宜为一个范围值;
在进行成本估算时,如有明确的工期要求,应充分考虑工期对项目成本的影响,可以根据项目实际情况以及工期对项目的影响程度,对成本的估算结果进行调整;
成本估算过程中宜采用不同的方法分别估算并进行交叉验证。如果不同方法的估算结果产生较大差异,可采用专家评审方法确定估算结果,也可使用较简单的加权平均方法;
在软件项目的不同场景下(如预算、招投标、项目计划和变更管理等)采用国家标准时,相关要求见国家标准中附录A。
除了上述主要原则外,我们还需注意在使用基准数据时:
对于委托方和第三方,建议使用或参考软件行业基准数据进行估算。估算模型的调整因子的增减或取值有可能随着行业基准数据的变化而变化。
对于开发方,在引入行业基准数据的基础上,可逐步建立组织级基准数据库,以提高估算精度。组织级基准数据定义应与行业基准数据定义保持一致,以便于与行业基准数据进行比对分析,并持续提升组织能力。
㈤ 功能点估算法的估算过程
估算的过程主要包括规模估算、规模调整、估算工作量、估算工期和确定预算。上一部分主要讲解了估算规模和规模调整这两部分。
根据调整后软件规模,估算工作量,公式如下:AE=(PDR*S)*SWF*RDF
估算工期可根据工作量-工期模型计算,公式如下:D=1.277*(AE/HM 1 )0.404,当期望工期短于估算工期的下限时,应对项目需求进行分析并适当调整。通常,压缩工期会增加项目工作量,及导致生产效率降低。
在获得了工作量估算结果后,可采用以下公式估算项目预算:P=AE/HM 2 *F 2 +DNC
审批预算时应考虑以下因素:预算的合理性;可用于本项目的资金情况;概算或年初总预算额;其他预算项目可行性及投资收益率对比和平衡。(以上内容均摘自行标《软件研发成本度量规范》)
㈥ 项目成本估算方法的面向功能点(FP)的度量
面向功能点法是由Albrecht最先提出的,并且在1983年由Albrecht和Gaffney进行了改进。功能点可由以下4个参数计算出来:
● 外部输入和输出数
● 外部接口数
● 用户交互数
● 系统要用的文件数
每个参数都可以根据复杂性进行评估,一般它们的权理为3~15.功能点是通过完成如图所示的功能点度量计算出来的。其中,FP计数等于数量与加权因子之积,加权因子根据功能点的复杂程度取不同的值。
功能点法是通过建立一个标准来确定某个特定的测量参数(简单、平均或复杂)的功能点数,但权重的确定多少带有一定的主观性。
一般,可以采用下面的方工计算功能点:
FP = 总计数值*[0.65+0.01*SUM(Fi)]
其中总计数值是上表中所得到的所有条目的总和。Fi(i=1,2,3,...14)是对以下14个问题回答的结果而得出的权重调整值(0~5)。等式中的常数和参数的加权因子是根据经验确定的。
序号 问题
1 系统是否需要可靠的备份和恢复
2 是否需要数据通信
3 是否有分布处理功能
4 系统是否很关键
5 系统是否在一个已有的、很实用的操作环境中运行
6 系统是否需要联机处理
7 联机数据项是否需要在多屏幕或多操作之间切换以完成操作
8 是否需要联机更新主文件
9 输入、输出及文件查询是否很复杂
10 内部处理是否复杂
11 代码是否需要设计成可复用的
12 设计中是否需要包括转换及安装
13 系统的设计是否支持不同组织的多次安装
14 应用的设计是否方便用户修改及使用
问题的答案及相应权重如下表所示 Fi的取值 0 1 2 3 4 5 没有影响 偶有影响 轻微影响 平均影响 较大影响 严重影响 一旦计算出功能点,就可以采用类似面向规模的方法来使用,以便规范软件生产率、质量及其他属性的测量:
● 每个功能点(FP)的错误数。
● 每个功能点(FP)的缺陷数。
● 每个功能点(FP)的成本。
● 每个功能点(FP)的文档页数。
● 每人月完成的功能点(FP)数。
面向功能点(FP)和面向规模(LOC)两种度量方法之间的关系为:LOC=AVC*功能点的数量,其中AVC是指该语言在实现一个功能点时所要用的平均代码行数。
㈦ 软件开发成本估算方法有哪几种
开发一个软件项目,成本如何估算?对此业内已经形成了较为通用的做法,估算步骤主要是这样的:A.软件项目需求沟通-》B.软件项目需求拆分-》C.每个需求点的人天评估-》D.项目人天汇总-》E.商务报价定稿,下面我给大家逐一分解:
A节点主要是将客户需要做什么弄清楚;
B节点则将需求按模块拆分成需求点;
C节点则是根据企业开发实力和过往经验判断每个功能点多少人多少天完成(这个点需要较为资深的销售经理或项目经理来评估);
D节点则是把项目所有人天及价格进行汇总,这个汇总不是简单的相加,因为前面步骤得出的人天仅仅是开发部分的工作量,但是软件开发还包括需求调研、系统设计、系统测试、UAT、上线和运维等等,这部分一般通过一定系数进行测算得出;
E节点就是考虑商务层面而非技术层面的因素对最终价格进行修订,比如甲方是一个大企业那么可能第一次合作吃亏也得进去先,比如说甲方不差钱那报价可以适度提升以防后续有需求变更等等;
为了让大家有个清晰的认知,我把工作中接触过的一个评估模板(只到D节点哈)复制上来给大家参考:
软件开发成本估算模型
以上是我从知乎大神处借鉴来的软件开发成本估算方法之一,也有一些其他办法,比如拿着同一份需求找不同厂商报价,看报价分布区间就能知道大概成本,另外对于资深的项目经理或开发人员,他们凭借感觉也是能估算的出来的......其他的欢迎其他同仁积极发表意见,毕竟借助科学的评估流程、工具及经验做好软件项目成本估算,从而更好的保障项目盈利是非常有必要的。
㈧ 了解成本估算方法有哪些
成本估算方法,就方法论而言,有两种基本的成本估算方法:自顶向下和自底向上。
1、自顶向下法是对整个工程项目的总开发时间和总工作量做出估算,然后将它们按阶段、步骤和任务进行分配。
2、自底向上法则正好相反,先分别估算各个任务所需要的工作量和开发时间,再相加,从而得到总的工作量和总的开发时间。
这两种方法都要求采用某种方法做出估算。有许多估算方法可以利用,大致划分为四类:专家估算法、类推估算法 、算式估算法、差别估算法。
1、专家估算法
依靠一个或多个专家对项目做出估算,其精度主要取决于专家对估算项目的定性参数的了解和他们的经验。
2、类推估算法
在自顶向下法中,类推估算法将估算项目的总体参数与类似项目进行直接比较得到结果;在自底向上法中,类推是在两个具有相似条件的工作单元之间进行。
3、算式估算法
前两种估算法的缺点在于它们依靠的是带有主观猜测和盲目性的估算方法。算式估算法则是企图避免主观因素影响的一种方法。算式估算法有两种基本类型:由理论导出的算法和由经验得出的算法。
4、差别估算法
差别估算是与一个或多个已完成的类似项目进行比较,找出与某个相似项目的若干 不同之处,并估算每个不同之处对成本的影响,导出软件项目的总成本。 优点:该方法可以提高估算的准确度。缺点:不容易明确差别的界限。
㈨ 做软件开发的成本究竟如何估算
软件成本评估的6个步骤:
1、软件规模评估:
软件规模评估是软件成本评估的基础,是为了保证软件成本评估结果的客观性和透明性,软件规模信息必不可少。
在软件规模评估过程中,如果能够以软件功能点方法作为主要的软件规模评估方法,同时辅以其他的非标准评估方法,例如代码行方法、用例数方法等,应用不同的软件规模评估方法对规模评估结果进行真实性交叉检验,一方面可以提高软件规模评估结果的可信度;另一方面,也可以对不同类型的项目干系人也会具有更强的说服力。
在实际的软件规模评估过程中,软件组织或者个人也可以根据自身的特点采用有别于上述评估方法的其他方法。但要注意的是,不管采用哪种软件规模评估方法,都要尽可能的保证这个方法所评估结果的一致性和客观性。
2、软件工作量评估
如果说我们能够算出开发软件、维护软件所投入的人员工作量,那么我们也就相当于得到了相应的软件成本。在软件行业中的绝大多数项目里面,影响软件工作量的最主要因素还是软件规模因素,当软件规模越来越大时,也就意味着我们需要投入的工作量越多,这两者之间是存在着正相关的关系。
在软件工作量的评估中,还包含了五个小步骤,也就是收集历史工作量数据、分析历史工作量数据、建立工作量评估模型、评估工作量、工作量模型的标定和更新。通过这些步骤可以积累更多关于软件组织开发工作量和维护工作量的数据,在此基础之上,建立相应的工作量评估模型,从而为后续的工作量评估任务提供支持方法。
3、软件阶段工作量评估
在这个步骤中,软件成本评估团队应该充分考虑软件项目的工期因素,对软件项目总工作量安排和各个阶段工作量安排进行优化分析,将软件项目的总工作量以合理可行的方式分解为各个阶段的工作量。
不仅如此,还要考虑软件项目工期所面临的各种工期约束条件,例如一些来自客户的强制工期要求、市场竞争性、可用的人力资源、项目各阶段人力资源分配的合理比例等约束条件,都在这个步骤中明确介绍了一系列阶段工作量安排的改进和优化方法,包括阶段工作量汇总法、资源平滑法、快速跟踪法、赶工法以及软件阶段工作量的可行性评估方法等。
这些方法的主要目的就是在于将软件工作总量以合理、可行的方式分配到软件项目的各个阶段,确保在不超出工作总量的前提下,尽可能降低人员成本、优化人力资源配置,为软件预算、软件开发计划制定等管理活动提供充分的决策支持信息。
4、软件人员成本评估
在这个步骤里面,我们将会详细说明如何在软件开发和维护所需的工作量转换为对应的费用信息,以便为相关的项目外部干系人提供更直接的决策依据。在软件人员成本评估中,也包含有单一人员成本评估法、分类人员成本评估法和行业人员成本评估法。
5、软件风险评估
在软件开发的过程中,许多软件组织明确认识到软件行业的开发人员已经默认和接受了无偿加班这一行业事实,这样一来,就算没有识别相应的风险信息,但也没有严重后果,也就是说,如果风险发生了,那就加班。
这个步骤中通过应用不同的风险评价方法,将软件项目的风险信息转换为项目的成本信息,从而建立软件项目的风险预算。
6、软件成本报告与更新
软件项目在开发过程中时,经常容易发生各种软件需求变更、人员变更、工期变更等多种类型的变更,这些变更无一例外地将对软件成本产生明显的影响。
在这个步骤中,可以分析软件成本更新面临的困难,有哪些典型的软件成本更新的信息来源,从机制设计的角度确保尽可能全面获取软件成本变更信息。最后遵循软件组织所建立的软件成本更新过程,将软件成本变更信息反映到更新后的软件成本评估结果中。