
软件生产过程经济分析课件.ppt
49页第5章 软件生产过程经济分析5.1 软件生产函数与软件生产率5.2 软件生产过程经济分析5.3 不同规模软件的生产过程经济分析5.4 软件项目理论生存周期长度及其关联分析5.1 软件生产函数与软件生产率l5.1 软件生产函数及其特性l5.2 软件生产率及其影响因素5.1. 软件生产函数及其特性l生产函数(Production function),是指反映生产过程中投入要素与其可能生产的最大产量之间依存关系的数学表达式早期的生产函数有如下数学形式:Y=F(K,L,N,O,t) l此中Y为产出量,如宏观经济系统中的GDP、工业总产值,微观经济系统中的企业产品的产量、产值、销售收入等而K、L、N、O分别表示生产过程投入的资本、劳动、土地和组织管理要素投入量,t则表示时间或工期等鉴于土地投入量的变化很小,而且在非农业部门中,一般已将土地的价值计入资本之中,而组织管理又难以定量,因此为了简化分析,以后研究的生产函数常记为: Y=F(K,L,t) (5.1)1. C D生产函数2. 规模经济l规模经济(Economics of Scale)或规模报酬是微观经济学中研究的一个重要问题,它表示当生产规模变化时,对产出的影响程度。
l规模报酬一般有三种情况:当全部投入要素按某种配合方式以相同比例增加时,如果产出的增长比例大于投入要素配合方式增加的比例,则称企业(或厂商)享有递增规模报酬(或规模经济);如果产出的增长比例小于投入要素配合方式增加的比例,则称为递减规模报酬(或非规模经济Diseconomies of Scale);如果产出的增长比例等于投入要素配合方式增加的比例,则称为固定规模报酬 3.弹性系数的求解 l在形如(5.2)所示的CD生产函数是一种较为普遍的生产过程中生产行为之规律性描述,但对于一些不同的企业(部门、地区)而言,由于其外部环境与内部条件的不同,则这些企业(部门、地区)的产出对资本与劳动投入的反应程度应该不同从数学描述来看,不同企业的CD生产函数应有不同的与因此对于一个特定的企业(或行业部门),求解其对应的弹性系数与就成为必要 4.软件生产函数 5.1.2 软件生产率及其影响因素l软件劳动生产率或简称软件生产率(Software Productivity),它被定义为每个人月(Person- months. PM)所交付的源代码程序量(单位:NCSS/PM)l 大量的工作实践与实验研究证实:影响整个产品的软件生产率提高的因素主要有两类第一类因素是组织与管理因素,如用人不当、管理不善、缺乏必要的业务规范和激励与约束机制等;第二类是技术因素,如产品需求的复杂性和高可靠性、服务器与工作站的存取速度与运算速度、主存储器的约束、需求的易变性以及恶劣的工作环境等因素都会影响软件生产率的提高。
提高软件生产率的常用的几个措施l提高团队工作的业务规范与编程规范l采用较为先进的软件工具如程序库、程序生成器、模型生成器等l部分功能采用商业软件包(如算法软件包、数据库管理系统等)l改编现有的已熟悉软件的部分功能l采用软件构件技术、多版本技术和软件复用技术l建立科学和合理的激励和约束机制l对人员的选择采用如下五原则:顶级天才原则、任务匹配原则、职业发展原则、团队平衡原则和逐步淘汰原则 l顶级天才原则:与其使用更多数量的一般才能人员还不如使用少量的具有更高能力的人员l任务匹配原则:量才而用,根据每个团队成员的能力与素质,分配其合适的任务l职业发展原则:设立多种工作岗位,为工作表现优秀的团队成员职业发展提供了空间;l团队平衡原则:团队成员的选择必须要能相互信任、互相合作、彼此取长补短、协调一致地为共同的团队目标努力;l逐步淘汰原则:将那些工作不称职的人员逐步淘汰出团队 5.2 软件生产过程经济分析l软件系统是一个人-机(软/硬件)系统,从系统的构成与应用来看硬件是基础,软件是核心(心脏)因此在重视硬件(计算机、通信设备、传感器等)生产的同时开展对软件生产过程(开发过程)的技术经济分析是十分必要而有意义的工作,本节主要介绍在不同的软件类型下软件的主要工程经济参数如生产规模、工作量、投入费用、劳动生产率、环境因子、成本等的相互数量关系,从而为软件的生产过程设计打下基础,同时上述内容的讨论也构成了软件工程经济学的核心内容之一。
5.2.1 软件生产系统动力学方程l根据系统工程的理论,要探索一个目标系统的内在要素关联及其动态发展规律,建立该目标系统对应的系统动力学方程(System dynamical equation. SDE),并以此系统动力学方程为基础来展开研究是一种有效的思路与方法以下介绍英国软件工程专家诺顿(P. V. Noder)所提供的诺顿瑞利模型(Noder- Rayleigh Model)及系统动力学方程的求解1.基本模型uN-R模型的有关变量及其经济内涵如表5.1其模型假设如下:变量符号变量符号变量内涵变量内涵单位单位C(t)软件工程在0,t内投入的累计人力工作量(人力费用)人年m(t)的变化率或软件工程在t时刻投入的人力密度人K软件工程项目在生存期内投入总工作量人年p(t)软件开发效率函数或学习函数-td软件工程项目投入人力的峰值时刻(通常为交货期或工期)年D软件工程项目开发难度系数人/年D0软件工程项目人力增长率人/年2S软件生产规模或生产的源代码程序量NCSSFc软件工程项目生产费用率万元/人年Fd软件工程项目开发劳动生产率NCSS/人年E软件工程环境因子-表表5.1 N-R模型变量表模型变量表开发项目中需要解决的问题总量K为有限: C(t)在项目开始时为零,即C(0)=0,然后单调增长到;任何时刻开发项目组的人力数m(t)与尚待解决的问题(或尚需投入)的累计人力工作量成正比;在项目生存周期中,项目开发人员由于不断的学习,因而其开发效率可用关于时间t的学习函数p(t)来描述,其开发人力量m(t)与p(t)成正比,在多数情况下,可设学习函数有 ,它是时间的线性增函数。
u由上述假设容易建立关于累计人力工作量C(t)的如下一阶常系数微分方程及其初值条件 (5.7)u容易求得上述常微分方程的解为 (5.8)u注意到(5.8)式的累计人力工作量C(t)的变化率函数具有概率论中瑞利(Rayleign)分布函数的形式,故(5.8)式合称为诺顿-瑞利(N-R)曲线u通过 ,容易求得N-R曲线在 时取得最 大点,并有最大值 (5.9)u显然m(t0)即为软件生存周期中的开发人员的峰值此外还有 u由此可知,对不同的由此可知,对不同的b值(值(b 0)和)和K值,值,N-R曲线均曲线均为具有单峰值且自左向右由单调增到单调降的曲线,为具有单峰值且自左向右由单调增到单调降的曲线,图图6.24画出了当画出了当K = 10时不同时不同b值的值的N-R曲线 b = 2b = 0.5b = 0.222b = 0.125m(t)t图图5.1 K = 10时不同时不同b值的值的N-R曲线曲线u在20世纪70年代,美军陆军中央设计处对所积累的200多个软件开发项目的数据进行的统计分析工作,其中普特纳姆(Putnam,L.H)发现,上述m(t)在 中的最大点t0非常接近交货时间td,这一结论的经济含义是十分明显的,因为在临近交货期时需要大量的人力资源来编制说明书,进行软件调试与质量检验,并对设计,编码等工作作再修改。
注意到此时有 或 为 ,将其代入(5.8)式和(5.9)式还有 (5.10) , (5.11)u(5.11)式的C(td)说明一个开发好的软件系统在初步运行性能良好并交付给用户时只花费了生存期内投入总人力费用的39%,剩下的61%的人力费用将用于该软件系统在运行维护阶段的质量检验,可靠性增长,维护与修改等工作,而这一结论与国外软件工程的大量实践结果基本符合u图5.2画出了C(t),m(t)随时间t的变化曲线,由图可知m(t)曲线由零递增到m0,然后再递降到零,而C(t)从总体上看是关于t单调增函数,但是C(t)在区间(0,td)内上升较快,而在td以后降增长速度放慢,最近缓慢上升到K因此一般来说C(t)曲线呈S型m(t)C(t)m0tdtk图图5.2 5.2.2 项目难度系数与人力增长率u软件工程专家普特纳姆(Putnam.L.H)通过对英、美大量软件工程项目资料的研究,得到了一些经验规律性的结论,首先他发现软件工程的开发难度与生存期内投入的总工作量K成正比,与交付期 成反比于是他建议引入一个能用来定量描述项目开发难度的参数D,并称D为软件工程开发难度系数,且有 (5.12)l其次普特纳姆还发现比值 在解释软件的开发行为与项目属性方面有重要作用,对于具有同一项目开发特性的软件工程,尽管随着项目规模的增大,K和td均将增大。
然而比值 则基本上稳定在某一个常数周围,而不同项目开发属性的软件工程这样的稳定常数则会不同于是普特纳姆据此建议引入一个被称为人力增长率的工程经济参数D0来描述上述规律性,并给出了不同项目开发属性的稳定常数的具体数值如下:(5.13) u D0之所以称为人力增长率是普特纳姆在研究D关于td的变化率时得到如下关系:u而上式的D0反映了难度(人力投入)的变化率(增长率)的概念显然,当一个待开发软件的开发属性确定后,借助于(5.13)式中D0的经验数据来确定K与td的数量和关系,并进而可由给定的工期td来计算未知的K,即有 ,这对于软件工程的设计是十分有用的当然,若已知K与td ,则亦可由(5.13)式来求解D0 ,并观察是否与(5.13)式所给出的数值相近u例5.1 某软件项目,其初始人力密度增长率为4人/月,预计1年7个月后交付用户,生产费用率为6万元/人年,试确定项目生存期内投入的总工作量(人力费用),峰值人数和总费用项目开发难度系数和人力增长率,以及开发阶段投入的累计人力工作量和费用u解:注意到交付期有 初始人力密度增长率由(5.12)式知有 从而得以K与td数值代入(5.11)式和(5.13)式有生存期投入的总费用(平均)为此外由(6.41)式还可得到开发阶段投入的累计人力工作量和费用Ud有 5.2.3 5.2.3 软件的劳动生产率、生产函数及其关联软件的劳动生产率、生产函数及其关联l由表5.1得知S为软件工程的规模或提交的源代码程序量(单位NCSS是表示非注释语句的数量),而C(td)则表示在软件开发阶段所投入的累计工作量(单位:人年),因而S / C(td)表示在软件开发阶段中单位时间所提供的源代码程序量(单位NCSS/人年),具有劳动生产率的概念,故人们以符号Fd来表述,并称Fd为软件项目的开发劳动生产率(简称劳动生产率)。
u普特纳姆通过对大量美国陆军软件工程项目的开发信息的研究发现了又一个经验规律(统计规律),即有 (5.14)u(5.14)式的工程经济意义是明显的,它表示软件工程项目难度越大,则劳动生产率就越低下,而此中比例系数C则反映了软件项目开发环境的技术状态,显然,在同样的软件工程项目难度下,不同的开发环境技术状态(如开发方法,开发工具,项目管理状况)亦将直接影响软件项目的劳动生产率我们以(5.1)式和(5.12)式代入(5.14)式,则有(5.15) u(5.15)式的工程经济意义亦是明显的,它反映了一个软件工程项目投入要素(投入工作量K和交付期td与产出要素(项目提交的生产量或源代码程序量)的数量关系,具有一般工程经济学中生产函数的概念,故人们将(5.15)式称为软件工程项目的生产函数,并将其中的系数E称为该项目的环境因子有关环境因子的测定方法将在本节后面涉及生产函数在工程经济分析中起着重要的作用u以下利用软件项目生产函数做弹性分析,来讨论有关时间(工期td )、人力费用总量K与难度系数D的相对变化率的关联和均衡问题u由(5.15)式显然可得 两边取对数有u当在一个特定的机构中开发一个程序量为S的软件产品时, 应为常量,故有u(5.16)式说明,若开发时间压缩10%或 ,由于 ,说明软件相应地应增长人力费用 的40%。
5.16)u同样,注意。












