TDD

FizzBuzz - 越简单的问题越容易出问题

Posted by 孙继峰 on June 24, 2020

老板: 嘿! 我是你的老板, 我非常有钱, 我要雇你写一段 FizzBuzz


需求List

你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有200名学生在上课。游戏的规则是:

1.让所有学生拍成一队,然后按顺序报数。

2.学生报数时,如果所报数字是3的倍数,那么不能说该数字,而要说Fizz;如果所报数字是5的倍数,那么要说Buzz。


澄清需求

细心的你可能看出问题了, 老板没有说明既是3的倍数还是5的倍数的学生该报什么.

A: “肯定是老板忘说了, 那就是 FizzBuzz.”

B: “嗯….没说明那就还报数字吧.”

上面两位犯了一个致命的错误, 就是脑补, 脑补本身就不对, 脑补只是猜测, 猜测不经验证就是伪需求. 当我们遇到业务的问题, 不要自己脑补, 请去与需求方确认需求

老板: 如果即是3的倍数又是5的倍数的同学, 我想让他报 Uvuvwevwevwe Onyetenyevwe Ugwemuhwem Osas

???


新的需求List

你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有200名学生在上课。游戏的规则是:

1.让所有学生拍成一队,然后按顺序报数。

2.学生报数时,如果所报数字是3的倍数,那么不能说该数字,而要说Fizz;如果所报数字是5的倍数,那么要说Buzz。

3.如果即是3的倍数又是5的倍数时报 *Uvuvwevwevwe Onyetenyevwe Ugwemuhwem Osas*

完成的定义

A: 老板我写好了

老板: 好, 我看一下, 你这也没写测试用例呀?

A: 啊? 还要写测试?

老板: 你这里变量怎么是大写的? 这里代码的不能通过原有测试用例…..

问题根源在于二人对完成的定义不同, 从而导致结果南辕北辙. 在老板没有主动说明的情况下应该主动去问一下.

在开始工作之前先定制”DoD(Definition of Done)”, 例如:

  • 特性开发完成,表示开发人员经过了需求澄清、功能设计、编写代码、单元测试,通过了测试人员的验收,确保代码处于一 个可部署的状态,相关文档已经编写完毕。
  • 开发完成,表示开发人员编写好功能代码,编写好单元测试代码,编写好集成测试代码,测试可以通过,代码通过了代码⻛ 格检查、测试覆盖率检查。