一、软件项目管理的特点
二、软件项目管理的目标和范围
三、软件项目的分类
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、软件项目管理的特点
软件不同于一般的传统产品,它是对物理世界的一种抽象,是逻辑性的、知识性的产品,是一种智力产品。
(1)软件项目是设计性的项目
设计性项目与其他类型的项目完全不同。设计性项目所涉及的工作和任务不容易采用Tayloristic或者其他类型的预测方法,而且设计性项目要求长时间的创造和发明,需要许多技术非常熟练的、有能力合格完成任务的技术人员。开发者必须在项目涉及的领域中具备深厚和广博的知识,并且又能力在团队沟通和协作中有良好的表现。设计性项目同样也需要用不同的方法进行设计和管理。
(2)软件过程模型
在软件开发过程总,会选用特定的软件过程模型,如瀑布模型、原型模型、迭代模型、快速开发模型和敏捷模型等。选择不同的模型,软件开发过程会存在不同的活动和操作方法,其结果会影响软件项目的管理。例如,在采用瀑布模型的软件开发过程中,对软件项目会采用严格的阶段性管理方法;而在迭代模型中,软件构建和验证并行进行,开发人员和测试人员的协作就显得非常重要,项目管理的重点是沟通管理、配置管理和变更控制。
(3)需求变化频繁
软件需求的不确定性或变化的频繁性使软件项目计划的有效性降低,从而对软件项目计划的制定和实施都带来了很大的挑战。例如,人们采用极限编程的方法来应对需求的变化,以用户需求为中心,采用短周期产品发布的方法来满足频繁变化的用户需求。
需求的不确定性或变化的频繁性还给项目的工作量估算造成很大的影响,进而带来更大的风险。仅了解需求是不够的,只有等到设计出来之后,才能彻底了解软件的构造。另外,软件设计的高技术性,进一步增加了项目的风险,所以软件项目的风险管理尤为重要。
(4)难以估算工作量
虽然前人已经对软件工作量的度量做了大量研究,提出了许多方法,但始终缺乏有效的软件工作量度量方法和手段。不能有效地度量软件的规模和复杂性,就很难准确估计软件项目的工作量。对软件项目工作量的估算主要依赖于对代码行、对象点或功能点等的估算。虽然上述估算可以使用相应的方法,但这些方法的应用还是很困难的。例如,对于基于代码行的估算方法,不仅因不同的编程语言有很大的差异,而且也没有标准来规范代码,代码的精炼和优化的程度等对工作量影响都很大。基于对象点或功能点的方法也不能适应快速发展的软件开发技术,基于没有统一的、标准的度量数据供参考。
(5)主要的成本是人力成本
项目成本可以分为人力成本、设备成本和管理成本,也可以根据和项目的关系分为直接成本和间接成本。软件项目的直接成本是在项目中所使用的资源而引起的成本,由于软件开发活动主要是智力活动,软件产品是智力的产品,所以在软件项目中,软件开发的最主要成本是人力成本,包括人员的薪酬、福利、培训等费用。
(6)以人为本的管理
软件开发活动是智力的活动,要使项目获得最大收益,就要充分调动每个人的积极性、发挥每个人的潜力。要达到这样的目的,不能靠严厉的监管,也不能靠纯粹的量化管理,而是要靠良好的激励机制、工作环境和氛围,靠人性化的管理,即以人为本的管理思想。
二、软件项目管理的目标和范围
项目角色和职能:
角色 | 职能 |
项目经理 | 项目的整体计划、组织和控制 |
需求人员 | 在整个项目中负责获取、阐述、维护产品需求及书写文档 |
设计人员 | 在整个项目中负责评价、选择、阐述、维护产品设计及书写文档 |
编码人员 | 根据设计完成代码编写任务并修正代码中的错误 |
测试人员 | 负责设计和编写测试代码,以及完成最后的测试执行 |
质量保证人员 | 负责对产品的验收、检查和测试的结果进行计划、引导并做出报告 |
环境维护人员 | 负责开发和测试环境的开发和维护 |
其他人员 | 另外的角色,如文档规范人员、硬件工程师等 |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
软件项目管理有其特定的对象、范围和活动,着重关注成本、进度、风险和质量的管理,还需要协调开发团队和客户的关系,协调内部各个团队之间的关系,监控项目进展情况,随时报告问题并督促问题的解决。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
软件项目管理和生命活动周期的活动比较:
项目管理 |
项目启动 |
计划阶段 |
监控阶段 |
项目结束 |
客户服务和系统维护 |
|||||||
软件开发生命周期 |
概念或愿景 |
需求分析和定义 |
设计 |
实施(编程和单元测试) |
系统集成和测试 |
系统安装 |
维护和支持 |
|||||
说明 |
项目活动 l 收集数据 l 识别项目需求 l 确定项目范围 l 指定初步的WBS l 资源估计 系统开发活动 l 定义产品需求 l 可行性分析 l 定义产品范围 l 规划系统架构 |
项目活动 l 建立项目团队 l 指定详细WBS l 项目路劲网络 l 预算和进度估计 l 写项目计划 l 签订项目合同书 系统开发活动 l 产品需求确定 l 完成系统架构设计
|
项目活动 l 建立项目组织 l 建立和执行工作任务 l 知道、监督和监控项目 系统开发活动 l 完成详细设计 l 设计书签发 l 构建系统 l 执行单元、系统和集成测试 |
项目活动 l 实施技术和财务审核 l 获取客户认可 l 准备项目移交 l 评估和记录结果 系统开发活动 l 安装和测试系统 |
项目活动 l 项目移交 l 制定客户调查计划 l 跟踪客户 l 客户服务 系统开发活动 l 操作系统 l 系统技术支持 l 维护和升级 |
---------------------------------------------------------------------------------------------妖娆的分割线----------------------------------------------------------------------------------------------------------------------------
三、软件项目的分类
(1)按规模划分:大型项目、中小型项目等。大型项目比较复杂,代码量在百万行数量级,开发团队在百人以上。
(2)按软件开发模式分:组织内部使用的软件项目、直接为用户开发的外部项目和软件外包项目。
(3)按产品不同的交付类型分:产品型项目和一次型项目。
(4)按软件商业模式分:软件产品销售和在线服务(online service)或者随需服务模式(on-demand)和内部部署模式(on-premise)。
(5)按软件发布方式分:新项目和重复项目(旧项目)或完整版本(full package release/major release)、次要版本或服务包(service pack)和修正补丁包(patch)等。
(6)按项目待开发的产品进行分类:如COCOMO模型中,可分为组织型、嵌入型和半独立型。
组织型(organic):相对较小、较简单的软件项目(<50 KLOC)。开发人员对项目目标理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,收硬件的约束较小。
嵌入型(Embedded):要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某种复杂的硬件设备集成。对接口、数据结构和算法要求高。软件规模没有限制。
半独立型(semidetached):介于上述两种项目之间。规模和复杂度都属于中等或更高(<300 KLOC)。
(7)按系统架构分(Architecture):B/S结构和C/S结构或集中式系统和分布式系统或面向对象(OOA)、面向服务(SOA)和面向组件(COA)。
(8)按技术划分:Web应用、客户端应用、系统平台软件等。或者J2EE、.Net等