13章 软件项目管理

在经历了若干个大型软件工程项目的失败之后,人们才逐渐认识到软件项目管理的重要性和特殊性。

所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。

软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中。

13.1 估算软件规模

13.1.1 代码行技术

在这里插入图片描述

13.1.2 功能点技术

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

13.2 工作量估算

软件估算模型使用由经验导出的公式来预测软件开发工作量,工作量是软件规模(KLOC或FP)的函数,工作量的单位通常是人月(pm)。

支持大多数估算模型的经验数据,都是从有限个项目的样本集中总结出来的,因此,没有一个估算模型可以适用于所有类型的软件和开发环境。

13.2.1 静态单变量模型

在这里插入图片描述
在这里插入图片描述

13.2.2 动态多变量模型

在这里插入图片描述
在这里插入图片描述

13.2.3 COCOMO2 模型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.3 进度计划

软件项目的进度安排是这样一种活动,它通过把工作量分配给特定的软件工程任务并规定完成各项任务的起止日期,从而将估算出的项目工作量分布于计划好的项目持续期内。

进度计划将随着时间的流逝而不断演化。在项目计划的早期,首先制定一个宏观的进度安排表,标识出主要的软件工程活动和这些活动影响到的产品功能。随着项目的进展,把宏观进度表中的每个条目都精化成一个详细进度表,从而标识出完成一个活动所必须实现的一组特定任务,并安排好实现这些任务的进度。

13.3.1 估算开发时间

在这里插入图片描述
用上列方程计算出的T值,代表正常情况下的开发时间。客户往往希望缩短软件开发时间,显然,为了缩短开发时间应该增加从事开发工作的人数。
但是,经验告诉人们,随着开发小组规模的扩大,个人生产率将下降,以致开发时间与从事开发工作的人数并不成反比关系。出现这种现象主要有下述两个原因:

  • 当小组变得更大时,每个人需要用更多时间与组内其他成员讨论问题、协调工作,因此增加了通信开销。
  • 如果在开发过程中增加小组人员,则最初一段时间内项目组总生产率不仅不会提高反而会下降。这是因为新成员在开始时不仅不是生产力,而且在他们学习期间还需要花费小组其他成员的时间。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

13.3.2 Gantt图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

13.3.3 工程网络

Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具。它具有直观简明和容易掌握、容易绘制的优点,但是Gantt图也有3个主要缺点。

(1) 不能显式地描绘各项作业彼此间的依赖关系。
(2) 进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象。
(3) 计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。

当把一个工程项目分解成许多子任务,并且它们彼此间的依赖关系又比较复杂时,仅仅用Gantt图作为安排进度的工具是不够的,不仅难于做出既节省资源又保证进度的计划,而且还容易发生差错。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.3.4 估算工程进度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.3.5 关键路径

在这里插入图片描述

13.3.6 机动时间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

13.4 人员组织

在这里插入图片描述
现有的软件项目组的组织方式很多,通常,组织软件开发人员的方法,取决于所承担的项目的特点、以往的组织经验以及管理者的看法和喜好。下面介绍3种典型的组织方式。

13.4.1 民主制程序员组

在这里插入图片描述
在这里插入图片描述

13.4.2 主程序员组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(1) 主程序员既是成功的管理人员又是经验丰富、技术好、能力强的高级程序员,负责体系结构设计和关键部分(或复杂部分)的详细设计,并且负责指导其他程序员完成详细设计和编码工作。如图所示,程序员之间没有通信渠道,所有接口问题都由主程序员处理。主程序员对每行代码的质量负责,因此,他还要对组内其他成员的工作成果进行复查。
(2) 后备程序员也应该技术熟练而且富于经验,他协助主程序员工作并且在必要时(例如,主程序员生病、出差或“跳槽”)接替主程序员的工作。因此,后备程序员必须在各方面都和主程序员一样优秀,并且对本项目的了解也应该和主程序员一样深入。平时,后备程序员的工作主要是,设计测试方案、分析测试结果及独立于设计过程的其他工作。
(3) 编程秘书负责完成与项目有关的全部事务性工作,例如,维护项目资料库和项目文档,编译、链接、执行源程序和测试用例。
在这里插入图片描述

13.4.3 现代程序员组

民主制程序员组的一个主要优点,是小组成员都对发现程序错误持积极、主动的态度。但是,使用主程序员组的组织方式时,主程序员对每行代码的质量负责,因此,他必须参与所有代码审查工作。由于主程序员同时又是负责对小组成员进行评价的管理员,他参与代码审查工作就会把所发现的程序错误与小组成员的工作业绩联系起来,从而造成小组成员出现不愿意发现错误的心理。
在这里插入图片描述
实际的“主程序员”应该由两个人共同担任: 一个技术负责人,负责小组的技术活动;一个行政负责人,负责所有非技术性事务的管理决策。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.5 质量保证

在这里插入图片描述

13.5.1 软件质量

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

13.5.2 软件质量保证措施

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.6 软件配置管理

在这里插入图片描述

13.6.1 软件配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.6.2 软件配置管理过程

在这里插入图片描述

1. 标识软件配置中的对象

在这里插入图片描述

2. 版本控制

在这里插入图片描述

3. 变化控制

在这里插入图片描述
在这里插入图片描述

4. 配置审计

在这里插入图片描述

5. 状态报告

在这里插入图片描述

13.7 能力成熟模型

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.初始级

在这里插入图片描述

2.可重复级

在这里插入图片描述

3. 已定义级

在这里插入图片描述

4. 已管理级

在这里插入图片描述

5. 优化级

软件机构集中精力持续不断地改进软件过程。这一级的软件机构是一个以防止出现缺陷为目标的机构,它有能力识别软件过程要素的薄弱环节,并有足够的手段改进它们。在这样的机构中,可以获得关于软件过程有效性的统计数据,利用这些数据可以对新技术进行成本/效益分析,并可以优化出在软件工程实践中能够采用的最佳新技术。这一级包含了第4级的全部特征。

这一级的软件机构可以通过对过程实例性能的分析和确定产生某一缺陷的原因,来防止再次出现这种类型的缺陷;通过对任何一个过程实例的分析所获得的经验教训都可以成为该软件机构优化其过程模型的有效依据,从而使其他项目的过程实例得到优化。这样的软件机构可以通过从过程实施中获得的定量的反馈信息,在采用新思想和新技术的同时测试它们,以不断地改进和优化软件过程。

在这里插入图片描述

本章小结

软件工程包括技术和管理两方面的内容,是技术与管理紧密结合的产物。有效的管理是大型软件工程项目成功的关键。

1.软件项目管理始于项目计划。为了估算项目工作量和完成期限,首先需要预测软件规模。
2.管理者必须制定出一个足够详细的进度表,以便监督项目进度并控制整个项目。
3.软件质量保证是在软件过程中的每一步都进行的活动。
4.软件配置管理是应用于整个软件过程中的保护性活动,是在软件整个生命期内管理变化的一组活动。
5.能力成熟度模型(CMM)是改进软件过程的有效策略。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值