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

news2024/11/15 17:17:18

前面几个课时端到端地介绍了软件开发全生命周期中涉及的最佳实践,经过上面几个步骤,企业在进行 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.coloradmin.cn/o/1439008.html

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

相关文章

【力扣】查找总价格为目标值的两个商品,双指针法

查找总价格为目标值的两个商品原题地址 方法一:双指针 这道题和力扣第一题“两数之和”非常像,区别是这道题已经把数组排好序了,所以不考虑暴力枚举和哈希集合的方法,而是利用单调性,使用双指针求解。 考虑数组pric…

零代码3D可视化快速开发平台

老子云平台 老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。此技术已经在全球申请了专利…

力扣优选算法100道——【模板】前缀和(一维)

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 目录 🚩了解题意 🚩算法原理 🎈设定下标为1开始 🎈取值的范围 🚩实现代码 🚩了解题意 第一行的3和2,3代表行数,2代表q次查询(…

【Java数据结构】ArrayList和LinkedList的遍历

一&#xff1a;ArrayList的遍历 import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** ArrayList的遍历*/ public class Test {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(5);list…

MATLAB环境下生成对抗网络系列(11种)

为了构建有效的图像深度学习模型&#xff0c;数据增强是一个非常行之有效的方法。图像的数据增强是一套使用有限数据来提高训练数据集质量和规模的数据空间解决方案。广义的图像数据增强算法包括&#xff1a;几何变换、颜色空间增强、核滤波器、混合图像、随机擦除、特征空间增…

寒假作业2024.2.6

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用直接插入排序实现升序排序 函数4:请使用插入排序实现升序排序 #include <stdio.h> #include <stdl…

一个坐标系查询网站python获取所有坐标系

技术路线选择 我是使用的vue 3开发的网页界面&#xff0c;element-plus构建网页组件&#xff0c;openlayer展示地图&#xff0c;express提供后端API&#xff0c;vercel进行在线部署。 python获取所有坐标系 想要展示所有坐标系&#xff0c;那需要先获取坐标系&#xff0c;怎么…

【开源】基于JAVA+Vue+SpringBoot的贫困地区人口信息管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…

机器人学、机器视觉与控制 上机笔记(2.1章节)

机器人学、机器视觉与控制 上机笔记&#xff08;2.1章节&#xff09; 1、前言2、本篇内容3、代码记录3.1、新建se23.2、生成坐标系3.3、将T1表示的变换绘制3.4、完整绘制代码3.5、获取点*在坐标系1下的表示3.6、相对坐标获取完整代码 4、结语 1、前言 工作需要&#xff0c;想同…

HTTP协议笔记

HTTP协议笔记 参考&#xff1a; &#xff08;建议精读&#xff09;HTTP灵魂之问&#xff0c;巩固你的 HTTP 知识体系 《透视 HTTP 协议》——chrono 目录&#xff1a; 1、说说你对HTTP的了解吧。  1. HTTP状态码。  2. HTTP请求头和响应头&#xff0c;其中包括cookie、跨域响…

AcWing 1238 日志统计(双指针算法)

题目概述 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志&#xff0c;日志共有 N 行。 其中每一行的格式是&#xff1a; ts id表示在 ts 时刻编号 id 的帖子收到一个”赞”。 现在小明想统计有哪些帖子曾经是”热帖”。 如果一个帖子曾在任意一个长度为 D 的时间段…

《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)

文章目录 1.1 MySQL 概览&#xff1a;版本、特性和生态系统1.1.1 基础知识1.1.2 重点案例1.1.3 拓展案例 1.2 安装和配置 MySQL1.2.1 基础知识1.2.2 安装步骤1.2.3 重点案例1.2.4 拓展案例 1.3 基础命令和操作1.3.1 基础知识1.3.2 重点案例1.3.3 拓展案例 1.1 MySQL 概览&#…

JUC ThreadLocal

文章目录 ThreadLocal ^1.2^ 的作用使用场景示例1ThreadLocal 变量初始化ThreadLocal 源码分析源码分析总结 内存泄漏问题示例说明new Thread 方式 执行结果pool 方式执行结果原因解析总结 ThreadLocal 1.2 的作用 ThreadLocal 为每个线程提供单独的变量副本。每个变量副本都是…

史上最全嵌入式(学习路线、应用开发、驱动开发、推荐书籍、软硬件基础)

废话不多说直接上思维导图&#xff01; 如果有觉得图片看不清楚的&#xff0c;有疑问的&#xff0c;可在评论区进行留言&#xff01; 群号&#xff1a; 228447240 嵌入式总括 嵌入式书籍推荐 嵌入式软件知识 嵌入式硬件知识 嵌入式应用开发 嵌入式驱动开发 嵌入式视频推荐: 韦…

WebSocket相关问题

1.WebSocket是什么&#xff1f;和HTTP的区别&#xff1f; WebSocket是一种基于TCP连接的全双工通信协议&#xff0c;客户端和服务器仅需要一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并且支持双向数据的传输。WebSocket和HTTP都是基于TCP的应用层协议&am…

【PyTorch][chapter 15][李宏毅深度学习][Neighbor Embedding-LLE]

前言&#xff1a; 前面讲的都是线性降维&#xff0c;本篇主要讨论一下非线性降维. 流形学习&#xff08;mainfold learning&#xff09;是一类借鉴了拓扑流行概念的降维方法. 如上图,欧式距离上面 A 点跟C点更近&#xff0c;距离B 点较远 但是从图形拓扑结构来看&#xff0c; …

书生·浦语大模型全链路开源体系

1&#xff0c;简述大模型的定义与特点&#xff1a; 大模型是指参数数量大于10亿的模型&#xff0c;它的特点包括&#xff1a;模型规模大&#xff0c;数据规模大&#xff0c;计算规模大和任务数量 2. 分析大模型成为通用人工智能的重要途径的原因&#xff1a; 大模型能够从大…

2023年的技术变革,我不是破坏大环境的人

文章目录 前言2023年的技术变革人工智能的崛起元宇宙的跌落物联网的渗入 技术变革的背后技术变革的影响积极的影响负面的影响 技术变革带来的思考 前言 2023无疑是一个充满变革和创新的一年&#xff0c;这背后离不开技术的发展和进步。不论是人工智能的崛起&#xff0c;还是元…

[word] word表格内容自动编号 #经验分享#微信#其他

word表格内容自动编号 在表格中的内容怎么样自动编号&#xff1f;我们都知道Word表格和Excel表格有所不同&#xff0c;Excel表格可以轻松自动编号&#xff0c;那么在Word表格中如何自动编号呢&#xff1f; 1、选中内容后&#xff0c;点击段落-自动编号&#xff0c;选择其中一…

数据结构——C/栈和队列

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特…