购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章
软件项目管理概述

1.1 项目与软件项目

“软件”“项目”“软件项目”等概念已经越来越被大家所熟悉,并且普遍存在于生活和社会的各个方面。软件行业是一个极具挑战性和创造性的行业,而软件项目管理也是一项具有挑战性的工作,同时,也是保证项目成功的必要手段。

1.1.1 项目及其特征

人类社会和日常生活中有很多的活动,有的活动称为项目,有的活动则不能称为项目。项目(project)是为了创造唯一的产品或提供唯一的服务而进行的临时性的努力;是以一套独特而相互联系的任务为前提,有效地利用资源,在一定时间内满足一系列特定目标的多项相关工作的总称。一般来说,日常运作和项目是两种主要的活动。它们虽然有共同点—例如,都需要由人来完成,均受到有限资源的限制,均需要计划、执行、控制—但项目是组织层次上进行的具有时限性和唯一性的工作,也许只需要一个人,也许涉及成千上万个人,也许需要100小时完成,也许要10年才能完成,等等。“上班”“批量生产”“每天的卫生保洁”等属于日常运作,不是项目。项目与日常运作的不同是:项目是一次性的,日常运作是重复进行的;项目是以目标为导向的,日常运作是通过效率和有效性体现的;项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理;项目存在大量的变更管理,日常运作基本保持持续的连贯性。下面介绍项目具有的特征。

· 目标性。项目的目的在于得到特定的结果,即项目是面向目标的。其结果可能是一种产品,也可能是一种服务。目标贯穿于项目始终,一系列的项目计划和实施活动都是围绕这些目标进行的。例如,一个软件项目的最终目标可以是开发一个学生成绩管理系统。

· 相关性。项目的复杂性是固有的,一个项目有很多彼此相关的活动,例如,某些活动在其他活动完成之前不能启动,而另一些活动必须并行实施,如果不能协调地开展这些活动,就不能实现整个项目的目标。

· 临时性。项目的临时性是指项目有明确的起点和终点。临时性并不一定意味着项目的持续时间短。项目要在一个限定的期间内完成,是一种临时性的任务。当项目的目标达到时,意味着项目任务完成。项目管理主要用来保证在预定时间内完成项目任务,为此而制订项目计划进度表,标识任务何时开始、何时结束。项目任务不同于批量生产,批量生产是指相同的产品连续生产,取决于要求的生产量,当生产任务完成时,生产线停止运行,这种连续生产不是项目。

· 独特性。在一定程度上,项目与项目之间没有重复性,每个项目都有其独自的特点。每一个项目都是唯一的。如果一位建筑工程师要按照规范建造第五十栋住宅,该住宅的独特性一定很低,它的基本部分与已经建好的第四十九栋住宅是相同的,如果说它有特殊性,也只是在于其地基不同、使用了一个新的热水器、请了几位新木工等。然而,如果要为新一代计算机设计操作系统,则该工作必然会有很强的独特性,因为没有人做过这个项目,可供参考的经验并不多。

· 资源约束性。每一个项目都需要运用各种资源作为实施的保证,而资源是有限的,所以资源是项目成功实施的一个约束条件。

· 不确定性。项目开始前,应当在一定预算的基础上制订一份计划,但是,在项目的具体实施过程中,外部因素和内部因素总是会发生一些变化,存在一定的风险和很多不确定性因素,因此项目具有不确定性。

1.1.2 项目、项目群、项目组合的关系

图1-1展示了项目、项目群和项目组合之间的关系。

(1)项目与子项目

项目(project)是“为创造唯一的产品、服务或结果而开展的一种暂时性活动”。在软件工程中,有各种类型的项目,如产品开发、外包服务、软件维护服务、服务创建等。在产品生命周期中,可能需要多个项目。例如,在产品概念阶段,可启动一个决定产品目标客户和市场需求的项目,而在产品维护阶段,可设立一个生产该产品下一版本的项目。

图1-1 项目、项目群和项目组合之间的关系

子项目(subproject)是指将项目分解为更小的单位,以便更好地控制项目。项目中的某一阶段可以是一个单独的项目,也可以是一个子项目,子项目可以转包给外部机构的一个单元。在实际工作中,子项目的划分是很灵活的,可以视项目的需要而定。可以按照阶段划分子项目(如一期项目、二期项目……),也可以按照项目的组成部分划分子项目。

(2)项目群

项目群(program)是一组相互联系的项目、子项目以及受控过程的活动。通常使用程序来定义和管控在有限时间内面向单一客户或者市场的不同提交物。项目群也称为大型项目,是通过协调来进行统一管理的一组相互联系的项目,它本身可能不是项目。许多大型项目通常包括持续运作的活动。可以将大型项目理解为比项目高一级别的大项目,如“863计划”“星火计划”“阿波罗计划”等。以“863计划”为例,它的目标是瞄准世界先进水平,集中资源重点投入,争取在我国部分有优势的高科技领域有所突破,为我国在21世纪的经济发展和国防安全创造条件。这样的目标是战略性的,很难具体化,但可以通过一系列的具体项目去实现。

(3)项目组合

项目组合(portfolio)是指把项目、项目群、子组合及操作作为一个整体进行管理。通过组合可对一条产品线或者一个组织内部并存的所有资产进行分组与管理。如果考察一个完整的项目组合,会发现它受到决策的影响。

1.1.3 软件项目

软件一词于1956年在美国被正式提出,是指计算机程序及说明程序的各种文档。软件是计算机系统中与硬件相互依存的部分,是包括程序、数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列,数据是使程序能正常操纵信息的数据结构,文档是与程序开发、维护和使用有关的图文材料。软件项目除了具备项目的基本特征之外,还有如下特点。

· 软件是一种逻辑实体,不是具体的物理实体,具有抽象性,这使得软件与硬件或者工程类项目有很多的不同之处。

· 软件的生产与硬件不同,开发过程中没有明显的制造过程,也不存在重复生产过程。

· 软件没有硬件的机械磨损和老化问题,然而,软件存在退化问题。在软件的生存期中,软件环境的变化会导致软件的失效率提高。

· 软件的开发受到计算机系统的限制,对计算机系统有不同程度的依赖。

· 软件开发至今没有摆脱手工的开发模式,软件产品基本上是“定制的”,无法利用现有的软件组件组装成所需要的软件。

· 软件本身是复杂的,其复杂性来自应用领域实际问题的复杂性和应用软件技术的复杂性。

· 软件的成本相当高昂。软件开发需要投入大量资金和高强度的脑力劳动,因此成本比较高。

· 很多软件工作涉及社会的因素,例如,许多软件开发受到机构、体系和管理方式等问题的限制。

软件项目是一种特殊的项目,它创造的唯一产品或者服务是逻辑载体,没有具体的形状和尺寸,只有逻辑的规模和运行的效果。软件项目不同于其他项目,软件是一个新领域而且涉及的因素比较多,管理起来比较复杂。目前,软件项目的开发远远不如其他领域的项目规范,很多理论还不适用于所有软件项目,经验在软件项目中仍起很大的作用。软件项目由相互作用的各个系统组成,“系统”包括彼此相互作用的部分。软件项目中涉及的因素越多,彼此之间的相互作用就越大。另外,变更也是软件项目中常见的现象,如需求的变更、设计的变更、技术的变更、社会环境的变更等,这些均说明了软件项目管理的复杂性。项目的独特性和临时性决定了项目是渐进明细的,软件项目更是如此,因为软件项目比其他项目有更大的独特性。“渐进明细”表明项目的定义会随着项目团队成员对项目、产品等的理解和认识的逐步加深而得到逐渐清晰的描述。软件行业是一个极具挑战性和创造性的行业,软件开发是一项复杂的系统工程,牵涉各方面的因素。软件项目的特征包括需求的不确定性和开发过程中存在技术风险。在实际的软件项目开发工作中,经常会出现各种各样的问题,甚至软件项目会失败。如何总结、分析项目失败的原因并得出有益的教训,是今后项目取得成功的关键。

现阶段,软件的发展存在以下五大趋势。

· 计算技术重心转向网络,互联网成为软件开发、部署和运行的平台。

· 软件服务化趋势逐步从以应用和软件产品为中心转移到以客户服务为中心。

· 智能化趋势逐步由物理传感器状态感知分析向人类意识思维方向转变。

· 操作系统、数据库、中间件和应用软件等相互融合,向一体化平台发展。

· 大量创新技术、业态模式推动人类社会、国民经济各行业、数字经济市场快速发展。

1.1.4 软件项目组成要素

简单地说,项目就是在既定的资源和要求的约束下,为实现某种目的而相互联系的一次性工作任务。软件项目的要素包括软件开发的过程、软件开发的结果、软件开发赖以生存的资源及软件项目的特定委托人(或者说是客户,既是项目结果的需求者,也是项目实施的资金提供者)。

软件项目的目标就是在一定时间、预算内完成项目范围内的事项,以使客户满意。一个成功的软件项目应该在项目允许的范围内满足成本、进度要求,并得到客户满意的产品质量。所以,软件项目目标的实现受4个因素的制约:项目范围、成本、进度计划和客户满意度,见图1-2。项目范围是为使客户满意必须做的所有工作。成本是完成项目所需要的费用。进度计划安排每项任务的起止时间及所需的资源等,为项目描绘一个过程蓝图。客户是否满意要看项目交付的成果质量,只有客户满意才能更快地结束项目,否则会导致项目的拖延,从而增加额外的费用。

图1-2 软件项目目标实现的制约因素

1.1.5 软件工程发展阶段

按照某些专家的说法,可以将软件工程划分为三个时代。1968年“软件工程”学科诞生为第一代软件工程,即软件工程1.0;2001年敏捷宣言发布意味着进入第二代软件工程,即软件工程2.0;2023年以ChatGPT为代表的大模型爆发表明进入第三代软件工程,即软件工程3.0,如图1-3所示。

1.第一代软件工程

第一代软件工程是指受建筑工程、水利工程等影响的传统软件工程,它的诞生可以追溯到1968年。20世纪五六十年代出现了软件危机,布鲁克斯(Frederick P.Brooks)在《人月神话》一书中写道:软件开发被喻为让众多史前巨兽痛苦挣扎,却无力摆脱的焦油坑。软件危机迫使人们去寻找产生危机的内在原因,进而找出消除危机的解决方案。面对软件危机,人们调查研究了软件开发的实际情况,逐步认识到采用工程化的方法从事软件系统的研发和维护的必要性。为了克服这一危机,大家走到一起,共同探讨以获得问题的解决途径。1968年北大西洋公约组织(NATO)的计算机科学家在德国召开国际会议,讨论软件危机问题,正式提出了“软件工程”(software engineering)的概念,从此一门新的工程学科诞生了。软件工程自此得以不断发展并逐渐成熟起来。传统软件工程主要向土木工程、工业工程学习,吸收其实践方法和经验。软件工程1.0体现了以下特征。

· 产品化:交付符合质量标准的组件、构件和系统。

· 过程决定结果:流程质量决定产品质量,一环扣一环,相信良好的过程产生良好的产品,关注过程胜过关注人,也非常关注过程评估和过程改进,如CMM(能力成熟度模型)是其典型代表。

· 阶段性明确:需求评审通过了,才能开始设计;设计评审通过了,才能开始实施(编程);编程结束了再进行测试等。瀑布模型是其典型代表。

· 责任明确:角色定义清楚,分工细致。

· 文档化:强调规范的文档,存在大量的文档模板。

· 计划性强:具有完整的计划,严格控制变更。

· 建筑工程的框架结构设计,在软件工程上表现为以架构设计为中心。

· 现代制造业流水线的启发—软件工厂思想。

· 注重项目管理:围绕项目开展管理工作,包括风险预防、里程碑控制和关键路径法等。

· 以顾客为中心的全面质量管理。

· 预防为主,检验为辅,即缺陷预防思想。

图1-3 软件工程的三个时代

2.第二代软件工程

受互联网、开源软件运动、敏捷/DevOps开发模式所影响并最终形成的建立在SaaS(软件即服务)、云计算基础之上的软件工程被定义为“软件工程2.0”。软件工程2.0的特征可以简单概括为下列几点。

· SaaS:软件更多是以服务的形式存在。

· 以人为本:个体与协作胜于流程和工具,充分发挥个人和团队的创造性和潜力。

· 拥抱变化:敏捷开发或轻量级过程,加速迭代,以不变应万变。

· 持续性:阶段性不明确,持续构建、持续集成、持续测试、持续交付,以时间换空间,消除市场风险。

· 融合:强调测试与开发融合、开发与运维融合、推崇全栈工程师等。

· 真正把用户放在第一位:用户、产品经理尽可能参与团队研发过程,注重用户体验。

· 强调价值交付:只做对用户有价值的事情,加速价值流的流动。

· 知识管理,将软件工程纳入知识管理的范畴。

· 史诗般故事、用户故事、站立会议,让软件开发工作更有趣、更健康。

3.第三代软件工程

在技术突破和创新方法的推动下,软件工程的发展越来越快,而GPT-4等人工智能(AI)语言大模型的出现也改变了很多行业,对软件研发的影响更为显著。考虑到它的发展速度,在不久的将来,AI将开始逐渐承担一些软件研发的工作,通过将GPT-4+(指GPT-4及其未来升级的版本)融入软件研发生命周期中,研发人员的使命将发生变化。GPT-4+将重新定义开发人员构建、维护和改进软件应用程序的方式,之后的软件开发会依赖这种全新的语言交流方式(类似ChatGPT),让这类工具理解研发人员交代的任务并自主完成软件开发,如理解需求、自动生成UI、自动生成产品代码、自动生成测试脚本等。此后,研发团队的主要任务不是写代码、执行测试,而是训练模型、进行参数调优、围绕业务主题提问或给提示。因此,我们说GPT-4将开启“软件工程3.0”新时代。软件工程3.0具有以下特征。

· 数字化:软件研发平台开始能够理解需求、设计、代码等,软件研发从过去的信息化进入数字化时代。

· AIGC:生成软件的各种ware:验收标准、测试用例、UI、代码、测试脚本等。

· 极致的持续交付:虽然软件工程2.0开始面向CI/CD,但还存在许多障碍,而软件工程3.0,得益于设计、代码、测试脚本等的自动生成,可以真正实现持续交付,即及时响应客户需求,交付客户所需的功能。

· 人机交互智能:软件研发过程就是人与计算机的交互过程。

· 以模型和数据为本:研发人员服务于大模型和大数据平台,包括模型的创建、训练、调优、使用等。

不同时代的软件工程,对于软件项目管理体现为不同的管理方法和模式。软件工程1.0体现为传统软件项目管理模式,软件工程2.0更多是敏捷化项目管理,同时与传统软件项目管理并存。对于软件工程3.0,智能化时代改变了软件开发方式,软件项目管理的方式也应该随之有所改变。

1.2 项目管理与软件项目管理

项目普遍存在于人们的工作和生活中,如何管理这些项目是一项需要研究的任务。项目管理起源于美国,20世纪四五十年代主要应用于国防和军工项目,后来广泛应用于工商、金融、信息等产业及行政管理领域。目前,项目管理已经成为综合多门学科的新兴研究领域,其理论来自工作实践。项目管理是指把各种系统、方法和人员结合在一起,在规定的时间、预算和质量目标范围内完成项目的各项工作。对于一个组织的管理主要包括3个部分,即战略管理、运作管理、项目管理。战略管理(strategy management)是指从宏观上帮助企业明确和把握发展方向。运作管理(operation management)是指对日常的、重复性工作的管理。项目管理(project management)是指对一次性、创新性工作的管理。项目是企业的最小盈利单位,项目管理自然成为构筑企业利润的基石,从这种意义上说,项目管理是企业的核心竞争力所在。由于项目管理具有效率高、反应灵敏的优点,因此更多企业希望采取项目式管理(management by project)的方式,从而可以更及时地处理用户的需求,使管理更高效,提高企业的管理质量。实施项目管理可以提高项目的效益,这里所指的项目的效益是一个综合性指标,包括低风险、高产出等。因此,不难得出在实施项目管理时应该掌握的度,即引入项目管理后所产生的效益减去项目管理的成本后必须大于未引入项目管理时的效益。由于引入项目管理后所产生的效益与项目管理的复杂度(项目管理的成本)并非线性相关的,因此项目管理的复杂度必然存在一个最优值,这就是我们应该掌握的度,这个度能够被大家认可并且被准确地理解和实施。

1.2.1 项目管理背景

随着世界由工业时代进入信息时代,时空概念的根本改变增加了项目的复杂性和可变性。项目涉及的范围和时间、空间跨度都在以空前的速度扩大。而随着行业竞争的加剧,项目只有在最少时间、最低成本的情况下完成才有意义。项目本身的复杂性和巨大风险以及在分工合作中个人经验的不确定性,使个人经验已无法确保项目的成功或按时完成。项目管理是20世纪50年代后期发展起来的一种计划管理方法,它一出现就引起了人们的广泛关注。1957年,美国杜邦公司把这种方法应用于设备维修,把维修停工时间由125h锐减为78h;1958年,美国人在北极星导弹设计中应用项目管理技术,把设计完成时间缩短了两年。由于项目管理在运作方式和管理模式上最大限度地利用了内外资源,从根本上改善了管理人员的工作程序,提高了效率,降低了风险,因此自20世纪60年代以来,它被广泛运用于航空航天、国防、信息、建筑、能源、化工、制造、环保、交通运输、金融、营销、服务、法律等行业。项目管理不仅适用于大公司,而且适用于小型企业。目前,在全球发达国家的政府部门和企业机构,项目管理已成为运作的中心模式。

1.2.2 项目管理

项目管理是指一定的主体,为了实现其目标,利用各种有效的手段,对执行中的项目周期的各阶段工作进行计划、组织、协调、指挥、控制,以取得良好经济效益的各项活动的总和。通过项目各方干系人的合作,把各种资源应用于项目,以实现项目的目标,使项目干系人的需求得到不同程度的满足。因此,项目管理是伴随着项目的进行而进行的一系列管理行为,目的是确保项目能够达到期望结果。要想满足项目干系人的需求和期望,达到项目目标,需要在以下相互之间有冲突的要求中寻求平衡:范围、时间、成本和质量;有不同需求和期望的项目干系人;明确表达的要求(需求)和未明确表达的要求(期望)。项目管理有时被描述为对连续性操作进行管理的组织方法。这种方法应该被更准确地称为“由项目实施的管理”,它是将连续性操作的许多方面作为项目来对待,以便可以对其采用项目管理的方法。所以,对于一个通过项目实施管理的组织而言,对项目管理的认识显然是非常重要的。项目管理是要求在项目活动中运用知识、技能、工具和技术,以便达到项目目标的活动。项目管理类似导弹发射的控制过程,需要一开始设定好目标,然后在飞行中锁定目标,同时不断调整导弹的方向,使之不能偏离正常的轨道,最终击中目标。软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。

1.2.3 软件项目管理

软件项目管理是软件工程的重要组成部分,用于确保软件项目满足预算、成本等约束,从而提交高质量的软件产品。好的项目管理不能保证项目成功,但是不好的项目管理一定会导致项目失败:软件可能会延迟交付,成本可能会超支,软件可能无法满足客户的要求。

当前社会的特点是“变化”,而这种变化在信息产业中尤为突出,技术创新速度越来越快,用户需求与市场不断变化,人员流动也大大加快。在这种环境下,企业需要应对的变化及由此带来的挑战大大增加,这也给项目管理带来了很多问题和挑战。目前软件开发面临很多的问题,例如:

· 在有限的时间、资金条件下,要满足不断增长的软件产品质量要求。

· 开发环境日益复杂,代码共享日益困难,需跨越的平台增多。

· 程序的规模越来越大。

· 软件的重用性需要提高。

· 软件的维护越来越困难。

因此,软件项目管理显得更为重要。软件项目管理是在20世纪70年代中期由美国提出的,当时美国国防部专门研究了软件项目不能按时提交、预算超支和软件质量达不到用户要求的原因,结果发现70%是由管理不善引起的,而非技术原因。于是软件开发者开始逐渐重视起软件开发中的各个项目的管理。

软件项目管理和其他项目管理相比具有以下特殊性。

· 软件是纯知识产品,其开发进度和质量难以估计和度量,生产效率也难以预测和保证。与普通的项目不同,软件项目的交付成果事先“看不见”,并且难以度量,特别是很多应用软件项目涉及业务流程再造或业务创新。因此,在项目早期,客户很难描述清楚需要提交的软件产品,但这一点对软件项目的成败又是至关重要的。与此矛盾的是,公司一般安排市场销售人员来谈判,目的是迅速签约,甚至为了尽早签约而“过度承诺”,遇到模糊性问题时也怕节外生枝,所以避而不谈,而甲方为了保留回旋余地,也不愿意说得太清楚,更不愿意主动提出来(因为甲方还有最终验收的主动权)。项目经理一旦接手项目,所有这些没有说清楚的隐患和口头承诺都将暴露出来,并最终由项目经理承担。

· 项目周期长,复杂度高,变数多。软件项目的交付周期一般比较长,一些大型项目的周期可以达到2年以上,这样长的时间跨度内可能发生各种变化。软件系统的复杂性导致了开发过程中难以预见和控制各种风险。从外部因素来看,商业环境、政策法规的变化会对项目范围、需求造成重大影响,例如,作者曾经参与的金融项目临近上线时,国家推出了“利息税”政策,造成整个系统的大幅变更。从内部因素来看,组织结构、人事变动等对项目的影响更加直接,有时新领导到任后,其思路的变化,甚至对项目的重视程度的变化,都可能直接影响项目的成败。

· 软件需要满足一群人的期望。软件项目提供的实际上是一种服务,服务质量不仅仅在于最终交付的质量,更重要的是客户的体验。实际上,项目的“客户”不是一个人,而是一群人,他们可能来自多个部门,并且对项目的关注点不同,在项目中获得的利益也不同。所以,当我们谈到满足“客户需求”时,实际是指满足一群想法和利益各不相同的人的需求。所以,进行软件项目管理是必要的。

软件项目管理的根本目的是让软件项目尤其是大型软件项目的生命周期能在管理者的控制之下,以预定成本按期、按质地完成,并交付用户使用。而研究软件项目管理是为了从已有的成功或失败的案例中总结出能够指导今后开发的通用原则、方法,以避免重蹈覆辙。

实际上,软件项目管理的意义不仅如此,进行软件项目管理有利于将开发人员的个人开发能力转化成企业的开发能力,企业的软件开发能力越高,表明企业的软件生产越趋于成熟,企业越能够稳定发展,从而越能减小开发风险。

无论是传统软件项目管理、敏捷软件项目管理还是智能化时代的软件项目管理,其关键就是要找到软件项目的本质和核心,大道至简。

1.3 传统软件项目管理

传统项目管理是指基于以传统瀑布模型为代表的开发模型做完整的项目计划,期望按照计划执行项目可以达到项目目标。传统项目管理通常基于项目管理知识体系(Project Management Body Of Knowledge,PMBOK)的管理模式。

1.3.1 项目管理知识体系

以前,有人认为项目经理是一种“意外的职业”。因为通常是某人在项目中先承担了项目责任,可能是从技术开发开始,然后随着项目经验的逐步增加,积累了一定的技术管理经验,最后顺理成章地当上项目经理。但是管理项目的有关知识不是通过系统学习得来的,而是在实践中摸索出来的,在摸索的过程中可能会导致严重损失。近年来,企业在减小项目管理意外性方面已经有了很大进步。很多企业的决策者逐渐认识到项目管理方法可以帮助他们在复杂的竞争环境中取得成功。为了减少项目管理的意外性,许多机构或者企业开始要求员工系统地学习项目管理技术,努力成为经过认证的项目管理人员。

项目管理专业人员资质认证(Project Management Professional,PMP)是美国项目管理学会(Project Management Institute,PMI)开发并负责组织实施的一种专业资格认证。PMP可以为个人的事业发展带来很多好处。该项认证已经获得100多个国家的承认,可以说是目前全球认可程度较高的项目管理专业认证,也是项目管理资格重要的标志之一,具有国际权威。在很多国家,特别是发达国家,PMP已经被认为是合格项目管理的标志之一。

PMI推出的《项目管理知识体系指南》是PMP考试的关键材料,为所有的项目管理提供了一个知识框架。PMBOK涵盖了项目管理的知识领域,1996年发布第1版,每四年更新一版,每一次更新都是全球项目管理从业者所关心的一件大事。2021年7月,《PMBOK指南》(第7版)发布。它以11种语言在全球发行超过500多万册,被奉为项目管理“红宝书”,它的每一次改版、更新都是在全球实践、反馈、建议的基础上完成的,它跨越地域、语言、种族,成为国际通用的项目管理普适标准。

《PMBOK指南》(第6版)及之前的版本基本是五大过程组和知识领域的思路,第5版之前是九个知识领域,第5版及之后是十个知识领域,每个知识领域包含一些过程。《PMBOK指南》(第7版)的变化是颠覆性的,从传统的五大过程组与十大知识领域转向了全新的十二大原则与八大绩效域。

1.3.2 《PMBOK指南》(第6版)

2017年9月6日,《PMBOK指南》(第6版)在万众期待中问世,同时,《敏捷实践指南》配套发布。《PMBOK指南》(第6版)包括项目管理的10个知识领域、5个标准化过程组及49个模块。它们之间有一定的对应关系,这是PMBOK的核心。

如图1-4所示,10个知识领域分别是项目集成管理(project integration management)、项目范围管理(project scope management)、项目进度管理(project schedule management)、项目成本管理(project cost management)、项目质量管理(project quality management)、项目资源管理(project resource management)、项目沟通管理(project communication management)、项目风险管理(project risk management)、项目采购管理(project procurement management)、项目干系人管理(project stakeholder management)。

图1-4 项目管理知识领域

项目管理的知识领域分布在项目进展过程中的各个阶段,可以这样描述它们之间的关系。

· 为了成功实现项目的目标,首先必须设定项目的工作和管理范围,即项目范围管理(what to do)。

· 为了正确实施项目,需要对项目的时间、质量、成本三大目标进行分解,即项目进度管理(when)、项目质量管理(how good)、项目成本管理(how much)。

· 在项目实施过程中,需要投入足够的人力、物力资源,即项目资源管理(people and motivation)、项目采购管理(partners)。

· 为了对项目团队人员进行管理,让大家目标一致地完成项目,需要沟通,即项目沟通管理和相关方(干系人)管理(understand and be understood)。

· 项目在实施过程中会遇到各种风险,所以要进行风险管理,即项目风险管理。

· 项目管理一定要协调各个方面,不能只顾局部的利益和细节,所以需要集成管理,即项目集成管理。

1.项目集成管理

项目集成管理包括为识别、定义、组合、统一和协调各项目管理过程组的各个过程和活动而开展的过程与活动。如图1-5所示,项目集成管理贯穿于项目的全过程。项目集成管理是指在项目的整个生命周期内,协调项目管理其他各管理知识领域,将项目管理的方方面面集成为一个有机的整体,保证项目总目标的实现。项目集成管理的目标在于对项目中的不同组成元素进行正确、高效的协调,而不是所有项目组成元素的简单相加。

图1-5 项目集成管理知识领域

2.项目范围管理

项目范围管理包括确保项目做且只做所需的全部工作以成功完成项目的各个过程。如图1-6所示,项目范围是为了交付具有特定属性和功能的产品而必须完成的工作。项目范围管理用以保证项目包含所有需要完成的工作,以顺利完成项目所需要的所有过程。项目范围管理主要定义项目需要完成的工作,确保项目包含且只包含所有需要完成的工作。项目范围管理可以控制项目包含和不包含什么内容。

图1-6 项目范围管理知识领域

3.项目进度管理

项目进度管理包括为管理项目按时完成所需的各个过程,如图1-7所示。按时提交项目对项目经理来说是较大挑战,时间是灵活性最小的控制元素,进度是导致项目冲突的最主要原因,尤其是在项目的后期,所以项目管理者学习项目进度管理过程尤为重要。

图1-7 项目进度管理知识领域

4.项目成本管理

项目成本管理包括为使项目在批准的预算内完成而对成本进行规划、估算、预算、融资、筹资、管理和控制的各个过程,是在项目具体实施过程中,为了确保完成项目所花费的实际成本不超过预算成本而展开的管理活动,如图1-8所示。

5.项目质量管理

项目质量管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求,以满足相关方期望的各个过程,如图1-9所示。项目质量管理要求保证该项目能够兑现它关于满足各种需求的承诺,涵盖与决定质量工作的策略、目标和责任的全部管理功能有关的各种活动。

图1-8 项目成本管理知识领域

图1-9 项目质量管理知识领域

6.项目资源管理

项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程,如图1-10所示。

7.项目沟通管理

项目沟通管理包括为确保项目信息及时且恰当地规划、收集、生成、发布、存储、检索、管理、控制、监督和最终处置所需的各个过程,如图1-11所示。确定项目人员的沟通需求和需要的信息,即确定谁需要什么信息、什么时候需要,以及如何获取这些信息。

8.项目风险管理

项目风险管理包括风险管理规划、风险识别、定性风险分析、定量风险分析、规划风险应对、风险应对计划和风险应对实施以及风险监控的各个过程,如图1-12所示。项目风险管理是决定采用什么方法和如何规划项目风险的活动,是指对项目风险从识别到分析乃至采取应对措施等一系列过程。它包括将积极因素所产生的影响最大化和使消极因素产生的影响最小化两方面内容。

9.项目采购管理

项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程,如图1-13所示。项目采购管理包括从执行组织之外获取货物和服务的过程。为了满足项目的需求,项目组织需要从外部获取某些产品,这就是采购。采购的意义是广义的,可能是采购物品,也可能是采购服务(如软件开发等),还包括收集有关产品的信息,以进行择优选购。

10.项目干系人管理

项目干系人管理也称为项目相关方管理,包括用于开展下列工作的各个过程:识别影响或受项目影响的人员、团队或组织,分析相关方对项目的期望和影响,制定合适的管理策略来有效调动相关方参与项目决策和执行。如图1-14所示。

图1-10 项目资源管理知识领域

图1-11 项目沟通管理知识领域

图1-12 项目风险管理知识领域

图1-13 项目采购管理知识领域

图1-14 项目干系人管理知识领域

项目干系人管理主要通过沟通管理满足项目相关人员的需求和期望,同时解决问题。项目干系人管理还关注与干系人的持续沟通,以便了解干系人的需要和期望,解决实际发生的问题,管理利益冲突,促进干系人合理参与项目决策和活动。应该把干系人满意度作为关键的项目目标来进行管理。

按照项目管理生命周期,项目管理知识体系分为5个标准化过程组,也称为项目管理生命周期的5个阶段,即启动过程组、计划过程组、执行过程组、控制过程组、结束过程组(如图1-15所示)。每个标准化过程组由一个或多个过程组成,它们的关系定义如下。

· 启动过程组:主要是确定一个项目或一个阶段可以开始了,并要求着手实行;定义和授权项目或者项目的某个阶段。

· 计划过程组:为完成项目所要达到的商业要求而进行的实际可行的工作计划的设计、维护,确保实现项目的既定商业目标。计划基准是后面跟踪和监控的基础。

· 执行过程组:根据前面制订的基准计划,协调人力和其他资源,去执行项目管理计划或相关的子计划。执行过程存在两个方面的输入,一个是根据原来的基准来执行,另一个是根据监控中发现的变更来执行。主要变更必须要得到整体变更控制批准后才能够执行。

· 控制过程组:通过监督和检测过程确保项目达到目标,必要时采取一些修正措施。集成变更控制是一个重要的过程。

· 结束过程组:取得项目或阶段的正式认可并且有序地结束该项目或阶段,也称为收尾过程组。向客户提交相关产品,发布相关的结束报告,并且更新组织过程资产并释放资源。

各个过程组通过其结果进行连接,一个过程组的结果或输出是另一个过程组的输入。其中,计划过程组、执行过程组和控制过程组是核心管理过程组。表1-1所示为PMBOK的5个标准化过程组、10个知识领域、49个模块之间的关系。

图1-15 项目管理的5个过程组

表1-1 《PMBOK指南》(第6版)的5个标准化过程组、10个知识领域、49个模块之间的关系

(续)

1.3.3 《PMBOK指南》(第7版)

《PMBOK指南》(第7版)不同于《PMBOK指南》以往的版本,以往的版本是对上一个版本进行更新和替换。2021年7月1日,令人翘首以待的《PMBOK指南》(第7版)终于发布了。总体而言,《PMBOK指南》(第7版)集百家之所长,成一家之所言。它的发布对项目管理界来说具有划时代的意义,也意味着全球最大的项目管理协会PMI正式地、完全地、完整地接受以往的项目管理五大过程组转变为以项目管理原则(principle)为导向的价值理念,由原来的项目科学化管理理念转为项目人心塑造和建设的理念。表1-2给出了《PMBOK指南》第6版与第7版的对比。

表1-2 《PMBOK指南》第6版与第7版的对比

《PMBOK指南》(第7版)可谓标新立异,完全摒弃了以往项目管理过程组与知识领域相结合的风格,采用原则+绩效域的新架构进行编写。确立项目管理12项原则和8大绩效域,以一种柔性的原则体系打破原有约束性的过程组体系,以一组相互关联的项目管理活动(即绩效域)集成原有的项目管理知识领域,如图1-16所示。

图1-16 12项原则指导8大绩效域

此次PMI对《PMBOK指南》的修订,也让我们意识到项目管理工作不仅是创造产出(output)和可交付物(deliverable),而且让产出和可交付物被客户、业主所使用,被社会和市场接受,创造有利的价值(value),价值交付系统如图1-17所示。而价值也不仅是财务经济价值,也应该考虑社会、环境的增量价值,当然在预期、衡量价值时,《PMBOK指南》(第7版)中也提到不能因为对市场的短视,让短期的、一时的价值增长掩盖长期的健康发展。

图1-17 价值交付系统

面对日益变化的外部环境和越来越复杂的项目,传统的基于一套固定模式的项目管理“套路”需要改进,裁剪恰到好处地解决了这种固化的管理痛点,对项目管理方法和过程进行量身定制(裁剪的本意),使其更加符合项目管理的环境和情境。《PMBOK指南》(第7版)用一个章节详细描述对生命周期和开发方法、过程、参与互动、模型、工件、方法和绩效域的裁剪,唯独12项原则不可裁剪[虽然《PMBOK指南》(第7版)没有明确指出],但是12项原则可以指导进行裁剪。158个模型、工件和方法提供了项目管理实践的小方法、小技巧,能让我们在简化的思维模型、完善的工件和方法中事半功倍地理解手中的工作以及项目管理中发生的事情,更高效地完成项目管理工作,提升项目的成果和绩效。

《PMBOK指南》(第7版)乍看改变了《PMBOK指南》延续20多年的知识领域和五个大过程组的思路,而PMI给出的说法是《PMBOK指南》(第7版)将会长期与第6版共存,也就是说《PMBOK指南》(第7版)不是对第6版的推翻和替代,而是对第6版中项目管理精髓的延伸,是对第6版知识域与过程组高层次、高维度的承接。

绩效域是一组对有效地交付项目成果至关重要的相关活动,《PMBOK指南》(第7版)将项目管理相关活动分为8组,构成8大绩效域。每个绩效域就内容结构而言,有其固定的三段式框架格式:首先是该绩效域的定义与成果的概要描述,其次是该绩效域的核心活动内容描述,最后是该绩效域与其他绩效域之间的相互作用,以及对于绩效域成果的检查。

· 干系人绩效域。项目由人来做且为人而做,人是项目管理中的核心要素,而干系人在人这个要素中扮演了关键的角色。干系人绩效域主要描述干系人在项目管理中的重要作用,以及识别、理解、分析、优先级排序、参与及监督干系人等一系列重要工作。其内容主要是《PMBOK指南》传统版本中干系人管理相关内容的拓展。

· 团队绩效域。团队绩效域大致对应《PMBOK指南》(第6版)第3章中项目经理相关内容与第9章中人力资源管理相关内容,涵盖了团队管理与领导力提升。该绩效域探讨了集中式团队管理与分布式团队管理的区别,强调了建立团队文化的重要作用,以及团队管理中决策与冲突解决的要求等内容。

· 开发方法和生命周期绩效域。开发方法和生命周期绩效域主要是关于项目生命周期的选择与开发方法的评估。该绩效域描述了从预测型到混合型再到适应型生命周期的频谱,以及开发、节奏和生命周期之间的关系,选择开发方法时所需考虑的变量等内容。

· 规划绩效域。规划绩效域大致对应《PMBOK指南》(第6版)规划过程组的一系列相关工作。为了交付最终的可交付成果和项目成果,需要对项目的范围、进度、成本、质量、资源、沟通、采购等做相应的规划与估算工作。规划时需要考虑不同项目生命周期的特点,以采用不同的开发方法。

· 项目工作绩效域。项目工作绩效域大致对应传统的执行过程组中的一系列相关工作。该绩效域涉及平衡各种制约因素、建立合理的过程与过程优化、获取资源、招标采购,以及知识管理等内容。

· 交付绩效域。交付绩效域大致对应传统的项目需求、范围、质量管理、结束过程组,以及收益实现与价值交付等一系列相关工作,其中也包含敏捷的交付方式。

· 测量绩效域。测量绩效域大致对应传统的项目监控过程组的一系列相关工作,其中挣值管理依然扮演着非常重要的角色,同时也采用了不少敏捷方法。除了项目过程中的绩效测量外,还兼顾了与项目收益和价值相关的测量。

· 不确定性绩效域。不确定性绩效域主要由VUCA环境因素与风险管理两部分内容组成。对于VUCA,《PMBOK指南》(第7版)分别进行了深化阐述,针对不确定性(Uncertainty)强调了韧性,针对模糊性(Ambiguity)强调了渐进明细,针对复杂性(Complexity)强调了系统解耦与迭代,针对易变性(Volatility)强调了备选方案与储备。对于风险管理则基本沿用了传统方法,强调机会的把握与威胁的应对。

总体来看,《PMBOK指南》(第7版)中的8大绩效域除了大幅增加了VUCA与敏捷相关内容外,并没有摒弃以前版本的传统内容,基本上是对传统版本中五大过程组和十大知识领域的众多知识点加以解构与重构,构建出全新的以交付价值为导向的管理理念。8个绩效域框架如图1-18所示,项目所处环境的不确定性(风险)程度与自身特点决定了生命周期与开发方法的选取,无论采用哪种开发方法,都需要通过PDCA(Plan-计划、Do-执行、Check-检查、Act-处理)循环,即规划、项目工作、测量从而最终交付项目成果。在项目开展过程中,人是最重要的因素,项目需要干系人的有效参与,并需要通过激励团队来高绩效实施,从而达成目标。

图1-18 8大绩效域的理解框架

1.3.4 传统软件项目管理知识体系

1.软件过程定义

所谓过程,简单来说就是人们做事情的一种固有的方式。做任何事情都存在过程,小到日常生活中的琐事,大到工程项目。对于做一件事,有经验的人对完成这件事的过程很了解,知道完成这件事需要经历几个步骤、每个步骤都完成什么事,以及需要什么样的资源和什么样的技术等,因而可以顺利地完成工作。没有经验的人对过程不了解,就会有无从着手的感觉。如图1-19所示,如果项目人员只将关注点放在最终的产品上,不关注期间的开发过程,那么不同的开发队伍或者个人可能会采用不同的开发过程,结果导致开发的产品质量不同,有的产品质量好,有的产品质量差,这完全依赖于个人的素质和能力。

图1-19 关注结果

反之,如图1-20所示,如果项目人员将项目的关注点放在项目的开发过程上,不管谁来做,也不管什么需求,均采用统一的开发过程,即企业的关注点在过程,则经过同一企业过程开发的软件,产品的质量是一样的。可以通过不断提高过程的质量来提高产品的质量。这个过程是公司能力的体现,是不依赖于个人的。也就是说,产品的质量依赖于企业的过程能力,不依赖于个人能力。

图1-20 关注过程

不能把软件过程简单地理解为软件产品的开发流程,因为我们要管理的并不只是软件产品开发的活动序列,而是软件开发的最佳实践。软件过程包括流程、技术、产品、活动间关系、角色、工具等,是软件开发过程中的各方面因素的有机结合。因此,在软件过程管理中,首先要进行过程定义,将过程以一种合理的方式描述出来,并建立企业内部的过程库,使过程成为企业内部可以被重用的共享资源。要不断对过程进行改进,以不断地改善和规范过程,从而帮助企业提高生产力。如果将一个软件的生产类比作一个产品的生产,那么生产线就是过程,产品按照生产线的规定进行生产。

软件开发的风险之所以大,是因为软件过程能力低,其中关键的问题在于软件开发组织不能很好地管理其软件过程,为此必须强调和加强软件开发过程的控制和管理。软件项目的开发过程主要有系统调研、需求分析、概要设计、详细设计、编码、测试、实施与维护等。不同软件项目的过程大体相同,但不同项目的每一个过程所包含的一系列具体的开发活动(子过程)千差万别,而且不同的项目组采用不同的开发技术,使用不同的技术路线,其开发过程的侧重点也不一样。因此项目经理在软件项目开发前,需要根据所开发的软件项目和项目组的实际情况,建立起一个稳定、可控的软件开发过程模型,并按照该过程来进行软件开发,这是项目成功的基本保证。

软件过程是极其复杂的。我们知道,软件是由需求驱动的,有了用户的实际需求才会开发一个软件产品。软件产品从需求的出现到最终的产品出现,要经历一个复杂的开发过程。软件产品在使用时要根据需求的变更不断修改,这称为软件维护。我们把用于进行软件开发及维护的全部技术、方法、活动、工具,以及它们之间的相互变换统称为软件过程。由此可见,软件过程的外延非常大,包含的内容非常多。对于一个软件开发机构来说,做过一个软件项目,无论成功与否,都能够从中总结出一些经验。做过的项目越多,经验越丰富,特别是完成一个成功的开发项目,从中可以总结出一些完善的过程,我们称之为最佳实践(best practice)。最佳实践开始存放在成功者的头脑中,很难在企业内部共享和重复利用并发挥其应有的效能。长期以来,这些本应属于企业的巨大的财富被人们所忽视,这无形中给企业带来了巨大的损失,当人员流动时,这种财富也随之流失,并且无法被其他的项目再利用。过程管理就是对最佳实践进行有效的积累,形成可重复的过程,使最佳实践可以在机构内部共享。过程管理的主要内容包括过程定义与过程改进。过程定义是对最佳实践加以总结,形成一套稳定的可重复的软件过程。过程改进是根据实践中对过程的使用情况,对过程中有偏差或不切合实际的地方进行优化的活动。通过实施过程管理,软件开发机构可以逐步提高其软件过程能力,从根本上提高软件生产能力。

2.过程管理在软件项目中的作用

前面介绍了过程在软件开发中的重要性。对于软件这种产品来讲,软件过程具有非常重要的意义。一件家具的质量好主要有两方面的因素:一是用于生产这件家具的材料的质量要好,否则很难有好的家具;二是生产这件家具的加工工艺要好。早期的家具以手工制造为主,由于工匠的手艺不同,产品的质量参差不齐。技术的不断发展使材料质量得到了提高,同时在产品的加工上也引入了高技术含量的木工机械,所以产品的加工水平和质量的稳定性都得到了很大程度的提高。软件产品在生产上有一定的特殊性。首先,软件产品不是物理存在的实体,它是完全的逻辑的高度聚合体,所以在质量因素的构成上不存在材料质量的因素,因而,在生产过程中唯一影响软件产品质量的是其生产工艺。生产工艺在软件工程中的术语就是软件过程。软件过程管理对软件产业的发展非常重要。软件过程管理将帮助软件组织对过程资产进行有效管理,使之可以复用于实际项目中,并结合从项目中获取的过程的实际应用结果来不断地改进过程。这样软件组织就有能力改变自身的命运,将它从维系在一个或几个个体上变成维系在企业中的管理上。过程管理让软件组织直观感觉到的最明显的转变就是软件项目中所有成员的位置可以替换。

3.软件项目管理知识体系的关系

顾名思义,过程管理就是对过程进行管理,其目的是要让过程能够被共享、复用,并得到持续改进。在软件行业,要管理的是软件过程。过程管理与项目管理在软件组织中处于重要地位,项目管理用于保证项目的成功,而过程管理用于管理最佳实践。两者并不是相互孤立的,而是有机地、紧密地相结合的。图1-21展示了过程管理和项目管理的基本关系。过程管理的成果即软件过程可以在项目管理中辅助项目管理的工作,在项目的计划阶段,项目计划的最佳参考是过去类似项目中的实践经验,这些内容通过过程管理成为过程管理的工作成果,这些成果对于一个项目的准确估算和合理计划非常有帮助。合理的计划是项目管理成功的基础。在项目计划的执行过程中,计划将根据实际情况不断调整,直到项目结束时,项目计划才能真正稳定下来。这份计划及其变更历史是过程管理中过程改进的最有价值的参考。在国外,成熟的软件组织内部,每个项目开发完成后必须提供“软件过程改进建议”文档,这是从软件开发项目过程中提炼出来的对软件过程改进的建议。过程的改进注重从项目的实际经验中不断将最佳实践提炼出来。

图1-21 过程管理与项目管理的基本关系

所有的软件过程构成了软件项目管理的过程体系,对应PMBOK五个过程组和十个知识领域。大家最熟悉的过程组应该是执行过程组,例如需求过程、设计过程、编码过程,测试过程等;项目计划过程组有范围计划、进度计划、成本计划、质量计划等;控制过程组与计划过程组是一一对应的,控制的对象就是执行过程;当然,软件项目管理同理有启动过程组和结束过程组。这样就形成了软件项目管理体系,如图1-22所示。目前软件项目管理过程没有公认的体系标准,具体项目可以有适合自己的过程要求。

图1-22 软件项目管理知识体系

1.4 敏捷软件项目管理

1.4.1 关于敏捷

软件项目是一类特殊项目,是脑力成果,而且依赖于用户需求,具有不断变化的特征。软件开发具有唯一性,是一次性的,这些都决定了软件项目的工程化有一定的难度。

从系统角度看软件项目,传统软件开发面临很多挑战,例如质量问题、测试问题、用户问题、进度问题、成本问题、团队的沟通问题等。快速变化的环境要求快速的开发和快速的提交,这促成了敏捷模型的产生。敏捷开发(agile development)是一种灵活的开发方法,用于在动态环境中向干系人快速交付产品。其主要特点是关注持续的交付价值,通过迭代和快速的用户反馈管理不确定性和应对变更。

由于高新技术的出现,技术更迭速度越来越快,产品的生命周期日益缩短,企业要面对新的竞争环境,抓住市场机遇,迅速开发出用户所需要的产品,就必须实现敏捷反应。与此同时,业界不断探寻适合软件项目的开发模式,其中,敏捷软件开发模式得到大家越来越多的关注。

高度不确定的项目变化速度快,复杂性和风险也较高。这些特点可能会给传统预测法带来问题,传统预测法旨在预先确定大部分需求,并通过变更请求过程控制变更。而敏捷方法的出现是为了在短时间内探讨可行性,根据评估和反馈快速调整。

2001年年初,许多公司的软件团队都陷入了不断增长的过程的泥潭,一批业界专家聚集在一起概括出一些可以让软件开发团队具有快速工作、响应变化能力的价值观和原则,他们称自己为敏捷联盟。在随后的几个月中,他们发表了一份价值观声明,即“敏捷宣言”,正式宣告敏捷开发运动的开始。

1.4.2 敏捷项目管理

“敏捷宣言”代表了敏捷的核心价值,其内容如下。

· 个体和交互胜过过程和工具(individuals and interactions over processes and tools)。

· 可以工作的软件胜过面面俱到的文档(working software over comprehensive documentation)。

· 客户合作胜过合同谈判(customer collaboration over contract negotiation)。

· 响应变化胜过遵循计划(responding to change over following a plan)。

上述4个核心价值对应以下12个原则。

· 我们最先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。

· 即使到了开发的后期,也欢迎改变需求。敏捷过程利用适应变化来为客户创造竞争优势。

· 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。

· 在整个项目开发期间,业务人员和开发人员应尽可能在一起工作。

· 围绕被激励起来的个体组成团队来构建项目。给他们提供所需的环境与支持,并且信任他们能够完成工作。

· 在团队内部以及团队之间,最有效果并且最有效率的传递信息的方式就是面对面的交流。

· 可以工作的软件是首要的进度度量标准。

· 敏捷过程提倡平稳的开发。发起人、开发者和用户应该能够保持长期的、恒定的开发速度。

· 不断地关注优秀的技能和好的设计会增强敏捷的能力。

· 简单—使未完成的工作最大化的艺术—是根本的。

· 最好的架构、需求和设计出自自组织的团队。

· 每隔一定的时间,团队会在如何才能更有效地工作方面进行反思,然后相应地调整自己的行为。

尽管这些原则源自软件行业,但已经扩展到许多其他行业。这种思维模式、价值观和原则定义了敏捷方法的组成部分。今天所使用的各种敏捷方法都植根于敏捷思维模式、价值观和原则,它们之间的关系如图1-23所示。

图1-23 敏捷思维模式、价值观和原则之间的关系

图1-24是在艾哈迈德·西德基(Ahmed Sidky)启发下提出的模式,它将敏捷明确表述为一种思维模式,由“敏捷宣言”的价值观所界定,受“敏捷宣言”原则的指导,并通过各种实践实现。总之,敏捷方法是一个囊括各种框架和方法的涵盖性术语,它指的是符合“敏捷宣言”价值观和原则的任何方法、技术、框架、手段或实践。敏捷开发是一种灵活、快速的开发方法,可以应对迅速变化的需求,是一种迭代、循序渐进的开发方法。

敏捷思维主要体现为快速交付成果并获得早期反馈,同时强调以一种透明的方式工作,从图1-25可以看到,第一种方式是比较模糊的项目管理方式,而第二种方式更加透明和具体。

图1-24 敏捷是许多方法的总称

图1-25 模糊和透明方式的比较

敏捷软件开发是一种面临迅速变化的需求快速开发软件的能力,是对传统生存期模型的挑战,也是对复杂过程管理的挑战,是一种以人为核心、迭代、循序渐进的开发方法,是一种轻量级的软件开发方法。传统软件项目管理更倾向于不考虑项目后续需求的变化,在项目开始时预测用户需求,然后冻结需求,制订相应的开发计划,再按照计划执行。与之形成鲜明对比的是,敏捷软件项目管理通过不断的用户反馈动态调整需求,最终达成目标。这种自适应的特性使敏捷开发的产品更符合实际需求,如图1-26所示。

图1-26 敏捷软件项目管理与传统软件项目管理的比较过程

随着云技术和敏捷思路的发展,云原生(cloud native)产生了。云原生是Matt Stine提出的一个概念,它是一个思想的集合,包括DevOps、持续交付(continuous delivery)、微服务(micro service)、敏捷基础设施(agile infrastructure)、康威定律(conway's law)等。云原生包含一组应用的模式,用于帮助企业快速、持续、可靠、规模化地交付业务软件。云原生由微服务架构、DevOps和以容器为代表的敏捷基础架构组成。因此,技术的发展也推动了敏捷软件项目管理的发展,如图1-27所示。

敏捷软件项目管理是应对快速变化环境的开发模型,以多迭代为代表,每个迭代在短期内完成一个有价值的、可用的结果。敏捷起源于软件,但是已经应用于很多行业。特斯拉采用了敏捷开发的原则,并建立了自己的工厂来模仿这一方法论的基本原则。一个由机器人和灵活、适应性强的工厂组成的系统本质上是一种简单的编程语言,可以随着用户需求的变化进行动态调整。例如,如果特斯拉的工程师设计出一种更好的车门—更轻、更安全、更便宜—特斯拉就可以重新规划工厂来制造新的车门,并将其整合到现有的工厂流程中。这家工厂可以随着新需求的添加和设计而进行调整。

图1-27 技术与管理相互促进

1.5 AI时代的软件项目管理

1.5.1 AI时代的软件工程

AI正在颠覆一切,软件工程也不例外。生成式人工智能(AIGC)在编码、设计、测试和DevOps方面的最新成果令人印象深刻。在智能化时代,项目管理也随着发生了变化,借助AI技术,软件项目实施流程得以精简,甚至实现了端到端的一站式软件项目流程,因此软件项目管理过程也需要精简。

AIGC是人工智能的一个分支,专注于创建和生成新的内容,如图像、文本、音频甚至视频,这些内容很难与人类生成的内容区分开来。最近,由于大型语言模型(LLM)的进步,以及OpenAI、Stable Diffusion和其他大厂的产品的发布,AIGC备受关注。虽然很难量化AIGC的准确传播范围,但可以肯定的是,研究人员、开发人员和软件从业人员正在积极探索和利用AIGC的各种功能,如图像和文本生成、音乐和声音合成、视频生成、虚拟人物和数字人创建以及数据增强。软件工程是AI革命的一部分,而AIGC可以使软件开发生命周期(SDLC)的各个阶段得到显著改善。

由于软件具有天然的数字化特性,软件工程尤其适合借助AIGC的力量。具体的工程任务,如数值分析和数据工程、文档编制、编码和质量控制,在某种程度上可能是重复性的,因此,非常适合由训练有素的AI模型提供帮助。其次,复杂的算法代码结构适合由AI助手生成。此外,软件开发人员面临的许多挑战可能已经解决。因此,对于训练有素的AI模型来说,代码模块已经可用,生成整个函数或类也就变得可行了。AIGC是加速软件开发的有力工具。对于依赖于创建、维护或销售软件的公司来说,使用正确的AIGC工具可以提高开发人员的效率、创造超越竞争对手的机会。企业可以通过多种方式利用AIGC工具,包括开发人员的优化和培训、为关键工程任务启用AIGC工具等。

众所周知,AI具有为技术组织增值的巨大潜力,例如AI能直接为以下软件工程活动提供帮助。

· 需求开发方面:可以帮助我们更准确地理解和记录需求,协助起草和完善用户故事或用例。

· 设计方面:可用于生成设计建议或对问题进行创意性的解决方案头脑风暴,协助起草设计文档或架构图。

· 编码方面:提供代码片段、建议或帮助开发人员了解复杂的编程概念,生成伪代码或解释代码逻辑。

· 代码生成:GitHub Copilot、CodeWhisperer、CodeArts Snap等AI工具可以根据简单的文本提示生成整个代码。但使用代码生成的功能还是需要谨慎,因为该工具只是提供了模板代码,没有达到预期效果。不能盲目相信生成的代码,开发人员仍处于主导地位。检查代码的准确性、完整性和错误对于AI驱动的开发人员工作流程至关重要。

· 代码解释:作为开发人员,我们有时会加入一个项目或继承复杂的应用程序代码。我们可能需要花好几天的时间才能理解项目的结构和代码的工作原理,尤其是在文档很少的情况下。在这种情况下,ChatGPT可以帮助开发人员解释代码,帮助开发人员减少阅读、理解和解释现有应用程序代码所需的时间,并进一步帮助开发人员加快入职或在新代码库中提高工作效率。

· 集成方面:解决合并代码或在整合软件各部分时出现的问题。

· 测试方面:根据需求和设计生成测试场景、边缘案例或测试脚本。协助分析测试结果,识别缺陷并提出可能的解决方案。

总之,AIGC的出现为技术团队提供了提高效率的工具和技术。团队可以创建更好的软件产品,缩短开发生命周期,并对新原型进行市场测试,从而接触到更多客户,提高团队效率。

1.5.2 智能化时代的软件项目管理

随着人工智能技术的不断发展,软件项目管理领域也在逐渐借助AI技术来提升效率、质量和创新力。在传统的软件项目管理中,项目计划、资源分配、进度跟踪等环节通常由项目经理和团队成员手动完成,存在一定的主观性和复杂性。AI驱动的软件项目模型引入了机器学习、自然语言处理、数据分析等技术,通过对历史项目数据的学习和对实时数据的分析,提供更智能的、预测性的项目管理决策支持。

2023年年底,PMI通过对“AI正在对项目管理产生的影响”进行调查,发现21%的受访者提到他们正在使用AI,82%的高层领导认为AI会对项目产生一定的影响,91%的受访者认为AI会对行业产生一定的影响。

智能化时代对软件项目开发和软件项目管理都带来了深刻的影响,我们要透过现象看本质,面向未来,洞察趋势,看到软件研发的范式(开发软件的本质)正在朝着一个新的方向迈进。

简单来说,AI对于软件项目管理的影响如下。

· 降本增效:通过精简流程、节省人力资源,AI可以有效降低组织运营的成本。AI和GAI可以自动化和优化许多烦琐和重复的任务,从而减少人工干预和人为错误,提高工作效率和生产力。项目人员还可以用其书写基础代码、基础文档等。

· 理解用户需求:AI和GAI还可以提供更准确、更及时和更个性化的数据和见解,从而帮助员工更好地理解和满足客户需求,提高客户满意度和忠诚度。

· 项目决策能力提升:AI和GAI的数据处理能力无疑大大降低了数字化转型的难度和门槛。通过大数据分析、模型建模、情景模拟等方式,AI和GAI能够更有效地发现项目隐藏的问题和规律,提供新视角,辅助人类进行更科学、更高效的决策。

· 重塑组织结构:由于AI和GAI工具的使用,某些分工和角色将不再存在,或者不再重要。同样,新的角色分工会涌现出来,由此会带来工作流程的调整和组织的重组,除了重组之外,组织的结构也会变得更加扁平。

· 新的工作方式和文化:AI和GAI可以改变项目的工作方式和文化,例如更加注重数据驱动决策、更加注重创新。由于开发人员的知识技能水平显著提升,迭代速度将显著加快、组织结构将更加扁平化等,可以预见的是,组织的敏捷程度会大大提升,敏捷文化会得到加强。

软件项目管理者需要重新构建软件项目管理战略。

· 重新定位AI。AI在项目中的辅助角色可以变为重要角色,在需求、设计、评审和重构代码过程中承担工作。

· 构建或者使用软件项目管理大模型的能力。优先引入/开发LLM编程/测试助手,其次,引入/开发LLM BA/Ops助手,再引入/开发LLM调度/任务管理工具,最终形成基于LLM的工程平台。从头开始训练一个自定义模型的难度比较高,微调一个基础模型的难度适中,通过进一步的专有或特定领域数据的额外训练来更新预训练模型的权重。使用预先训练好的模型并检索相关背景,通过收集数据将其转化为嵌入并存储在一个矢量数据库中,当查询发生时,搜索这些嵌入数据以获得相关的背景,并将其提供给模型。这种做法难度最低,当然,直接使用第三方的LLM API没有难度,但有安全风险。

· 团队组织与流程优化。人始终是决定性因素,需要高度重视组织重构和人才培养。

〇 组织需要优化,团队规模应缩小。

〇 组织可分解为更多、更小的特战队。

〇 多数角色都在,但低层次的工作岗位基本可以取消。

〇 招聘一些高端的AI专业人才。

1.5.3 智能化软件项目管理

智能化软件项目管理,即AI驱动下的软件项目管理,旨在通过智能化、自动化的手段提升项目管理的水平,使团队更好地适应快速变化的市场和技术环境。这一发展方向将为软件项目的成功交付和持续优化带来新的可能。新型的项目管理模型中,AI系统可以自动分析项目需求,优化资源分配,识别潜在的风险和瓶颈,并提供实时的数据洞察。通过深度学习算法,系统能够根据项目历史数据和实际执行情况不断优化自身的预测和决策能力,使项目管理更加精准和高效。

人工智能在项目管理方面具有以下优势。

· 效率和速度是第一位的:人工智能通过自动化日常工作来提高生产力,在生成报告、安排会议和发送后续电子邮件方面更快、更准确。

· 风险管理:生成式人工智能可以快速列出人员正在工作的环境中的潜在风险,可以分析历史项目数据并预测由于某些因素而导致工期延误或成本超支,项目经理可以提前干预。

· 辅助决策:可以通过分析超大量数据来提供建议,例如项目的优先级排序。

PMI的报告中显示,AI在成本进度估算、成本效益分析、大规模数据集分析、风险分析等方面有一定的智能辅助作用,在项目决策、项目业务案例创建等方面有一定的智能增强作用,在会议记录与总结、经验学习与总结、报告撰写等方面有一定的自动化辅助作用。报告中提到:2023年,46%的公司已经采用AI进行内部沟通,53%的公司用AI改善生产流程,51%的公司用AI进行流程自动化改进。

总之,在AI时代下的项目管理可以实现以下功能:

· 项目数据收集与分析的自动化和智能化。

· 基于数据和客观事实的范围、时间进度、成本、质量的评估和预测。

· 学习与利用项目流程、知识智能化、团队协同智能化、实现人机对话。

· 项目风险的智能化预测与管理。

· 项目智能化决策支持。

1.6 软件行业基准数据报告

中国软件行业基准数据库(以下简称CSBSG)是在工业和信息化部信息化与软件服务业司、中国软件行业协会的领导下,由中国软件行业协会软件造价分会、中关村智联软件服务业质量创新联盟和SSM Institute共同牵头并承担建设。

CSBSG主要是通过收集软件项目的历史数据,对项目规模、工作量、成本、工期、质量等数据展开行业基准比对,每年发布中国软件行业基准数据,展示行业发展水平及企业现状,发现行业最佳实践,促进企业生产力水平的持续改进。每年发布的《中国软件行业基准数据报告》是国标GB/T 36964—2018即《软件工程 软件开发成本度量规范》落地应用的最佳工具,也是在全行业引导科学量化观念,推动政企管理体系向数字化转型的重要支撑。

下面以2023年9月发布的中国软件行业基准数据(SSM-BK-202309)为例进行介绍。

· 数据范围。本次发布的中国软件行业基准数据,基于CSBSG数据库中所有可信度为A和B级的29027套国内软件项目数据分析得出。所有数据均为项目全生命周期数据,即工作量数据包含了开发方从立项到交付的所有工程活动(如需求分析、设计、编码、集成、测试、实施)以及相关的项目管理及支持活动所耗费的工作量。数据覆盖了政府、金融、电信、交通、能源、制造等行业领域,软件项目规模大小从100FP(功能点)到65000FP(功能点)不等。

· 数据可信度。项目数据可信度等级定义如表1-3所示。

表1-3 项目数据可信度等级定义

1.行业生产率数据

全行业和分行业的生产率数据如表1-4和表1-5所示。

表1-4 全行业的生产率数据

表1-5 分行业的生产率数据

2.行业缺陷密度数据

表1-6所示为软件项目的缺陷密度基准数据明细,用于计算基准数据的缺陷数,为项目交付前所有的测试活动(包括内部测试及用户验收测试)发现的缺陷之和。

表1-6 缺陷密度基准数据明细

3.工作量分布数据

表1-7所示为工作量分布基准数据明细,占比最高的是构建阶段,为40.04%。

表1-7 工作量分布基准数据明细

4.人员费率数据

表1-8为部分城市基准人月费率(软件开发)明细,人月费率包含软件的直接人力成本、间接成本及合理利润,但不包括直接非人力成本。

表1-8 部分城市基准人月费率(软件开发)明细

5.功能点单价

功能点单价基准为1313.10元/功能点。以北京地区行业中位数(P50)为基准,人月工时为174(21.75×8)人时/人月,费用包含软件的直接人力成本、间接成本及合理利润,但不包括直接非人力成本。其他地区功能点单价基准可参照与北京地区人月费率对应关系进行折算。

总之,这些行业基准数据对于软件项目规划和管理有一定的参考价值。

1.7 本书的组织结构

软件项目管理不同于其他领域的项目管理,软件项目有很大的特殊性,软件工程也远远没有建筑工程等领域规范化,经验在软件项目管理中起很重要的作用。本书分为5篇,前4篇代表软件项目管理的4个阶段,即项目初始、项目计划、项目执行控制、项目结束,如图1-28所示,最后是项目实践。项目计划和项目执行控制是项目管理中最重要的两项任务。在项目的前期,项目经理完成项目初始和计划阶段的工作,这个阶段的重点是明确项目的范围和需求,并据此计划项目的活动,进行项目的估算和资源分配、进度表的排定等。在项目计划完成后,整个项目团队按照计划的安排来完成各项工作。在工作进展的过程中,项目经理要通过多种途径来了解项目的实际进展情况,并检查与项目计划之间是否存在偏差,出现偏差意味着工作没有按照计划的预期来进行,这有可能对项目的最终结果产生重大影响,因此需要及时调整项目计划。调整计划要具体问题具体分析,先要找到问题发生的原因,然后采取相应的应对措施。在实际项目的进展过程中,计划工作与跟踪工作会交替进行,核心是围绕着最终的项目目标。

1.项目初始

项目初始是软件项目管理的第一个阶段,包括:项目立项,招投标,合同(或者协议)的确定,明确软件要完成的主要功能,以及项目开发的阶段周期等。因此,项目初始篇又分两章,主要内容包括项目确立、生存期模型,如图1-29所示。

图1-28 软件项目管理的阶段

图1-29 项目初始路线图

2.项目计划

项目计划是建立项目行动指南的基准,包括对软件项目的估算、风险分析、进度规划、团队人员的选择与配备、产品质量规划等,用于指导项目的进程发展。规划建立软件项目的预算,可提供一个控制项目成本的尺度,为将来的评估提供参考,是项目进度安排的依据。最后形成的项目计划书将作为跟踪控制的依据。因此,项目计划篇依次讲述了范围计划、成本计划、进度计划、质量计划、配置管理计划、团队计划、风险计划、合同计划等,如图1-30所示。

图1-30 项目计划路线图

3.项目执行控制

一旦建立了基准计划就必须按照计划执行,包括按计划执行项目和控制项目,以使项目在预算内、按进度、使顾客满意地完成。在这个阶段,项目管理过程包括测量实际的进程,并与计划进程相比较,同时发现计划的不当之处。为了测量实际的进程,掌握实际上已经开始或结束的任务、已投入的资金等很重要。如果实际进程与计划进程的比较显示出项目落后于计划、超出预算或是没有达到技术要求,就应该采取纠正措施,以使项目能恢复到正常轨道,或者更正计划的不合理之处。因此,项目执行控制是对所有计划的执行控制过程。软件项目执行控制篇主要包括项目跟踪与度量、核心计划执行控制、辅助计划执行控制,如图1-31所示。

图1-31 项目执行控制路线图

4.项目结束

项目管理的最后环节是项目的结束过程。项目的特征之一是它的一次性。项目有起点也有终点,项目结束期的主要工作是适时地做出项目终止的决策、确认项目实施的各项成果、进行项目的交接和清算等,同时对项目进行最后评审,并对项目进行总结。项目结束路线图如图1-32所示。

图1-32 项目结束路线图

小结

本章介绍软件项目管理的概念、特点、过程及其重要性。过程管理在软件项目管理中起重要作用,通过不断地优化和规范过程,可以帮助企业提高软件的生产能力。软件项目管理包括4个阶段:项目初始阶段、项目计划阶段、项目执行控制阶段和项目结束阶段。另外,本章还阐述了项目管理知识体系,也给出了软件项目管理的知识体系,同时介绍了敏捷项目管理的概念。另外,也探讨了AI驱动下的软件项目管理变化。最后,本章给出了软件项目管理的路线图。

记住:对软件项目的理解越深刻,项目开发和管理的经验越多,就越能管理好项目。软件项目管理是一个渐进明细的过程,它的灵活性和实践性很强,不可死记硬背。项目管理没有唯一的标准,只有最适合特定项目的管理方法。

练习题

一、填空题

1. 敏捷开发模型包括__________个核心价值,对应__________个敏捷原则。

2. 传统项目管理包括__________、__________、__________、__________、__________5个过程组。

3. 《PMBOK指南》(第7版)包含__________个绩效域。

4. VUCA时代中的U代表的含义是__________。

二、判断题

1. 搬家属于项目。( )

2. 项目是为了创造唯一的产品或提供唯一的服务而进行的永久性的努力。( )

3. 过程管理的目的是要让过程能够被共享、复用,并得到持续的改进。( )

4. 项目具有临时性的特征。( )

5. 日常运作存在大量的变更管理,而项目基本保持连贯性。( )

6. 项目开发过程中可以无限制地使用资源。( )

7. 相比于传统开发的预测性过程,敏捷开发属于自适应过程。( )

三、选择题

1. 下列选项中不是项目与日常运作的区别的是( )。

A.项目是以目标为导向的,日常运作是通过效率和有效性体现的

B.项目是通过项目经理及其团队的工作完成的,而日常运作是职能式的线性管理

C.项目需要有专业知识的人来完成,而日常运作的完成不需要特定专业知识

D.项目是一次性的,日常运作是重复进行的

2. 以下都是日常运作和项目的共同之处,除了( )。

A.由人来做

B.受制于有限的资源

C.需要规划、执行和控制

D.都是重复性工作

3. 下面哪一项不是《PMBOK指南》(第6版)中的知识领域?( )

A.招聘管理

B.质量管理

C.范围管理

D.风险管理

4. 下列选项中属于项目的是( )。

A.上课

B.社区保安

C.野餐活动

D.每天的卫生保洁

5. 下列选项中正确的是( )。

A.一个项目具有明确的目标而且周期不限

B.一个项目一旦确定就不会发生变更

C.每个项目都有自己的独特性

D.项目都是一次性的并由项目经理独自完成

6. ( )是为了创造唯一的产品或提供唯一的服务而进行的临时性的努力。

A.过程

B.项目

C.项目群

D.组合

7. 下面哪一项不是“敏捷宣言”中的内容?( )

A.个体和交互胜过过程和工具

B.可以工作的软件胜过面面俱到的文档

C.敏捷开发过程是自适应的过程

D.响应变化胜过遵循计划

8. 下列活动中不是项目的是( )。

A.野餐活动

B.集体婚礼

C.上课

D.开发操作系统

9. 下列选项中不是项目特征的是( )。

A.项目具有明确的目标

B.项目具有限定的周期

C.项目可以重复进行

D.项目对资源成本具有约束性

四、问答题

1. 项目管理知识体系[《PMBOK指南》(第6版)]包括哪10个知识领域?

2. 请简述项目管理的5个过程组及其关系。

3. 项目的特征是什么? DkWSs1BnXfGILh2T5a+Wvw/OUelprbSxgaJaTkNUsEOPiXhw2c+op8n9j9rgHKye

点击中间区域
呼出菜单
上一章
目录
下一章
×