软件工程项目管理基本知识

软件项目管理开始于任何技术活动之前,并且贯穿于整个的软件生命周期。软件工程项目管理一般分为时间管理、成本管理、人力资源管理、风险管理。
1、时间管理
1.1 Gantt图

Gantt图是一种简单的水平条形图,它以水平线段表示子任务的工作阶段,线段的起点和终点分别对应着子任务的起始时间,线段长度指示完成该任务所需要的时间。
甘特图的优点:直观简明、易学易绘、可从图上清楚地标出子任务间的时间对比,但它也有缺点:
  • 不能显示地描绘各项彼此间的依赖关系;
  • 进度计划的关键部分不明显,难以判断哪些部分应当是主攻和主控的对象;
  • 计划中有潜力的部分以及潜力的大小不明确,往往造成潜力的浪费。
1.2 PERT网图与关键路径
PERT网图是一个由箭头(标识任务)和结点(标识事件)组成的有向图。将网络方法用于工作计划安排的评审和检查。PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的依赖关系,即哪些任务完成后才能开始另一些任务,以及如期完成整个工程的“关键路径”。关键路径(Critical Path)是由一连串的任务所组成的链,距离最大的一条路径。软件项目的管理人员应该密切注视关键任务的进展情况。如果希望缩短工期,只有往关键任务中增加资源才会有效果。
2、成本管理
2.1 成本估算方法 一种常用的成本估算方法是先估计完成软件项目所需的工作量(人月数),然后根据每个人月的代价(金额)计算机软件的开发费用:
开发费用 = 人月数×每个人月的代价

另一种方法是估计软件的规模(通常指源代码行数),然后根据每行源代码的平均开发费用(包括分析、设计、编码、测试所花的费用),计算机软件的开发费用:
开发费用=源代码行数×每行平均费用

估算源代码行数时,可以请n为有经验的专家,每位专家对软件给出3个估计值:
  • ai---最少源代码行数(该软件可能的最小规模)
  • bi---最大源代码行数(该软件可能的最大规模)
  • mi---最可能的代码行数(该软件最可能的规模)
    然后计算出每位专家的估算期Ei = (ai+4mi+bi)/6,n位专家的估算期望值的平均值就是代码行数的估算值。
2.2 成本估算模型
Putnam模型和COCOMO模型是常用的成本估算模型。
  • Putnam模型:是一种动态多变量模型,它是假设在软件开发的整个生存期中工作量的分布
  • COCOMO模型:是结构性成本模型,是最精确、最易于使用的成本估算模型之一。该模型可以分为:(1)基本COCOMO模型,是一个静态单变量模型,它是对整个软件系统进行估算。(2)中级COCOMO模型,是一个静态多变量模型。它将软件系统模型分为系统和部件两个层次,系统由部件构成,它把软件开发所需人力(成本)看作是程序大小和一系列“成本驱动属性”的函数。(3)详细COCOMO模型,它将软件系统模型分为系统、子系统和模块3个层次,它除包括中级模型所考虑的因素外,还考虑了在需求分析、软件设计等每一步的成本驱动属性的影响。
3、风险管理
3.1 风险的定义 1、关心未来:风险是否会导致软件项目失败?
2、关心变化:在用户需求、开发技术、目标机器,以及所有其他与项目及时工作和全面完成有关的实体中会发生什么样的变化?
3、关心选择:应采用什么方法和工具,应配置多少人力,在质量上强调到什么程度才能满足要求?
风险的特性:风险发生的概率和风险带来的损失。
3.2 风险的类型 1、项目风险:指潜在的预算、进度、人力(工作人员及组织)、资源、客户和需求等方面的问题以及它们对软件项目的影响。例如:项目复杂性、规模和结构不确定性等都是项目风险、项目风险威胁到项目计划,即如果项目风险变成现实,有可能会拖延项目的进度,增加项目的成本。
2、技术风险:指潜在的设计、实现、接口、验证和维护等方面的问题。此外,规约的二义性、技术的不正确性,陈旧的技术和“先进的”技术也是技术风险因素。技术风险威胁到开发软件的质量及软件交付时间,如果技术风险变成现实,则开发工作可能变得很困难或根本不可能。
3、商业风险:在信息系统项目中,商业风险威胁到要开发系统的生存能力。一般主要有5类商业风险:
  • 市场风险:开发了一个没有人真正需要的优秀产品或系统
  • 策略风险:开发的产品不再符合公司的整体商业策略
  • 销售风险:开发了一个销售部门不知道如何去卖的产品
  • 管理风险:由于重点的转移或人员的变动而失去了高级管理层的支持
  • 预算风险:没有得到预算或人力上的保证
3.3 风险管理活动 1、风险识别
试图系统化地确定对项目计划的威胁,风险识别的一个方法是建立风险条目检索表(文档化);常见的已知的及可预测的风险有:产品规模、商业风险、客户特性、过程定义、开发环境、构建的技术、人员数目及经验等。
2、风险预测:又称风险估算,通过对各种风险发生的可能性和破坏性这两个方面进行评估,并将它们按优先级别进行排列。在进行软件工程风险分析时,项目管理人员要进行四种风险评估活动,包括建立表示风险概率的尺度,描述风险引起的后果,估计风险影响的大小,确定风险估计的正确性。
3、风险评估:定义风险参照水准,成本、进度和性能就是三种典型的风险参照水准,即对于成本超支、进度延期、性能降低有一个表明导致项目终止的水准;风险评估的四个步骤:定义项目的风险参考水平值、建立每一组与每一个参考水平值之间的关系、预测一组临界点以定义项目终止区域,该区域由一条曲线或不确定区域所界定、预测什么样的风险组合会影响参考水平值。
4、风险控制
这步所有风险分析活动只有一个目的,即辅助项目建立处理风险的策略。一个有效的策略必须包含3个问题:1)风险避免;2)风险监控;3)风险管理及意外事件计划;如果软件项目组对于风险采用主动的方法,则避免是最好的策略。
3.4风险曝光度
风险曝光度(risk exposure)=风险损失*风险概率
4、软件配置管理
软件配置管理(Software Configure Management,SCM)用于整个软件工程过程。主要目标是标识变更;控制变更;确保变更正确地实现;报告有关变更。SCM是一组管理整个软件生存期各阶段中变更的活动。
1、基线
基线是软件生存期中各开发阶段的一个特定点,把各个开发阶段明确地分开,使本来连续的工作点在这些点上断开,以便检查和肯定阶段成果。基线可以作为一个检查点,在开发过程中,当采用的基线发生错误时,可以知道所处的位置,返回到最近获最恰当的基线上。
2、软件配置项
软件配置项(Software Cinfigure Item,SCI)是软件工程中产生的信息项,是配置管理的基本单位,以下的SCI是SCM的对象,并形成基线。
系统规格说明书、软件项目实施计划、软件需求规格说明书、设计规格说明书(数据设计、体系结构设计、模块设计、接口设计、对象描述)、源代码管理,测试计划和过程、测试用例和测试结果记录,操作和安装手册、可执行程序(可执行程序模块、连接模块)、数据库描述(模式和文件结果、初始内容)、用户手册、维护文档、软件工程标准、项目开发小结。
3、版本控制
一些文档经过转换生成另外一些文档,并产生一些信息;另一方面又随时会有新的变更出现,形成新的版本。
4、变更控制
变更控制是一项最重要的软件配置任务。为有效地实现变更控制,需借助于配置数据库和基线的概念。配置数据库分为以下三类:开发库、受控库、产品库。
5、人员组织管理
5.1 民主制程序员组 是一种非正式的组织方式,小组成员完全平等,享有充分民主,小组成员通过协商作出技术决策,小组有高度的凝聚力,组内学术空气浓厚,有利于攻克技术难关。小组成员之间的通信是平行的,如果小组内有n个成员,则可能的通信信道是n(n-1)/2。适用于开发人员少(2—8人),软件规模较小,每个开发人员技术水平都高的情况下。
5.2 主程序员组 在以下情况下,适用主程序员组的方式比较合适。
  • 软件开发人员多数比较缺乏经验;
  • 程序设计过程中有许多事务性的工作,例如,大量信息的存储和更新;
  • 多渠道通信很费时间,将降低程序员的生产率。
5.3 现代程序员组 【软件工程项目管理基本知识】在主程序组的基础上,取消主程序员的行政管理工作,让其单纯搞技术,负责技术工作方面的质量,而加进行政组长负责管理方面的工作。

    推荐阅读