《A++ 敏捷开发》- 10 二八原则

团队成员协作,利用项目数据,分析根本原因,制定纠正措施,并立马尝试,判断是否有效,是改善的“基本功”。10-12章会探索里面的注意事项,13章会看两家公司的实施情况和常见问题。

如果已经获得高层支持,她也赞同目前返工工作量太多并愿意投入资源进行过程改进,我们首先应该针对哪些方面进行改进呢?

软件开发的特点是,超过95%的成本都是人力成本。因此,我建议利用二八(20/80)原则,继续识别哪类工作的占比最高(详见附件)。

请把过去一年的软件开发项目,按照不同工种占项目总工作量的比例,从多到少排个序。
  1. 编码与代码设计。
  2. 交付后的所有工作,包括维护、更新与缺陷修正。
  3. 交付前的评审,静态扫描,测试与缺陷修正。
  4. 项目管理与监控。

可以参考软件开发度量专家卡铂斯•琼斯 (Capers Jones) 先生在2012年的研究(详见附件中的“开发项目工作量(成本)分布”),看看你的选择与典型分布有多大差距。
软件开发项目最大的工作量通常是花在找出与修正缺陷上(开发里的“测试与评审”),Capers Jones 发现,对于一个超过10,000个功能点、计划使用25年的大型系统来说,有接近一半的工作量是与找出并修正缺陷相关。
很多项目中的缺陷大部分还是到后期才发现,这导致了大量返工。如果能提前发现并解决这些缺陷,就可以大大降低研发成本(不仅仅是提升产品质量)。
对于一个软件项目来说,发现缺陷最多的是在系统测试阶段,其次是在验收测试阶段(很多公司都是如此):

微信截图 20231023085822.png

但很多开发人员误以为编码是项目的主要工作,却忽视了大量因质量问题引起的返工。所以,只有当管理层意识到尽早发现并排除缺陷的重要性并引起重视,公司才有机会改进。

有些偏业务的领导可能会质疑,客户不一定关注缺陷密度,只要达到可接受的水平就可以了。

我解释:“在软件开发中,减少后期测试才发现的缺陷,不仅仅能提升产品质量,更重要的是能降低研发的总工作量,所以最终能帮助公司省钱,减少开发人员加班。”(详见附件“公司高层不一定关注质量”)

怎样开始

没有度量便无法谈改进,所以应先考虑如何采集修复缺陷相关的数据。然而,在探索数据收集与分析之前,我们更需要先确定度量分析的策略。

但在探索数据收集与分析之前,我们更需要先想好度量分析的策略。

请问你会使用以下哪种度量分析策略?

Diagram 2.0.png

A:由公司的过程改进组(EPG)专员设计并执行过程改进的度量计划,包括收集哪些数据、如何收集以及如何分析。然后按计划收集各项目团队的数据,进行总体分析,并制定公司的改进方案。

B:将数据收集与分析的任务下放到各团队,让团队制定自己的改进方案。

如果你认为度量与分析需要专业知识,要由专人来做,就请选择A,并考虑以下几点:

  1. 提供数据的人需要很长时间才能收到反馈。例如,从团队成员提交里程碑数据,到项目经理填报,再由度量分析人员收集、整理多个项目的数据,可能需要一到两个月时间。再经过数据分析,管理层评审,最终到团队成员收到反馈可能共两三个月。由于每位提供数据者都希望尽快得到反馈,如果反馈的时间很长,那么团队成员还会有动力继续收集数据吗?缺乏动力还会引发其他问题。
  2. 无法确保数据的准确性,导致分析没有意义。如果这些指标用于公司考核KPI,情况会更糟。度量分析人员需要什么数据,提供数据的人都会按理想的指标填写,反正公司级的总体分析人员也无法验证数据的准确性。
  3. 假定各项目的特性或问题根因都是类似的。
与某质量部经理的对话:

经理:从去年开始我们进行度量分析以来,就发现员工会对数据造假,导致结果失真。度量什么,他们就造假什么,所以我们想通过工具代替人工,不仅能提升效率,还能帮助判断数据是否合理。现在我们的主管很反感度量,因为每次度量就会有人造假——大家了解算法原理后,就开始造假。比如我们搞了红黑榜,但很多人聪明得很,就会想办法作弊。我们有很多数据统计分析,比如看测试用例与需求的比例。尽管客户发现的缺陷比例降低了,但由于我们对质量特别注重,产品经过多年的逐步演化,过程很复杂,导致软件缺陷的修复很耗时,客户不太满意。而且公司要求交付的频率要比以前高了很多,我们团队做这些分析都忙不过来,所以希望利用自动化工具加快速度。
我:除了数据收集问题,你们这种总体分析策略可能还有另一个问题:没有考虑各个项目的特性并不一样。现在你们对几十个项目的总体趋势进行分析,但每个项目的根本原因很可能不同。比如,同样是测试用例比例数,你们采集的数据范围从最低的0.3到最高的超过200,但你们取平均值5.1来做分析。

但如果把数据分析下放到团队自己做,便灵活多了;也正因为他们有参与收集和分析讨论,过程改进组便可以节省很多沟通(数据收集)成本与失真。反而应该重新定位自己是内部老师,辅导团队怎么做好数据分析,效果会更好。
你可能疑问:“团队自己讨论便可以得到改进吗?不需要领导监督?”
如果团队有能力,就应该放手让他们自己收集数据、利用数据进行分析并做出改进。质量经理应把自己重新定位为团队的教练,去辅导他们如何收集与分析数据。千万不要以为这项工作会比以前自己做分析更轻松,其实需要更熟悉整个过程,才能真正辅导好团队。要公司从定性管理提升到定量管理,最大的挑战并非数据分析,反而是要让管理层了解并赞同需要让团队自主分析数据,自己寻找纠正措施。

下一章会继续探索团队协作与分析根因;团队如何利用迭代冲刺数据,在敏捷冲刺回顾,做好根因分析,得到提升。

附件

二八原则(80/20)

帕里托(Pareto) ,16世纪意大利威尼斯人,他发现虽然威尼斯很富有,但财富并非平均分布,80%财富在20%手里,他也发现很多其他分布都非平均。

ToolsParetoScreenshot 2023-06-02 191628.jpg

因为过程改进需要公司额外的资源投入,必须有针对性地找出最容易取得改进效果的原因,才可能拥有最大的成功机会。所以,应该利用二八原则去识别影响最大的几个因素. 以上图为例,原本A类问题出现最多,针对这类问题做过程改进之后, A类问题就少了很多,下一轮便应针对最多的B类问题做改进。
有些人以为,只需要对某个维度做分析即可,并没有从多个维度进行分析。例如,某纸制产品工厂会计数据显示,8成的产品问题相关成本都归属于5类。

例如,某纸制产品工厂会计数据显示,因纸质量问题被客户退货类的损失最大,共5560千美元,占总损失的61%。针对这类损失,发现里面八成是由6个产品引起(共有53个产品),共4480千美元,占5560的 80%。针对这6个产品把损失按缺陷种类细分,发现B产品容易断裂缺陷(Tear)的占比最高,612千美元,我们就应该针对这一问题研究如何改善。

162页替换图片.png

开发项目工作量(成本)分布

参考Capers Jones先生2012的例子,汇总成以下比例:

AR1成本占比.jpg

测试与评审一般占开发工作量的30%,测试与评审一般占总质量成本(包括发布后维护与改缺陷工作)的66%,把所有工作量都加起来,测试与评审还是占最大(26%),编码第二 (22%)。

注意:测试与评审包括所有与缺陷相关的成本,包括单元测试、静态扫描、评审与相关的缺陷修正,而编码只包括设计与编写代码部分。例如有些人会觉得比例应该是开发30%,测试和Bug修改25%,需求和设计20%,项目管理和沟通20%,文档5%。但如果按上面的定义,开发部分很可能已包括单元测试、静态扫描与改正缺陷工作,如把这些都归到测试评审里会变回类似上图的比例。

公司高层不一定关注质量

Q&A

:在传统 IT的 公司,无论是 缺陷(Bug) 率还是其他质量指标对业务的影响的相关性都不容易度量,只有重大事件才会让公司在客户面前失去信任,所以高层不会真正的重视质量。
:理解,但软件BUG的暴露越往后,返工的工作量就越高,而且是几何级数的增加(例如在单元测试或评审发现都可以1人时内解决;系统测试通常要花起码20人时,客户使用后才发现便更高)。但在很多IT公司,大部分缺陷都是在系统测试、甚至到验收测试才发现。如果能把软件缺陷的发现前移,把通过系统测试、验收测试发现的缺陷减半,便可以大量降低质量成本,提升开发生产率。所以我建议利用缺陷数估算返工的工作量来引起老板重视。(而不是仅仅说降低缺陷率)

MGR f1.1.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linq的常用方法

LINQ(Language Integrated Query)是.NET Framework中用于数据查询的组件,它将查询功能集成到C#等.NET语言中。LINQ提供了丰富的查询操作符,这些操作符可以应用于各种数据源,如内存中的集合、数据库、XML等。以下是一些…

java中的String 以及其方法(超详细!!!)

文章目录 一、String类型是什么String不可变的原因(经典面试题)String不可变的好处 二、String的常用构造形式1.使用常量串构造2.使用newString对象构造3.字符串数组构造 三、常用方法1. length() 获取字符串的长度2. charAt() 获取字符串中指定字符的值 (代码单元)3. codePoin…

水的几个科学问题及引发的思考

水的几个科学问题及引发的思考 两个相同的容器A和B,分别装有同质量的水,然后,在A容器中加入水,在B容器中加入冰,如果加入水和冰的质量相同。问,容器B的水位将与容器A的水位相同吗(假设冰未融化时…

Log4j的原理及应用详解(二)

本系列文章简介: 在软件开发的广阔领域中,日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程,还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂,对日志管理的需求也日…

MySQL和SQlServer的区别

MySQL和SQlServer的区别 说明:在一些常用的SQL语句中,MySQL和SQLServer存在有一些区别,后续我也会将我遇到的不同点持续更新在这篇博客中。 1. 获取当前时间 SQLServer: -- SQLServer -- 1.获取当前时间 SELECT GETDATE(); --…

Vue2切换图片小案例

代码中 v-show "index>0",是表示下标只有大于零时上一页按钮才会显示v-show "index<list.length-1",是表示下标只有小于list数组的最大值才会显示&#xff0c;反之隐藏。click "index--"和click "index",是点击按钮后加减数…

【ZooKeeper学习笔记】

1. ZooKeeper基本概念 Zookeeper官网&#xff1a;https://zookeeper.apache.org/index.html Zookeeper是Apache Hadoop项目中的一个子项目&#xff0c;是一个树形目录服务Zookeeper翻译过来就是动物园管理员&#xff0c;用来管理Hadoop&#xff08;大象&#xff09;、Hive&…

AR0132AT 1/3 英寸 CMOS 数字图像传感器可提供百万像素 HDR 图像处理(器件编号包含:AR0132AT6R、AR0132AT6C)

AR0132AT 1/3 英寸 CMOS 数字图像传感器&#xff0c;带 1280H x 960V 有效像素阵列。它能在线性或高动态模式下捕捉图像&#xff0c;且带有卷帘快门读取。它包含了多种复杂的摄像功能&#xff0c;如自动曝光控制、开窗&#xff0c;以及视频和单帧模式。它适用于低光度和高动态范…

QML界面控件加载与显示顺序

一、QML界面控件加载顺序 QML在界面加载时的顺序和我们认知的有很大的不同&#xff0c;有时候会对我们获取参数以及界面实现造成很大的困扰 1、加载顺序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …

Open3D点云算法与点云深度学习案例汇总(长期更新)

目录 引言 Open3D算法汇总 Open3D快速安装 测试点云资料 一、点云的读写与显示 二、KD tree和八叉树的应用 三、点云特征提取 四、点云滤波算法 五、点云配准算法 六、点云分割算法&#xff08;待更新&#xff09; 七、常用操作 八、数据转换 九、常用小工具 三维…

交换机的二三层原理

相同VLAN的交换机交换原理&#xff08;二层交换原理&#xff09;&#xff1a; 交换机收到数据帧&#xff0c;首先会检查数据帧的VLAN标签和目标MAC&#xff0c;若属于相同VLAN&#xff0c;且该目标MAC在本地MAC表中&#xff0c;则直接根据出接口进行数据转发 不同VLAN的交换机…

九盾安防:如何调控叉车限速器的报警速度呢

在繁忙的物流仓储和制造业环境中&#xff0c;叉车是不可或缺的搬运设备。然而&#xff0c;其高速行驶也带来了潜在的安全隐患。为了确保作业人员和货物的安全&#xff0c;又车限速器的设置显得尤为关键。那么&#xff0c;如何调控叉车限速器的报警速度呢? 叉车限速器的速度调整…

复制vmware虚拟机文件并改名(文件名使用python替换)得到一台新的虚拟机

文章目录 需求实验复制文件夹并重命名使用python将所有文件名“WinSer2022”字符替换成“wingetmac”修改虚拟机配置文件&#xff08;.vmx&#xff09;打开新的虚拟机成功 需求 将已有的Winser2022虚拟机复制成wingetmac并开机 实验 复制文件夹并重命名 将"WinSer2022…

《人生苦短,我用python·九》python之线程池ThreadPoolExecutor的使用

Python线程池是一种管理和使用线程的高级抽象&#xff0c;使得线程的创建、分配和管理更加方便。通过线程池&#xff0c;可以避免频繁地创建和销毁线程&#xff0c;从而提高程序的性能。Python的concurrent.futures模块提供了一个ThreadPoolExecutor类&#xff0c;可以方便地使…

了解并缓解 IP 欺骗攻击

欺骗是黑客用来未经授权访问计算机或网络的一种网络攻击&#xff0c;IP 欺骗是其他欺骗方法中最常见的欺骗类型。通过 IP 欺骗&#xff0c;攻击者可以隐藏 IP 数据包的真实来源&#xff0c;使攻击来源难以知晓。一旦访问网络或设备/主机&#xff0c;网络犯罪分子通常会挖掘其中…

1559. 二维网格图中探测环

1559. 二维网格图中探测环 给你一个二维字符网格数组 grid &#xff0c;大小为 m x n &#xff0c;你需要检查 grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子&#xff0c;你可以移动到它上、下、左、右…

【Qt 初识】QPushButton 的详解以及 Qt 中的坐标

文章目录 1. Qt 中的信号槽机制 &#x1f34e;2. 通过图形化界面的方式实现 &#x1f34e;3. 通过纯代码的方式实现按钮版的HelloWorld &#x1f34e;4. 设置坐标 &#x1f34e; 1. Qt 中的信号槽机制 &#x1f34e; 》&#x1f427; 本质就是给按钮的点击操作&#xff0c;关联…

C++之复合资料型态 第一部(参考 列举 指标)

复合资料型态(compound type) 是由其他资料型态(data type) 定义出来的型态&#xff0c; C 中的复合资料型态包括参考(reference) 、列举(enumeration) 、阵列(array) 、指标(pointer ) 、结构(structure) 及联合(union) 。 参考 参考是变数(variable) 的别名(alias) &#x…

GuLi商城-商品服务-API-品牌管理-OSS获取服务端签名(续)

如何进行服务端签名直传_对象存储(OSS)-阿里云帮助中心 gulimall-third-party服务的代码: package com.nanjing.gulimall.thirdparty.controller;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.utils.BinaryUtil; impor…

Linux开发:Fuse介绍

Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持&#xff0c;开发者只需要根据fuse提供的接口实现具体的文件操作时所对应的回调函数&#xff0c;就可以实现一个文件系统。由于其主要实现代码位于用户空间中&#xff0c;因此不需要重新编译内…