瑞典马工 /

运用迭代方法论让AI交付工业品质的软件

原文发布于 mp.weixin.qq.com

我经常听到一些朋友抱怨说AI写的代码不行,不能用。我认为原因是他们没有正确的采用迭代这个方法论。

迭代是通过多次尝试,不断的逼近一个固定的目标。

在软件开发领域,迭代几乎可以用于所有环节。我们从需求开始。

需求有几个常见的问题:

  1. 需求本身品质很差,无法理解。比如”给我写个女装电商网站”。
  2. 需求接收者的理解和发送端的意图不一致。这有可能是因为双方的context不同。
  3. 需求在变动。比如提出者开始要求”你的软件写完了,给我弄个安卓版,macos版,和Win版,要兼容Windows xp”,在得知成本后,他改成”做个web版算了”。

这几个问题,都可以通过迭代来加以改善。我现在的 Requirements Analyst 角色对一个需求会做一个决策:

  1. 如果需求本身无厘头,直接判定No further action。比如 A项目的需求填到B项目来了,或者”给我制定一个躺着发财计划”之类的。

  2. 如果需求明确,则把自己的理解和行动计划总结出来,并且作为comments发到issue管理系统(linear或者github issues)。这个文档会作为后续所有其他角色,developer, troubleshooter, security engineer的行为依据。

  3. 如果需求有意义但是不明确,则AI提出问题,把单子状态设定”等待澄清”,需求方则通过Issue comment予以解答。这个互动可以迭代多次,每一次都更让双方的理解更为一致。

以上第三条就是典型的迭代逼近,第一第二就是迭代的出口。有了这个流程,我们可以避免很多无效的工作。这个迭代发生于AI和产品经理之间。

但是当我们说需求明确的时候,是作为自然语言使用者这么说。而自然语言的可执行性并不太好。因此,我的Synthetic Engineering team还有一个环节是把需求翻译成测试用例。我的Analyst负责这个工作。 Analyst写完测试用例代码后,直接提交一个PR,人类程序员负责review,重点关注代码形式的测试用例是否和自然语言表达的需求相一致。如果不一致,则把状态置为Testcases Refining,并提出意见。之后AI Analyst根据意见予以修改。

这个迭代发生于AI和人类开发者之间。

在测试用例确定后,AI角色Developer开始工作。他的任务非常明确: 通过测试用例。我的实际经验,即使在熟悉的项目中,第一次implementation能通过测试的概率非常低,总是会有这样那样的问题。这个时候,troubleshooter就入场,通过分析测试用例,修改的代码,和错误信息,给出自己的修改意见,记录在troubleshooting.md中。然后developer根据改文档去修复。 这个互动可以进行好几次。

这个迭代发生于AI和AI之间。目前,我尽量不让人类介入,但是后面也可能加上。

总而言之,AI不是阿拉丁神灯,你不能光凭一句咒语就让你美梦成真。把 AI 视作和人类一样聪明,博学,急躁,有时候偷懒的同事,更为准确。组织起这么一批AI开发软件,和组织人类工程师开发软件一样,需要有良好的软件工程方法。

相关文章