1 / 113

第三章 软件项目管理

第三章 软件项目管理 . 项目管理的概念 软件项目度量 软件项目计划与估算 风险分析和管理 项目进度安排 软件质量保证 软件配置管理. 软件项目管理. 人员管理. 产品管理. 过程管理. 项目管理. 确 定 软 件 过 程 模 型. 项 目 参 与 者. 项 目 负 责 人. 软 件 项 目 组. 协 调 通 信 问 题. 软 件 范 围. 问 题 分 解. 过 程 分 解. 确 定 危 险 信 息. 确 定 解 决 方 案. 项目管理的谱系.

libby
Download Presentation

第三章 软件项目管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 软件项目管理 • 项目管理的概念 • 软件项目度量 • 软件项目计划与估算 • 风险分析和管理 • 项目进度安排 • 软件质量保证 • 软件配置管理

  2. 软件项目管理 人员管理 产品管理 过程管理 项目管理 确 定 软 件 过 程 模 型 项 目 参 与 者 项 目 负 责 人 软 件 项 目 组 协 调 通 信 问 题 软 件 范 围 问 题 分 解 过 程 分 解 确 定 危 险 信 息 确 定 解 决 方 案 项目管理的谱系

  3. 软件项目管理的目的、任务和内容 目的 为了使软件项目能够在预定成本、进度、质量的前提下顺利完成,必须对软件工程项目进行计划、组织、监控和管理 任务 • 制定软件项目的实施计划和方案; • 对人员进行组织和分工; • 按照计划进度,以及成本管理、风险管理、质量管理的要求进行软件开发,完成软件项目的各项要求和任务。

  4. 3.1.1 软件度量 3.1 软件项目度量 • 软件度量的概念 • 软件规模度量 • 软件功能度量 软件度量分类

  5. 3.1.1.1 度量、估算 • 度量 metrics 度量具有数字特征,软件工程范围的度量是软件开发过程、软件资源或软件产品简单属性的定量描述。 如,程序规模、操作符个数、程序中错误的个数等。 • 估算 estimation 对软件产品、过程、资源进行预测 估算可以采用经验公式、或参考历史资料 估算用于事前签订合同、立项、制定工作计划等

  6. 软件的外部属性和内部属性 • 外部属性 软件产品、过程、资源与环境的关系 如,成本、效益、劳动生产率、可靠性、可维护性 • 内部属性 软件产品、过程、资源、环境自身的属性 如,产品结构、模块化程度、复杂性、程序长度等。

  7. 产品-过程-资源 • 产品的内部属性 程序代码长度 程序功能 模块化 重用性 控制流 数据流 模块耦合度与内聚度 • 产品的外部属性 程序的可靠性 可用性 可维护性 软件的可理解性 有效性 可移植性

  8. 过程的内部属性 • 工作量 计划和进度 一段时间内某类事件发生的次数 • 过程的外部属性 • 成本 可控制性 可观察性 稳定性 • 资源的内部属性 • 人 软硬件环境 方法 经验 • 资源的外部属性 • 成本 时间

  9. 3.1.1.2 面向规模的度量 • 代码行数 LOC或KLOC • 生产率 Pl=L/E 其中 L 软件项目代码行数 E 软件项目工作量(人月 PM) Pl 软件项目生产率(LOC/PM) • 代码出错率 EQRl=Ne/L 其中 Ne 软件项目的代码错误数 EQRl 每千行代码的错误数

  10. 每行代码平均成本 Cl=S/L 其中 S 软件项目总开销(元/美元) Cl软件项目每行代码的平均成本 • 文档与代码比 Dl=Pd/L 其中 Pd 软件项目文档页数 Dl 每千行代码的平均文档数

  11. 例 软件项目记录

  12. 生产率:Pl=L/E=12.1kLoc/24PM=504Loc/PM 出错率:EQRl=Ne/L=29个/12.1kLoc=2.4个/kLoc 平均成本: Cl=S/L =168 000美元/12.1kLoc= 13.88美元/Loc 每千行代码的平均文档页数: Dl=Pd/L=365Pd/ 12.1kLoc=30.16Pd/kLoc

  13. 规模度量的优缺点 用软件代码行数估算软件规模简单易行。 缺点 • 代码行数的估算依赖于程序设计语言的功能和表达能力; • 采用代码行估算方法会对设计精巧的软件项目产生不利的影响; • 在软件项目开发前或开发初期估算它的代码行数十分困难; • 代码行估算只适用于过程式程序设计语言,对非过程式的程序设计语言不太适用等等。

  14. 3.1.1.3 面向功能的度量 根据事务信息处理程序的基本功能定义的,在系统设计初期可以估算出软件项目的规模 FP=CT*[0.65+0.01*∑Fi] 其中:CT按表3.1计算() Fi 是复杂性调节值 Fi 取值 0,1,...,5 当 Fi = 0 时,表示 Fi 不起作用 Fi = 5 时,表示 Fi 作用最大

  15. 表3.1 功能点度量 测量参数 值 权值 用户输入数 □ *4 = □ 用户输出数 □ *5 = □ 用户查询数 □ *4 = □ 文件数 □ *7 = □ 外部界面数 □ *7 = □ CT = □

  16. 表3.1中的五个信息量按下列方式取值 用户输入数用户为软件提供的输入参数个数 用户输出数软件系统为用户提供的输出参数个数 用户查询数一个联机输入确定一次查询,软件以 联机输出的形式,实时地产生一个响应 文件数统计逻辑的主文件个数 外部界面数统计所有机器可读的界面,利用这些 界面可以将信息从一个系统传送到另一 个系统

  17. 用功能点定义相应的概念 • 生产率: Pf=FP/E  其中 Pf表示每人月完成的功能点数 • 平均成本: Ci=S/FP 其中 Ci表示每功能点的平均成本 • 文档与功能点比: Di=Pd/FP 其中 Di表示每个功能点平均具有的文档页数 • 代码出错率: EORi=Ne/FP 其中 EORi表示每个功能点的平均错误个数

  18. 面向功能的度量 • 软件规模的功能点度量没有直接涉及软件系统本身的算法复杂性。 • 1986年Jones把软件项目中的算法复杂性因素引入到功能点计算中来,为了避免混淆,我们把Albrecht定义的功能点称为简单功能点,用FPs表示,把Jones推广的功能点称为功能点,用FP表示。 • 推广的功能点包括计算机程序中用于各类问题求解的算法因素,如求解线性代数方程组、遍历二叉树的各个结点、处理中断等等。 • 功能点计算仍用上面的公式,其中CT按表3.2计算。

  19. 表3.2 推广的功能点度量 测量参数 值 权值 用户输入数 □ *4 = □ 用户输出数 □ *5 = □ 用户查询数 □ *4 = □ 文件数 □ *7 = □ 外部界面数 □ *7 = □ 算法 □ *3 = □ CT = □ • 对一般的工程计算或事务处理软件,用表3.1和表3.2两种方法计算出来的FP值应该基本上相同 • 对于比较复杂的软件系统 FP比FPs的值高20%~35%

  20. 面向功能的度量的优缺点 优点 ①与程序设计语言无关,它不仅适用于过程式语言,也适用于非过程式的语言; ②软件项目开发初期就能基本上确定系统的输入、输出等参数,功能点度量能用于软件项目的开发初期。 缺点 ①它涉及到的主观因素比较多,如各种权函数的取值; ②信息领域中的某些数据有时不容易采集; ③FP的值没有直观的物理意义。

  21. 3.1.1.4 代码行度量与功能点度量的比较 • 代码行度量依赖于程序设计语言,而功能点度量不依赖于程序设计语言。 • Albrecht和Jones等人对若干软件采用事后处理的方式分别统计出不同程序设计语言每个功能点与代码行数的关系,用LOC/FP的平均值表示。 • 表3.3表明,一行Ada语言代码的“功能”平均是一行FORTRAN语言代码“功能”的1.4倍。一行四代语言代码的“功能”平均是一行传统程序设计语言代码“功能”的3至5倍。

  22. 表3.3 各种语言的LOC/FP(平均值) 程序设计语言 LOC/FP(平均值) 汇编语言 300 COBOL 100 FORTRAN 100 Pascal 90 Ada 70 面向对象的语言 30 四代语言(4GL) 20 代码生成器 15

  23. 3.1.2软件复杂性度量 1976年 T.J.McCabe McCabe度量法又称环路复杂性度量,基于程序控制结构的软件复杂性度量模型。 程序控制结构图 • 程序结构对应于有一个入口结点和一个出口结点的有向图 • 图中每个结点对应一个语句或一个顺序流程的程序代码块 • 弧对应于程序中的转移 • 它基于一个程序模块的程序图中环路的个数,因此计算它先要画出程序图。 • 程序图是退化的程序流程图。流程图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧。

  24. McCabe度量法 McCabe用程序控制结构图的巡回秩数V(G)作为程序结构复杂性的度量 V(G) = e-n+2 其中:e为结构图的边数 n为结构图的结点数 可以证明 V(G)等于结构图中有界或无界的封闭区域个数

  25. 例3.1计算程序控制结构的V(G)值 E = 1 E = 3 N = 2 N = 3 V = 1 V = 2

  26. 计算程序控制结构的V(G)值 E = 4 E = 3 N = 4 N = 3 V = 2 V = 2

  27. 计算程序控制结构的V(G)值 E = 6 N = 5 V = 3

  28. 例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.

  29. 示例:

  30. 在前面的例示中, n=11, m=13,V(G)=m-n+p=13-11+1=3. p=1 • McCabe建议把V(G)作为模块规模的定量指标,一个模块V(G)的值不要大于10 • 当V(G)>10时,模块内部结构就会变得复杂,给编码和测试带来困难。 

  31. 这种度量的缺点是: • 对于不同种类的控制流的复杂性不能区分 • 简单IF语句与循环语句的复杂性同等看待 • 嵌套IF语句与简单CASE语句的复杂性是一样的 • 模块间接口当成一个简单分支一样处理 • 一个具有1000行的顺序程序与一行语句的复杂性相同

  32. 3.2 软件项目计划与估算 • 软件项目计划的目标 3.2.1 软件项目计划 • 软件项目管理人员在开发工作一开始需要进行定量估算。 • 软件项目计划的目标是提供一个能使项目管理人员对资源、成本和进度做出合理估算的框架。 • 这些估算应当在软件项目开始时的一个有限的时间段内做出,并且随着项目的进展定期进行更新。

  33. 软件的范围 • 软件范围包括功能、性能、限制、接口和可靠性。 • 估算开始时,应对软件的功能进行评价,对其进行适当的细化以便提供更详细的细节。由于成本和进度的估算都与功能有关,因此常常采用某种程度的功能分解。 • 性能的考虑包括处理和响应时间的需求。 • 约束条件则标识产品成本、外部硬件、可用存储或其它现有系统对软件的限制。 • 软件与其它系统元素是相互作用的。要考虑每个接口的性质和复杂性,以确定对开发资源、成本和进度的影响。

  34. 软件开发中的资源

  35. 3.2.2 软件项目估算 常用的估算方法 ①参照已经完成的类似项目估算待开发项目的成本和工作量。 ②将大的项目分解成若干子项目,在估算出每个子项目成本和工作量之后,再估算整个项目。 ③将软件项目按软件生存周期分解,分别估算出软件项目在软件开发各个阶段的工作量和成本,然后再把这些工作量和成本汇总估算整个项目。 ④根据实验或历史数据给出软件项目工作量或成本的经验估算公式。

  36. 四种方法可以同时、单独或组合使用,以便取长补短,提高项目估算的精度和可靠性。四种方法可以同时、单独或组合使用,以便取长补短,提高项目估算的精度和可靠性。 • 采用分解技术估算软件项目应考虑系统集成时需要的工作量。 • 为了实现软件项目估算,实践中开发了大量的软件项目自动估算工具,用以支持软件工作量或成本估算。

  37. 分解技术 采用”分而治之”的策略进行软件项目估算.将项目分解为若干个主要的功能及相关的软件工程活动,通过逐步求精的方式进行成本及工作量估算。 • 经验估算模型 可用于补充分解技术 • 自动估算工具 实现一种或多种分解技术或经验模型,与人机交互结合,自动估算将是很好的选择。

  38. 3.2.2.1 代码行、功能点和工作量估算 • 软件项目的规模是影响软件项目成本和工作量的重要因素。 • 软件项目代码行和功能点估算是成本和工作量估算的基础。 • 采用上面的估算方法可以估算出LOC或FP的乐观值a,悲观值b和一般值m,然后根据下列加权公式计算出期望值 e=(a+4m+b)/6 希望LOC或FP的值落在区间[a,b]之外的概率极小

  39. 当LOC或FP的期望值估算出来之后,根据以前软件项目开发的平均生产率LOC/PM或FP/PM就可以计算出工作量。当LOC或FP的期望值估算出来之后,根据以前软件项目开发的平均生产率LOC/PM或FP/PM就可以计算出工作量。 • 如,软件项目的规模估算为310FP,以前完成的软件项目的生产率为5.5FP/PM,于是工作量估算为E=310/5.5=56PM。

  40. 例 3.2 估算计算机辅助设计软件项目 将CAD项目按功能分解为七个子项目 ①用户界面和控制; ②二维几何分析; ③三维几何分析; ④数据库管理; ⑤计算机图形显示; ⑥外设控制; ⑦设计分析。 表3.4给出七个子项目代码行的乐观估计、悲观 计和一般估计值,然后计算出加权平均值。

  41. 估算计算机辅助设计软件项目 • 分析七个子项目的规模复杂性和难度,参照以前开发类似项目的经验给出开发每行代码的平均成本,每月开发的代码行数。 • 用这两组数据计算出七个子项目的开发成本和工作量。 • 最后汇总的CAD软件开发项目 规模为 33360 LOC 成本为 656680 $ 工作量为 144.5 PM。

  42. 再用这两种方法分别估算软件开发子项目在软件工程各个阶段的工作量,估算结果列入表3.5。再用这两种方法分别估算软件开发子项目在软件工程各个阶段的工作量,估算结果列入表3.5。 • 两种方法估算的工作量分别为144.5PM和152.5PM,相差5%左右。 • 估算的成本分别为656680$和708075$,相差7%左右。 两种方法估算的工作量和成本基本一致。

  43. 表3.4 代码行和成本、工作量估算 功能 乐观一般悲观 加权 $ LOC 成本 工作量 LOC LOC LOC 平均 /LOC /PM $ (人月) 用户界面控制1790 2400 2650 2340 14 315 32760 7.4 二维几何分析4080 5200 7400 5380 20 220 107600 24.4 三维几何分析4600 6900 8600 6800 20 220 136000 30.9 数据库管理 2900 3400 3600 3350 18 240 60300 13.9 图形显示 3900 4900 6200 4950 22 200 108900 24.7 外设控制 1990 21002450 2140 28 140 59920 15.2 设计分析 6600 8500 9800 8400 18 300 151200 28.0 总计 33360 656680 144.5

  44. 表3. 5工作量估算 功能 需求分析 设计 编码 测试 总计 用户界面控制 1.0 2.0 0.5 3.5 7 二维几何分析 2.0 10.0 4.5 9.5 26 三维几何分析 2.512.0 6.011.0 31.5 数据库管理 2.0 6.0 3.0 4.0 15 计算机图形显示 1.5 11.0 4.0 10.5 27 外设控制 1.5 6.0 3.5 5.0 16 设计分析 4.0 14.0 5.0 7.0 30 总计(人月) 14.5 61 26.5 50.5 152.5 每人月成本 5200 4800 4250 4500 成本($) 75400 292800 112625227250 708075

  45. 3.2.2.2 经验估算模型之一 CoCoMo模型 • 计算机软件的估算模型是根据以前完成项目的实际数据导出的,用于软件项目的计划阶段。 • 模型是根据“从前的”,“局部的”数据得出的,估算模型不可能完全适用于当前所有的软件项目和全部开发环境。这些模型的计算结果仅供参考。 • 两个常用的估算模型 CoCoMo模型 Putnam模型

  46. CoCoMo模型 • 1981年Boehm提出“构造性成本模型”(Constructive Cost Model),简称CoCoMo模型。它是在静态、单变量模型的基础上构造出来的。 • CoCoMo模型分为基本、中间、详细三个层次,分别用于软件开发的三个不同阶段。 • 基本CoCoMo模型 用于系统开发的初期,估算整个系统的工作量(包括软件维护)和软件开发所需要的时间。 • 中间CoCoMo模型 用于估算各个子系统的工作量和开发时间。 • 详细CoCoMo模型 用于估算独立的软部件,如子系统内部的各个模块。

  47. 1 基本CoCoMo模型 静态、单变量模型 E = aLb (3-1) D = cEd (3-2) 其中: E表示工作量,单位是人月(PM)。 D表示开发时间,单位是月(M)。 L是项目的代码行估计值,单位是千行代码 a,b,c,d是常数,取值如表3.6所示。 Boehm把软件划分为组织型、半独立型和嵌入型三类,允许不同应用领域和复杂程度的软件按照三类软件的适用范围选取相应的参数a,b,c,d。 给出了代码行数与工作量、工作量与开发时间之间的函数关系

  48. 表3.6 简单CoCoMo模型参数 软件类型 a b c d 适用范围 组织型 2.4 1.05 2.5 0.38 各类应用程序 半独立型 3.0 1.12 2.5 0.35 各类实用程序、 编译程序等 嵌入型 3.6 1.20 2.5 0.32 实时处理、 控制程序、 操作系统

  49. 2 中间CoCoMo模型 • 中间CoCoMo模型 以基本CoCoMo模型为基础,在工作量估计公式中乘以工作量调节因子 EAF E = aLb *EAF(3-3) 其中:L是软件产品的目标代码行数 a,b是常数,取值如表3.7所示。

More Related