软件开发成本估算

来源:乐鱼平台下载  作者:乐鱼平台官网  2022-09-20 23:05:10

  软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。不同与传不同与传不同与传统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代价来计算的。因此,价来计算的。因此,价来计算的。因此,软件开发成本的估算,应是从软件计划、需求分析、设计、编码、软件开发成本的估算,应是从软件计划、需求分析、设计、编码、软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。软件开发成本估算的经验模型软件开发成本估算的经验模型软件开发成本估算的经验模型8年年年PutnamPutnamPutnam提出的,一种动态多变量模型。提出的,一种动态多变量模型。提出的,一种动态多变量模型。L=Ck*KL=Ck*KL=Ck*K131313*td*td*td434343其中:其中:其中:L-----------L-----------源代码行数源代码行数源代码行数以LOCLOCLOCK-----------整个开发过程所花费的工作量(以人年计)整个开发过程所花费的工作量(以人年计)整个开发过程所花费的工作量(以人年计)td-----------td-----------td-----------开发持续时间(以年计)开发持续时间(以年计)开发持续时间(以年计)Ck----------Ck----------Ck----------技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环境而异,见下表境而异,见下表境而异,见下表CkCkCk的典型值的典型值的典型值开发环开发环开发环开发环境举例开发环境举例开发环境举例0没有系统的开发方法,缺乏文档和复审没有系统的开发方法,缺乏文档和复审没有系统的开发方法,缺乏文档和复审0好好有合适的系统的开发方法,有充分的文档和复审有合适的系统的开发方法,有充分的文档和复审有合适的系统的开发方法,有充分的文档和复审有自动的开发工具和技术有自动的开发工具和技术有自动的开发工具和技术从上述方程加以变换,可以得到估算工作量的公式:从上述方程加以变换,可以得到估算工作量的公式:从上述方程加以变换,可以得到估算工作量的公式:K=LCkCkCk33*td*td*td44还可以估算开发时间:还可以估算开发时间:还可以估算开发时间:td=[Ltd=[Ltd=[L33CkCkCk33141414constructivecostmodelconstructivecostmodelconstructivecostmodel这是由这是由这是由TRWTRWTRW公司开发,公司开发,公司开发,BoehmBoehmBoehm提出的结构化成本估算模型。是一种精确的、易于使用提出的结构化成本估算模型。是一种精确的、易于使用提出的结构化成本估算模型。是一种精确的、易于使用的成本估算方法。的成本估算方法。的成本估算方法。COCOMOCOCOMOCOCOMO模型中用到以下变量:模型中用到以下变量:模型中用到以下变量:DSI-------DSI-------DSI-------源指令条数。不包括注释。源指令条数。不包括注释。源指令条数。不包括注释。1KDSI=1000DSI1KDSI=1000DSI1KDSI=1000DSI。。MM-------MM-------MM-------开发工作量(以人月计)开发工作量(以人月计)开发工作量(以人月计)1MM=191MM=191MM=19人日人日人日=152=152=152人时人时人时=112=112=112人年人年人年TDEV-----TDEV-----TDEV-----开发进度。开发进度。开发进度。以月计以月计以月计COCOMOCOCOMOCOCOMO模型中,考虑开发环境,软件开发项目的类型可以分为模型中,考虑开发环境,软件开发项目的类型可以分为模型中,考虑开发环境,软件开发项目的类型可以分为33organic:organic:organic:相对较小、相对较小、相对较小、较简单的软件项目。较简单的软件项目。较简单的软件项目。开发人员对开发目标理解比开发人员对开发目标理解比开发人员对开发目标理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件的约束较小,程序的规模不是很大(的约束较小,程序的规模不是很大(的约束较小,程序的规模不是很大(500005000050000embedded:embedded:embedded:要求在紧密联系的硬件、软件和操作的限制条件下运行,要求在紧密联系的硬件、软件和操作的限制条件下运行,要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求高。软件规模任意。如大而复杂的事务处理系统,大型高。软件规模任意。如大而复杂的事务处理系统,大型高。软件规模任意。如大而复杂的事务处理系统,大型超大型操作系统,航天超大型操作系统,航天超大型操作系统,航天用控制系统,大型指挥系统等。用控制系统,大型指挥系统等。用控制系统,大型指挥系统等。(semidetachedsemidetachedsemidetached):介于上述两种软件之间。规模和复杂度都属于中介于上述两种软件之间。规模和复杂度都属于中介于上述两种软件之间。规模和复杂度都属于中 等或更高。最大可达 等或更高。最大可达 等或更高。最大可达30 30 30 万行。 万行。 万行。 估算公式:估算公式: 估算公式: 基本基本 基本COCOMO COCOMO COCOMO 模型估算工作量和进度的公式如下 模型估算工作量和进度的公式如下 模型估算工作量和进度的公式如下 工作量:工作量: 工作量: 进度:进度: 进度: 其中经验常数其中经验常数 其中经验常数r,c,a,b r,c,a,b取决于项目的总体类型。取决于项目的总体类型。 取决于项目的总体类型。 COCOMOCOCOMO COCOMO 模型按其详细程度可以分为三级: 模型按其详细程度可以分为三级: 模型按其详细程度可以分为三级: 。其中基本。其中基本 。其中基本COCOMO COCOMO COCOMO 模型是是一个静态单变量模型,它用一个以已估算 模型是是一个静态单变量模型,它用一个以已估算 模型是是一个静态单变量模型,它用一个以已估算 出来的原代码行数 出来的原代码行数 出来的原代码行数LOC LOC LOC为自变量的经验函数计算软件开发工作量。 为自变量的经验函数计算软件开发工作量。 为自变量的经验函数计算软件开发工作量。 中级 中级 中级COCOMO COCOMO COCOMO 型在基本型在基本 型在基本COCOMO COCOMO COCOMO 模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因 模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因 模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因 素调整工作量的估算。详细 素调整工作量的估算。详细 素调整工作量的估算。详细COCOMO COCOMO COCOMO 模型包括中间 模型包括中间 模型包括中间COCOMO COCOMO COCOMO 模型的所有特性,但更进一 模型的所有特性,但更进一 模型的所有特性,但更进一 步考虑了软件工程中每一步骤(如分析、设计)的影响。 步考虑了软件工程中每一步骤(如分析、设计)的影响。 步考虑了软件工程中每一步骤(如分析、设计)的影响。 通过统计通过统计 通过统计63 63 63 个历史项目的历史数据,得到如下计算公式。 个历史项目的历史数据,得到如下计算公式。 个历史项目的历史数据,得到如下计算公式。 总体类型总体类型 总体类型 工作量工作量 工作量 进度进度 进度 组织型组织型 组织型 MM=104*KDSIMM=104*KDSI MM=104*KDSI 105 105 105 TDKV=105MMTDKV=105MM TDKV=105MM 038 038 038 半独立型半独立型 半独立型 MM=30*KDSIMM=30*KDSI MM=30*KDSI 112 112 112 TDKV=105MMTDKV=105MM TDKV=105MM 035 035 035 嵌入型嵌入型 嵌入型 MM=30*KDSIMM=30*KDSI MM=30*KDSI 120 120 120 TDKV=105MMTDKV=105MM TDKV=105MM 032 032 032 最近在温习软件工程的课程最近在温习软件工程的课程 最近在温习软件工程的课程,, ,对软件项目成本估算模型有了些认 对软件项目成本估算模型有了些认 对软件项目成本估算模型有了些认 ,以下是我的一些心得以下是我的一些心得 以下是我的一些心得,, ,希望与大家分享 希望与大家分享 希望与大家分享 首先我们需要明确的是为什么要做软件项目预算首先我们需要明确的是为什么要做软件项目预算 首先我们需要明确的是为什么要做软件项目预算 首先软件项目 首先软件项目 首先软件项目 是不同于一般工程项目的项目类型 是不同于一般工程项目的项目类型 是不同于一般工程项目的项目类型 受用户需求 受用户需求 受用户需求,, ,开发方式的影响很 开发方式的影响很 开发方式的影响很 大大 没有明确的预算没有明确的预算 没有明确的预算,, ,会导致软件开支的不可控制 会导致软件开支的不可控制 会导致软件开支的不可控制,, ,随着项目的进行 随着项目的进行 随着项目的进行,, ,开开 发放要承担的风险也会增加发放要承担的风险也会增加 发放要承担的风险也会增加 另外如果没有预算 另外如果没有预算 另外如果没有预算,, ,更不可能与客户达 更不可能与客户达 更不可能与客户达 成开发协议 成开发协议 成开发协议 没有人会傻到委托别人做一个自己都不知道要花多少钱 没有人会傻到委托别人做一个自己都不知道要花多少钱 没有人会傻到委托别人做一个自己都不知道要花多少钱 才能完成的项目才能完成的项目 才能完成的项目 最后也就是我个人对项目预算的看法 最后也就是我个人对项目预算的看法 最后也就是我个人对项目预算的看法,, ,好的项目预 好的项目预 好的项目预 算应该包括团体预算与小组或个人预算两部分 算应该包括团体预算与小组或个人预算两部分 算应该包括团体预算与小组或个人预算两部分,, ,好的项目经理应该了 好的项目经理应该了 好的项目经理应该了 解自己的团队 解自己的团队 解自己的团队,, ,对突发事件等的考虑应该放在项目预算之中 对突发事件等的考虑应该放在项目预算之中 对突发事件等的考虑应该放在项目预算之中,, ,然后将 然后将 然后将 项目的开支细化到小组乃至个人 项目的开支细化到小组乃至个人 项目的开支细化到小组乃至个人,, ,这一点看似多余 这一点看似多余 这一点看似多余,, ,但是却很有必要 但是却很有必要 但是却很有必要 比如在实际的开发过程中比如在实际的开发过程中 比如在实际的开发过程中,, ,由于为了缩短工期而招收新的程序员 由于为了缩短工期而招收新的程序员 由于为了缩短工期而招收新的程序员,, 就需要对新程序员进行培训就需要对新程序员进行培训 就需要对新程序员进行培训 新程序员消耗的团队成本是要考虑在内 新程序员消耗的团队成本是要考虑在内 新程序员消耗的团队成本是要考虑在内 这也就是传统意义上的这也就是传统意义上的 这也就是传统意义上的 peron-monthes peron-monthes peron-monthes 所不能完全表达的部分 所不能完全表达的部分 所不能完全表达的部分 新增人员的开支是不能被忽略的新增人员的开支是不能被忽略的 新增人员的开支是不能被忽略的 这需要在实际开发过程中统计 这需要在实际开发过程中统计 这需要在实际开发过程中统计 得到数据 得到数据 得到数据,, ,来精确计算 来精确计算 来精确计算 1明确项目范围明确项目范围 明确项目范围 2确定可行性确定可行性 确定可行性 3分析风险分析风险 分析风险 4确定需要的资源确定需要的资源 确定需要的资源 确定需要的人力资源确定需要的人力资源 确定需要的人力资源 b确定可复用的软件资源确定可复用的软件资源 确定可复用的软件资源 c标识环境资源标识环境资源 标识环境资源 5估算成本和工作量估算成本和工作量 估算成本和工作量 a分解问题分解问题 分解问题 b使用规模使用规模 使用规模,, ,功能点 功能点 功能点,, ,过程任务或用例等方法进行两种以上 过程任务或用例等方法进行两种以上 过程任务或用例等方法进行两种以上 的估算 的估算 的估算 c调和不同的估算调和不同的估算 调和不同的估算 6制定项目进度计划制定项目进度计划 制定项目进度计划 a建立一组有意义的任务集合建立一组有意义的任务集合 建立一组有意义的任务集合 b定义任务网络定义任务网络 定义任务网络 c使用进度计划工具制定时间表使用进度计划工具制定时间表 使用进度计划工具制定时间表 定义进度跟踪机制定义进度跟踪机制 定义进度跟踪机制 在项目策划任务集中在项目策划任务集中 在项目策划任务集中,, ,每一步都涉及到软件开发成本 每一步都涉及到软件开发成本 每一步都涉及到软件开发成本 对人员 对人员 对人员,, ,环境 环境 环境,, 可复用软件的资源的统一调度可复用软件的资源的统一调度 可复用软件的资源的统一调度,, ,将直接影响成本 将直接影响成本 将直接影响成本 其中受软件开发的 其中受软件开发的 其中受软件开发的 特殊行 特殊行 特殊行,, ,人力资源成本是最不好控制的 人力资源成本是最不好控制的 人力资源成本是最不好控制的 相对来说环境资源就容易控 相对来说环境资源就容易控 相对来说环境资源就容易控 制得多 制得多 制得多 环境资源包括软件工具环境资源包括软件工具 环境资源包括软件工具,, ,硬件 硬件 硬件,, ,网络资源等 网络资源等 网络资源等,, ,当然还要包括公司的日 当然还要包括公司的日 当然还要包括公司的日 常费用 常费用 常费用 刨除开发团队佣金与开支 刨除开发团队佣金与开支 刨除开发团队佣金与开支,, ,因为这部分属于人力资源成本 因为这部分属于人力资源成本 因为这部分属于人力资源成本 些无非是买来或者维持些无非是买来或者维持 些无非是买来或者维持,, ,成本是很容易计算的 成本是很容易计算的 成本是很容易计算的 可复用软件资源就要考虑到软件的具体设计可复用软件资源就要考虑到软件的具体设计 可复用软件资源就要考虑到软件的具体设计,, ,功能模块的关系以 功能模块的关系以 功能模块的关系以 及系统架构等具体信息 及系统架构等具体信息 及系统架构等具体信息 专家建议是将软件资源分为如下四部分 专家建议是将软件资源分为如下四部分 专家建议是将软件资源分为如下四部分: 成品构件成品构件 成品构件:: :指能够从第三方直接购买的商品构件 指能够从第三方直接购买的商品构件 指能够从第三方直接购买的商品构件 或者以前项目 或者以前项目 或者以前项目 中完全相同的构件 中完全相同的构件 中完全相同的构件 2具有完全经验的构件具有完全经验的构件 具有完全经验的构件:: :以前项目开发过的 以前项目开发过的 以前项目开发过的,, ,与当前需求相似的功 与当前需求相似的功 与当前需求相似的功 能构件 能构件 能构件 3具有部分经验的构件具有部分经验的构件 具有部分经验的构件:: :为以前项目开发 为以前项目开发 为以前项目开发,, ,与当前项目要构造的软 与当前项目要构造的软 与当前项目要构造的软 件有关的已有规格 件有关的已有规格 件有关的已有规格,, ,设计 设计 设计,, ,代码或测试数据 代码或测试数据 代码或测试数据 但是需要从新架构 但是需要从新架构 但是需要从新架构 4新构件新构件 新构件 开发的成本可像而知开发的成本可像而知 开发的成本可像而知,, ,是升序排列的 是升序排列的 是升序排列的 所以在软件开发的一开始就 所以在软件开发的一开始就 所以在软件开发的一开始就 应该考虑的使用以后技术应该考虑的使用以后技术 应该考虑的使用以后技术,, ,对可复用软件资源进行整理 对可复用软件资源进行整理 对可复用软件资源进行整理,, ,不能在开发 不能在开发 不能在开发 过程中才考虑 过程中才考虑 过程中才考虑,, ,要知道一个关键构件的重用会为软件开发带来多大的 要知道一个关键构件的重用会为软件开发带来多大的 要知道一个关键构件的重用会为软件开发带来多大的 效益 效益 效益 不过凡事也不是必然 不过凡事也不是必然 不过凡事也不是必然,, ,不已有构件的扩展要考虑到原构件设计 不已有构件的扩展要考虑到原构件设计 不已有构件的扩展要考虑到原构件设计,, 开发文档的完整性等因素开发文档的完整性等因素 开发文档的完整性等因素 还是就人力资源进行分析还是就人力资源进行分析 还是就人力资源进行分析,, ,由于跟人能力与技术方向的不 由于跟人能力与技术方向的不 由于跟人能力与技术方向的不 同,programmer,programmer ,programmer 不可能像一般意义上的工人或者机器一样有效地 不可能像一般意义上的工人或者机器一样有效地 不可能像一般意义上的工人或者机器一样有效地 预期成本 预期成本 预期成本 我们可以开发一个原型 我们可以开发一个原型 我们可以开发一个原型,, ,利用原型数据来对应分析每个人 利用原型数据来对应分析每个人 利用原型数据来对应分析每个人 的价值与成本 的价值与成本 的价值与成本 但是应该考虑的是 但是应该考虑的是 但是应该考虑的是,, ,随着程序员的个人因素的变更 随着程序员的个人因素的变更 随着程序员的个人因素的变更 年年 ,职务职务 职务,, ,时间 时间 时间,, ,身体状况等 身体状况等 身体状况等, ,原型数据只能作为一个一般参考原型数据只能作为一个一般参考 原型数据只能作为一个一般参考 例如 例如 例如 SARS SARS SARS 期间 期间 期间,, ,或流行性感冒的传播 或流行性感冒的传播 或流行性感冒的传播,, ,人力成本就会变得不好控制 人力成本就会变得不好控制 人力成本就会变得不好控制 极限极限 极限 情况下 情况下 情况下,, ,这将使一个项目面临流产 这将使一个项目面临流产 这将使一个项目面临流产~ 目前流行的估算模式大致可分为如下几类目前流行的估算模式大致可分为如下几类 目前流行的估算模式大致可分为如下几类: 1软件规模估算软件规模估算 软件规模估算 2基于问题的估算基于问题的估算 基于问题的估算 3基于基于 基于loc loc loc 估算 估算 估算loc: loc: loc:代码行数 代码行数 代码行数 4基于基于 基于fp fp fp 估算 估算 估算fp:functionpoint fp:functionpoint fp:functionpoint 功能点 功能点 功能点 5基于过程估算基于过程估算 基于过程估算 6基于用例估算基于用例估算 基于用例估算 典型的经验估算模型是通过回归分析从以往的软件项目中收集典型的经验估算模型是通过回归分析从以往的软件项目中收集 典型的经验估算模型是通过回归分析从以往的软件项目中收集 的数据得来的的数据得来的 的数据得来的 这种模型的总体结构表现为下面的形式 这种模型的总体结构表现为下面的形式 这种模型的总体结构表现为下面的形式: 其中其中 其中A,B,C 都是经验常量都是经验常量 都是经验常量E 是工作量是工作量 是工作量 单位 单位 单位:: :人人 是估算是估算 是估算 变量 变量 变量loc loc loc 或者 或者 或者fp fp fp除了公式表达的方式以外 除了公式表达的方式以外 除了公式表达的方式以外,, ,还有一些形式的项目调 还有一些形式的项目调 还有一些形式的项目调 整成分 整成分 整成分,, ,如问题的复杂程度 如问题的复杂程度 如问题的复杂程度,, ,开发人员经验 开发人员经验 开发人员经验,, ,开发环境等 开发环境等 开发环境等,, ,一下列出些常 一下列出些常 一下列出些常 用的调整系数 用的调整系数 用的调整系数: Personnel AributesPersonnel Aributes Personnel Aributes • Analyst capability• Analyst capability • Analyst capability ACAPACAP ACAP • Programmer capability• Programmer capability • Programmer capability PCAPPCAP PCAP • Applicaons experience• Applicaons experience • Applicaons experience AEXPAEXP AEXP • Virtual machine Experience• Virtual machine Experience • Virtual machine Experience VEXPVEXP VEXP • Programming language experience• Programming language experience • Programming language experience LEXPLEXP LEXP Project AributesProject Aributes Project Aributes • Modern programming pracces• Modern programming pracces • Modern programming pracces MODPMODP MODP • Soware Tools• Soware Tools • Soware Tools TOOLTOOL TOOL • Required Development schedule• Required Development schedule • Required Development schedule SCED SCED  SCED  这些系数都应该应该根据具体的项目进行调整和设计这些系数都应该应该根据具体的项目进行调整和设计 这些系数都应该应该根据具体的项目进行调整和设计  cocomo:constructivecost model cocomo:constructive cost model cocomo:constructive cost model 这种模型是 这种模型是 这种模型是Barry Boehm Barry Boehm Barry Boehm在其论述 在其论述 在其论述 软件工程经济学 软件工程经济学 软件工程经济学 中介绍 中介绍 中介绍 的一种层次结构的软件估算模

  软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。不同与传不同与传不同与传统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代价来计算的。因此,价来计算的。因此,价来计算的。因此,软件开发成本的估算,应是从软件计划、需求分析、设计、编码、软件开发成本的估算,应是从软件计划、需求分析、设计、编码、软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。软件开发成本估算的经验模型软件开发成本估算的经验模型软件开发成本估算的经验模型8年年年PutnamPutnamPutnam提出的,一种动态多变量模型。提出的,一种动态多变量模型。提出的,一种动态多变量模型。L=Ck*KL=Ck*KL=Ck*K131313*td*td*td434343其中:其中:其中:L-----------L-----------源代码行数源代码行数源代码行数以LOCLOCLOCK-----------整个开发过程所花费的工作量(以人年计)整个开发过程所花费的工作量(以人年计)整个开发过程所花费的工作量(以人年计)td-----------td-----------td-----------开发持续时间(以年计)开发持续时间(以年计)开发持续时间(以年计)Ck----------Ck----------Ck----------技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环境而异,见下表境而异,见下表境而异,见下表CkCkCk的典型值的典型值的典型值开发环开发环开发环开发环境举例开发环境举例开发环境举例0没有系统的开发方法,缺乏文档和复审没有系统的开发方法,缺乏文档和复审没有系统的开发方法,缺乏文档和复审0好好有合适的系统的开发方法,有充分的文档和复审有合适的系统的开发方法,有充分的文档和复审有合适的系统的开发方法,有充分的文档和复审有自动的开发工具和技术有自动的开发工具和技术有自动的开发工具和技术从上述方程加以变换,可以得到估算工作量的公式:从上述方程加以变换,可以得到估算工作量的公式:从上述方程加以变换,可以得到估算工作量的公式:K=LCkCkCk33*td*td*td44还可以估算开发时间:还可以估算开发时间:还可以估算开发时间:td=[Ltd=[Ltd=[L33CkCkCk33141414constructivecostmodelconstructivecostmodelconstructivecostmodel这是由这是由这是由TRWTRWTRW公司开发,公司开发,公司开发,BoehmBoehmBoehm提出的结构化成本估算模型。是一种精确的、易于使用提出的结构化成本估算模型。是一种精确的、易于使用提出的结构化成本估算模型。是一种精确的、易于使用的成本估算方法。的成本估算方法。的成本估算方法。COCOMOCOCOMOCOCOMO模型中用到以下变量:模型中用到以下变量:模型中用到以下变量:DSI-------DSI-------DSI-------源指令条数。不包括注释。源指令条数。不包括注释。源指令条数。不包括注释。1KDSI=1000DSI1KDSI=1000DSI1KDSI=1000DSI。。MM-------MM-------MM-------开发工作量(以人月计)开发工作量(以人月计)开发工作量(以人月计)1MM=191MM=191MM=19人日人日人日=152=152=152人时人时人时=112=112=112人年人年人年TDEV-----TDEV-----TDEV-----开发进度。开发进度。开发进度。以月计以月计以月计COCOMOCOCOMOCOCOMO模型中,考虑开发环境,软件开发项目的类型可以分为模型中,考虑开发环境,软件开发项目的类型可以分为模型中,考虑开发环境,软件开发项目的类型可以分为33organic:organic:organic:相对较小、相对较小、相对较小、较简单的软件项目。较简单的软件项目。较简单的软件项目。开发人员对开发目标理解比开发人员对开发目标理解比开发人员对开发目标理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件的约束较小,程序的规模不是很大(的约束较小,程序的规模不是很大(的约束较小,程序的规模不是很大(500005000050000embedded:embedded:embedded:要求在紧密联系的硬件、软件和操作的限制条件下运行,要求在紧密联系的硬件、软件和操作的限制条件下运行,要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求高。软件规模任意。如大而复杂的事务处理系统,大型高。软件规模任意。如大而复杂的事务处理系统,大型高。软件规模任意。如大而复杂的事务处理系统,大型超大型操作系统,航天超大型操作系统,航天超大型操作系统,航天用控制系统,大型指挥系统等。用控制系统,大型指挥系统等。用控制系统,大型指挥系统等。(semidetachedsemidetachedsemidetached):介于上述两种软件之间。规模和复杂度都属于中介于上述两种软件之间。规模和复杂度都属于中介于上述两种软件之间。规模和复杂度都属于中 等或更高。最大可达 等或更高。最大可达 等或更高。最大可达30 30 30 万行。 万行。 万行。 估算公式:估算公式: 估算公式: 基本基本 基本COCOMO COCOMO COCOMO 模型估算工作量和进度的公式如下 模型估算工作量和进度的公式如下 模型估算工作量和进度的公式如下 工作量:工作量: 工作量: 进度:进度: 进度: 其中经验常数其中经验常数 其中经验常数r,c,a,b r,c,a,b取决于项目的总体类型。取决于项目的总体类型。 取决于项目的总体类型。 COCOMOCOCOMO COCOMO 模型按其详细程度可以分为三级: 模型按其详细程度可以分为三级: 模型按其详细程度可以分为三级: 。其中基本。其中基本 。其中基本COCOMO COCOMO COCOMO 模型是是一个静态单变量模型,它用一个以已估算 模型是是一个静态单变量模型,它用一个以已估算 模型是是一个静态单变量模型,它用一个以已估算 出来的原代码行数 出来的原代码行数 出来的原代码行数LOC LOC LOC为自变量的经验函数计算软件开发工作量。 为自变量的经验函数计算软件开发工作量。 为自变量的经验函数计算软件开发工作量。 中级 中级 中级COCOMO COCOMO COCOMO 型在基本型在基本 型在基本COCOMO COCOMO COCOMO 模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因 模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因 模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因 素调整工作量的估算。详细 素调整工作量的估算。详细 素调整工作量的估算。详细COCOMO COCOMO COCOMO 模型包括中间 模型包括中间 模型包括中间COCOMO COCOMO COCOMO 模型的所有特性,但更进一 模型的所有特性,但更进一 模型的所有特性,但更进一 步考虑了软件工程中每一步骤(如分析、设计)的影响。 步考虑了软件工程中每一步骤(如分析、设计)的影响。 步考虑了软件工程中每一步骤(如分析、设计)的影响。 通过统计通过统计 通过统计63 63 63 个历史项目的历史数据,得到如下计算公式。 个历史项目的历史数据,得到如下计算公式。 个历史项目的历史数据,得到如下计算公式。 总体类型总体类型 总体类型 工作量工作量 工作量 进度进度 进度 组织型组织型 组织型 MM=104*KDSIMM=104*KDSI MM=104*KDSI 105 105 105 TDKV=105MMTDKV=105MM TDKV=105MM 038 038 038 半独立型半独立型 半独立型 MM=30*KDSIMM=30*KDSI MM=30*KDSI 112 112 112 TDKV=105MMTDKV=105MM TDKV=105MM 035 035 035 嵌入型嵌入型 嵌入型 MM=30*KDSIMM=30*KDSI MM=30*KDSI 120 120 120 TDKV=105MMTDKV=105MM TDKV=105MM 032 032 032 最近在温习软件工程的课程最近在温习软件工程的课程 最近在温习软件工程的课程,, ,对软件项目成本估算模型有了些认 对软件项目成本估算模型有了些认 对软件项目成本估算模型有了些认 ,以下是我的一些心得以下是我的一些心得 以下是我的一些心得,, ,希望与大家分享 希望与大家分享 希望与大家分享 首先我们需要明确的是为什么要做软件项目预算首先我们需要明确的是为什么要做软件项目预算 首先我们需要明确的是为什么要做软件项目预算 首先软件项目 首先软件项目 首先软件项目 是不同于一般工程项目的项目类型 是不同于一般工程项目的项目类型 是不同于一般工程项目的项目类型 受用户需求 受用户需求 受用户需求,, ,开发方式的影响很 开发方式的影响很 开发方式的影响很 大大 没有明确的预算没有明确的预算 没有明确的预算,, ,会导致软件开支的不可控制 会导致软件开支的不可控制 会导致软件开支的不可控制,, ,随着项目的进行 随着项目的进行 随着项目的进行,, ,开开 发放要承担的风险也会增加发放要承担的风险也会增加 发放要承担的风险也会增加 另外如果没有预算 另外如果没有预算 另外如果没有预算,, ,更不可能与客户达 更不可能与客户达 更不可能与客户达 成开发协议 成开发协议 成开发协议 没有人会傻到委托别人做一个自己都不知道要花多少钱 没有人会傻到委托别人做一个自己都不知道要花多少钱 没有人会傻到委托别人做一个自己都不知道要花多少钱 才能完成的项目才能完成的项目 才能完成的项目 最后也就是我个人对项目预算的看法 最后也就是我个人对项目预算的看法 最后也就是我个人对项目预算的看法,, ,好的项目预 好的项目预 好的项目预 算应该包括团体预算与小组或个人预算两部分 算应该包括团体预算与小组或个人预算两部分 算应该包括团体预算与小组或个人预算两部分,, ,好的项目经理应该了 好的项目经理应该了 好的项目经理应该了 解自己的团队 解自己的团队 解自己的团队,, ,对突发事件等的考虑应该放在项目预算之中 对突发事件等的考虑应该放在项目预算之中 对突发事件等的考虑应该放在项目预算之中,, ,然后将 然后将 然后将 项目的开支细化到小组乃至个人 项目的开支细化到小组乃至个人 项目的开支细化到小组乃至个人,, ,这一点看似多余 这一点看似多余 这一点看似多余,, ,但是却很有必要 但是却很有必要 但是却很有必要 比如在实际的开发过程中比如在实际的开发过程中 比如在实际的开发过程中,, ,由于为了缩短工期而招收新的程序员 由于为了缩短工期而招收新的程序员 由于为了缩短工期而招收新的程序员,, 就需要对新程序员进行培训就需要对新程序员进行培训 就需要对新程序员进行培训 新程序员消耗的团队成本是要考虑在内 新程序员消耗的团队成本是要考虑在内 新程序员消耗的团队成本是要考虑在内 这也就是传统意义上的这也就是传统意义上的 这也就是传统意义上的 peron-monthes peron-monthes peron-monthes 所不能完全表达的部分 所不能完全表达的部分 所不能完全表达的部分 新增人员的开支是不能被忽略的新增人员的开支是不能被忽略的 新增人员的开支是不能被忽略的 这需要在实际开发过程中统计 这需要在实际开发过程中统计 这需要在实际开发过程中统计 得到数据 得到数据 得到数据,, ,来精确计算 来精确计算 来精确计算 1明确项目范围明确项目范围 明确项目范围 2确定可行性确定可行性 确定可行性 3分析风险分析风险 分析风险 4确定需要的资源确定需要的资源 确定需要的资源 确定需要的人力资源确定需要的人力资源 确定需要的人力资源 b确定可复用的软件资源确定可复用的软件资源 确定可复用的软件资源 c标识环境资源标识环境资源 标识环境资源 5估算成本和工作量估算成本和工作量 估算成本和工作量 a分解问题分解问题 分解问题 b使用规模使用规模 使用规模,, ,功能点 功能点 功能点,, ,过程任务或用例等方法进行两种以上 过程任务或用例等方法进行两种以上 过程任务或用例等方法进行两种以上 的估算 的估算 的估算 c调和不同的估算调和不同的估算 调和不同的估算 6制定项目进度计划制定项目进度计划 制定项目进度计划 a建立一组有意义的任务集合建立一组有意义的任务集合 建立一组有意义的任务集合 b定义任务网络定义任务网络 定义任务网络 c使用进度计划工具制定时间表使用进度计划工具制定时间表 使用进度计划工具制定时间表 定义进度跟踪机制定义进度跟踪机制 定义进度跟踪机制 在项目策划任务集中在项目策划任务集中 在项目策划任务集中,, ,每一步都涉及到软件开发成本 每一步都涉及到软件开发成本 每一步都涉及到软件开发成本 对人员 对人员 对人员,, ,环境 环境 环境,, 可复用软件的资源的统一调度可复用软件的资源的统一调度 可复用软件的资源的统一调度,, ,将直接影响成本 将直接影响成本 将直接影响成本 其中受软件开发的 其中受软件开发的 其中受软件开发的 特殊行 特殊行 特殊行,, ,人力资源成本是最不好控制的 人力资源成本是最不好控制的 人力资源成本是最不好控制的 相对来说环境资源就容易控 相对来说环境资源就容易控 相对来说环境资源就容易控 制得多 制得多 制得多 环境资源包括软件工具环境资源包括软件工具 环境资源包括软件工具,, ,硬件 硬件 硬件,, ,网络资源等 网络资源等 网络资源等,, ,当然还要包括公司的日 当然还要包括公司的日 当然还要包括公司的日 常费用 常费用 常费用 刨除开发团队佣金与开支 刨除开发团队佣金与开支 刨除开发团队佣金与开支,, ,因为这部分属于人力资源成本 因为这部分属于人力资源成本 因为这部分属于人力资源成本 些无非是买来或者维持些无非是买来或者维持 些无非是买来或者维持,, ,成本是很容易计算的 成本是很容易计算的 成本是很容易计算的 可复用软件资源就要考虑到软件的具体设计可复用软件资源就要考虑到软件的具体设计 可复用软件资源就要考虑到软件的具体设计,, ,功能模块的关系以 功能模块的关系以 功能模块的关系以 及系统架构等具体信息 及系统架构等具体信息 及系统架构等具体信息 专家建议是将软件资源分为如下四部分 专家建议是将软件资源分为如下四部分 专家建议是将软件资源分为如下四部分: 成品构件成品构件 成品构件:: :指能够从第三方直接购买的商品构件 指能够从第三方直接购买的商品构件 指能够从第三方直接购买的商品构件 或者以前项目 或者以前项目 或者以前项目 中完全相同的构件 中完全相同的构件 中完全相同的构件 2具有完全经验的构件具有完全经验的构件 具有完全经验的构件:: :以前项目开发过的 以前项目开发过的 以前项目开发过的,, ,与当前需求相似的功 与当前需求相似的功 与当前需求相似的功 能构件 能构件 能构件 3具有部分经验的构件具有部分经验的构件 具有部分经验的构件:: :为以前项目开发 为以前项目开发 为以前项目开发,, ,与当前项目要构造的软 与当前项目要构造的软 与当前项目要构造的软 件有关的已有规格 件有关的已有规格 件有关的已有规格,, ,设计 设计 设计,, ,代码或测试数据 代码或测试数据 代码或测试数据 但是需要从新架构 但是需要从新架构 但是需要从新架构 4新构件新构件 新构件 开发的成本可像而知开发的成本可像而知 开发的成本可像而知,, ,是升序排列的 是升序排列的 是升序排列的 所以在软件开发的一开始就 所以在软件开发的一开始就 所以在软件开发的一开始就 应该考虑的使用以后技术应该考虑的使用以后技术 应该考虑的使用以后技术,, ,对可复用软件资源进行整理 对可复用软件资源进行整理 对可复用软件资源进行整理,, ,不能在开发 不能在开发 不能在开发 过程中才考虑 过程中才考虑 过程中才考虑,, ,要知道一个关键构件的重用会为软件开发带来多大的 要知道一个关键构件的重用会为软件开发带来多大的 要知道一个关键构件的重用会为软件开发带来多大的 效益 效益 效益 不过凡事也不是必然 不过凡事也不是必然 不过凡事也不是必然,, ,不已有构件的扩展要考虑到原构件设计 不已有构件的扩展要考虑到原构件设计 不已有构件的扩展要考虑到原构件设计,, 开发文档的完整性等因素开发文档的完整性等因素 开发文档的完整性等因素 还是就人力资源进行分析还是就人力资源进行分析 还是就人力资源进行分析,, ,由于跟人能力与技术方向的不 由于跟人能力与技术方向的不 由于跟人能力与技术方向的不 同,programmer,programmer ,programmer 不可能像一般意义上的工人或者机器一样有效地 不可能像一般意义上的工人或者机器一样有效地 不可能像一般意义上的工人或者机器一样有效地 预期成本 预期成本 预期成本 我们可以开发一个原型 我们可以开发一个原型 我们可以开发一个原型,, ,利用原型数据来对应分析每个人 利用原型数据来对应分析每个人 利用原型数据来对应分析每个人 的价值与成本 的价值与成本 的价值与成本 但是应该考虑的是 但是应该考虑的是 但是应该考虑的是,, ,随着程序员的个人因素的变更 随着程序员的个人因素的变更 随着程序员的个人因素的变更 年年 ,职务职务 职务,, ,时间 时间 时间,, ,身体状况等 身体状况等 身体状况等, ,原型数据只能作为一个一般参考原型数据只能作为一个一般参考 原型数据只能作为一个一般参考 例如 例如 例如 SARS SARS SARS 期间 期间 期间,, ,或流行性感冒的传播 或流行性感冒的传播 或流行性感冒的传播,, ,人力成本就会变得不好控制 人力成本就会变得不好控制 人力成本就会变得不好控制 极限极限 极限 情况下 情况下 情况下,, ,这将使一个项目面临流产 这将使一个项目面临流产 这将使一个项目面临流产~ 目前流行的估算模式大致可分为如下几类目前流行的估算模式大致可分为如下几类 目前流行的估算模式大致可分为如下几类: 1软件规模估算软件规模估算 软件规模估算 2基于问题的估算基于问题的估算 基于问题的估算 3基于基于 基于loc loc loc 估算 估算 估算loc: loc: loc:代码行数 代码行数 代码行数 4基于基于 基于fp fp fp 估算 估算 估算fp:functionpoint fp:functionpoint fp:functionpoint 功能点 功能点 功能点 5基于过程估算基于过程估算 基于过程估算 6基于用例估算基于用例估算 基于用例估算 典型的经验估算模型是通过回归分析从以往的软件项目中收集典型的经验估算模型是通过回归分析从以往的软件项目中收集 典型的经验估算模型是通过回归分析从以往的软件项目中收集 的数据得来的的数据得来的 的数据得来的 这种模型的总体结构表现为下面的形式 这种模型的总体结构表现为下面的形式 这种模型的总体结构表现为下面的形式: 其中其中 其中A,B,C 都是经验常量都是经验常量 都是经验常量E 是工作量是工作量 是工作量 单位 单位 单位:: :人人 是估算是估算 是估算 变量 变量 变量loc loc loc 或者 或者 或者fp fp fp除了公式表达的方式以外 除了公式表达的方式以外 除了公式表达的方式以外,, ,还有一些形式的项目调 还有一些形式的项目调 还有一些形式的项目调 整成分 整成分 整成分,, ,如问题的复杂程度 如问题的复杂程度 如问题的复杂程度,, ,开发人员经验 开发人员经验 开发人员经验,, ,开发环境等 开发环境等 开发环境等,, ,一下列出些常 一下列出些常 一下列出些常 用的调整系数 用的调整系数 用的调整系数: Personnel AributesPersonnel Aributes Personnel Aributes • Analyst capability• Analyst capability • Analyst capability ACAPACAP ACAP • Programmer capability• Programmer capability • Programmer capability PCAPPCAP PCAP • Applicaons experience• Applicaons experience • Applicaons experience AEXPAEXP AEXP • Virtual machine Experience• Virtual machine Experience • Virtual machine Experience VEXPVEXP VEXP • Programming language experience• Programming language experience • Programming language experience LEXPLEXP LEXP Project AributesProject Aributes Project Aributes • Modern programming pracces• Modern programming pracces • Modern programming pracces MODPMODP MODP • Soware Tools• Soware Tools • Soware Tools TOOLTOOL TOOL • Required Development schedule• Required Development schedule • Required Development schedule SCED SCED  SCED  这些系数都应该应该根据具体的项目进行调整和设计这些系数都应该应该根据具体的项目进行调整和设计 这些系数都应该应该根据具体的项目进行调整和设计  cocomo:constructivecost model cocomo:constructive cost model cocomo:constructive cost model 这种模型是 这种模型是 这种模型是Barry Boehm Barry Boehm Barry Boehm在其论述 在其论述 在其论述 软件工程经济学 软件工程经济学 软件工程经济学 中介绍 中介绍 中介绍 的一种层次结构的软件估算模型的一种层次结构的软件估算模型 的一种层次结构的软件估算模型 现在已经被广泛应用 现在已经被广泛应用 现在已经被广泛应用 主要 主要 主要 应用于应用组装模型 应用于应用组装模型 应用于应用组装模型,, ,早期设计阶段模型 早期设计阶段模型 早期设计阶段模型,, ,体系结构后阶段模 体系结构后阶段模 体系结构后阶段模 将在以后的日志中对大家进行更深入的介绍将在以后的日志中对大家进行更深入的介绍 将在以后的日志中对大家进行更深入的介绍 目前,目前, 目前,有三种基本的软件项目成本估算方法: 有三种基本的软件项目成本估算方法: 有三种基本的软件项目成本估算方法:自顶向下、 自顶向下、 自顶向下、自底向上和差别估算法。 自底向上和差别估算法。 自底向上和差别估算法。 自顶向下的方法是对整个项目的总开发时间和总工作量做出估算, 自顶向下的方法是对整个项目的总开发时间和总工作量做出估算, 自顶向下的方法是对整个项目的总开发时间和总工作量做出估算,然后把它们按 然后把它们按 然后把它们按 阶段、 阶段、 阶段、步骤和工作单元进行分配; 步骤和工作单元进行分配; 步骤和工作单元进行分配;自底向上的方法是分别估算个工作单元所需的 自底向上的方法是分别估算个工作单元所需的 自底向上的方法是分别估算个工作单元所需的 开发时间, 开发时间, 开发时间,然后汇总得出总的工作量和开发时间; 然后汇总得出总的工作量和开发时间; 然后汇总得出总的工作量和开发时间;差别估算是将开发项目与一个 差别估算是将开发项目与一个 差别估算是将开发项目与一个 或多个已完成的类似项目进行比较, 或多个已完成的类似项目进行比较, 或多个已完成的类似项目进行比较,找出与某个类似项目的若干不同之处, 找出与某个类似项目的若干不同之处, 找出与某个类似项目的若干不同之处,并估 算每个不同之处对成本的影响,导出开发项目的总成本。算每个不同之处对成本的影响,导出开发项目的总成本。 算每个不同之处对成本的影响,导出开发项目的总成本。 专家估算法专家估算法 专家估算法 专家估算法是依靠一个或多个专家对项目做出估计,专家估算法是依靠一个或多个专家对项目做出估计, 专家估算法是依靠一个或多个专家对项目做出估计,它要求专家具有专门知 它要求专家具有专门知 它要求专家具有专门知 识和丰富的经验,是一种近似的猜测。 识和丰富的经验,是一种近似的猜测。 识和丰富的经验,是一种近似的猜测。Delphi Delphi Delphi 法是最流行的专家评估技术,在 法是最流行的专家评估技术,在 法是最流行的专家评估技术,在 没有历史数据的情况下, 没有历史数据的情况下, 没有历史数据的情况下,这种方式适用于评定过去与将来, 这种方式适用于评定过去与将来, 这种方式适用于评定过去与将来,新技术与特定程序之 新技术与特定程序之 新技术与特定程序之 间的差别, 间的差别, 间的差别,但专家 但专家 但专家 的程度及对项目的理解程度是工作中的难点,的程度及对项目的理解程度是工作中的难点, 的程度及对项目的理解程度是工作中的难点,尽管 尽管 尽管Delphi Delphi Delphi 技术可以减轻这种偏差, 技术可以减轻这种偏差, 技术可以减轻这种偏差,专家评估技术在评定一个新软件实际成本时通常用得不 专家评估技术在评定一个新软件实际成本时通常用得不 专家评估技术在评定一个新软件实际成本时通常用得不 多,但是,这种方式对决定其它模型的输入时特别有用。 多,但是,这种方式对决定其它模型的输入时特别有用。 多,但是,这种方式对决定其它模型的输入时特别有用。Delphi Delphi Delphi 法鼓励参加者 法鼓励参加者 法鼓励参加者 就问题相互讨论,要求有多种软件相关经验人的参与,互相说服对方。 就问题相互讨论,要求有多种软件相关经验人的参与,互相说服对方。 就问题相互讨论,要求有多种软件相关经验人的参与,互相说服对方。 类推估算法类推估算法 类推估算法 类推估算法是比较科学的一种传统估算方法,类推估算法是比较科学的一种传统估算方法, 类推估算法是比较科学的一种传统估算方法,它适合评估一些与历史项目在 它适合评估一些与历史项目在 它适合评估一些与历史项目在 应用领域、 应用领域、 应用领域、环境和复杂度的相似的项目, 环境和复杂度的相似的项目, 环境和复杂度的相似的项目,通过新项目与历史项目的比较得到规模 通过新项目与历史项目的比较得到规模 通过新项目与历史项目的比较得到规模 估计。 估计。 估计。类推估算法估计结果的精确度取决于历史项目数据的完整性和准确度, 类推估算法估计结果的精确度取决于历史项目数据的完整性和准确度, 类推估算法估计结果的精确度取决于历史项目数据的完整性和准确度,因因 此,用好类推估算法的前提条件之一是组织建立起较好的项目后评价与分析机此,用好类推估算法的前提条件之一是组织建立起较好的项目后评价与分析机 此,用好类推估算法的前提条件之一是组织建立起较好的项目后评价与分析机 制,对历史项目的数据分析是可信赖的。 制,对历史项目的数据分析是可信赖的。 制,对历史项目的数据分析是可信赖的。 这种方法的基本步骤是:这种方法的基本步骤是: 这种方法的基本步骤是: 整理出项目功能列表和实现每个功能的代码行;整理出项目功能列表和实现每个功能的代码行; 整理出项目功能列表和实现每个功能的代码行; 标识出每个功能列表与历史项目的相同点和不同点,特别要注意历标识出每个功能列表与历史项目的相同点和不同点,特别要注意历 标识出每个功能列表与历史项目的相同点和不同点,特别要注意历 史项目做得不够的地方; 史项目做得不够的地方; 史项目做得不够的地方; 通过步骤通过步骤 通过步骤11 和和和22 得出各个功能的估计值;得出各个功能的估计值; 得出各个功能的估计值; 产生规模估计。产生规模估计。 产生规模估计。 算式估算法算式估算法 算式估算法 算式估算法利用经验模型进行成本估算,算式估算法利用经验模型进行成本估算, 算式估算法利用经验模型进行成本估算,它通常采用经验公式来预测软件项 它通常采用经验公式来预测软件项 它通常采用经验公式来预测软件项 目计划所需要的成本、 目计划所需要的成本、 目计划所需要的成本、工作量和进度数据。 工作量和进度数据。 工作量和进度数据。目前还没有一种估算模型能够适用于 目前还没有一种估算模型能够适用于 目前还没有一种估算模型能够适用于 所有的软件类型和开发环境,从这些模型中得到的结果必须慎重使用。 所有的软件类型和开发环境,从这些模型中得到的结果必须慎重使用。 所有的软件类型和开发环境,从这些模型中得到的结果必须慎重使用。 PutnamPutnam Putnam 模型 模型 模型 PutnamPutnam Putnam 模型是一种动态多变量模型,它是假定软件开发的整个生存期中工 模型是一种动态多变量模型,它是假定软件开发的整个生存期中工 模型是一种动态多变量模型,它是假定软件开发的整个生存期中工 作量的分布,如一个 作量的分布,如一个 作量的分布,如一个30 30 30 人年以上的项目,其人力使用分布如图 人年以上的项目,其人力使用分布如图 人年以上的项目,其人力使用分布如图 73 73 73 所示。 所示。 所示。 然后根据曲线导出一个估算公式:然后根据曲线导出一个估算公式: 然后根据曲线 COCOMOCOCOMO COCOMO 模型 模型 模型 结构性成本模型结构性成本模型 结构性成本模型COCOMO COCOMO COCOMO(( (COnstructive COnstructive COnstructive COst COst COst MOdel MOdel MOdel)是一种精确的、易 )是一种精确的、易 )是一种精确的、易 于使用的成本估算方法,它分为基本 于使用的成本估算方法,它分为基本 于使用的成本估算方法,它分为基本COCOMO COCOMO COCOMO 模型和中级 模型和中级 模型和中级COCOMO COCOMO COCOMO 模型两种类型。 模型两种类型。 模型两种类型。 基本 基本 基本COCOMO COCOMO COCOMO 模型是一个静态单变量模型,它用一个以已估算出来的源代码行数 模型是一个静态单变量模型,它用一个以已估算出来的源代码行数 模型是一个静态单变量模型,它用一个以已估算出来的源代码行数 (LOCLOC LOC)为自变量的经验函数来计算软件开发工作量。中间 )为自变量的经验函数来计算软件开发工作量。中间 )为自变量的经验函数来计算软件开发工作量。中间 COCOMO COCOMO COCOMO 模型则在用 模型则在用 模型则在用 LOC LOC LOC 为自变量的函数计算软件开发工作量的基础上, 为自变量的函数计算软件开发工作量的基础上, 为自变量的函数计算软件开发工作量的基础上,再用涉及产品、 再用涉及产品、 再用涉及产品、硬件、 硬件、 硬件、人员、 人员、 人员、 项目等方面属性的影响因素来调整工作量的估算。更详细的 项目等方面属性的影响因素来调整工作量的估算。更详细的 项目等方面属性的影响因素来调整工作量的估算。更详细的 COCOMO COCOMO COCOMO 模型除了包 模型除了包 模型除了包 括中间 括中间 括中间COCOMO COCOMO COCOMO 模型的所有特性外,还考虑了在需求分析、软件设计等每一步的 模型的所有特性外,还考虑了在需求分析、软件设计等每一步的 模型的所有特性外,还考虑了在需求分析、软件设计等每一步的 影响。 影响。 影响。 基本基本 基本COCOMO COCOMO COCOMO 模型估算公式 模型估算公式 模型估算公式 (KLOCKLOC KLOC)) )exp exp exp(( (bb )expexp exp(( (dd 其中,其中, 其中,EE 为开发所需的人力(人月),为开发所需的人力(人月), 为开发所需的人力(人月),DD 为所需的开发时间(月),为所需的开发时间(月), 为所需的开发时间(月),KLOC KLOC KLOC 估计提交的代码行,估计提交的代码行, 估计提交的代码行,aa 和和和dd 为不同软件开发方式的值,见下表。为不同软件开发方式的值,见下表。 为不同软件开发方式的值,见下表。 方式方式 方式 组织型组织型 组织型 2424 24 105 105 105 25 25 25 038 038 038 半独立型 半独立型 半独立型 3030 30 112 112 112 25 25 25 035 035 035 嵌入型 嵌入型 嵌入型 3636 36 12 12 12 25 25 25 032 032 032 由以上公式可以导出生产率和所需人数的公式:由以上公式可以导出生产率和所需人数的公式: 由以上公式可以导出生产率和所需人数的公式: 生产率=(生产率=( 生产率=(KLOC KLOC KLOC)/ )/EEE(代码行 (代码行 (代码行 人月) 人月) 人月) 人数=人数= 人数=EE 中级中级 中级COCOMO COCOMO COCOMO 模型估算公式 模型估算公式 模型估算公式 中级中级 中级COCOMO COCOMO COCOMO 模型先产生一个基本 模型先产生一个基本 模型先产生一个基本COCOMO COCOMO COCOMO 模型一样形式的估算公式, 模型一样形式的估算公式, 模型一样形式的估算公式,然后对 然后对 然后对 15 15 15 个成本驱动属性打分,定出乘法因子,对公式进行修正。 个成本驱动属性打分,定出乘法因子,对公式进行修正。 个成本驱动属性打分,定出乘法因子,对公式进行修正。 1515 15 个影响软件工作量的因素见下表: 个影响软件工作量的因素见下表: 个影响软件工作量的因素见下表: 工作量因素工作量因素 工作量因素ff 非常低非常低 非常低 正常正常 正常 非常高非常高 非常高 超高 超高 超高 产品因素产品因素 产品因素 软件可靠性软件可靠性 软件可靠性 数据库规模数据库规模 数据库规模 产品复杂性产品复杂性 产品复杂性 075075 075 088 088 088 100 100 100115 115 115 140 140 140 094094 094 100 100 100108 108 108 116 116 116

云平台软件中心

关于我们

联系我们

  • 地址:深圳市宝安区福永凤凰富源街213号旭达工业园A栋7层 7A
  • 133 4757 3623
  • 0755-8529 6639
  • aosien2012@163.com
  • http://www.paiweiju.com/