当前位置: 首页 > news >正文

[项目管理-20]:流水线pipeline与项目管理

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:


目录

第1章 什么是流水线pipeline技术

1.1 工业流水线的思路

1.2 CPU执行指令的流水线技术

第2章 流水线与软件开发流程

2.1 软件开发过程的划分

2.2 传统的非流水线的软件开发模式:瀑布式开发

2.3 敏捷开发模式:流水线开发

第3章 流水线与项目管理

第1章 什么是流水线pipeline技术

1.1 工业流水线的思路

先以汽车装配为例来解释流水线的工作方式。假设装配一辆汽车需要4个步骤:

1.冲压:制作车身外壳和底盘等部件;

2.焊接:将冲压成形后的各部件焊接成车身;

3.涂装:将车身等主要部件清洗、化学处理、打磨、喷漆和烘干;

4.总装:将各部件(包括发动机和向外采购的零部件)组装成车;

同时对应地需要冲压、焊接、涂装和总装四个工人。

如果不采用流水线,那么第一辆汽车依次经过上述四个步骤装配完成之后,下一辆汽车才开始进行装配,最早期的工业制造就是采用的这种原始的方式。未采用流水线的原始制造方式,同一时刻只有一辆汽车在装配。不久之后就发现,某个时段中一辆汽车在进行装配时,其它三个工人处于闲置状态,显然这是对资源的极大浪费。

于是开始思考能有效利用资源的方法:在第一辆汽车经过冲压进入焊接工序的时候,立刻开始进行第二辆汽车的冲压,而不是等到第一辆汽车经过全部四个工序后才开始。之后的每一辆汽车都是在前一辆冲压完毕后立刻进入冲压工序,这样在后续生产中就能够保证四个工人一直处于运行状态,不会造成人员的闲置。这样的生产方式就好似流水川流不息,因此被称为流水线。

采用流水线的制造方式,同一时刻四辆汽车在装配。

1.2 CPU执行指令的流水线技术

 流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。

流水线是Intel首次在486芯片中开始使用的。

在CPU中由5—6个不同功能电路单元组成一条指令处理流水线,然后将一条指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。

经典奔腾每条整数流水线都分为四级流水,即取指令、译码、执行、写回结果。浮点流水又分为八级流水。

如果没有流水线,则必须操作完一个完整的指令后,才能操作下一条指令,在取指令时,其他单元是空闲的,同理,在执行指令时,译码和回写单元是空闲的,这就是资源的浪费。

采用流水线技术,可以把执行指令分成n道流水线步骤,这样可以并行地操作多条指令,在执行A指令时,就可以译码B指令,同时取C指令,这样可以提升CPU执行指令的效率。

CPU的工作也可以大致分为指令的获取、解码、运算和结果的写入四个步骤,采用流水线设计之后,指令(好比待装配的汽车)就可以连续不断地进行处理。在同一个较长的时间段内,显然拥有流水线设计的CPU能够处理更多的指令。

第2章 流水线与软件开发流程

2.1 软件开发过程的划分

把软件的开发过程分如下的一些步骤:

  • 可行性调研
  • 需求调研
  • 竞品分析
  • 产品设计
  • 需求评审
  • 用例设计
  • 原型评审
  • 设计评审
  • 研发需求确认
  • TC评审
  • 研发排期(表结构设计、开发接口、合并代码、自测、联调、部署)
  • 功能验收
  • 产品推广
  • 部署交付

软件的功能特征的开发步骤,类似于CPU执行指令的步骤,类似安装汽车的步骤。

软件的功能特征,类似与CPU执行的一个个指令,类似与产线上的一台台汽车。

每个环境的功能和开发人员,相当于执行单元:取指令单元、解码指令单元、执行指令单元等等。

如何进行软件功能的开发就存在两种思路:

(1)传统的串行模式

(2)最新的敏捷模式

2.2 传统的非流水线的软件开发模式:瀑布式开发

在瀑布开发模式下,软件开发过程是串行的。

在计划阶段,为所有N个功能统一计划。

在需求分析阶段,为所有N个功能进行需求分析,之后全部完成,才能进入下一个阶段。

在设计阶段也是如此,最后,所有的N个功能都通过测试,才能进入运行维护。

2.3 敏捷开发模式:流水线开发

敏捷开发模式,把个复杂的功能需求,分解成一个个独立的子功能需求,每个只功能需求独立开发。且子功能需求之间,各种独立,且并行开发。类似与CPU的流水线。

这样,软件的功能生产就是按照流水线的方式进行,每天都有新的小的功能增量。如下图所示。

迭代任务:就是一个个 独立的指令,就是一个个小的、可执行的功能。

开发、测试、发布,就是一个个CPU内部的功能单元。

可工作软件,就是一个个CPU执行指令的结果。

在上图中,迭代周期是一周,也就是说,每一周,都有一部分输出。

这样,就持续不断的有新的功能产生,如下图所示。

并行执行(开发)任务/功能特征的个数取决于如下几个因素:

(1)开发流程被切分的步骤:

在每个步骤处理能力一定的情况下,子步骤越多,并行执行的子任务就越多。

(2)每个步骤的处理能力:

在子步骤数量确定的情况下,每个步骤处理的子任务越多(开发团队的数量),并行执行的任务越多。

第3章 流水线与项目管理

在流水线软件开发过程的基础之上,再进一步对项目管理的其他活动进行流水线划分

这就是流水线项目管理。流水线项目管理中,涉及到如下的因素

(1)把软件开发过程按照时间或逻辑的先后顺序分成一个个可以独立实施步骤。

(2)把大型的软件功能,拆分成一个个在2周内可以完成的task

(3)把软件项目管理过程按照时间或逻辑的先后顺序分成一个个可以独立实施步骤。

(4)复杂的项目管理活动,拆分成一个个在2周内可以完成的task。

(5)无论是拆分这个动作、还是最终的软件功能活动,还是项目管理活动,都需要人来完成,就相当于CPU某个执行单元。

(6)人与CPU执行单元不同的是:

  • “人”在项目中的可用性,并不是项目所决定的,而是有职能部门所决定的。
  • ”人“同时为多个项目提供支持,因此,一个项目必须提前N个迭代周期与职能部门对所需要的人力资源进行预约。如果在期望的时间内,无法提供可用的人力资源(包括项目管理人员和软件开发人员),进入流水线管道的task就会受阻。
  • 提前预约,提取申请人力资源,管道式项目管理必须正视的因素,这是影响项目流水线执行的最重要的因素。
  • 只有预先分配资源,项目流水线才能畅通无阻的运行起来。
  • 只有有了人,才能执行项目管理活动,才能对复杂软件的功能呢进行切分,只有有了人,才能持续不断的发布的子功能。没有人,整个流水线都会停止。

如下是项目流水线 pipeline backlog的案例:

相关文章:

  • Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
  • Spring中@Value的三种使用方式
  • 诚信型性格分析,诚信型人格的职业发展
  • Python常考面试题汇总
  • 均薪36W还缺人,DFT工程师到底有多重要?
  • mybatis-plus实现多租户Saas
  • 使用Python以UCI心脏病数据集为例,进行数据简单分析
  • URL编码解码详解
  • win10+ubuntu双系统下载ubuntu方法(卸载系统不完整会进入grub)
  • Spring事务传播机制
  • 实现深度理解函数指针
  • C/C++常用预编译指令介绍
  • 杰理强制升级工具4.0使用和原理解析
  • Vue3介绍和安装
  • Linux命令--权限(chmod、chown)--使用/实例
  • 5、React组件事件详解
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • echarts花样作死的坑
  • Fundebug计费标准解释:事件数是如何定义的?
  • JS学习笔记——闭包
  • PAT A1050
  • React Native移动开发实战-3-实现页面间的数据传递
  • React-生命周期杂记
  • 百度小程序遇到的问题
  • 创建一个Struts2项目maven 方式
  • 从伪并行的 Python 多线程说起
  • 大主子表关联的性能优化方法
  • 力扣(LeetCode)21
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 使用 Xcode 的 Target 区分开发和生产环境
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​什么是bug?bug的源头在哪里?
  • (4)Elastix图像配准:3D图像
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (已解决)什么是vue导航守卫
  • (转)http-server应用
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .dwp和.webpart的区别
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net6+aspose.words导出word并转pdf
  • .Net多线程总结
  • .net流程开发平台的一些难点(1)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • :中兴通讯为何成功
  • @PreAuthorize注解
  • @RequestBody与@ModelAttribute
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [20150707]外部表与rowid.txt
  • [Android]竖直滑动选择器WheelView的实现