研发效能中的 AI 度量与度量 AI
思码逸从 2018 年开始,就一直专注于研发效能度量这件事。在过往的时间里,我们服务了大量客户,因此收获了最多来自客户的实践和案例。可以说,在国内这个领域中,我们算得上是标志性团队了。当然,这年头成为“标志”也不是很难,毕竟一年一年过去,好多友商都不见了 :)
所以创业最重要的是什么呢?就是给公司起个好名字。你看司马懿在三国里最大的特点是啥?活得久!回到正题,今天的分享主要回答三个问题。
很多团队都已经开始使用 AI 技术了,那么大家肯定会关心如何度量 AI 带来的成效。
在座很多朋友在企业里担任度量和数据分析这类的角色,那么 AI 如何帮助度量本身提质增效?
最后总结软件研发效能度量与 AI 大模型的关系。
目前 AI 在研发领域最主要的应用场景是代码补全。那么在这个过程中,被问得最多的问题就是:我们能不能在一堆代码当中,识别出哪些是人写的,哪些是由 AI 生成的?
我们首先想一个问题:识别代码是否由 AI 生成,相较于识别一般文本是否由 AI 生成,哪个更难?我认为前者更难,因为自然语言文本中,词汇空间非常大。中文有 3500 常用字,英文单词多达几万个,每个人的语言表达习惯都存在差异,在这里面找到不同的 pattern 是相对容易的。而编程语言不一样,拿 Java 来说,关键词只有 60 多个,其语言组合所形成的空间相对而言很小,所以要区分不同的 pattern,难度系数就会更高。
我们先看看一般文本上识别 AIGC 的实际效果。OpenAI 曾经推出过这个服务,用以识别一段文本到底是不是由人工智能生成的。但很可惜,这个服务在推出六个月之后就下架了,原因是在实际应用中的准确性太低。在学术界,有专门针对识别 AI 生成代码这一问题展开的研究,比如最新 ICSE(软件工程领域顶级会议)上由上海交通大学主导的工作。他们统计了人写代码和 AI 生成的代码在 token 多样性、异常处理、简洁性、编码风格等几个方面的差异,最终算法大体是在代码行中插入空格和换行之后,去分析 token 分布的变化。
简单来讲,就是依赖编程风格来进行判断,但如果一个人代码写得非常规范和简洁,那么就有可能会被误判为是机器生成的。
从以上两个例子可以看出,不论业界还是学术上,都没有找到特别靠谱的方法。而且,这些工作设定的问题都是,给定一段代码(或文字),判断它是人写的还是 AI 写的。但在现实当中,代码往往是由人和机器在一起混合编写的,想要清晰界定两者的边界,几乎是不可能做到的事情。所以在实际当中,这些方法并不可行。总体而言,我们可以得出初步结论来终结这个问题,那就是在大多数情况下,代码写完入库之后,我们就不再有切实可行的方法,能够事后识别出哪些代码是人写的那些代码是 AI 生成的。
如何度量 AI 带来的成效?
既然如此,我们只能在代码生成的一个有限时间窗口之内去判断,常用的度量指标就是“采纳率”。但为了表述方便,我们先区分两个概念,一个是 “接受”,另一个是 “采纳”。
所谓 “接受”,指的是在代码补全的时候,工具给用户提供了一个推荐,用户觉得还不错,按下 Tab 键即为“接受”。所以,接受率的计算公式很简单:
接受率 = 接受次数 / 推荐次数
(人们有时称之为“采纳率”,注意用语与本文不同)。但这个指标有个问题,分母推荐次数是由工具来决定的。通常情况下,比较好用的代码补全工具并不会在每个词的后面都进行推荐,因为如果这样做的话,会对用户造成干扰。所以,这个分母会受到各种因素的影响。但不论如何,我们最终是想看保留在代码编辑窗口中的 AI 生成代码有多少。我们用“采纳”来指代这种情况,即 AI 生成的代码被接受并被修正后保留的部分,既可以按行来进行统计(行内忽略字符增删),也可以按字符来进行统计。为了与通常所说的“采纳率”区分,我们分别定义两种“生成占比”指标:
行生成占比 = 采纳的行数 / 新增的行数
,字符生成占比 = 采纳的字符数 / 新增的字符数
。当然,即便按字符统计,也不能做到尽善尽美。比如说,可能用户接受了 AI 生成的 n 个字符,但用户随后删除了多于 n 个字符,即把前面生成或输入的一些字符也删掉了,实际当中类似这种行为都有可能发生。那么此时采纳的字符数该如何校准呢?事情就变得有点复杂了,通常就采用简单的原则近似统计,不必过于纠结细节,因为并不影响统计性的结论。
除了代码生成时的度量,代码生成后虽然无法再区分哪些由 AI 生成,但是我们可以通过其他一些直接或者间接的指标来度量 AI 产生的效果。
在直接度量方面,AI 在比如写单测、接口测试等各个环节都有应用,我们直接度量其产生的效果就可以了,比如单测覆盖率、接口测试覆盖率、自动化测试用例数等。
在间接度量方面,我们可以查看在组织内部,AI 编程工具的活跃用户数量有多少,用户的满意度如何等等,通过这些人的反馈来了解大家使用 AI 的效果。另外,我们还可以通过整个组织的一些结果性的度量指标来进行判断。比如说,每月提交的代码量有没有增加、缺陷密度是否有改变、测试用例花费了多少成本等。比如在相同的测试人员的情况下,以前的自动化测试占多少,现在是否有提高。我们在事后去观察,当使用了 AI 之后,在一段时间内这些指标是否会发生一些变化,也是一种观察的角度。
总结起来说:度量的方式主要分为生成时度量和生成后度量。其中,有直接度量 AI 行为效果的指标,也有间接的指标。间接指标可以从交付的效率、质量、能力、成本等方面来进行度量,在每一个方面,都有指标可以观察 AI 引入之后的变化。
优先度量成本而非估算时间
还有一个观点想提出来。当我们统计了各类指标数据之后,可能会想要跟领导说,AI 让我们的研发效能整体提升了多少,比如 20% ——那么这个数字怎么得出来呢?各家技术博客里我们也看到了一些做法,偏向于通过时间估算。大概的思路是,根据调研得知程序员有比如 30% 的时间在写代码,有 20% 的时间写测试、x%的时间在干别的什么等等,然后再算算这块提高了多少,那块提高了多少,最后计算出一个整体数值。但是,我们并不主张采用这种做法,因为实际当中的偏差会比较大,依赖的信息不确定性太高了。虽然行业调研说程序员有 30% 的时间在写代码,但具体到每一个团队,实际写代码的时间占比可能不同,而且要获取这些时间数据也是非常困难的。我们就拿现在各位举个例子,大家回想一下,在今天上午的时间里,你有百分之多少的时间在专心听讲,又有百分之多少的时间在走神?报出这样的数据,是非常困难和不准确的。但是,你今天上午你花费的成本是明确固定的,用你的月工资除以 22 天,再除以 2,大体就可以得出你参加上午活动的工作成本。
所以相对而言,成本方面的估算会更准确一些。比如实际当中,我们可以通过一段时间测试团队的成本和自动化用例数估算出一个用例的成本,也可以算出修复一个代码缺陷的成本等等。这样,我们再去观察 AI 在这些方面是否带来了一些变化。这些变化就能够反映出在成本方面的作用。这样将研发事务“货币化”,可能更符合老板关注的重点。
除了应用 AI 前后跟自己比,我们还可以与行业数据进行对比。2024 年,我们发起了国内首次研发效能基准数据调研。在调研过程中,我们发现使用 AI 工具和不使用 AI 工具在数据上会呈现出一些不同。具体来说,使用 AI 工具的团队,需求交付周期短 18%,单测覆盖率高 23%。今年,我们会在此基础上,增加更多的指标,比如函数圈复杂度、代码评审相关的一些指标等等。
在这里,我们特别邀请各位以及各位所在的团队来参加我们今年的调研。去年的市场反馈非常好,大家普遍非常需要这样的行业数据。对于参与调研的团队,我们会免费提供思码逸度量平台的使用,以获得客观数据,经用户审查后上传;我们还会提供专属的报告和基准数据看板。
AI 如何帮助度量本身提质增效?
下面我们再来谈一谈 AI 在度量场景中的应用。基本上有两个应用角度。
第一个角度是,将 AI 应用于度量的对象之上。这样做的好处是,可以提升我们数据的准确度和健康度。以前我们在统计数据的时候,并没有足够的能力和资源去逐一检查被度量的对象。比如对于测试的覆盖度,我们无法一个一个地去检查每一个用例是否可靠,有没有只写了一堆assert true
。在现实当中,确实存在这样的案例。而利用 AI 就可以解决这样的问题。
再举另外一家客户的实例。我们现在可能会使用 Sonar 来扫描代码当中的缺陷,但有些漏洞的识别不一定特别有效,比如明文密码。这算是一种比较严重的安全事故,但是在实际当中,由于开发“手抖”导致密码明文露出的情况屡见不鲜,要通过 Sonar 或人工的方式筛查出各式各样密码泄露的情况是极其困难的。而 AI 大模型可以在这个场景中发挥作用。当我们给 AI 大模型提供合理的上下文和指南后,效果就非常不错。我们一共扫描了 9 个代码库,最后交给人工审查的有 140 处,经过人工最终确认的问题有 11 处。
第二个角度是,将 AI 应用于度量的结果之上。在我们得到研发效能数据之后,各位可能经常会需要撰写一些报告,而撰写报告是一件比较麻烦的事情。看这张图中,有两条曲线,蓝色的曲线代表某段时间的代码当量人均值(代码当量是通过程序分析计算的代码复杂度和规模指标),灰色的曲线代表同比时段。大体上我们能够看出一些趋势,但如果能够利用 AI 的话,就可以更加详细地对数据进行对比和描述。目前,我们还在尝试在这个分析过程中,更多地给大模型提供一些基本的研发效能领域知识,可能会让 AI 能够给我们提供更多的建议,从而使得我们在撰写报告的时候,能够更加轻松一些。
软件研发效能度量与 AI 大模型的关系
最后,我们来总结一下今天所讲的内容。基本上可以归纳为以下几点。
作者:任晶磊,思码逸创始人兼 CEO。思码逸(北京思码逸科技有限公司)成立于 2018 年,旗下产品 DevInsight 为企业研发团队提供专业的研发效能度量分析平台及配套解决方案。
评论