360Qtest专栏 [译文] Google 厕所的代码测试题

丁老九 · 2018年03月27日 · 1370 次阅读

原文标题:Code Health: Reduce Nesting, Reduce Complexity
发布日期:美国时间 2017-06-05
发布渠道:Google Testing Blog
文章作者:Elliott Karpilovsky
文章译者:丁老九

这是我们代码健康系列的另一篇文章。这篇文章的一个版本最初出现在世界各地的谷歌浴室,作为一个谷歌的厕所事件测试。你可以下载一个友好的版本在你的办公室显示。
—— Elliott Karpilovsky

深度嵌套的代码会大大降低代码可读性,并且容易出错。
请尝试在以下两个版本的代码中发现错误:

这里写图片描述

答案揭晓:
代码中输出wrong encodingunauthorized错误信息的语句所对应的判断条件发生混淆,实际应该调换一下判断条件。这个 bug 在上图中蓝色区域的代码版本中需要层层抽丝剥茧才能发现,而在绿色区域的重构版本中能更容易的发现。

上面绿色区域的重构技术称为保护语句。一条保护语句只检查一个异常逻辑,如果条件没有满足,就能立即反馈当前程序出现的问题。最终实现将计算逻辑与错误逻辑分离开来。当我们在阅读逻辑分离后的代码结构时,思维也会立即转变为错误处理语句块和正常计算处理语句块,对比之前的if-else四重嵌套结构,重构版本更易于阅读和维护。

以下准则能帮助你在代码中尽量减少嵌套:

  1. 条件语句块尽量的简短。
  2. 当循环和分支超过两层时,考虑重构。
  3. 将嵌套逻辑移动到单独的函数中。例如,如果您需要遍历每个包含列表的对象列表(例如带有重复字段的协议缓冲区),则可以定义一个函数来处理每个对象,而不是使用双重嵌套循环。

减少嵌套会让代码可读性更好,同时也能更容易的找出 bug,开发人员可以更快的迭代,程序也会越来越稳定。
简化代码,让编程更轻松!

原文地址

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册