第3章 软件项目管理
软件项目管理有利于将软件开发人员的个人开发能力转化为企业的开发能力,并使企业的软件开发能力不断提高和成熟。
一、软件项目管理概述
软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。
软件项目的特征:1.软件产品的不可见性;2.项目的高度不确定性;3.软件过程的多变化性;4.软件人员的高流动性。
软件项目管理的“4P”:人员(People)、产品(Product)、过程(Process)和项目(Project)。
软件项目的生命周期包括项目启动、项目规划、项目实施和项目收尾4个阶段,其具体活动内容如下:
1.项目启动:(1)确定项目范围;(2)组件项目团队;(3)建立项目环境;
2.项目规划:(1)确定项目成本;(2)预算项目成本;(3)制定进度计划;
3.项目实施:(1)监控项目执行;(2)管理项目风险;(3)控制项目变更;
4.项目收尾:(1)客户验收项目;(2)安装培训软件;(3)总结项目经验。
二、人员组织与管理
一般来说,软件项目组的结构取决于开发组织的管理模式和软件项目的特点。在大多数软件项目中,民主式、主程序员式和技术管理式是3中典型的开发组织方式。
1.民主式组织结构:小组成员完全平等,组长和组员无异。适合于规模小、能力强、习惯于共同工作的软件开发组。
2.主程序员式组织结构:一个人全面负责,其他人员给予他必要的支持,以便提高效率和生产力。典型的主程序员式组织结构有主程序员、后背程序员、秘书以及1~3名程序员组成。优点:实现了项目人员的专业化分工;降低了管理的复杂性,简化成员之间的沟通和协调,提高了工作效率。
3.技术管理式组织结构:将技术开发工作与行政管理工作进行分离,分别由两个人承担。技术组长负责小组的技术决策,参与全部代码的审查工作;管理组长负责所有非技术性事务的管理决策,对小组人员业绩进行评价。明确划分技术组长和管理组长的管理权限十分重要。
大型软件项目可以采用层次式组织结构,整个产品开发统一在项目经理的知道下进行,程序员向各自的组织汇报工作,组长向项目经理汇报工作,而中间的管理层次可以根据产品的规模的需要适当增加。
案例:微软公司的软件开发组织
1.微软开发团队的特点:采用小型的、多元化的项目组织进行软件开发工作;分配不同角色;项目成员具有专深的技术水平和业务技能;所有项目成员都要具有强烈的产品意识;项目组成员办公地点尽量集中;对于规模较大的软件项目采取类似小型项目组的运行模式。
2.项目团队的角色划分:产品管理、程序管理、软件开发、软件测试、用户体验和发布管理。
一个高效的软件开发团队应有特征:(1)确定的目标和共同分享的项目前景;(2)清晰的角色分工与紧密的团队合作;(3)融洽的关系与通畅的沟通;(4)高昂的士气与高效的生产力。
有利于团队建设的基本原则:(1)项目人员集中办公;(2)人人参与产品设计;(3)关注最终产品发布;(4)注重项目人员培训;(5)建立良好的企业文化。
三、项目沟通管理
n个成员的项目团队,彼此之间的沟通渠道数量是n(n-1)/2,当项目成员数量超过3个人时,其沟通渠道的数量就会快速增长。软件团队成员的数量应该保持在3~7人之间。
项目沟通方式:直接沟通、电话交谈、电子邮件、会议、项目网站和书面报告。
项目沟通活动具体如下:
1.规划项目沟通
(1)项目组内部的信息交流活动:状态检查、组内讨论、问题讨论、需求阐述和项目变更。
(2)项目组之间的信息交流:客户审定、项目审定、版本发布、需求阐明、项目变更和问题讨论。
2.建立基础设施
项目管理者可以建立项目的信息系统,各个项目小组可以建立自己的内部网站,网站内容可以包括项目公告、问题论坛和项目文档。
3.实施阶段性评审
分两类,一类是由客户参与的评审活动,另一类是项目组进行的评审活动。
4.每周组织小组会议
四、软件项目规划
软件项目规划过程包括以下步骤:确定项目的目的和范围,具体说明项目的最终产品以及期望的时间、成本、质量目标;分解和定义整个项目应包括的工作活动和任务;估算完成该项目的规模及其所需资源;制定合理的软件项目计划,包括进度、成本、质量等方面的预测。
软件项目规模的常用估算方法包括代码行、功能点等技术。
1.代码行技术
多名有经验的开发人员分别给出代码行估算,求平均值。
开发人员提出一个有代表性的估算值范围,按最佳的(a)、可能的(m)、悲观的(b)三种情况给出估算值,计算期望值:L=(a+4m+b)/6。
(1)生产率:P=L/PM
其中,L是软件的代码行数,其单位是千行代码kLOC;PM是软件开发的工作量,其单位是人月;P是软件开发的生产率,其单位是每人月完成的代码行数。
(2)单位成本:C=S/L
其中,S是软件开发的总成本,其单位是人民币或美元等货币单位;C是每行代码的平均成本。
(3)代码出错率:EQR=N/L
其中,N是软件的错误总数;EQR是每千行代码的平均错误数。
2.功能点技术
一句软件信息域的基本特征和软件复杂性的估计,估算出软件规模,以功能点为单位度量软件规模。
软件信息域的5个基本特征包括外部输入、外部输出、外部查询、内部逻辑文件和外部接口。
软件成本估计:
1.专家判断;
2.类比估计;
3.COCOMO模型
COCOMO是利用经验模型进行成本估算的方法,可分为基本的、中间的和详细的3个层次。
项目风险管理:
风险识别是试图采用系统化的方法,识别特定项目已知的和可预测的风险。风险识别的常用方法是建立风险条目检查表。
各种风险:软件规模风险、商业影响风险、客户相关风险、软件过程风险、开发技术风险、开发环境风险和开发人员风险。
软件开发风险通常包括性能、成本、支持和进度等因素,这些因素对项目目标可能产生的影响可以划分为可忽略的、轻微的、严重的、灾难性的等4个等级。
风险评估表是一种常用的风险分析工具。
风险规划。
风险监控。
六、软件配置管理
软件配置项是为了配置管理而作为单独实体处理的一个工作产品或软件。
基线是软件配置项通过正式复审而进入正式受控的一种状态。
版本是确定在明确定义的时间点上某个配置项的状态。
软件配置库用于记录整个软件生命周期内与配置有关的所有信息。
软件配置活动:配置项标识、版本管理、系统构建、变更控制。
配置管理工具:CVS。