如影何衡量 响GenAIon 软件编码和单元测试? CONTENTS 01Introduction 02GenAI将如何影响软件编程? 03为什么测量很重要? 04衡量GenAI影响的挑战 05建立测量协议 见1解0结果:来自实际尺寸实验的测量的关键 11Conclusion 12关于作者 测量协议:对软件编码和单元测试的预期影响是什么?GenAI 随着生成式人工智能(GenAI)继续渗透到我们日常生活的几乎每一个方面,它对软件设计、编码和单元测试的影响既不可避免又令人兴奋。但这些预期影响是什么?如何衡量它们?如何定义一个经过验证的测量协议?而实际规模的实验又揭示了什么? 生成型AI可以在软件工程师使用设计和编码将用户故事转化为软件时提供协助。它可以被利用来创建诸如用户界面原型、实体模型和接口等设计输出。这可以显著提高生产力,而不牺牲质量。但是,只有在由专家实施测量过程的情况下,才能感受到全部的好处。 1测量协议:对软件编码和单元测试的预期影响是什么?GenAI HowwillGenAI 影响软件编程? 这在实践中意味着什么?例如,软件工程师可以使用简单的语言来描述软件功能的预期功能,然后审查、更新和验证生成的输出。其他示例包括代码自动补全、生成单元测试代码、(重新)编写文档以及从一种编程语言迁移到另一种语言。当然,生成式AI已经得到了开发者的重视,因为它可以在编码过程中支持他们。它既可以直接建议干净的代码,也可以评估现有代码以提高软件质量,如果发现问题的话。 首先,根据企业和组织的观点,通用人工智能(GenAI )将对软件编程产生什么影响?我们的最新Capgemini研究机构报告显示:1报告表明,61%的组织认为促进更多创新性工作,如开发新的软件功能和服务,是生成人工智能(GenAI)的主要益处。紧随其后的是提高软件质量(49%)和增加生产效率(40%)。组织正在利用这些生产效率提升来从事创新性工作,例如开发新的软件功能(50%)和技能提升(47%)。很少有组织打算通过这种方式减少员工数量(4%)。2 生成型AIpoisedtoredefineconventionalprogrammingpracticesbyshiftingthefocusfromcodingtopromptengineeringandcodeproofreading.这一点得到了OpenAI计算机科学家AndrejKarpathy的完美表达,他最近表示:“目前最热门的编程语言是英语。”3.” 软件质量可追溯到早期测试阶段,在此阶段,单元测试用例和/或相关测试数据集未能涵盖所有可能的用户输入和场景。生成式AI可以协助开发人员编写更为完整的单元测试用例,其中用户故事能够提供即时工程背景以确保最大程度的相关性。它能够生成大量与真实世界数据高度相似的合成信息,以确保高覆盖率的单元测试。 尽管通用人工智能(GenAI)在软件工程领域的应用仍处于早期阶段,仍有90%的组织尚未规模化应用,但27%的组织正在运行大规模的GenAI实验性项目,而11%的组织已经开始在其软件功能中利用GenAI。到2026年,GenAI预计将在软件设计、开发和测试工作中发挥关键作用,协助超过25%的工作。4 [1]凯捷研究所“涡轮充电软件”,2024年6月 [2]凯捷研究所“涡轮充电软件”,2024年6月 [3]https://twitter.com/karpathy/status/1617979122625712128?lang=en-GB [4]凯捷研究所“涡轮充电软件”,2024年6月 为什么测量很重要? 在现代技术快速演变的背景下,做出明智的决策对于成功至关重要。然而,在充斥着数据的世界中,提取有意义的见解可能是一项艰巨的任务。因此,建立一个测量框架是必不可少的。它如同航行的指南针,在信息的汪洋大海中引导团队从原始数据走向可执行的决策。 衡量生成式AI(GenAI)的表现确保其达到预期目标 ,无论是提高效率、提升准确性还是降低费用。这还有助于识别改进领域,指导进一步的发展和优化。并且它提供了问责制,向利益相关者展示其价值和投资回✲率(ROI)。 同时,测量使我们能够量化属性,从而更有效地进行比较、分析和理解。它还允许跟踪进度和评估绩效,并提供数据驱动的见解以指导决策过程。 测量方面的挑战 GenAI影响 “量化的绩效得以管理”这句老话在生成式AI的新范式中依然适用。实施固然重要,但测量至关重要。然而,衡量生产力由于软件开发生命周期(SDLC)中开发工作的多面性、其发生于不断变化和演进的环境以及其固有的主观性和无形性,本身就具有复杂性。有效的测量需要一种全面的方法,考虑定性和定量因素,包括具体情境下的考量。 测量软件质量是一项挑战,因为它涵盖了多个维度 ,包括功能、性能、可靠性、易用性、可维护性、安全性和可扩展性。评估质量需要考虑这些多样化的方面,每个方面都有其自身的度量标准和标准。另一个挑战在于不同的利益相关方有不同的优先级 ,无论是客户、企业、架构师、开发人员、测试人员还是运维人员。 来自将每天使用GenAI的软件工程师的反馈也需要考虑。这是一个重要的话题,因为GenAI对开发环境和他们的工作方式产生了影响。 近九成(86%)年收入超过500亿美元的大型企业已经采用(试点/规模化部署)通用人工智能,而年收入在1-5亿美元的小型企业中仅有23%采用了此类技术。5 [5]凯捷研究所“涡轮充电软件”,2024年6月 建立测量协议 现在让我们专注于如何定义和实施一个实际的测量协议,以清晰地了解通用人工智能(GenAI)在编码及作为定制应用程序开发一部分的单元测试方面的影响力。 几乎一半的受访组织(48%)尚未定义衡量软件工程中生成式AI使用成功与否的指标。我们还发现,目前似乎没有统一的标准来衡量生产效率。6 生产力指标,如部署时间或解决问题的时间,未能全面捕捉生成式AI(GenAI)带来的益处。特别是在非常规的生产力衡量标准上,如员工满意度,这些指标更适合通过DORA和SPACE等度量框架来捕捉。7然而,DORA和SPACE尚未得到广泛应用,因为它们的实施成本高且耗时。这一发现表明,包括速度、质量 、安全性和开发者体验关键绩效指标(KPI)的一套指标可能是有用的。8 我们的调查揭示了一个关于常用指标的重要事实。虽然它们适合常规 [6]凯捷研究所“涡轮充电软件”,2024年6月 [7]DORA—通过诸如变更LeadTime、部署频率、平均恢复时间以及变更失败率等指标,衡量组织在速度与稳定性之间的平衡程度。SPACE评估指标试图全面评估团队动态和开发者体验。它在评估技术输出的同时关注开发者的福祉,而传统的评估指标则未能做到这一点。 [8]凯捷研究所“涡轮充电软件”,2024年6月 大多数组织在使用生成式人工智能(GenAI)时,根据如SPACE和DevOps研究与评估(DORA 主要使用的指标与受以下因素影响的指标使用生成AI DORA(DevOps研究与评估)...已完成的用户情景点数 代码流失 空间指标 32% 71% 30% 19% 72% 16% 73% 0% 20% 40% 60% 80% 组织中使用的关键指标 由于GenAI的使用而显示出积极影响的指标 21% )等较少流行但更为综合的生产力指标框架进行衡量时,显示出改善。 冲刺和释放燃尽/团队速度 42% 61% 发布周期/部署时间 41% 51% 更改故障率 39% 52% 拉取请求解决时间 38% 62% 代码提交频率 37% 69% 该测量协议提供了一个明确的过程,生成可理解、可比较和可靠的結果。 组件-测量协议由什么组成? •团队组织:通过使用并行团队、影子团队或多元金字塔团队等不同模式,组织团队以实现显著且可执行的结果。 •测量方法:确定测量的时间线和过程,包括准备阶段、基准设定和执行过程。 •测量指标:识别用于衡量通用人工智能(GenAI )对软件工程影响的指标,如编码速度、代码质量 、代码安全性以及开发者体验。 •测量工具:确定用于收集和分析指标的工具,如SonarQube、CAST、Jira或开发者调查。 •前提条件与成功因素:建立确保稳定和一致测量所需满足和考虑的条件与因素,包括团队稳定性、持续时间、积压任务、技术、工具、法律以及网络安全。 •规范化过程:定义在实验执行过程中如何管理不稳定性与变异性,例如团队规模、容量或复杂性的变化,并据此调整相应的指标。 •定性反馈:建立一种机制以收集有关开发人员整体体验的信息,形式可以是调查问卷或逐字✲告。需要注意的是,负面体验往往能提供最有价值的学习内容。 •测量✲告:选择适用于呈现和传达测量结果的模板和格式,涵盖详细和高层管理需求。 指标-在实际尺寸实验期间将评估哪些数据? 除了建立并启用必要的组件之外,还需要定义将在实际规模实验中评估的指标。这些是需要测量和分析的基本数据点。 •速度:这应该在不同的水平上测量,因为它是最重要的指标。 编码速度:这是团队生产力(编码和单元测试)的关键指标,通常用实现的故事点数来衡量。 •单元测试覆盖率:评估软件质量和可靠性的关键指标 。为了保持简单,我们专注于指令覆盖(C0),因为大多数工具都是以此为基础进行测量的。 •代码效率:衡量软件中潜在的性能和可扩展性瓶颈。为了保持简单,我们专注于静态代码分析而不进行运行时分析(例如,使用性能分析器)。这并非行业标准,但却是客户认为极具价值的指标。 开发者能力/资深程度的编码速度:根据开发者的不同能力(良好、一般、较差),计算在有和无生成式AI辅助的情况下完成“X”故事点所花费的时间。 编码速度按复杂性计算:根据故事复杂性(简单 、中等和复杂),计算所需用户故事点数,有无通用人工智能辅助下的差异。 •代码安全性:确定应用程序的漏洞问题风险和违规概率。 •代码气味:指可能需要注意或重构的不良或有问题的代码的指标。 •代码重复:突出代码基中不同部分存在的相同或相似代码片段。借助生成式AI,更容易创建代码重复。 团队组织-什么最有效? 执行测量协议需要参与适当的用户故事积压。 但在测量过程中应该涉及多少个团队?在我们看来,尽可能多地涉及多个团队可以最大限度地减少人为因素的影响。 •单一团队:同一团队在同一用户故事大小/复杂性的情况下,有无GenAI辅助的顺序执行待办事项列表 。 •多个团队:至少两个团队在有和没有GenAI帮助的情况下并行执行相同的积压工作。 团队设置-最佳组合是什么? 团队的资历或能力对于标准化工作非常重要。因此,了解负责定义待处理任务的团队组合类型是必不可少的。 •高级成员金字塔:由高技能且能力强的团队成员构成 。无需进行培训、指导或详细的代码审查。在理想情况下,这被视为最高标准。 •团队成员层次结构均衡:资深员工与初级员工比例适当。资深员工在日常工作中同时进行指导、mentorship和审核工作。 •部门成员的初级金字塔结构:初级成员占多数。这要求重点关注教练、指导和审查,因为资深团队成员数量较少。 同一团队(addt'l) Team2(使用addt'l工具) Team2(Freshers-withCopilot) Team1(平衡-与addt'|工具) Team1(平衡-带副驾驶) Team1(平衡-无Al) Legal&Licenses间隙 同一团队(addt'l) 同一团队(addt'l工具) 同一团队(带Copilot) (w/oAI) 现有团队 持续✲告 多团队方法 在有和没有Al增强的情况下并行执行相同的需求 至试验基线 6周 (3个冲刺) Legal&Licenses间隙 同一团队 (使用addt'l工具) 同一团队 (使用addt'l工具) 同一团队 (带Copilot) 现有团队 (w/oAI) ✲告 ✲告 ✲告 ✲告 ✲告 至试验基线 单一团队 由试点核心团队支持的现有项