软件项目管理中的4P

  • 一、项目管理的重要性和定义
    • 1、重要性(两个阶段)
    • 2、软件项目管理的定义
  • 二、管理四要素4P
    • 1、管理的四要素(4P)
    • 2、软件项目中影响最终结果的要素
    • 3、项目管理关心的问题
  • 三、项目参与者类型(people)
  • 四、项目小组结构(people)
    • 1、项目的三种一般小组组织形式
    • 2、关于小组结构的说明
    • 3、项目小组人员间的通信路径
    • 4、小组结构的选择需考虑的因素
    • 5、思考题
  • 五、软件范围及问题分解(product)
    • 1、预告
    • 2、软件范围的确定(划定问题的边界)
    • 3、问题分解(确定各部分的功能)
  • 六、过程(process)
    • 1、一般性阶段
    • 2、选择过程模型阶段
    • 3、已确定过程模型阶段
  • 七、产品和过程的二元性(product and process)
  • 八、项目的5W2H原则(project)
  • 九、写在最后——think more

在日常的软件开发中,很多人可能认为只要技术实力够了,不需要任何的软件项目管理。但殊不知的是, 软件项目管理对于整个软件项目起着至关重要的作用,甚至有可能关乎到软件项目的生死存亡。一项调查显示, 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、项目小组人员间的通信路径


从上图中可以看出,项目小组人数越多,通信路径越多。
通信路径计算公式为
Cn2=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哦~

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

  1. 浅析软件项目管理中十个误区(来自:http://manager.csdn.net/n/20051213/30907.html)

    随着计算机硬件水平的不断提高,计算机软件的规模和复杂度也随之增加.计算机软件开发从"个人英雄"时代向团队时代迈进,计算机软件项目的管理也从"作坊式"管理向&qu ...

  2. 《系统集成项目管理工程师》必背100个知识点-80项目变更管理在软件项目管理中的主要活动内容...

    项目变更管理在软件项目管理中的主要活动内容? (1)识别可能发生的变更: (2)管理每个己识别的变更: (3)维持所有基线的完整性: (4)根据已批准的变更,更新相关要求,协调雄体项目内的变更: (5 ...

  3. 变更管理在软件项目管理中的主要活动

    变更管理在软件项目管理中的主要活动内容: 建立基线.变更控制系统和变更控制流程 识别变更,并以书面格式提出变更请求 CCB审查变更请求 CCB批准或者否决变更 将批准的变更纳入项目管理计划中 实施被批 ...

  4. 『软件工程9』结构化系统分析——解决软件“做什么”问题

    结构化系统分析--解决软件"做什么"问题 一.系统分析的任务和过程 1.系统分析的任务 2.系统分析的过程 (1)问题识别 (2)分析与综合 (3)编制文档 (4)系统分析评审 二 ...

  5. 『软件工程6』详解软件项目管理之软件范围与估算

    软件项目管理--软件范围与估算 一.软件项目计划 1.目标 2.步骤 二.软件范围 1.软件范围定义 2.软件范围--引例 三.影响估算的因素 四.软件项目资源 1.软件项目资源构成 2.分析图 3. ...

  6. 『软件工程1』详解软件是什么

    软件基本概念 一.什么是产品 二.软件的双重角色 三.软件的涵义及特征 四.软件应用 五.软件危机 六.软件神话 一.什么是产品 1.从用户的角度 产品实际上就是信息,以某种方式使得用户世界更加美好 ...

  7. 『软件工程2』详解软件工程和软件过程模型

    文章目录 一.软件工程的定义 1.Fritz Bauer在NATO上给出的定义 2.Barry Boehm 3.IEEE在软件工程术语汇编中的定义 二.软件工程的层次 1.软件工程三个要素 2.软件工 ...

  8. 『软件工程13』浅谈面向对象方法,统一建模语言UML

    浅谈面向对象方法UML 一.UML的含义 二.UML的主要内容 1.UML的概念模型 2.UML概念模型图例 三.UML的基本构造块 1.UML中的事物 (1)UML中的四种事物 (2)UML中各种事 ...

  9. 【软件工程】五、面向对象方法学 软件项目管理

    一.面向对象方法学引论 面向对象技术已经成为目前最好的软件开发技术. 面向对象方法学 = 对象+类+继承+消息(选.填) 对象抽象出共同特征就是类,类的实例就是对象. 继承是继承父类原本就拥有的属性和 ...

最新文章

  1. python怎么画简单图片-python中简单易学的绘图:用turtle画太极图
  2. VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)
  3. 线段树之延时标记(区间修改)及lazy思想
  4. Java 8:在新的Nashorn JS引擎中编译Lambda表达式
  5. 区块链以信用为基础,所以目前在中国不可行.
  6. linux 修改消息队列大小
  7. php携程语比,PHP 协程
  8. 碎裂效果尝试(clip-path篇)
  9. 8种寻找机器学习数据集的方法 | 附数据集资源
  10. UVA 847 - A Multiplication Game(游戏)
  11. leetcode 979. 在二叉树中分配硬币
  12. C#-Windows计算器
  13. 新概念第三册背诵: Lesson 1 - A Puma at large
  14. SAR图像:拟合杂波时常用的分布
  15. 【历史上的今天】9 月 3 日:谷歌发布 Android 10;微软收购诺基亚;eBay 诞生
  16. jS 清除form表单
  17. (小知识点) textview.setBackground不起作用
  18. SDNU_ACM_ICPC_2020_Winter_Practice_2nd C 离散化, lower_bound
  19. 要考驾照科目二了,好紧张
  20. 中国itunes ip 记录

热门文章

  1. 【MATLAB统计分析与应用100例】案例008:调用rand函数生成均匀分布随机数
  2. C# 的扩展方法在 LINQ 中实现数组排序
  3. 华为云GaussDB,11.11让企业无后顾之忧
  4. IOS学习笔记七之KVC和Key路径
  5. linux c之assert函数使用总结
  6. Linux之软连接和硬链接
  7. Android之Volley 源码解析
  8. android log.d 格式化,android – 在我的代码中使用Log.d()或Log.e()
  9. layui 数字步进器_图解全新奔驰S级:从“传统豪华”向“数字豪华”转型
  10. centos静默安装oracle关于报错UnsatisfiedLinkError exception loading native library:njni10