什么是项目
项目是指为增加某一独特的产品和或服务的价值所做的一次性的,有限的努力。这里,“一次性”意味着项目是有特定的开始和结束时间的,而“独特”则意味着任何一个项目具有自己的特点,即与其他项目一定存在不同之处,这些不同之处表现在项目的目标,范围,质量,成本,时间,资源等多个因素的一项或几项。
项目的特征
- 目标性
- 独特性
- 一次性
- 约束性
- 关联性
- 多方面性
- 不可逆转性
项目管理
简单的说就是对项目进行管理,即有计划地,有序地,有控制地做事。项目管理就是以项目为对象的系统管理方法,通过一个特定的柔性组织,对项目进行高效率的计划,组织,不断进行资源的配置和优化,不断与项目各方沟通和协调,努力使项目执行的全过程处于最佳状态,获得最好的结果。
项目管理知识体系
-
美国 PMI 推出的项目管理知识体系(PM BO K)
-
英国政府商务部(OGC )出资研究开发的 (PRINCE)
-
IBM 公司全球项目管理系统 (WWPM W)
软件项目管理的本质
项目管理的目标,就是以最小的代价(成本和资源)最大的程度满足软件用户或客户的需求和期望,也就是协调好质量,任务,成本和进度等要素之间的冲突,获取平衡。概括地说,项目管理的本质,就是在保证质量的前提下,寻求任务,时间和成本三者之间的最佳平衡。
项目管理的对象
有效的项目管理集中在 3P —人员,问题,过程的管理上。
项目管理成功的要素
可以简单的认定项目成功的标志是
- 在规定的时间内完成项目
- 项目成本控制在预算之内
- 功能特性达到规格说明书所要求的水平(质量)
- 项目通过客户或用户的验收
- 项目范围变化是最小的或可控的
- 没有干扰或严重影响整个软件组织的主要工作流程
- 没有改变公司文化或改进了公司的文化
项目的成败受到4个方面的影响,即项目组内环境,项目所处的组织环境,客户环境,自然社会环境。
为了确保项目成功,需要进行有效的项目管理。项目管理,就是定义目标和流程,建立组织,通过工具,管理方法来保证项目的成功。目标,组织,流程,工具,管理,形成一个项目的管理体系,缺一不可。
项目管理的基本方法
- 阶段化管理
- 量化管理
- 优化管理
项目的生命周期
项目管理的基本内容是:计划,组织,监控
根据 PMBOK ,项目生命周期分为5个阶段:
- 启动
- 计划
- 执行
- 控制
- 结束
软件的开发模型
软件的开发模型是横跨整个软件生命周期的系统开发,运行和维护所实施的全部工作和任务的结构框架,它给出了软件开发活动各阶段的关系
- 瀑布模型
- 快速原型实现模型
- 从增量模型到敏捷方法
- 极限编程
- 行为驱动开发
- 功能驱动开发
- 敏捷开发模型(Scrum)
软件项目组织结构和人员角色
项目的组织结构
- 职能型
- 纯项目型
- 矩阵型
通常来说,职能式的组织结构适用于项目规模小,专业面单一,以技术为重点的项目;对于大型的,重要的,复杂的项目,应采用纯项目式的组织结构;而对于项目周期短又需要多个职能部门参与时,就应该选择矩阵型的组织结构。
项目经理
一个合格的项目经理必须具备良好的自身素质和较强的管理能力,以及技术能力。
项目经理的能力体现在个人素质方面,如热情,专注,执着和勤奋,其次体现在团队合作方面,具有良好的素质。
项目干系人
软件项目干系人,也称为软件项目的相关利益人,是指积极参与项目或其利益在项目执行中或成功后受到积极或消极影响的组织和个人。干系人也可能对项目及其可交付成果和项目团队成员实施影响。一个项目团队必须明确地识别项目干系人。
项目计划的内容
软件项目管理是建立在软件技术和软件工程知识基础之上的管理活动。软件项目计划,其实就是软件项目管理计划,包括任务范围,风险,进度,资源,质量,变更控制等的管理,这些内容与软件工程研发或技术有着密切的联系。
项目计划的方法
- 滚动计划法:是为了提高项目的连续性,适用性和灵活性而采用的一种新的计划编制方式,是动态平衡原理在计划工作中的应用。
- WBS 方法:是一种将复杂的问题分解为简单的问题,然后再根据分解结果进行计划的方法。
- 制定 WBS的计划,有主要三个步骤:
- 分解工作任务
- 制定各项活动/任务之间的依赖关系
- 安排进度和资源,
- 创建 WBS 可以使用自上而下,自下而上,类比,归纳等方法,最常用的是自上而下的方法。
- 制定 WBS的计划,有主要三个步骤:
- 网络计划技术:网络计划方法是一种应用网络模型直观地表示软件开发众多工序之间的逻辑关系与时间关系,对完成软件工程项目所需时间,费用,资源进行求解和优化的计划方法,其基本类型是关键路线法/计划评审技术法。
项目计划原则
- 目标性原则
- 预防性原则
- 客观性原则
- 系统性原则
- 适用性原则
项目估算的基本内容
项目估算是针对软件开发项目的规模,工作量,成本,进度等进行估算,这些估算是发生在项目实施之前,即在计划过程中完成。项目估算是基于历史数据,经验和一定方法来完成的,由项目的目标,工作范围,产品规模,业务逻辑和采用技术等决定。主要的内容有:
- 规模估算
- 工作量估算
- 进度估算
- 风险估算
- 其他估算
基本的估算方法
- 自顶向下估算模式:首先估算出项目一级的工作量,然后层层向下分摊,把上一层的工作量分摊到下一个阶段,活动或任务。通常使用 FPA 方法或 COCOMO II 来估算项目一级的工作量
- 自底向上估算模式:要求先估算出底层任务一级(如果没有任务,则为活动)的工作量,然后层层向上汇总到活动,阶段和项目级。通常使用 QIF 估算方法或专家判断来估算项目低层 WBS 元素的工作量。
软件规模估算
- 德尔菲法
- 代码行估算法
- 功能点分析法
- 标准构件法
- 综合讨论
工作量估算
- COCOMO 方法
- 多变量模型
- 基于用例的工作量估计
- IBM RIM 估算方法
- 扑克牌估算方法
- 不同场景的估算法
资源估算
项目中的每项活动都需要耗费或占用一定的时间和资源。项目资源估算,是指通过分析和识别项目各项活动的资源需求,确定出项目活动需要投入的资源种类(包括人力,设备,场地,材料,资金等)以及资源投入的数量和资源投入的时间,从而制定出活动资源需求列表。
关键路径
在网络项目网络中会有若干条网络路线,对比个网络路线的累加工期,就会发现通常有一条路线的时间最长。这条路线决定着项目的工期时间,称为关键路径。位于关键路径上的活动就是关键项目的活动。
里程碑
一般是项目中完成阶段性工作的标志,标志着上一个阶段结束,下一个阶段开始,将一个过程性的任务用一个结论性的标志来描述,明确任务的起止点。一系列的起止点就构成了引导整个项目进展的里程碑。里程碑定义了当前阶段完成的标准和下个新阶段启动的条件或前提,并具备以下特征。
- 里程碑的层次性,在一个父里程碑的下一层次中定义子里程碑
- 不同类型的项目,里程碑可能不同
- 不同规模项目的里程碑数量不一样,里程碑可以合并和分解。
如何建立里程碑
- 设定合理的里程碑检查
- 制定里程碑的完成目标
- 明确里程碑验收标准
- 确定里程碑的利益相关人
- 标识里程碑的进度百分比
进度编制方法
- PERT 法
- 甘特图法
- 表格表示法
软件质量的组织保证
软件项目质量管理,首先要在组织上得到保证。组织上没有保证,就不会有人去制定质量计划,质量的控制和管理也就难以得到落实。软件项目质量的组织保证主要是指管理层,SQA
组,SEPG
组,测试组。
软件评审的方法和技术
- 临时评审:最不正式的一种评审方法
- 轮查:邮件分发审查方法,通过邮件将需要评审的内容分发下去,然后再收集大家的反馈意见。
- 互为复审:在软件团队当中很容易形成一对一的伙伴合作关系,从而相互审查对方的工作结果,帮助对方找出问题。
- 走查:主要是强调对评审的对象要从头到尾检查一遍,比上面的互为复审要求更严格一些,从而保证其评审的范围全面,达到预期效果。
- 会议审查:是一种系统化,严密的集体评审方法。它的过程一般包含了制定计划,准备和组织会议,跟综和分析结果等。
- 检查表:在实际的评审过程中不仅要采用合适的评审方法,还需要选择合适的评审技术。检查表,是一种常用的质量保证手段,也是正式技术评审的必要工具,审查过程往往由检查表驱动。一份精心设计的检查表,对于提高评审效率,改进评审质量有很大的帮助。
- 其他技术:比如场景分析技术多用于需求文档评审,按照用户使用场景对产品/文档进行评审,如扮演不同的用户角色,模拟用户的行为,联想到更多的应用场景。
软件评审的过程
- 会议准备
- 召开会议
- 会议决议
- 问题跟踪
鱼骨图
鱼骨图又称因果分析图,它是分析和影响事物质量形成的诸要素间因果关系的一种分析图,因为其形状像鱼骨,故俗称鱼骨图。3个优点:
- 可以更全面地探讨各种类别的原因
- 鼓励通过自由讨论发挥大家的创造性
- 提供问题与各类原因之间关系的直观表现
鱼骨图的过程
- 确定问题:在绘制鱼骨图的时候,首先需要抓住问题。问题可能是一个实际的问题,也可能是潜在的问题
- 找出问题的主要原因:确定了问题之后,需要寻找产生问题的主要原因
- 根据问题的类别,确定细节原因:针对列出的每个主要问题,进一步讨论和分析
质量度量
随着软件系统复杂度的不断增加,靠简单的直觉来进行管理,做出决定会变得非常困难,甚至是危险的,会被假象所迷惑,做出错误的判断。这时候,就需要于求助于度量,对软件的过程和产品实施进行量化管理。度量可以实现以下的目标:
- 使沟通更有效,改变可见改进
- 尽早地发现和更正问题
- 做出关键的权衡
- 跟踪特定的项目目标
- 管理风险
- 计划未来的项目
度量要素
度量提供了对项目进度评估,质量状况的洞察力和用于决策的有关数据。实施软件度量,主要通过3个基本要素----数据,图表和模型模型来体现度量的结果。
- 数据:是关于事物或事项的记录,是科学研究最重要的基础。由于数据的客观性,它被用于许多场合。
- 图表:仅仅拥有数据还不能够直观的进行表现和沟通,而图表可以清晰地反映出复杂的逻辑关系,具有直观清晰的特点。
- 模型是为了某种特定的目的而对研究对象和认识对象所作出的一种简化的描述或模拟,表示对象的一种假设,说明相关变量之间的关系,可作为分析,评估和预测的工具。
什么是风险管理
项目风险管理是指对项目分险从识别到分析直到采取应对措施等的一系列过程,包括风险识别,风险量化,风险对策和风险监控等,从而将积极因素所产生的影响最大化,并使消极因素产生的影响最小化,或者说达到消除风险,回避风险和缓解风险的目的。对项目进行风险管理,可以最大限度的减少风险的发生。
风险识别
要确定影响本项目的风险来源,风险产生条件,并描述其风险特征。风险识别不是一次就可以完成的事,应该在项目的整个生命周期内持续进行。风险识别可以看作是一个持续的过程。
风险评估
是对风险影响力进行衡量的活动,即衡量风险发生的概率和风险发生后对项目目标影响的程度,从而为后面制定风险对策提供依据。
风险计划
是根据风险评估的结果,为降低项目风险的负面效应而制定方法,措施和技术手段的过程。
风险应对
就是风险计划的实施,以设法避免,消除和降低风险,包括风险预防,风险发生的监视和控制。
管理风险就是通过制定相应的措施来应对风险,减少对项目可能造成的损失,尽量避免项目的失控,为具体项目实施中的突发问题做准备,预留缓冲的缓冲的空间。最常采用的应对风险的几种措施:
- 规避
- 转移
- 弱化
- 接受
风险识别的方法和工具
风险识别有多种方法,包括面谈,头脑风暴会议,调查表,风险检查列表,风险库。最常见的方法是头脑风暴会议,风险检查列表和风险库等,而对产品和技术的风险,则要借助于 WBS (工作分解结构)来进行识别。
风险监控
风险监控可以通过设置控制基线来实现,即确定各类风险的阈值或警戒线,而风险控制基线则根据风险识别和评估的结果来获得,即可以按照风险发生概率的大小来设置基线,也可以按照风险发生的综合影响力来设置基线。
团队的生命周期
- 形成期
- 震荡期
- 规范期
- 成熟期
- 重组期
数据收集
数据收集包括项目进展过程中的进度,状态信息收集,也包括项目完成后对整个项目进行总结时统计信息的收集。主要有两种方式,一种是被动接收,而二是主动收集。
被动接收:是指项目成员按照规定/要求发出项目的相关数据信息,之后由项目经理或者项目组长进行整理和分析。比较常见的方法是日报,周报和月报,就是按照要求项目成员在每天/每周/每月对自己的相关项目工作信息进行自我总结和归纳,然后发给项目经理及项目组主要成员等指定人员。
主动收集:是指项目组长/经理/负责人应该通过各种手段主动地进行数据的收集。
- 即时地和项目成员进行沟通,掌握项目情况
- 建立例会制度,定期主动收集和掌握各方信息
- 查看跟踪系统中记录的相关信息
- 不定期召开项目研讨会根据项目进展情况召集相关人员进行现状,未来的讨论
进度可视化监控方法
- 甘特图
- 延迟图
- 时间线
- 计划与实际对比图
- 燃尽图
变更控制
- 需求变更
- 设计变更
- 代码变更
- 进度,费用,合同时间,测试计划等的变更
流程
变更控制的目的不是控制变更的发生,而是对变更进行管理,确保变更有序进行。为了有效管理变更。需要规范相应的变更控制流程,从而对变更的提交,到接收,评估,决策直到结束。
变更的流程
- 变更提交
- 变更接收
- 变更评估
- 变更决策
- 变更的实施与验证
项目收尾
整个收尾工作大体上可以分为项目验收和项目总结两个过程。
验收的前提应该做到:
- 完成合同要求的全部内容。
- 完成软件系统测试,包括单元测试,集成测试,功能测试和性能测试等,并出具相关的测试报告
- 各类文档,代码和报告的审查全部完成,包括软件需求说明书审查,概要设计审查,详细设计审查,所有关键模块的代码审查,所有测试脚本代码审查,对单元,集成,系统测试计划和报告的审查
- 准备好相关的开发文档和产品文档
- 验收测试计划准备好,并通过评审和批准
- 准备好其他验收资料,如变更记录控制文档,验收审核表
- 软件问题处理流程已经就绪
- 准备好软件安装和验收测试环境
- 与客户确认验收流程
- 完成合同或合同附件规定的其他验收内容
验收测试
检验软件产品是否符合预期的各项要求,以及用户能否接受的问题。
- 功能测试:客户依据项目合同内容,验收标准和相关的需求功能说明书,对所要求达到的成果进行验证,确保功能和接口与需求说明的一致性
- 质量鉴定:是依据合同中的质量条款,质量计划表中的指标要求,遵循相关的质量检验标准,对项目进行质量评定
- 资料评审:项目资料验收的重要依据,也是项目交接,维护,后期总结和存档的凭证。
验收流程
软件验收应是一个循序渐进的过程,要经历
- 准备验收材料
- 提交申请
- 初审
- 复审
- 直到最后验收合格完成移交工作