DevOps落地笔记-17|度量指标:寻找真正的好指标?

前面几个课时端到端地介绍了软件开发全生命周期中涉及的最佳实践,经过上面几个步骤,企业在进行 DevOps 转型时技术方面的问题解决了,这个时候我们还缺些什么呢?事实上很多团队和组织在实施 DevOps 时都专注于技术,而忽略了度量和文化方面。度量是实施 DevOps 的关键要素,如果把 DevOps 比作一辆车,那么之前的造工具、搭平台就是这辆车的车身,度量就是车的仪表盘。DevOps 的度量也需要一些指标来指导 DevOps 的持续改进。那么什么样的指标是好指标?如何找到好指标?这就是今天要介绍的内容。

为什么要度量指标?

度量在很多企业里落地的效果并不好。一是因为度量的前提是要有一套打通端到端的 DevOps 平台,否则再优秀的度量也只是局部度量。目前国内很多企业还都处于建设 DevOps 平台的基础阶段,因此落实下来也并不容易。二是,度量本身投入产出比并不像 CICD 效果明显。很多工程只是为了“给上面看看”而完成的任务,并没有从度量的本质上去考虑。

因为这两点原因,度量指标在企业内的落地还存在问题。

我认为“有哪些度量指标”“指标如何获取”这些问题是我们从一开始就要考虑的。原因有以下几点:

& 精益思想的核心理念是持续改进,只有清晰明确的度量指标作为指引,才能达到持续改进的目标。在持续改进这条路上,没有终点,永远在路上。

& 度量能够提供信息来帮助我们知道现在在哪里,距离目标还有多远,我们是在沿着目标前进,还是在倒退,程度如何。

& 度量指标是需要从 DevOps 平台获取的,一开始要考虑有哪些度量指标,如何获取,对 DevOps 平台的设计有指导意义。

这样要强调的是,度量指标不是目的,而是手段;不是控制,而是改进。“目的”容易给人以到达终点的错觉,“手段”是为了发现潜在的问题。“控制”容易给人以一种静态目标的心理暗示,“改进”则是以动态目标植入人心。这有助于我们能够不断地发现问题,改正问题。

什么样的指标是好指标?

关于寻找度量指标这块,在有些企业里都有一个误区,就是要“度量所有内容”。一些企业拍脑袋要度量几百个指标,以期望能从这么多的指标中找到一些重要信息。这种方式是不正确的,有以下几个问题:

& 更多的指标需要投入更多的资源来关注软件研发的各个方面,最终会导致每个指标的效果并不好;

& 以 KPI 的形式完成指标,最终完成的只是数量,不是质量。

那么,度量指标的质量是什么?什么样的指标是好指标?下面这 5 个标准希望能够帮到你。

1.可度量的:指标必须是可衡量的,即是一个定量的指标,而不是“非常好”,“非常快”这种定性的指标。

2.相关联的:指标必须能够度量对业务有重要影响的因素。

3.不可更改的:团队成员不能影响度量指标的结果。

4.可实施的:指标是能够通过技术的手段获取并且数值是真实可靠的。

5.可追溯的:指标必须是能够直接反映软件研发过程中存在的问题。

因此,我们不可能度量所有的指标,要选出哪些满足这些要求的指标,指标不在多,而在精。在找出要跟踪的 DevOps 指标之前,需要确定组织面临的挑战以及要解决的问题。好的指标是用来解决实际业务问题的。因此,应该避免那些不符合 DevOps 时代、对用户没有价值的指标,比如以下几点。

& 传统的工程指标:比如 MTBF(平均故障间隔时间)在 DevOps 时代意义就不大。系统的长期稳定性并不是首要目标,因为 DevOps 时代是通过快速部署来保证系统的稳定性的。基于虚拟化和基础设施即代码的工程实践,可以通过频繁的部署来进行线上测试,这些测试可能会经常失败,但有利于制定更好的方案。这种情况下,MTBF 对业务需求来说并不是好指标。

& 基于竞争的指标:切勿基于团队成员或团队之间的竞争来建立指标。比如按团队成员完成的需求数量进行排名、按开发人员出现的 Bug 数进行排名等。度量指标的目的是用来解决业务问题,不是用来晾晒团队成员技术水平的手段。

& 虚荣性指标:比如每周代码行的统计。不应该以代码行数这样无意义的指标评判开发人员工作量的指标。最终交付功能的及时性和质量才是最重要的。

在度量指标的时候,不要根据获取指标的难易来取舍指标。在一项重要的指标上哪怕花费更多的成本都是值得的,在一项无用的指标上投入再少的时间也是在浪费。

如何选择指标?

在上面也提到了,好的指标是用来解决问题的。当我们在选择指标时的依据也是要解决的问题。在软件开发过程中,需要解决的问题很多。代码质量、团队成员、发布效率的等都有可能成为问题的来源。这些指标中,有些是给上层领导做决策用的,有些是为了提升团队技能水平的,有些则是为了提升软件质量。不管用途是什么,衡量的标准就是解决或改善现有的问题。我举了下面几个例子。

& 缩短产品上市时间:用于衡量从用户需求被提出到最终交付给用户之间的时间,可以使用“前置时间”这个指标。因为更短的上市时间代表了企业在市场竞争中的反应速度越快。

& 提高软件开发的效率:可以使用“流动效率”这个指标,以查看瓶颈点,并将工作重心放在如何改善流动瓶颈的地方。等待的时间越少,软件开发的效率就越高。

& 解决团队正在处理的事项和计划外事项的冲突:可以使用“在制品数量”这个指标,以暴露工作内容过载的团队或团队成员,使得每个团队成员的工作更加均衡。

& 解决未完成的重要工作不被遗忘的问题:可以使用“停留时间”或“过期时间”等指标,来度量未完成的工作在系统里停留了多长时间,如果超过设置的阈值则进行预警以暴露风险。

& 减少生产环境中用户发现的问题数量:可以使用“缺陷逃逸率”这个指标,争取尽可能多的 Bug 是在测试环境或预生产环境中发现,以最大程度建设用户发现的缺陷数量。

如何使用指标?

当根据上面的标准选择好指标后,应该如何使用这些指标?反馈循环是有效改进的基础,通过度量指标的反馈,有助于更加精准的调整团队的行动,改善整个组织的沟通。下图是度量指标的反馈循环,需要有以下几个步骤:
在这里插入图片描述
STEP 1:收集数据。

收集关于软件研发过程中的数据,作为后续分析的原材料。在大多数企业,度量面对的问题不是数据准不准确,而是有没有数据的问题。如果要有效地收集数据,需要从两个方面入手。

& 平台方面:平台本身需要具备收集数据的能力。在设计平台时,要有针对度量指标方面的设计。比如每个任务都要有开始时间和结束时间,每个事件都应该有发生、处理、解决的时间记录,事物之间的关联(如代码提交与任务或缺陷的关联,代码库与产品线的关联,流水线构建与代码库的关联等)。平台具备收集这些数据的能力外,还可以提高统计报表,用更直观的方式进行展示。

& 人的方面:团队成员的有效参与能够充分发挥平台的能力。DevOps 平台中,虽然将研发流程中的操作尽可能自动化了,但有些内容还是需要人工配合。比如:在提交代码时按照规范提交,将需要关联的需求 ID 和缺陷 ID 添加到 message 里,从而建立提交的代码与需求和缺陷的关联。需求的拆解,任务的启动、过程跟踪以及完成后的关闭操作,都需要人工配合,才能使数据更加准确。

STEP 2 :分析数据。

基于收集的数据进行分析,以便能发现当前存在的问题。举个例子,通过数据收集系统发现:需求完成的数量在减少,代码行数在增加,同时缺陷的数量在增长。下面通过这些数据进行分析:

& 需求完成的数量减少,说明团队花在需求上的时间减少了,是什么原因导致的呢?继续往下分析。

& 代码行数在增加,说明团队成员花费大量的时间在修改代码上。既然完成的需求在减少,可以断定代码不是为开发需求而写的。

& 缺陷的数量在增加,可以说明当前在测试阶段,并且测试出了很多问题。

通过分析得出结论:说明软件进入到测试阶段后,问题很多,导致团队成员需要花费大量的时间修复缺陷,从而影响了正常的需求开发。

STEP 3:调整流程。

根据上面的分析判断,开发人员在开发阶段对软件质量的控制效果并不好,可能的原因有:

& 开发人员没有进行有效自测;

& 开发人员没有编写单元测试或者覆盖率较低。

因此,我们可以采取一些措施改善流程,尽早发现软件中的问题。比如在持续集成流水线中集成单元测试,通过设置门限阈值来控制单元测试的有效性和覆盖率;通过自动化的API接口测试,验证服务以及服务之间调用的正确性等。

STEP 4:重复执行。

重复上面的步骤,再次收集指标,观察指标的变化,并根据指标的值调整流程,直到满足要求。

总结

本课时是度量指标部分的开篇。前面介绍过,DevOps 以精益思想为基础,精益思想的基础是持续改进,持续改进的基础就是清晰明了的度量指标。本课时并未详细的介绍任何一个具体的指标,主要介绍了什么样的指标是好指标,如何选择指标和如何使用指标,强调了度量指标在于精,而不是多。度量指标是手段,不是目的,是用于发现企业中人员、流程、组织和软件存在的问题。在后面几个课时分别从团队能力、响应速度、软件质量和业务价值四个方面来阐述具体的度量指标。

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

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

相关文章

【Linux网络编程三】Udp套接字编程(简易版服务器)

【Linux网络编程三】Udp套接字编程(简易版服务器) 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…

TCP 了解

参考:4.2 TCP 重传、滑动窗口、流量控制、拥塞控制 | 小林coding TCP报文 其中比较重要的字段有:(1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发…

利用IP地址精准定位服务

在数字化时代,IP地址已成为连接我们与网络世界的纽带之一。通过IP地址,我们可以追踪用户的位置信息,实现精准定位服务。本文将探讨如何利用IP地址精准定位服务,为个人和企业带来便利和价值。 一、什么是IP地址精准定位服务&#…

【FPGA】高云FPGA之IP核的使用->PLL锁相环

FPGA开发流程 1、设计定义2、设计输入3、分析和综合4、功能仿真5、布局布线6、时序仿真7、IO分配以及配置文件(bit流文件)的生成8、配置(烧录)FPGA9、在线调试 1、设计定义 使用高云内置IP核实现多路不同时钟输出 输入时钟50M由晶…

IDEA创建SpringBoot+Mybatis-Plus项目

IDEA创建SpringBootMybatis-Plus项目 一、配置Maven apache-maven-3.6.3的下载与安装(详细教程) 二、创建SpringBoot项目 在菜单栏选择File->new->project->Spring Initializr,然后修改Server URL为start.aliyun.com&#xff0c…

【图像文本化】Base64编解码OpenCV4中 Mat 对象

学习《OpenCV应用开发:入门、进阶与工程化实践》一书 做真正的OpenCV开发者,从入门到入职,一步到位! 前言 很多时候在开发中,需要保存图像为文本形式,以便于存储与传输。最常见的就是把图像文件编码为Ba…

C# CAD交互界面-自定义工具栏(二)

运行环境 vs2022 c# cad2016 调试成功 一、引用 acdbmgd.dllacmgd.dllaccoremgd.dllAutodesk.AutoCAD.Interop.Common.dllAutodesk.AutoCAD.Interop.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.T…

spring boot学习第十篇:elastic search必须使用用户名密码授权后才能访问、在java代码中操作索引

前提条件:安装好了elastic search服务,参考:elastic search入门_ubuntu elasticsearch 密码-CSDN博客 1、配置elastic search必须使用用户名密码授权才能访问 1.1开启x-pack验证 修改config目录下面的elasticsearch.yml文件,添…

VM 虚拟机和容器技术之间有什么区别?

随着云计算技术的不断发展,虚拟机和容器技术作为两种常见的虚拟化技术,被广泛应用于云计算领域。虽然虚拟机和容器技术都是虚拟化技术,但它们之间存在一些重要的区别。本文将详细介绍虚拟机和容器技术的区别,以便读者更好地了解这…

亚信安慧AntDB推动技术创新与满足用户需求

随着互联网技术的迅猛发展,大数据时代的到来,数据库的需求不断增长。在这样的背景下,国产分布式数据库正逐渐崭露头角,AntDB作为其中的重要代表,也积极参与到了这场竞争中。作为国内的技术创新者,AntDB不仅…

【Mybatis】从0学习Mybatis(2)

前言 本篇文章是从0学习Mybatis的第一篇文章,由于篇幅太长CSDN会限流,因此我打算分开两期来写,这是第二期!第一期在这儿:【Mybatis】从0学习Mybatis(1)-CSDN博客 1.什么是ResultMap结果映射&am…

从小白到入门webrtc音视频通话

0. 写在前面 先会骑车,再研究为什么这么骑,才是我认为学习技术的思路,底部付了demo例子,根据例子上面的介绍即可运行。 1. 音视频通话要用到的技术简介 websocket 介绍:1. 服务器可以向浏览器推送信息;2…

C#,河豚算法(Blowfish Algorithm)的加密、解密源代码

Bruce Schneier 1 河豚算法(Blowfish Algorithm) 河豚算法(Blowfish Algorithm)是1993年11月由Bruce Schneier设计的一个完全开源的算法。 Blowfish算法是一个分组长度为64位、密钥长度可变的对称分组密码算法。 Blowfish算法具…

学习Android的第五天

目录 Android ConstraintLayout 约束布局 简介 ConstraintLayout 约束布局分类 1、相对定位 (Relative positioning) 2、边距 ( Margins ) 3、居中定位和偏向 ( Centering positioning and bias ) 4、环形定位 ( Circular positioning ) 5、对可见性的处理 ( Visibilit…

万物皆可播时代,我们如何把握机遇

在万物皆可播的时代,我们可以通过以下方式来把握机遇: 了解市场需求:通过观察和了解消费者的需求和偏好,发现具有潜力的市场空白。关注时尚、美妆、美食、旅游等领域的发展趋势,掌握最新的流行趋势,结合自…

春运开始,北斗卫星助力盲区来车预警提示

春运开始,北斗卫星助力盲区来车预警提示 近期春运开始,高德地图启动了2024年的“温暖回家路”服务计划,通过数字化服务创新保障春运出行。除了具备自学习能力的新能源导航首发亮相外,还重点升级了盲区会车预警服务。在山区弯道、…

❤ React18 环境搭建项目与运行(地址已经放Gitee开源)

❤ React项目搭建与运行 环境介绍 node v20.11.0 react 18.2 react-dom 18.2.0一、React环境搭建 第一种普通cra搭建 1、检查本地环境 node版本 18.17.0 检查node和npm环境 node -v npm -v 2、安装yarn npm install -g yarn yarn --version 3、创建一个新的React项目…

ABAP 笔记--内表结构不一致,无法更新数据库MODIFY和UPDATE

目录 ABAP 笔记内表结构不一致,无法更新数据库MODIFY和UPDATE ABAP 笔记 内表结构不一致,无法更新数据库 MODIFY和UPDATE 如果是使用MODIFY或者UPDATE

Live800:从客户反馈中学习与改进,塑造卓越的企业客户服务

在当今的商业环境中,客户反馈已经成为企业改进产品和服务,提升客户满意度,增强品牌形象的重要工具。今天将以企业客户服务为例,探讨如何从客户反馈中学习和改进,包括收集客户反馈、分析客户反馈、实施改进措施等方面。…

远程主机可能不符合 glibc 和 libstdc++ Vs Code 服务器的先决条件

vscode连接远程主机报错,原因官方已经公布过了,需要远程主机 glibc>2.28,所以Ubuntu18及以下版本没法再远程连接了,其他Linux系统执行ldd --version查看glibc版本自行判断。 解决方案建议: 不要再想升级glibc了 问题…