译者 | 布加迪
审校 | 重楼
2009年,DevOps(开发运维)作为一种运维模型而出现,适用于想要充分发挥敏捷软件开发方法潜力的团队。它使这些团队能够尽快地构建和部署,为快速、迭代的开发建立一种新的范式。
随之而来的是全球软件开发的爆炸式增长,DevSecOps、MLOps、AIOps、DataOps、CloudOps和GitOps等相关框架层出不穷。任何工程职能或核心开发技术都有相应的运维框架和市场类别来加以优化。
既然市面上有这么多的解决方案,为何企业仍难以将大量的“-Ops”策略转化为令人满意的速度和创新结果呢?随着组织不断适应不同的代码来源(专有代码、开源代码和大语言模型即LLM生成的代码等),它们如何使这些模型适应不同来源的代码?
CodeOps(代码运维)应运而生,这种新兴方法使用完全拥有和可重用的代码快速构建软件产品。它利用生成式AI和模块化编码概念来加快开发过程,加强创新,并最终推动更快的数字产品开发。
CodeOps的工作机理
与敏捷方法一样,CodeOps旨在支持并加速企业内部的软件开发。然而,它不是针对敏捷性进行优化,而是针对重用进行优化——重用规范、设计、架构、数据模型、集成以及代码本身。
长期以来,重用现有代码一直是工程师们的一种自然做法。当应用程序在规划阶段看起来相似时,你可以立即识别出一种合用的架构,并通过自动组装其核心部分来快速启动代码库。优秀的开发人员知道这一点,偶然会重用他们自己开发的或在开源代码库中找到的代码组件。
然而,开发人员层面重用带来的影响完全依赖团队的成熟程度,通常没有流程或工具来确保它在整个组织中有效地扩展以提供好处。只有通过系统性重用才能发挥这种潜力,即认证模块集中提供,并且易于发现,用在参与应用程序开发的诸团队中。
因此,希望利用CodeOps概念的组织应该为范式转变做好准备。系统性的代码重用是开发流程迈出的革命性一步。它需要创建一个集中式存储库来容纳认证的模块,这些模块经过了必要的审查和广泛的测试,以确保功能和安全。目的是创建一大批模块,可以无缝地部署到不同的项目和团队中。
利用生成式AI确保投资回报最大化
CodeOps也很容易适应人机混合开发领域的新趋势。如今,大多数团队都了解生成式AI的潜力,可以充当伺机集成的智能助手。然而,他们不确定如何规划和跟踪对业务结果的影响,并确保这方面的影响最大化。
通过重构团队构建软件的方式,CodeOps为了解生成式AI的投资回报提供了一个框架。它确定大语言模型使用的优先级如下所示:
1. 根据项目规范对现有模块进行组合。
2. 创建与战略性模块路线图一致的新模块。
3. 为非模块化用例生成自定义代码。
在模块组合方面,大语言模型已经达到或超过了人类的表现。模块组合是指这项任务:对照自定义的产品描述或详细规范,对已存储的模块目录进行模式匹配。这种方法可以显著地减少传统软件开发生命周期的“规划和调校”阶段,因此为不懂技术的利益相关者节省了时间,并缩短了总体开发时间。
大语言模型还非常适合根据自定义参数创建新模块。如果提示足够清晰,或者有足够的组织现有代码的训练集,它们就能够将团队现有的代码标准推而广之,从而生成新的、可重用的规范和代码模块。采用系统性代码重用的组织因此可以根据内部代码标准,快速填充其模块目录,与通过手动创建模块相比,可以在极短的时间内大幅提高生产力。
最后,CodeOps很容易整合由不同开发人员生成的“Copilot”风格的AI代码。然而在CodeOps领域,这种用法局限于定制开发的最后一英里,这是初始模块组合未能涵盖的。这减少了团队今天面临的投资回报模糊性:一些开发人员频繁使用AI,一些却很少使用AI,但有了CodeOps,你可以确定AI在代码库的哪些部分有望为团队提升生产力,然后相应地进行优化。
实战中的CodeOps
说到重用代码模块,有两个主要的参数需要考虑:覆盖率和可重用性。覆盖率指典型应用程序中多少部分是由特定类型的模块组成的,而可重用性指特定类型的模块在不同项目中可使用的可能性。
以下是理解覆盖率和可重用性的几个一般规则:
模块层 | 示例 | 占典型应用程序 的百分比(覆盖率) | 可重用性 |
基础设施 定义和部署 | CI/CD管道 | 5% | 高 |
连接到远程 服务 | 身份验证 | 20% | 高 |
与基础服务 相关的应用 程序逻辑 | 身份验证 逻辑 | 20% | 高 |
样式 | 乐高资产 | 5% | 高 |
数据库模型 | 用户表 | 10% | 中 |
屏幕布局 | 活动源UI | 15% | 中 |
与差异化功 能相关的应 用程序逻辑 | 产品推荐 算法 | 25% | 低 |
值得一提的是,应用程序中最大一部分代码并不总是重用性最强的。这种区别可以帮助团队理解在致力于模块开发时如何做出正确的取舍。在CodeOps方法中,模块的构建应该首先根据可重用性而不是覆盖率来确定优先级,以确保实现的价值最大化。
为了理解CodeOps如何影响某个项目,不妨考虑采用CodeOps和不采用CodeOps的示例性的个人理财应用程序开发时间表:
不采用系统性重用
- 项目工期:28周
- 项目细分:
- 需求分析:2周
- 设计:2周
- 编码:
- 身份验证流程:3周
- 支付处理集成:4周
- 数据验证功能:2周
- 报告功能:3周
- 额外的自定义功能:6周
- 测试和调试:4周
- 部署:2周
采用系统性重用(CodeOps方法)
项目工期:16周
项目细分:
- 需求分析:1周(重用的规范)
- 设计:1周(重用的设计)
- 编码:
- 身份验证模块(重用):1周(集成和定制)
- 支付处理模块(重用):1周(集成和定制)
- 数据验证模块(重用):1周(集成和定制)
- 报告模块(重用):1周(集成和定制)
- 额外的自定义功能:5周(AI Copilot辅助))
- 测试和调试:3周(由于重用的认证模块,代码错误和不一致有所减少)
- 部署:2周
值得注意的是CodeOps的整个周期影响。它在整个过程中的多个节点为多个团队提升了生产力,不需要这些团队大幅改动工作流程。
系统性代码重用的好处
实施系统性代码重用带来了几个明显的业务优势,包括如下:
- 增强灵活性:通过允许开发团队使用组织的代码访问预认证模块的存储库,他们可以定制代码,并创建完全符合独特业务需求的应用程序。
- 保证一致性:系统性代码重用确保了应用程序之间具有一致性。多个团队使用相同的认证模块可以最大限度地减少不一致性,并降低遇到错误、安全漏洞或兼容问题的风险。
- 加快学习:有了系统性代码重用,开发人员可以从团队成员和同事所做的工作中学习和完善。这创建了一个组织知识库,缩短了新团队成员的学习过程,并且在组织内打造一种倡导协作和创新的文化。
- 降低风险:经过严格测试和认证的代码模块是成熟可靠的,降低了开发和测试过程中或发布后出现关键安全或合规问题的可能性。
- 致力于创新:通过将开发团队从不断处理重复性的任务中解放出来,系统性代码重用鼓励他们将精力投入到令人兴奋的创新上。他们可以分配更多的时间和资源,以构建独特和有价值的功能,而且结果更易于预测,同时缩短产品上市时间,以生成新的收入或节省成本。
一种更好的构建方式
最终,拥抱系统性代码可重用性的CodeOps方法通过显著加快交付速度、提升生产力以及在竞争激烈的技术环境中促进创新和协作,彻底改变了自定义应用程序开发。新产品的构建和创新是技术界有趣的部分,这意味着利用CodeOps的组织不仅可以创造较之竞争对手的优势,还可以提升内部团队的生产力和士气。
原文标题:CodeOps: Using LLMs and modular coding to accelerate development,作者:Anand Kulkarni