第三章软件项目管理项目管理的概念软件项目度量软件项目计划与估算风险分析和管理项目进度安排软件质量保证软件配置管理项目管理的谱系人员管理产品管理项目管理过程管理软件项目管理项目参与者项目负责人软件项目组协调通信问题软件范围问题分解确定软件过程模型过程分解确定危险信息确定解决方案软件项目管理的目的、任务和内容目的为了使软件项目能够在预定成本、进度、质量的前提下顺利完成,必须对软件工程项目进行计划、组织、监控和管理任务制定软件项目的实施计划和方案;对人员进行组织和分工;按照计划进度,以及成本管理、风险管理、质量管理的要求进行软件开发,完成软件项目的各项要求和任务。3.1.1软件度量软件度量的概念软件规模度量软件功能度量3.1软件项目度量软件度量分类3.1.1.1度量、估算度量metrics度量具有数字特征,软件工程范围的度量是软件开发过程、软件资源或软件产品简单属性的定量描述。如,程序规模、操作符个数、程序中错误的个数等。估算estimation对软件产品、过程、资源进行预测估算可以采用经验公式、或参考历史资料估算用于事前签订合同、立项、制定工作计划等软件的外部属性和内部属性外部属性软件产品、过程、资源与环境的关系如,成本、效益、劳动生产率、可靠性、可维护性内部属性软件产品、过程、资源、环境自身的属性如,产品结构、模块化程度、复杂性、程序长度等。产品-过程-资源产品的内部属性程序代码长度程序功能模块化重用性控制流数据流模块耦合度与内聚度产品的外部属性程序的可靠性可用性可维护性软件的可理解性有效性可移植性过程的内部属性工作量计划和进度一段时间内某类事件发生的次数过程的外部属性成本可控制性可观察性稳定性资源的内部属性人软硬件环境方法经验资源的外部属性成本时间3.1.1.2面向规模的度量代码行数LOC或KLOC生产率Pl=L/E其中L软件项目代码行数E软件项目工作量(人月PM)Pl软件项目生产率(LOC/PM)代码出错率EQRl=Ne/L其中Ne软件项目的代码错误数EQRl每千行代码的错误数每行代码平均成本Cl=S/L其中S软件项目总开销(元/美元)Cl软件项目每行代码的平均成本文档与代码比Dl=Pd/L其中Pd软件项目文档页数Dl每千行代码的平均文档数例软件项目记录项目工作量PM成本万美元代码行kLOC文档页数Pd错误数Ne人数MAaa-012416.812.1365293Ccc-046244.027.21224865Fff-034331.420.21050646生产率:Pl=L/E=12.1kLoc/24PM=504Loc/PM出错率:EQRl=Ne/L=29个/12.1kLoc=2.4个/kLoc平均成本:Cl=S/L=168000美元/12.1kLoc=13.88美元/Loc每千行代码的平均文档页数:Dl=Pd/L=365Pd/12.1kLoc=30.16Pd/kLoc规模度量的优缺点用软件代码行数估算软件规模简单易行。缺点代码行数的估算依赖于程序设计语言的功能和表达能力;采用代码行估算方法会对设计精巧的软件项目产生不利的影响;在软件项目开发前或开发初期估算它的代码行数十分困难;代码行估算只适用于过程式程序设计语言,对非根据事务信息处理程序的基本功能定义的,在系统设计初期可以估算出软件项目的规模FP=CT*[0.65+0.01*∑Fi]其中:CT按表3.1计算()Fi是复杂性调节值Fi取值0,1,...,5当Fi=0时,表示Fi不起作用Fi=5时,表示Fi作用最大3.1.1.3面向功能的度量表3.1功能点度量测量参数值权值用户输入数□*4=□用户输出数□*5=□用户查询数□*4=□文件数□*7=□外部界面数□*7=□CT=□表3.1用户输入数用户输出数软件系统为用户提供的输出参数个数用户查询数一个联机输入确定一次查询,软件以联机输出的形式,实时地产生一个响应文件数外部界面数统计所有机器可读的界面,利用这些界面可以将信息从一个系统传送到另一个系统用功能点定义相应的概念Pf=FP/E其中Pf表示每人月完成的功能点数平均成本:Ci=S/FP其中Ci表示每功能点的平均成本文档与功能点比:Di=Pd/FP其中Di表示每个功能点平均具有的文档页数代码出错率:EORi=Ne/FP其中EORi表示每个功能点的平均错误个数面向功能的度量软件规模的功能点度量没有直接涉及软件系统本身的算法复杂性。1986年Jones把软件项目中的算法复杂性因素引入到功能点计算中来,为了避免混淆,我们把Albrecht定义的功能点称为简单功能点,用FPs表示,把Jones推广的功能点称为功能点,用FP表示。推广的功能点包括计算机程序中用于各类问题求解的算法因素,如求解线性代数方程组、遍历二叉树的各个结点、处理中断等等。功能点计算仍用上面的公式,其中CT按表3.2计算。表3.2推广的功能点度量测量参数值权值用户输入数□*4=□用户输出数□*5=□用户查询数□*4=□文件数□*7=□外部界面数□*7=□算法□*3=□CT=□对一般的工程计算或事务处理软件,用表3.1和表3.2两种方法计算出来的FP值应该基本上相同对于比较复杂的软件系统FP比FPs的值高20%~35%面向功能的度量的优缺点优点①与程序设计语言无关,它不仅适用于过程式语言,也适用于非过程式的语言;②软件项目开发初期就能基本上确定系统的输入、输出等参数,功能点度量能用于软件项目的开发初期。缺点①它涉及到的主观因素比较多,如各种权函数的取值;②信息领域中的某些数据有时不容易采集;③FP的值没有直观的物理意义。3.1.1.4代码行度量与功能点度量的比较代码行度量依赖于程序设计语言,而功能点度量不依赖于程序设计语言。Albrecht和Jones等人对若干软件采用事后处理的方式分别统计出不同程序设计语言每个功能点与代码行数的关系,用LOC/FP的平均值表示。表3.3表明,一行Ada语言代码的“功能”平均是一行FORTRAN语言代码“功能”的1.4倍。一行四代语言代码的“功能”平均是一行传统程序设计语言代码“功能”的3至5倍。表3.3各种语言的LOC/FP(平均值)程序设计语言LOC/FP(平均值)汇编语言300COBOL100FORTRAN100Pascal90Ada70面向对象的语言30四代语言(4GL)20代码生成器153.1.2软件复杂性度量1976年T.J.McCabeMcCabe度量法又称环路复杂性度量,基于程序控制结构的软件复杂性度量模型。程序控制结构图程序结构对应于有一个入口结点和一个出口结点的有向图图中每个结点对应一个语句或一个顺序流程的程序代码块弧对应于程序中的转移它基于一个程序模块的程序图中环路的个数,因此计算它先要画出程序图。程序图是退化的程序流程图。流程图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧。McCabe度量法McCabe用程序控制结构图的巡回秩数V(G)作为程序结构复杂性的度量V(G)=e-n+2其中:en为结构图的结点数可以证明V(G)等于结构图中有界或无界的封闭区域个数例3.1计算程序控制结构的V(G)值E=1E=3N=2N=3V=1V=2计算程序控制结构的V(G)值E=4E=3N=4N=3V=2V=2计算程序控制结构的V(G)值E=6N=5V=3例3.1计算如图所示程序控制结构图的V(G)值。(a)e=1,n=2,v=1;(b)e=3,n=3,v=2;(c)e=4,n=4,v=2;(d)e=3,n=3,v=2;(e)e=6,n=5,v=3.示例:在前面的例示中,n=11,m=13,V(G)=m-n+p=13-11+1=3.p=1McCabe建议把V(G)作为模块规模的定量指标,一个模块V(G)的值不要大于10当V(G)10时,模块内部结构就会变得复杂,给编码和测试带来困难。这种度量的缺点是:对于不同种类的控制流的复杂性不能区分简单IF语句与循环语句的复杂性同等看待嵌套IF语句与简单CASE语句的复杂性是一样的模块间接口当成一个简单分支一样处理一个具有1000行的顺序程序与一行语句的复杂性相同3.2软件项目计划与估算3.2.1软件项目计划•软件项目管理人员在开发工作一开始需要进行定量估算。•软件项目计划的目标是提供一个能使项目管理人员对资源、成本和进度做出合理估算的框架。•这些估算应当在软件项目开始时的一个有限的时间段内做出,并且随着项目的进展定期进行更新。软件项目计划的目标软件的范围软件范围包括功能、性能、限制、接口和可靠性。估算开始时,应对软件的功能进行评价,对其进行适当的细化以便提供更详细的细节。由于成本和进度的估算都与功能有关,因此常常采用某种程度的功能分解。性能的考虑包括处理和响应时间的需求。约束条件则标识产品成本、外部硬件、可用存储或其它现有系统对软件的限制。软件与其它系统元素是相互作用的。要考虑每个接口的性质和复杂性,以确定对开发资源、成本和进度的影响。软件开发中的资源3.2.2软件项目估算常用的估算方法①参照已经完成的类似项目估算待开发项目的成本和工作量。②将大的项目分解成若干子项目,在估算出每个子项目成本和工作量之后,再估算整个项目。③将软件项目按软件生存周期分解,分别估算出软件项目在软件开发各个阶段的工作量和成本,然后再把这些工作量和成本汇总估算整个项目。④根据实验或历史数据给出软件项目工作量或成本的经验估算公式。四种方法可以同时、单独或组合使用,以便取长补短,提高项目估算的精度和可靠性。采用分解技术估算软件项目应考虑系统集成时需要的工作量。为了实现软件项目估算,实践中开发了大量的软件项目自动估算工具,用以支持软件工作量或成本估算。分解技术采用”分而治之”的策略进行软件项目估算.将项目分解为若干个主要的功能及相关的软件工程活动,通过逐步求精的方式进行成本及工作量估算。经验估算模型可用于补充分解技术自动估算工具实现一种或多种分解技术或经验模型,与人机交互结合,自动估算将是很好的选择。3.2.2.1代码行、功能点和工作量估算软件项目的规模是影响软件项目成本和工作量的重要因素。软件项目代码行和功能点估算是成本和工作量估算的基础。采用上面的估算方法可以估算出LOC或FP的乐观值a,悲观值b和一般值m,然后根据下列加权公式计e=(a+4m+b)/6希望LOC或FP的值落在区间[a,b]之外的概率极小当LOC或FP的期望值估算出来之后,根据以前软件项目开发的平均生产率LOC/PM或FP/PM就可以计算出工作量。如,软件项目的规模估算为310FP,以前完成的软件项目的生产率为5.5FP/PM,于是工作量估算为E=310/5.5=56PM。例3.2估算计算机辅助设计软件项目将CAD项目按功能分解为七个子项目①用户界面和控制;②二维几何分析;③三维几何分析;④数据库管理;⑤计算机图形显示;⑥外设控制;⑦设计分析。表3.4给出七个子项目代码行的乐观估计、悲观计和一般估计值,然后计算出加权平均值。估算计算机辅助设计软件项目分析七个子项目的规模复杂性和难度,参照以前开发类似项目的经验给出开发每行代码的平均成本,每月开发的代码行数。用这两组数据计算出七个子项目的开发成本和工作量。最后汇总的CAD软件开发项目规模为33360LOC成本为656680$工作量为144.5PM。再用这两种方法分别估算软件开发子项目在软件工程各个阶段的工作量,估算结果列入表3.5。两种方法估算的工作量分别为144.5PM和152.5PM,相差5%左右。估算的成本分别为656680$和708075$,相差7%左右。两种方法估算的工作量和成本基本一致。表3.4代码行和成本、工作量估算功能乐观一般悲观加权$LOC成本工作量LOCLOCLOC平均/LOC/PM$(人月)用户界面控制179024002650234014315327607.4二维几何分析40805200740053802022010760024.4三维几何分析4600