背景

2016年九月,我有一段时间在客户现场做咨询工作。我当时所在的团队是一个比较典型的传统软件团队。之所以说它典型,是因为团队还在采用“瀑布”开发模式,比如设计先行,前台后台分别开发,最终在集成时会发现大量问题,开发过程中需求变更会导致很多返工等等。

飞龙是客户的领导,他很早就意识到了当前这种做法的弊端,也想要通过顾问的咨询帮助团队建立比较轻量级的流程,缩短反馈周期,用小步迭代的方式进行交付。我主要负责一部分团队成员对于敏捷开发中一些核心实践的技能提升。

我们一起学习了诸如INVEST原则,SMART原则等拆分需求的方法。团队很快就看到了这种做法的好处,所谓的联调(集成)被包含在了每一个用户故事的验收中,而且每个用户故事都在强调用户价值。很快,负责业务分析的同事都可以将学到的原则应用到实际的场景中。

有一天,飞龙找到了我。他觉得这种培训加实践的方式见效有点慢,而且很多压力都集中到了负责业务分析的同事身上。他问我有没有可能写一个程序来实现需求拆分的功能。我当时心里的真实感受是“你确定不是在搞笑?”。不过基于对客户的尊重,我只好说这个不是很现实,且不论需求的格式如何描述,单就程序如何理解这些需求的含义,以及如何将诸如独立性,可协商性等原则用形式化的表现出来听着就不太现实。

我觉得这是一个荒谬的天方夜谭,甚至在朋友圈里还戏谑了一番(为什么配这张图我已经不记得了,大概是五味杂陈的意思吧?)。

moment

这条朋友圈里好多有趣的评论,大概可以分为三类。

  1. 这个想法不现实,或者至少在几十年内不现实
  2. 云拆分 — 请一些专业BA在后台人工拆分,然后做一个前端页面呈现
  3. 大约可以使用人工智能(深度学习)来解决,但是成本未知,可行性未知

无论如何,想要自动化这些看似简单,有迹可循的工作,在当时(2016年)众多专业的技术人员看起来是不切合实际的。我们大多只是把它当成一个有趣的,诸如五彩斑斓的黑,或者logo缩小的同事能不能放大一点这样的段子。

后来虽然偶尔我也会想起这个段子,不过大部分时候是作为笑谈的。直到最近我在试用OpenAI的API的时候,还是在朋友圈,我看到之前评论过上这条朋友圈的一位BA同事的回复。我突然想到了飞龙的这个“奇葩”需求:**能不能用一个工具自动化拆分需求呢?**我决定问问ChatGPT

ChatGPT

ChatGPT的横空出世,颠覆了人们对于”弱智”AI的看法。它可以非常流畅的“读懂”自然语言,豪不费力有模有样的给出问题的答案。虽然往往会有比较低级的谬误,但是如果给予一些纠正,它似乎可以很快掌握规律并给出正确的答案。

自动化需求拆分

接下来我会记录我和ChatGPT的这次非常有趣会话。我先从一个比较简单的问题出发:

step 1

看起来还不错,已经可以和职业的BA的理解差不多了。于是我请它来拆分一个具体的需求:

step 2

第一次纠正

这个回答有失水准,它错误的把每一条原则应用到了一个故事卡上。于是我尝试纠正它:

step 3

这次的回答靠谱了很多。这里看似平常的对话其实非常复杂,比如上下文,比如“理解”我描述的“INVEST应该是对每个故事卡都是如此,而不是一个故事对应一个原则”这句话,并且理解纠正之前的描述。

第二次纠正

接下来,我发现第五条也不准确,通常测试应该内置到每一个故事卡中,以便验收。所以我提出了质疑:

step 4

再一次它基于反馈做出了修改。现在每一个故事卡都有了初步的样子,基本上符合INVEST。于是我换了一个需求,一个毫不相干的上下文:一个天气应用。

举一反三

就像我们人类学习那样,如果一个人学会了两个苹果加上三个苹果等于五个苹果,那把苹果换成香蕉或者西瓜或者汽车都一样。如果能做到举一反三,不论其背后的原理是什么,我们大约可以认为它真的掌握了某项技术。

step 5

可以看到,ChatGPT已经可以正确拆分一个和用户登录完全无关的需求。这个例子事实上是我在一个教程中使用的例子,我自己实现的时候也是按照这种方式拆分的 — 也就是说,ChatGPT的模型可以至少达到一个践行了INVEST多年的从业者的水平。

会写代码的BA

不过这还没有完,理解上下文并给出文本描述只是它的一小部分功能。它还会写代码:

step 6

从生成的代码中挑出一些瑕疵大概是作为程序员的我最后的倔强了。假以时日,它大概率会写出比我的代码更好的代码。

这挺让人绝望的,不是吗?人工智能可以在极短的时间内掌握一个普通人穷其一生也无法掌握的知识。在这个强大的对手面前,我们还有希望吗?我觉得这取决于你如何看待它,如果你将其作为对手,则毫无胜算,但是如果反过来将其作为朋友,或者助手呢?

人工智能是你的好帮手

ChatGPT或者大部分现有的AI工具,很大程度上无法独立的完成创造性的工作。但是如果反过来,我们提供prompt,然后review这些工具生成的内容,则可以成十倍的提高我们的效率。

一个典型的例子是写博客。比如我想写一篇介绍TDD(测试驱动开发)的流程博客。在介绍践行TDD的好处时,我能立即想到4-5条,但是词句不是完美,也可能由于收到知识诅咒的原因,列不出一些我自己深以为然但又一时想不起来的的点。

这时候我可以让AI工具帮我生成一个提纲,然后我只需要补充具体的例子即可。

TDD

我认为这正是使用AI工具的正确方式,即将其作为一个助手,主动权仍然在作为人类的你的手中。就像最近经常听到的那句话:人工智能不会替代你,但是会使用人工智能的人会

小结

ChatGPT的问世绝对是颠覆性的,很多职位,甚至行业都会发生巨大的变化。不过和其他很多新工具的发明一样,它在带来挑战的同时也带来的机遇。在我看来,学习并最大化发挥AI的价值可能会帮助你比以前刚快的脱颖而出。就好比在过去,身高1米8和身高1米5的人,站在一起看起来差异很大。而如果站在AI这个身高2000米的巨人的肩头,两者的差距就不再那么明显,甚至难以觉察。不过,不论是他们中的那个高个子还是矮个子,比起之前的任何一位NBA球员而言,则不可同日而语