『软件工程4』一文了解软件项目管理中的4P

简介: 该文章讲述了软件项目管理中的四个关键要素(4P:People、Product、Process、Project)的重要性及如何在实践中应用这些要素来提高项目管理的有效性。

在日常的软件开发中,很多人可能认为只要技术实力够了,不需要任何的软件项目管理。但殊不知的是, 软件项目管理对于整个软件项目起着至关重要的作用,甚至有可能关乎到软件项目的生死存亡。一项调查显示, 70%的项目失败是由于管理不善引起的,而并不是因为技术实力不够的原因。

那在软件项目管理当中,重要的4个因素又是什么呢?

在下面的这篇文章当中,将讲解软件项目管理中的4个重要因素4P, peopleproductprocessproject

一、项目管理的重要性和定义

1、重要性(两个阶段)

(1)20世纪70年代中期

①70%的项目失败是由于管理不善引起的,而并不是因为技术实力不够;

管理是影响软件研发项目全局的因素,而技术只影响局部的因素。

(2)20世纪90年代中期

美国软件工程实施现状的调查:

10%的项目能够在预定的费用和进度下交付;

软件项目管理成为软件项目开发中最重要的核心问题之一。

2、软件项目管理的定义

(1)定义

软件项目管理是为了使软件项目能够顺利完成,而对成本人员进度质量风险等进行分析和管理的活动。

(2)对象

软件工程项目,它所涉及的范围覆盖了整个软件工程过程。

(3)何时(即什么时候做项目管理)

这种管理在技术工作开始之前就应开始,在软件从概念到实现的过程中继续进行,当软件工程过程最后结束时才终止

二、管理四要素4P

1、管理的四要素(4P)

  • 人员People —— 成功项目的重要因素;
  • 产品Product —— 要开发的软件;
  • 过程Process —— 软件工程的框架活动,包含了任务、里程碑、工作产品以及质量保证点;
  • 项目Project —— 开发软件所需要的所有工作

2、软件项目中影响最终结果的要素

  • 规模
  • 提交的期限
  • 预算和代价
  • 应用领域
  • 运用的技术
  • 系统约束
  • 用户需求
  • 可提供的资源

3、项目管理关心的问题

  • 产品的质量
  • 风险的识别和管理
  • 度量
  • 代价估算
  • 项目进度
  • 和客户交流
  • 项目成员
  • 其他资源
  • 项目监控

PS: 以下将对4P的内容进行详细分析。

三、项目参与者类型(people)

项目参与者类型一般包括以下几类:

  • 高级管理者:负责定义业务问题;
  • 项目(技术)管理者:必须计划、激励、组织和控制软件开发人员;
  • 开发人员:负责开发一个产品或应用所需的专门技术;
  • 客户:负责说明待开发软件相关需求的人以及其他风险承担者;
  • 最终用户:一旦软件发布成为产品,最终用户是直接与软件进行交互的人

总结:
①高级管理者,即定义业务问题的人;
②项目管理者,即管理软件开发的人;
③开发人员,即应用技术开发软件的人;
④客户,即提出软件需求,并承担一定风险的人;
⑤最终用户,即与软件交互的人。

四、项目小组结构(people)

1、项目的三种一般小组组织形式

(1)民主分散式(Democratic Decentralized, DD)

(2)控制分散式(Controlled Decentralized, CD)

(3)控制集中式(Controlled Centralized, CC)

2、关于小组结构的说明

(1)DD(民主分散式):没有固定的负责人,适合难度比较高、交付期限很长及生存期较长的项目,最适合于解决模块化程度比较低的问题,因为需要通信;

通俗来说:没有负责人,只有水平通信,成员之间需要广泛的两两交流。

(2)CD(控制分散式):有一个固定的负责人,若有子负责人,子负责人和总负责人的通信是垂直的,而个人间的通信是水平的,适合交付期限较长、比较简单的项目;

通俗来说:有固定负责人,成员之间需要交流,成员与负责人之间也需要交流;若有子负责人,成员跟子负责交流,子负责人跟总负责交流。

(3)CC(控制集中式):负责人和小组成员之间的通信是垂直的,适合解决交付期限比较严格的、简单的、模块化程度高的项目

通俗来说:有固定负责人,成员之间不沟通,只跟上级沟通。

:CD和CC两种结构都需要有一个固定的负责人,而DD不用;且会比DD产生更少的缺陷。

3、项目小组人员间的通信路径

项目小组人员间的通信路径
从上图中可以看出,项目小组人数越多,通信路径越多。
通信路径计算公式为
C n 2 = n ( n − 1 ) 2 , n 表 示 水 平 通 信 成 员 间 的 人 数 C_n^2=\frac{n(n-1)}{2} ,n表示水平通信成员间的人数 Cn2​\=2n(n−1)​,n表示水平通信成员间的人数

4、小组结构的选择需考虑的因素

对于一个小组来说,选择一个合适的结构需考虑以下因素:

  • 待解决软件项目的困难程度
  • 产生的程序规模,以代码行或者功能点来衡量;
  • 小组成员需要共同工作的时间(小组生存期);
  • 项目所需要的通信的程度
  • 问题能够被模块化的程度
  • 待建造系统所要求的质量和可靠性
  • 交付日期的严格程度

5、思考题

Q1:某公司有21名员工,请问分别按DD、CD、CC方式来进行组织结构的划分,各自会产生多少条的通信路径?假设在CD和CC方式下被分成四组,画出大概的组织结构图。

A1

思考题解答
下面给出无子负责人有子负责人的框架图:

无子负责人
有子负责人
写到这里,不妨再思考下,在CD和CC方式下被分成五组,有多少条通信路径?组织架构又是怎么样的呢?
评论区留下你的答案~

五、软件范围及问题分解(product)

1、预告

在开始进行一个项目之前,应该了解些什么呢?

1在进行项目计划之前,软件开发者和客户必须一起定义产品的目的和范围,考虑可选的解决方案,标识技术和管理的约束;

2)没有这些信息,就不可能进行合理的(准确的)成本估算、有效的风险评估、适当的项目任务划分或是可管理的项目进度安排

3)软件范围是软件项目管理的第一个活动。

通过下面一张图来加深对软件范围的理解。

软件范围

圆圈里的内容即软件范围,确定该项目要做什么;那么不在圈子里面的,就先抛开,也就是说,不该做的内容先不要做。

2、软件范围的确定(划定问题的边界)

1)语境;

2)信息目标;

3)功能和性能

3、问题分解(确定各部分的功能)

1)分而治之;

2)估算开始之前,范围中所描述的软件功能必须被评估和细化,以提供更多的细节。因为成本和进度的估算都是面向功能的,所以某种程度的分解通常是很有用的。

六、过程(process)

1、一般性阶段

1)软件过程的一般性阶段(定义、开发和支持)适用于所有软件项目;

2)问题在于选择一个适合项目组所要开发软件的过程模型。

回顾下上一篇文章提到过的过程模型:

  • 线性顺序模型(瀑布模型)
  • V模型
  • 原型实现模型
  • RAD模型
  • 增量模型
  • 螺旋模型
  • 形式化方法模型

2、选择过程模型阶段

项目管理者必须决定哪一个过程模型最适合用在此项目,因此在选择过程模型时需考虑以下因素:

1)需要该产品的客户和将做此工作的人员;

2)产品本身的特征;

3)软件项目组工作的项目环境。

3、已确定过程模型阶段

1)当一个过程模型被选定时,项目组基于通用过程框架活动集合,定义一个初步的计划;

2)一旦建立了初步的计划,便可以开始进行过程分解,即必须建立一个完整的计划以反映框架活动中所需要的工作任务

3)工作任务必须针对项目的特定需要进行适应性修改;且框架活动总是一样的,但工作任务则要根据一系列的适应性标准来选择。

七、产品和过程的二元性(product and process)

产品和过程的二元性
从上图中可以看出,横向坐标表示过程,纵向坐标表示产品,也就是说,每一个产品都有它对应的一系列过程。所以,在一个项目中,产品和过程都一样重要,缺了谁都不行,这也就体现了产品和过程的二元性

八、项目的5W2H原则(project)

项目的5W2H原则包含以下几点:

  • WHY —— 为什么(Why)该系统被开发?(业务目的
  • WHAT —— 将做什么(What)?(项目任务
  • WHEN —— 什么时候(When)做?(里程碑
  • WHO —— 某功能由谁(Who)负责?(角色和责任
  • WHERE —— 他们的机构组织位于何处(Where)?(角色责任界定
  • HOW —— 工作将如何(How)被技术和管理地进行?(管理和技术策略
  • HOW MUCH —— 每种资源需要多少(How much)?(资源分配

九、写在最后——think more

看完上面文章内容后,不妨试问下自己以下问题:

分析如下具体项目情况,选择合适的团队结构(CC、CD、DD)及软件过程模型,并分析原因。

Q1:在一个信息系统组织中,你被指派为项目经理。你的工作是开发一个应用程序,该程序类似于你的团队以前已经做过的某个项目,只是规模更大而且更复杂一些。需求已经由用户写成文档。

Q2:你被指派为一个小型软件产品公司的项目经理。你的工作是开发一个有突破性的产品,该产品结合了虚拟现实的硬件和高超的软件。因为家庭娱乐市场的竞争非常激烈,完成这项工作的压力很大。

Q3:你被指派为一个大型软件产品公司的项目经理。你的工作是管理该公司已被广泛使用的字处理软件的新版本的开发。因为必须获得新的收益,已经规定了紧迫的最后期限并对外公布。

Q4:在一个为遗传工程领域服务的公司中,你被指派为项目经理。你的工作是管理一个软件新产品的开发,该产品能够加速基因分解的速度。这项工作是面向研究及开发的,但其目标是在下一年度内生产出产品。

评论区留下你的答案٩(๑❛ᴗ❛๑)۶

PS 本文篇幅较长,有不理解或者有误的地方欢迎私聊或加我微信 MondayLaboratory 交流~

  • 公众号:星期一研究室
  • 微信:MondayLaboratory

如果这篇文章对你有帮助,记得留下star哦~

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2506 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
530 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
458 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
354 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。