复习 FizzBuzz


题目

游戏的规则是:

让所有学生,假设为 100 人拍成一队,然后按顺序报数。

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


需求问题:

  • 被3和5整除返回什么?
  • 有的同学就直接脑补了:
    • 脑补一:能被3和5整除,那就是先被3整除呗,那就Fizz。
    • 脑补二:能被3和5整除,那就返回FizzBuzz呗。
    • 那么以上哪个脑补是对的呢?
  • ……

进一步明确:

  • 让所有学生拍成一队,然后按顺序报数。
  • 学生报数时,如果所报数字是3的倍数,那么不能说该数字,而要说Fizz;如果所报数字是5的倍数,那么要说Buzz。
  • 学生报数时,如果所报数字同时是两个特殊数的倍数,也要特殊处理,比如3和5的倍数,那么不能说该数字,而是要说FizzBuzz。

需求增加了!

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

3 Fizz;5 Buzz;7 Whizz。

学生报数时,如果所报数字同时是两个特殊数的倍数情况下,也要特殊处理,比如3和5的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。


需求又双叒增加了!

3 Fizz;5 Buzz;7 Whizz。

3和5的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。

学生报数时,如果所报数字包含了3,那么也不能说该数字,而是要说相应的单词,比如要报13的同学应该说Fizz。 如果数字中包含了3,那么忽略规则2和规则3,比如要报35的同学只报Fizz,不报BuzzWhizz。


你的代码什么样?

  • 过程依赖
  • 数据依赖
  • 可测试性


用户故事和任务

任务就分为这几类:

  • 沟通协调(技术类的,非需求类的)
  • 技术调研
  • 原型测试
  • 编码实现

TDD 的思考

  • 回归、人肉回归 vs 自动化测试
  • 核心原因:不会把程序从输入输出角度进行拆解
  • 编程的时候,很多问题不是智力问题,而是心理问题。
  • 另一个原因:不会改程序。
  • 不能从输入输出角度进行思考是人们没有办法写出高质量程序的一个原因。
  • 先确认需求,再实现,需求以测试的形式写出来,然后再去实现,这就是TDD了。

TDD 需所见博,所临多,熟重构之体变,通红绿重构之迭代,尽得于目,盖存于心,尽应于手,如蜂采花,酝酿久之,变化纵横,自有成效。

说人话:练习射球二万次。就吓跑了。[旺柴]


参考


还没完?

  • 下一个数字是多少? 11?
  • 再下一个数字是多少? 19?
  • 再下一个呢?规律是什么,有什么条件?
  • 如何列出这个数字序列?
  • 这才是真正要考你的程序题!哈哈……