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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zxxxxczzvdsgbhfdb

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 磁盘满的本质分析 专栏:《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具…

【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

进程控制(Linux)

进程控制 一、进程创建1. 再识fork2. 写时拷贝 二、进程终止前言——查看进程退出码1. 退出情况正常运行,结果不正确异常退出 2. 退出码strerror和errno系统中设置的错误码信息perror异常信息 3. 退出方法exit和_exit 三、进程等待1. 解决等待的三个问题2. 系统调用…

使用pandas将excel转成json格式

1.Excel数据 2.我们想要的JSON格式 {"0": {"raw_data1": "Sam","raw_data2": "Wong","raw_data3": "Good","layer": "12v1"},"1": {"raw_data1": "Lucy…

外汇天眼:大量的平庸操作无济于事,少数的杰出操作改变人生

回顾我们的人生,道路虽然漫长,经历虽然众多,但紧要处其实只有关键的几步。 在关键时刻处理得最好的人就会拥有最成功的事业; 回顾我们所交过的朋友,虽然数量像天上的繁星,但真正对自己的人生有重大影响的,不…

NUUO 网络摄像头命令执行漏洞

一、设备简介 NUUO NVR是中国台湾省NUUO公司旗下的一款网络视频记录器,该设备存在远程命令执行漏洞,攻击者可利用该漏洞执行任意命令,进而获取服务器的权限。 网络视频记录器的CPU为Marvell Kirkwood 88F6281,CPU架构为基于ARMv5…

LLM(大语言模型)——大模型简介

目录 概述 发展历程 大语言模型的概念 LLM的应用和影响 大模型的能力、特点 大模型的能力 涌现能力(energent abilities) 作为基座模型支持多元应用的能力 支持对话作为统一入口的能力 大模型的特点 常见大模型 闭源LLM(未公开源…

GADM 4.1 全球国家行政区划下载

扫描文末二维码,关注微信公众号:ThsPool 后台回复g004,领取最新 GADM 4.1 全球国家行政区划 GADM概述 GADM,全称 Database of Global Administrative Areas,是一个开放获取的全球行政区划数据库,包含各国、…

智慧城市与数字孪生:技术驱动下的城市治理与生活变革

一、引言 随着科技的飞速发展,智慧城市和数字孪生已经成为现代城市发展的重要趋势。它们通过运用先进的信息通信技术,提升了城市的治理效率和居民的生活品质。本文将探讨智慧城市与数字孪生如何共同推动城市治理与生活的变革,以及面临的挑战…

Webpack源码浅析

webpack启动方式 webpack有两种启动方式: 通过webpack-cli脚手架来启动,即可以在Terminal终端直接运行; webpack ./debug/index.js --config ./debug/webpack.config.js通过require(webpack)引入包的方式执行;其实第一种方式最终…

踩坑了,MySQL数据库生成大量奇怪的大文件

作者:田逸(formyz) 一大早就收到某个数据库服务器磁盘满的报警信息,其中数据盘使用率超过90%,如下图所示。 这是一台刚上线不久的MySQL从库服务器,数据盘的总容量是300G。先登录系统,查看主从同…

一般系统的请求认证授权思路【gateway网关+jwt+redis+请求头httpheader】

gateway:网关,我们都知道网关的作用就是对系统的所有请求,网关都会进行拦截,然后做一些操作(例如:设置每个请求的请求头httpHeader,身份认证等等)此时一般会使用到网关过滤器&#x…

感悟笔记——2024年2月5日

今日阅读了一篇挺有深度的文章,主要阐述进入职场后的大部分人,是怎么逐渐沦为螺丝钉的?即使起点巨高的优等生,也不可避免。文章指路: 「优等生思维」正在将你变成「螺丝钉」和「老黄牛」从小到大,我一直都是那个「别…

随记-Java项目处理SQL注入问题

现象:http://10.xx.xx.xx:xx/services/xxService 存在SQL注入情况 加固意见: 需要对网站所有参数中提交的数据进行过滤,禁止输入“"、"xor"、"or"、”--“、”#“、”select“、”and“等特殊字符;所有…

专业排版设计软件:QuarkXPress 2024 for mac中文激活版

QuarkXPress 2024 for Mac是一款功能强大、易于使用、高质量输出的专业排版软件。无论您是出版业的专家还是初学者,都可以通过QuarkXPress 2024轻松创建出令人惊叹的出版物。 软件下载:QuarkXPress 2024 for mac中文激活版下载 QuarkXPress 2023 for Mac…

游戏后端如何实现服务器之间的负载均衡?

在当今的游戏行业中,随着游戏用户数量的不断增加,如何实现服务器之间的负载均衡成为了一个亟待解决的问题。游戏后端作为游戏的重要组成部分,承载着游戏逻辑处理和数据存储等功能,因此游戏后端的负载均衡问题尤为重要。本文将详细…

FINN: 使用神经网络对网络流进行指纹识别

文章信息 论文题目:FINN: Fingerprinting Network Flows using Neural Networks 期刊(会议):Annual Computer Security Applications Conference 时间:2021 级别:CCF B 文章链接:https://dl.ac…

centos7的git使用方法

下载git yum install git git克隆 git clone https...(图片中复制的内容) git提交到远程仓库 git add filename git commit -m "提交日志" git push git首次使用要配置邮箱和用户名 查看提交日志 git log 查看当前提交状态 git status

JAVASE进阶:一文精通Stream流+函数式编程

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:JAVASE进阶:源码精读——HashMap源码详细解析 📚订阅专栏:JAVASE进阶 希望文章对你们有所帮助…

【第三十五节】idea项目的创建以及setting和Project Structure的设置

项目创建 Project Structure的设置 点击file ~ Project Structure 进入