Asana 如何用 Codex 在两周内清理掉五年的工程积压

2026-08-18 22 预计阅读时间: 1 分钟
来源: openai.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

Asana 使用 OpenAI Codex 重做一套过时的测试系统:原本预计需要五年的工程工作,在两周内完成,成本约为 12,000 美元。这个案例真正值得关注的,不只是代码生成速度,而是 AI 如何参与遗留系统替换、测试迁移和工程验证。

关键变化:从维护旧测试到重建测试能力

测试系统一旦过时,团队通常会陷入两难:继续维护它,工程师会不断为旧框架付出时间;直接替换它,又可能牵动大量测试用例、构建流程和发布门禁。

Asana 的做法说明,Codex 可以被用于更大范围的工程迁移,而不仅仅是生成几个函数。对于这类任务,AI 的价值通常集中在几个环节:

  • 阅读旧测试代码,识别重复模式和隐含约定。
  • 将测试用例映射到新系统的接口或执行模型。
  • 批量生成迁移后的测试代码。
  • 根据测试失败结果持续修正实现。
  • 协助补齐边界条件和回归验证。

这类工作之所以适合 AI 辅助,是因为它包含大量结构相似、规则明确但人工执行成本很高的操作。不过,“两周完成”不等于可以跳过设计和审查。测试系统本身承载着质量门禁,迁移过程中最危险的情况不是代码报错,而是测试悄悄失去覆盖能力。

速度来自可验证的工程闭环

把 AI 引入遗留系统改造,不能只看生成了多少代码,还要看每一步是否可以被验证。一个实用的闭环可以是:

  1. 先让 Codex 分析旧测试系统的目录结构、运行命令和失败分类。
  2. 选取一小组代表性测试,建立新旧系统的行为对照。
  3. 批量迁移相似测试,并保留原测试作为参照。
  4. 在持续集成环境中运行新旧两套测试,比较通过率和失败原因。
  5. 对差异进行人工审查,确认是测试框架差异、产品行为变化,还是迁移错误。
  6. 逐步扩大迁移范围,直到新系统承担正式质量门禁。

这个流程的核心不是“让模型一次生成正确答案”,而是把大任务拆成许多可以运行、比较和回滚的小步骤。对于测试迁移,测试结果、覆盖率、失败日志和构建状态都可以成为反馈信号。

一个可改造的迁移脚本示例

下面是一个独立的 Python 示例,演示如何把旧测试目录中的测试文件清单生成迁移任务。它不是 Asana 内部代码,而是一个可以按实际目录结构改造的最小实践:先收集输入,再生成明确的迁移提示,避免一开始就让 AI 直接改动整个仓库。

运行前,将 OLD_TEST_ROOT 改成旧测试系统的目录。脚本只读取文件并输出任务清单,不会修改源代码。

from pathlib import Path

OLD_TEST_ROOT = Path("tests_legacy")
NEW_TEST_ROOT = "tests_modern"


def build_migration_plan(root: Path) -> list[str]:
    if not root.exists():
        raise FileNotFoundError(f"Test directory does not exist: {root}")

    plan = []
    for source in sorted(root.rglob("test_*.py")):
        relative = source.relative_to(root)
        target = Path(NEW_TEST_ROOT) / relative
        plan.append(
            "Migrate this test file while preserving behavior:\n"
            f"- source: {source}\n"
            f"- target: {target}\n"
            "- preserve assertions and test intent\n"
            "- document framework-specific changes\n"
            "- do not weaken or delete assertions without evidence\n"
        )
    return plan


if __name__ == "__main__":
    tasks = build_migration_plan(OLD_TEST_ROOT)
    print(f"Generated {len(tasks)} migration tasks")
    for index, task in enumerate(tasks, start=1):
        print(f"\n## Task {index}\n{task}")

可以把输出任务交给 Codex,要求它一次处理一个文件,并在每次修改后运行对应测试。例如,团队可以采用类似下面的命令流程:

python build_migration_plan.py > migration_tasks.md
pytest tests_legacy/unit/test_users.py -q
pytest tests_modern/unit/test_users.py -q
pytest --cov=app --cov-report=term-missing tests_modern -q

命令中的路径需要替换成项目实际目录。关键检查点包括:新旧测试是否验证同一行为、断言数量是否异常减少、失败测试是否被正确分类,以及覆盖率是否出现无法解释的下降。

约 12,000 美元意味着什么

摘要给出的成本约为 12,000 美元。这个数字不能简单理解为“AI 以固定价格替代五年人工”,因为真实项目还包含人员监督、基础设施、代码审查和风险控制。更准确的理解是:当任务高度重复、输入输出边界清楚,并且拥有自动化验证时,AI 可能显著压缩交付周期和直接工程成本。

这也带来一个重要边界:如果旧系统没有可靠测试、构建结果不稳定,或者团队无法判断迁移前后的行为是否一致,Codex 生成得越快,错误传播得也可能越快。AI 适合加速可验证的迁移,不适合替代对系统行为的定义。

落地清单

准备使用 Codex 处理类似工程积压时,可以先确认:

  • 是否能在干净环境中重复运行旧测试。
  • 是否有明确的新旧系统对照指标。
  • 是否可以将迁移拆成单文件或单模块任务。
  • 是否保留原测试作为阶段性回归基线。
  • 是否要求 AI 解释删除、放宽或重写断言的原因。
  • 是否安排工程师审查测试覆盖和失败分类。

Asana 的案例给出的启发很具体:AI 编程工具的价值,不只在于写代码,而在于把大规模遗留系统工作变成一连串可执行、可观察、可审查的工程步骤。两周完成五年预期工作,依赖的不是一次神奇生成,而是任务拆解、自动验证和严格的质量边界共同发挥作用。


相关推荐