减少产品中缺陷和其他废物数量的终极指南-程序员宅基地

技术标签: python  java  人工智能  编程语言  大数据  

有什么缺陷? 我喜欢这个定义。

缺陷是威胁产品价值的任何事物。

在开始之前,我们要同意:

  1. 我们不想破坏威胁我们产品价值的缺陷
  2. 我们希望在任何时候都为客户提供尽可能多的价值。

如果您不同意1和2,请不要浪费时间并立即停止阅读。

软件缺陷又称错误

测试人员通常与发现缺陷有关。 一些测试人员可以很好地保护发现的缺陷,而某些开发人员可以对所编写的缺陷采取防御措施。 客户不喜欢缺陷,开发人员不喜欢缺陷,产品经理不喜欢缺陷,说实话,除了一些测试人员,没有人喜欢缺陷。

为什么会这样呢? 原因是许多测试人员的重点是检测缺陷,而这正是许多组织为之付出的报酬。 如果您是一名测试人员并且喜欢您的缺陷,那么您可能会觉得这篇文章令人不安,如果您决定继续进行,则后果自负。

缺陷是浪费

让我们从一开始就很清楚:缺陷是浪费。 设计缺陷产品时浪费时间,在编码缺陷程序时浪费时间,在检测它们时浪费时间,在安装它们时浪费时间,在重新检查它们时浪费时间。 即使写了这句话也花了很长时间,现在想想您需要花费多少时间来产生,检测,修复和重新检查缺陷。

我们的行业已经开发出一种缺陷应对机制,我们将其称为缺陷管理。 它基于检测=>修复=>重新测试的工作流程。 多年来,拥有缺陷管理工具以及记录和跟踪缺陷已成为最佳实践。 缺陷管理方法通常麻烦,缓慢,成本高昂,并且容易使人烦恼,无论您是将缺陷拒之门外的测试人员,是被标记为缺陷的按设计功能的开发人员,还是需要花费精力的产品经理时间优先排序,图表绘制和趋势浪费。

缺陷的另一个危险特征是可以很容易地计算出缺陷,并且您总是会发现一个尖尖的毛发经理,决定要对他的产品的健康状况和团队效率进行计数,方法是计数并绘制彩色的废品图表。

但是,如果我们同意缺陷是浪费,那么为什么我们要记录和跟踪浪费,创建浪费图似乎更加荒谬,尝试防止它们难道难道吗?

哦,只要我们能先写对的东西并减少我们产生的缺陷的数量,就可以了! 我说我们可以,耐心并继续阅读。

软件开发团队发现了许多创造性地解决缺陷的方法,请参见下面的示例。

示例1: 奖励浪费

屏幕截图-2015-05-18-at-15-16-01

奖励错误原因

几年前,我曾与5个Scrum团队一起从事一项关键业务项目。 首先让我澄清一下,我们的Scrum实施充其量是差劲的,我们没有释放所有的sprint,我们对done的定义值得怀疑。

接近一个重要的版本,我们发现自己处于一种需要在生产之前修复很多缺陷的情况。 我们有2周的时间,而我们的团队总共要解决100个缺陷。 我们的CTO非常支持消除缺陷的倡议,他渴望提供零缺陷。 他制定了一项计划,其中包括全天候免费提供食物,并为那些需要将100%的注意力集中在缺陷解决上的开发人员提供一些宠爱。 然后,他决定向团队颁发奖金,以修复最大数量的缺陷。

我记得对这种奖励可能带来的未来后果感到恐惧。 我与CTO谈过,并告诉他,对于那些缺陷最少的团队而不是缺陷最多的团队,我本来希望获得更多奖励。 我们的首席技术官是个聪明人,理解我反对的价值主张,他改变了态度,并与团队讨论了如何首先不引入缺陷比将缺陷编码后更有效。 发布后不久,我们就开始采用一种侧重于预防缺陷而不是专注于检测的方法。 我们再也没有在2周内修复100个bug的问题。

会议分类

典型的缺陷优先级会议

示例2: 缺陷指标

在我以前的瀑布式生活中,我记得管理层在引入与缺陷直接相关的性能指标时。 测试人员应根据计算出的缺陷检测指数(测试期间检测到的缺陷数/检测到的缺陷总数(包括生产))* 100进行判断。 指数低于90意味着测试团队中没有人会获得奖金。 开发人员在

(测试过程中检测到的缺陷数/检测到的缺陷总数(包括生产))* 100。 指数低于90意味着测试团队中没有人会获得奖金。 开发人员在

指数低于90意味着测试团队中没有人会获得奖金。 测试人员分别对开发人员的代码中发现的缺陷数量进行判断,而业务分析师则根据测试人员在其需求中发现的缺陷数量进行单独判断。

欢迎来到战场!

错误优先级会议是一场争斗,开发经理认为任何错误都是遗漏的要求,产品经理认为每个错误都是编码错误或测试人员的误解,而测试负责人(me)只是因为允许他的测试人员参加而大喊大叫并受到批评。超出要求,并在脚本化验证例程之外利用其智能功能。

参加该会议是一场噩梦,人们完全忘记了我们的客户,只是想正确地制定他们的指标。 我们浪费时间争论和捍卫我们的奖金的时间真是惊人。 我们的客户通常不满意,因为我们不专注于价值传递,而是专注于处理缺陷,这是我们的一大输家!

我们的客户非常不高兴。

示例3: 不符合要求的缺陷

屏幕截图-2015-05-18-at-15-37-16

让挑剔的季节开始

在与示例2相同的环境中,测试人员为了保持较高的缺陷检测指数而使用它来提出大量实际上不符合要求的微小或不重要的“缺陷”。 有趣的是,这种不符合通常可以得到改善。

测试人员不在乎它们是否是需求,代码缺陷甚至改进,对他们来说它们就是金钱,所以他们打开了它们。 由于不符合要求,因此将改进作为缺陷提出。 在大多数情况下,这些被认为是低严重性,因此低优先级的缺陷使测试人员满意,因此必须归档,审查,确定优先级并用于趋势,度量标准和其他无用的计算中。

这项活动很容易占用测试人员时间的30%。 这样的缺陷不仅会花费测试人员的时间,而且还会影响开发人员,产品经理,业务分析师,并最终使缺陷管理工具变得混乱。

浪费成倍地增加了浪费。

转储

一个多彩的转储

示例4: 缺陷图表,趋势和其他完全废话

每周我必须准备缺陷图表以进行管理。 这些是从我们可怕的缺陷管理工具中提取的,并以色彩鲜艳,无用的图表形式呈现。 我的经理对产生无用信息的前景感到非常兴奋,以至于她发起了一个宠物项目,制作的图表比我介绍的图表还要丰富多彩。 她用2个开发人员进行了6周的创作,以创造出让高级管理人员赞叹的东西。

在定义大公司的要求的过程中,她引入了一些新的甚至更无用的图表,并将其合并到一个汇总的仪表板中。 她称其为产品质量健康仪表板,我秘密将其称为“垃圾场”

没有人对仪表板有任何疑问,没有人出于任何原因使用数字,没有人关心可以配置它,但是我的老板为它感到非常自豪。 一位传奇人物说她因此而大幅度提高。 如果您使用垃圾,那么您将开始测量垃圾,最终您将进行数据分析并显示存储在代码中的垃圾的合并视图。

1. 注重缺陷预防

许多开发团队专注于快速交付功能,很少考虑预防缺陷。 从理论上讲,测试人员(有时花费的时间比开发人员便宜)会发现缺陷,这些缺陷将在以后修复。 这种方法代表了虚假的经济; 返工会破坏开发人员的活动并损害所交付的价值流。 开发团队可以使用许多方法来减少所需的返工量。

您想防止缺陷吗? 您可以尝试以下任意组合:

  1. 使用BDD / ATDD / Specification by Example或其他测试优先方法,交付团队可以通过对话来测试产品所有者的假设,并且更有可能在第一时间产生正确的功能。
  2. 具有快速反馈循环的能力还可以及早消除缺陷,自动化的单元和集成测试可以帮助开发人员快速识别潜在问题,并在将其嵌入功能之前将其消除。
  3. 业务团队和交付团队之间的紧密协作可以帮助团队使其符合其实际业务目标,并减少不必要的功能。 这意味着更少的代码,因此更少的缺陷。 因为,您最好的代码是您不必编写的代码。
  4. 降低复杂度在预防缺陷方面非常有力,如果我们能够在许多简单的问题中分解出一个复杂的问题,我们很可能会减少引入的缺陷数量。 简单的问题具有简单的解决方案,简单的解决方案比复杂的解决方案具有更少的缺陷。
  5. 良好的编码标准,例如将方法的长度限制为较少的行数,限制循环复杂度,应用良好的命名约定以帮助提高可读性,这些都会对产生的缺陷数量产生积极影响
  6. 代码审查和结对编程大大有助于减少缺陷
  7. 长期进行重构还可以减少缺陷

故事的寓意:如果您不编写缺陷,则无需修复它们。

2. 立即修复缺陷并刻录缺陷管理工具

如果几年前像我一样,您已经厌倦了归档,分类,讨论,报告,订购缺陷,我有一个非常快速的解决方案。 发现缺陷后立即修复。

对于开发人员来说,一旦发现发现的缺陷而无需将其记录下来,则立即修复他在正在编写的代码中发现的缺陷是正常的,但是一旦发现缺陷是由其他人(例如测试人员)发现的,则显然我们需要开始严格的日志记录过程。 为什么? 真的不知道 人们有时会说:“如果不进行根本原因分析,您将不知道自己在做什么,因此您需要提出缺陷”,但实际上,没人会在发现缺陷时阻止您进行根本原因分析。您真正想要的是,我的建议是,凡发现错误的人都将交给负责代码的开发人员并进行对话。 对话的结果(在某些情况下还可能涉及产品所有者)应该是

我的建议是,凡发现错误的人都将交给负责代码的开发人员并进行交谈。 对话的结果(在某些情况下可能还涉及产品所有者)应该让我们立即进行修复,或者让我们永远忘记它 。 现在修复它,通常意味着开发人员会重新了解需要修复的特定代码,当然要比不记得自己编写该代码的4周内更新。

现在进行修复,通常意味着开发人员会重新了解需要修复的特定代码,肯定比4周内更新,那时他甚至都不记得自己曾经编写过该代码。 现在修复它意味着问题已经解决,我们不必再担心它了,我们的客户将很感激。

永远忘记它意味着它不是一个值得修复的问题,它可能不会威胁到项目的价值,并且如果我们不修复它,客户将不在乎。 永远忘掉它也意味着我们不会在缺陷管理工具中携带臭死鱼。 将来,我们将不必再浪费时间重新讨论同样的死鱼,而我们的客户很高兴,我们不是在浪费时间,而是在开发新功能。 如果您决定修复它,我还建议您为此编写一个自动测试,这样可以确保如果问题再次发生,您将立即知道。

当建议烧毁缺陷管理工具并及时修复时,我遇到了极大的怀疑。 似乎只有极少数人认为这是可能的。 事实上,在过去的6年中,我所有的团队都能够做到这一点,而且没人能说:“我想念Jira和漂亮的错误图表”。

显然,这种方法更适合于位于同一地点的开发团队,我还没有在地理位置分散的团队中尝试过,我建议您尝试一下,让我知道它的进展。

缺陷

流行病: 90%–唯一没有归档和管理我所遇到的缺陷的地方就是我工作和改变流程的地方。 在过去的几年中,我听说过另外两个地方,他们在这里做类似的事情,仅此而已。 全世界似乎在浪费金钱,分类,报告,趋势浪费方面有很多时间。

损坏: 100%–使用缺陷进行人员评估是我在漫长的职业生涯中经历过的最糟糕的做法之一,损害可能是巨大的。 客户变得无关紧要,人们开始专注于游戏系统以从中受益。 记录和管理缺陷也是非常浪费的,它需要时间,精力,并且尤其可能危害测试人员和开发人员之间的关系。 趋势和从缺陷密度中扣除发布日期是愚蠢的,当很少注意缺陷预防时,缺陷将是如此罕见,以致趋势将不复存在。

抵抗: 90%–我不得不离开一家公司,因为我不敢相信缺陷管理的福音,而且像一个异端一样,我几乎被火烧了。 在第二家公司中,我尝试删除缺陷管理工具,但经过两年的尝试,我颇有抵抗力,并获得了成功。 第三个是人们乐于尝试的那个,当他们看到我们清除的废物数量很快就变成了一条新规则。 我已经与人们就此主题进行了无数讨论,总体立场是缺陷管理必须通过一种工具并遵循严格的过程来完成。

因为“这就是我们在这里做事的方式!”

推荐读物

精益软件开发–敏捷工具包 (Mary和Tom Poppendieck)

https://mysoftwarequality.wordpress.com/2015/05/06/little-tim-and-the-messy-house/

https://mysoftwarequality.wordpress.com/2013/09/10/how-i-stopped-logging-bugs-and-started-living-happy/

这是我2015年首次写的文章的审阅和改进版本( 此处为旧版本)

翻译自: https://www.javacodegeeks.com/2016/10/ultimate-guide-reducing-amount-defects-waste-product.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/danpu0978/article/details/106775314

智能推荐

微光app电脑版_智米电暖器智能版1S体验:全面领跑AIoT、将智能生活进行到底-程序员宅基地

文章浏览阅读547次。【科技犬体验】2019年10月15日,智米正式推出了旗下电暖器新品——智米电暖器1S和智米电暖器智能版1S对于没有集中供暖的长江中下游地区居民而言,电暖器是不折不扣的"保命神器"。而在深秋的北方,昼夜温差较大,这种时候使用灵活、易于搬运的电暖器也成为更加明智的选择。在北方每年的冬季,室内温度就直接关系着大家在家的舒适度,而对于室内温度不达标的用户,购买电暖器就成为几乎唯一的选择。科技犬已经入手智米..._智米电暖器智能版app

《Hadoop与大数据挖掘》——2.6 TF-IDF算法原理及Hadoop MapReduce实现-程序员宅基地

文章浏览阅读312次。本节书摘来自华章计算机《Hadoop与大数据挖掘》一书中的第2章,第2.6节,作者 张良均 樊哲 位文超 刘名军 许国杰 周龙 焦正升,更多章节内容可以访问云栖社区“华章计算机”公众号查看。2.6 TF-IDF算法原理及Hadoop MapReduce实现2.6.1 TF-IDF算法原理原理:在一份给定的文件里,词频(Term Frequency,..._hadoop mapreduce如何实现实现tf-idf

Layui实现点击文字、缩略图查看图片功能_layui查看图片-程序员宅基地

文章浏览阅读4.3k次。刚完成一个客户需求,同一个页面上要有点击缩略图查看大图功能,也有点击图片名称查看原图的功能。点击缩略图查看大图的功能点击缩略图查看大图的功能实现用的是layui开发文档内的layer.photos-相册层。官方开发文档里photos支持传入json和直接读取页面图片两种方式。下面是官方开发文档的截图,官方开发文档链接:https://www.layui.com/doc/m..._layui查看图片

ueditor的配置和使用-程序员宅基地

文章浏览阅读89次。ueditor下载好之后直接复制到项目的WebContent目录下,并将ueditor\jsp\lib下的jar包复制或者剪切到项目的lib目录下。先看一下效果,如下:v1.文件的上传   首先在ueditor/jsp目录下找到config.json文件,就拿Image上传来说吧。  "imageUrlPrefix": "http:/..._ueditor json = new function("return " + result)();

20、NanoDet训练、测试 以及使用ncnn部署Jetson Nano 进行目标检测和串口数据转发-程序员宅基地

文章浏览阅读6.5k次,点赞7次,收藏59次。基本思想:最近想尝试一下nano 上部署nanodet,于是记录一下训练过程,手中有一份labelme标注的数据集,于是开始了一波操作~首先将图片和json数据集转成xml (https://blog.csdn.net/sxj731533730/article/details/90046780),然后将xml数据集转成voc;import sysimport osimport jsonimport xml.etree.ElementTree as ETfrom PIL import Im_nanodet

code::blocks + wxWidgets 2.8 在ubuntu 10.04下的安装-程序员宅基地

文章浏览阅读930次。code::blocks + wxWidgets 2.8 在ubuntu 10.04下的安装p { margin-bottom: 0.21cm; }1、首先安装必要组件代码:安装编译器 sudo apt-get install build-essential

随便推点

P5738 【深基7.例4】歌唱比赛-程序员宅基地

文章浏览阅读311次。题目描述n(n\le 100)n(n≤100)名同学参加歌唱比赛,并接受m(m\le 20)m(m≤20)名评委的评分,评分范围是 0 到 10 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下m-2m−2个评分的平均数。请问得分最高的同学分数是多少?评分保留 2 位小数。输入格式无输出格式无输入输出样例输入 ..._【深基7.例4】歌唱比赛

Vue简明实用教程(04)——事件处理_vue html里面如何直接写事件函数-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏5次。在Vue中可非常便利地进行事件处理,例如:点击事件、鼠标悬停事件等。_vue html里面如何直接写事件函数

南京邮电大学离散数学实验一(求主析取和主合取范式)-程序员宅基地

文章浏览阅读4.5k次,点赞15次,收藏67次。南京邮电大学离散数学实验一(求主析取和主合取范式)_离散数学实验

{spring.cloud.client.ipAddress}_spring.cloud.client.ip-address-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏5次。1.在springcloud中服务的 Instance ID 默认值是:${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}},也就是:主机名:应用名:应用端口。如图12.可以自定义:eureka.instance...._spring.cloud.client.ip-address

单目标跟踪OTB、VOT数据集介绍_otb数据集官网-程序员宅基地

文章浏览阅读2.1w次,点赞6次,收藏63次。OTB分为:OTB50和OTB100官方下载链接为:OTB官方数据集网站http://cvlab.hanyang.ac.kr/tracker_benchmark/datasets.html百度云链接:链接:https://pan.baidu.com/s/1Ck51d7OQ8w8BGcTL9UtopA提取码:jn0k复制这段内容后打开百度网盘手机App,操作更方便哦其中50和100,分别..._otb数据集官网

Xcode修改模拟器Simulator系统版本_xcode模拟器切换ios版本-程序员宅基地

文章浏览阅读5.1k次。从Xcode菜单栏里打开Xcode -> Preferences -> Components -> Simulators,下载对应版本的模拟器。由于模拟器相关文件较大,下载时间较长,需要耐心等待,下载完成后,对应版本的模拟器前面的下载按钮就会变成下载完成的样式。点击Xcode菜单栏 Window -> Devices,然后可以看到设备列表,然而在模拟器列表(..._xcode模拟器切换ios版本