软件开发过程体现的是一种管道(Pipeline)思想,为了确保对开发的投入和产出达到平衡,必须考虑完善的资源分配策略从而确保使技术开发管理处于最优性能水平上。管道理论是一种高度抽象,代表着软件开发过程中出现不良现象的根源,这些不良现象包括各个项目和产品开展的组织瓶颈、部分团队与其他团队工作数量和饱和度不匹配所造成的浪费以及长期的为了应对各种线上问题而投入的人力物力等。

经典软件过程模型在一定程度上能够缓解这些问题,但在整个开发团队中跨项目、跨产品工作模式下,有一些问题需要我们进一步深入剖析:

  • 如何确保不同项目和产品取得进展以及如何分析它们之间的相互影响
  • 如何分析技术团队存在的瓶颈以便更好的促进团队协作
  • 如何把技术团队和其他职能部门联系起来更合理地应用开发相关资源

围绕这些问题,基于管道理论诞生了一些软件开发过程管理的方法,这些方法目前在软件开发团队中得到了广泛应用。

1. 管道管理框架

作为IPD(Integrated Product Development, 集成产品开发)的溯源,PACE(Product And Cycle-time Excellence,产品及周期优化法)第一次提出了管道管理的理念和实践方法[7],并抽象出了管道管理框架(见下图)。PACE认为管道管理通过战略平衡、管道载量和协调部门之间的交接将重要过程与各个团队之间联系起来。这里的团队包括技术、产品、项目、测试、运维等各个职能团队。

在管道管理框架中使用了几种有用的工具,包括项目进度表、管道载量曲线图与职能部门同步预算,其中管道载量对于软件开发过程影响最大,我们将重点对其展开剖析。在开发过程中,管道载量是控制和管理技术团队与其他职能团队的依据,用以确保技术团队与职能团队之间的平衡,避免产生瓶颈现象而降低整个管道的速度。

PACE认为,在软件开发过程中,存在两种不同性质的任务,即硬性任务和软性任务。所谓硬性任务是指开发过程中必须要执行的活动,一方面指与开发决策相关的看似可以省略但又必须要要的辅助活动,如产品需求规划、设计评审等;另一方面也包括整个系统实施相关的必要步骤,如发布、部署等活动。而软性任务则是那些可以拖延和重新规划的开发活动。显然,任何的产品或项目开发都是硬性任务和软性任务的结合。硬性任务通常是不可优化的,但硬性任务与软性任务的比例是优化的主要对象。在管道容量许可的前提下,通过管道的硬性任务与软性任务之间的资源比例是管理优化的关键。

我们可以使用上述硬性任务和软性任务的分类思想结合软件开发过程的特征,对两个虚拟开发团队的工作状态通过管道载量分析做一下对比。如下图所示,团队A中的仅看硬性任务安排已经长期超出团队的负载水平,更不要说再加上软性任务。这个团队倾向于是开发过程超负荷运转,因为很少有软性任务,所以的开发资源都已经投入到硬性任务开发中去。这样势必会出现开发资源更不上现象,导致各种延期。为了减低延期所带来的不良影响,只能放弃部分质量而拼命赶工,最终整个团队疲于处理各种突发状况,致使开发团队生产力下降。而对于团队B,通过分析管道负载,在硬性任务和软性任务之间取得良好的平衡。其表现形式就是计划内的硬性任务始终低于实际资源水平,需要投入大量资源的偏重于技术开发类的软性任务则远超过实际资源水平上限,但这些软性任务可以进行重新分配和推迟处理。这种针对软性任务的弹性化处理方式即可以确保管道的顺利运作,又能保持较高的生产力。

以上对硬性任务和软性任务的分析实际上也比较直接和明确,但真正要做到管道中的合理载量并不容易。硬性任务与软性任务比例受技术开发过程中的很多因素影响,包括技术体系类型、项目管理水平、团队协作模式、决策者风格等。

对于技术本身而言,创新性技术相较成熟型技术存在较多的硬性任务,为了验证新技术的有效性和应用方式,不得不做很多探索性、验证性的开发工作,这些工作都属于硬性任务,因为这些工作没有得出合理的结果往往意味着后续的软性任务无法正常展开。

项目管理水平对开发管道的管理也会有很大影响,主要体现在资源协调上。一个团队的项目管理水平越高,一般硬性任务的比例可以相对高些,因为在开发过程中出现预料之外的可能性会比较低,也就不需要处理太多软性任务所带来的不确定性。

团队协作模式对管道负载的作用主要体现在团队组织架构上,从产品、项目、技术、测试、运维这些不同角色之间的信息流转方式和同步机制,我们可以想象团队内部的协作与跨团队之间的协作势必会同时影响硬性任务和软性任务。

决策者会对团队的开发节奏施加压力,所以其管理风格同样决定管理中硬性任务和软性任务的比例。如果决策者比较强硬且对技术缺乏必要的了解,可能导致的就是上图中团队A中硬性任务已经超过团队负载的情况。显然,我们希望决策者的风格能够帮助团队形成上图中团队B的管道负载水平。

2. 管道理论与软件开发方法

对管道以及流转于其中的硬性任务和软件任务的分析,我们可以得出基本的思路就是要确保两者之间维持一种比较平衡的比例。如果我们把开发工作看成是一系列环节的组合,那么每个环节实际上就是一个管道,围绕如何控制管道中的负载和流量,从软件开发角度出发存在一些思路。

首当其冲的一条思路就是限制在制品从而控制管道瓶颈。所谓在制品(Working In Process,WIP)指的就是处在某个开发环节中但还没法流转到下一个环节的开发任务。显然,如果每一个开发环节就相当于一个管道,管道中的WIP的数量决定者整个开发流程中的瓶颈。我们可以通过任务板(Task Borad)来观察某一个环节中的WIP数量和开发成本,以及利用WIP来增加开发缓冲。

另一个思路在于我们要对每一个开发环节,也就是管道的流量做测量和管理。累计流量图(Cumulative Flow Diagram,CFD)可以帮助我们可视化管道中流量的流转情况,同时还提供了工作的平均到达速度、工作存量和交付时间。

同时,管道与管道之间需要衔接,开发任务从一个环节流转到另一个环节势必伴随着切换成本和由于等待而导致的一定程度上的浪费。价值流图(Value Stream Mapping,VSM)的作用就在于能够让我们可视化这些浪费,从而可以分析产生的原因以及获取消除浪费的方法。

以上这些思路体现在精益开发、看板方法等不同的软件开发过程模型中,目前业界把这些过程模型与Scrum和极限编程等一起并称为敏捷(Agile)方法。在后续文章中节我们将对敏捷方法的理念以及各种代表性的方法模型做全面介绍。

如果对文章感兴趣,可以关注我的微信公众号:程序员向架构师转型,或扫描下面的二维码。

我出版了《系统架构设计:程序员向架构师转型之路》、《向技术管理者转型:软件开发人员跨越行业、技术、管理的转型思维与实践》、《微服务设计原理与架构》、《微服务架构实战》等书籍,并翻译有《深入RabbitMQ》和《Spring5响应式编程实战》,欢迎交流

软件过程模型的管道理论相关推荐

  1. 软件开发模型和软件过程模型_什么是软件和软件过程?

    软件开发模型和软件过程模型 软件 (Software) Software is a set of instructions which instructs the computer for perfo ...

  2. 几种常见软件过程模型的比较

    瀑布模型 瀑布模型(经典生命周期)提出了软件开发的系统化的.顺序的方法.其流 程从用户需求规格说明开始,通过策划.建模.构建和部署的过程,最终提供一 个完整的软件并提供持续的技术支持. 优点: 1. ...

  3. 软件开发生命周期中的设计阶段_软件过程模型|如何进行团队式的软件开发?...

    0.个人与团队 看看老师给的作业要求,想想要用什么编译器什么语言编写,然后直接打开电脑开干--这几乎是我们每一个在校的计算机学生做软件开发时的常见思路.这种思路对于个人开发而言,并没有什么错误,然而当 ...

  4. 软件工程之软件过程模型

    软件过程模型 软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程.活动和任务的结构框架. 瀑布模型: 瀑布模型是将软件生存周期中的各个活动规定为依线性连接的若干阶段的模型,包括需求分析.设计. ...

  5. 读书笔记:软件工程(7) - 软件过程模型:螺旋模型、迭代开发

    螺旋模型 螺旋模型是一种演进式软件过程模型.它结合了原型的迭代性质和瀑布模型的可控制性和系统性特点.它具有快速开发越来越完善的软件版本的潜力. 螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险. ...

  6. WPF实现组态软件-逼真的管道和速度可变流体(五)

    WPF实现组态软件-逼真的管道和速度可变流体(一) WPF实现组态软件-逼真的管道和速度可变流体(二) WPF实现组态软件-逼真的管道和速度可变流体(三) WPF实现组态软件-逼真的管道和速度可变流体 ...

  7. 软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型

    文章目录 软件危机 软件的定义 软件危机典型表现 产生软件危机的原因 消除软件危机的方法 软件工程 什么是软件工程 软件工程的本质特征 软件工程的基本原理 软件工程方法学 传统方法学 面向对象方法学 ...

  8. 读书笔记:软件工程(4) - 软件过程模型:瀑布模型

    软件过程模型 为了改变软件开发的混乱状况,使软件开发更加有序. 瀑布模型 又称为经典生命周期,它提出了一个系统的,顺序的软件开发方法,从用户需求规格说明开始,通过策划,建模,构建和部署的过程,最终提供 ...

  9. 【软件工程导论】1.软件过程模型

    软件过程模型 什么是软件过程模型 包括 瀑布模型 特点 演化模型 特点 增量模型 特点 原型模型 类型 使用策略 废弃策略 追加策略 螺旋模型 特点 其他软件过程模型 喷泉模型 基于构件的开发模型 特 ...

  10. 软件定义 以及软件过程模型

    系统开发方法论 各类定义 软件定义: 计算机程序.文档,运行程序必须的数据.方法.规则.方法和规则在文档中说明,在程序中实现. 软件工程定义 把系统化.规范化.可度量的途径应用于软件开发.运行和维护过 ...

最新文章

  1. python界面设置-PYTHON图形化操作界面的编程七__创建菜单
  2. 将c程序移植到linux,各位大侠:我把原来在linux运行的c程序移植到HPUNIX上出现了错误...
  3. android 跑分,2018年10月国内Android手机安兔兔跑分性能排行榜
  4. 英特尔成立集成光电研究中心 加速光互连I/O创新
  5. AbstractQueuedSynchronizer简单理解及介绍
  6. 如何绘制高质量业务流程图
  7. 把人工智能体验做到极致,微软深挖人工情感的商机
  8. 经纬财富:十堰炒白银有哪些技巧
  9. keil中断函数的写法_中断函数写法的比较
  10. linux 没有dll文件,求助 hai.dll文件丢失 在线等
  11. 不是抽象的, 并且未覆盖Handler中的抽象方法
  12. python应用题应用背景及实际意义_课题研究的现实背景及意义
  13. 高通滤波与低通滤波的简单理解
  14. Flask数据库_filter过滤器的使用
  15. Python秒杀脚本丨淘宝或京东平台定时自动秒杀抢购脚本
  16. slxrom+v.21+原生android+4.2,小米MIX2S 魔趣OS 安卓9 MagiskV21版 完美ROOT 纯净完美 原生极简 纯净推荐...
  17. 微信自动回复小程序(有手就行)
  18. java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略
  19. 违禁词检索chrom扩展插件
  20. 【多目标跟踪指标】IDF1 与 MOTA的指标对比与图示

热门文章

  1. window10 重装后“未安装任何音频输出设备”
  2. 受益于人工智能的发展,人们可以以前所未有的时空分辨率系统地观察神经活动
  3. idea代码编辑CPU使用率飙升100%
  4. 重磅!超详细的 JS 数组方法整理出来了
  5. 8.3-8.4上海外滩迪士尼两日游
  6. PxCook 点击设计稿即可生成代码前端,高效智能的设计研发工具,智能标注软件。...
  7. 如何理解惯性问题,是物理学的大问题
  8. 自定义validation注解:解决动态多字段联动校验问题
  9. matlab中矩阵的所有元素求和,matlab 矩阵元素求和、求均值(期望)和均方差
  10. 浅谈制药企业安全供电系统的设计与应用