【译】送给你的代码审查问题手册

快来领取这份代码审查问题手册!git

code review checklist

代码审查列表,是代码审查的明确规则和指导手册,它可使代码审查为你的团队带来更多好处,而且可以显著提高代码审查的速度。github

研究代表,使用代码审查列表的审阅者的表现要优于不使用的审阅者。因此无论你是新手开发者仍是经验丰富的开发者,开始考虑使用代码审查列表吧。设计模式

代码做者应该关注的列表

做为代码的做者,你应该保证:安全

  • 代码编译成功而且经过静态检查(没有警告)
  • 代码经过全部的测试(单元测试、集成测试和系统测试)
  • 你已经仔细检查了拼写错误,并作了处理(注释、todo等)
  • 概述代码修改的缘由以及修改了哪些地方

除此以外,做为代码做者,也应该在提交审查以前,按照审查者的列表对本身的代码进行审查。框架

代码审查者应该关注的列表

做为代码审查者,你的任务是寻找最重要的问题。评论会要对代码的结构性或逻辑性问题更有价值,即便有时候会显得挑剔。模块化

你应该知道什么是好的代码反馈。另外须要注意,最好的代码审查反馈不是点评,而是建议。因此不要说“变量名称应该是removeObject“,最好说”调用变量removeObject怎么样?“。函数

下面这份列表足够帮助你提出好的代码审查反馈了。工具

实现

  • 此代码更改会执行它应该作的事情吗?
  • 这种解决方法是最简单的吗?
  • 这个更改有引入一些不须要的编译时或运行时的依赖吗?
  • 是否使用了不该该使用的框架、API、库、服务?
  • 是否存在能够提高解决方法的未使用的框架、API、库、服务?
  • 代码是否处于正确的抽象级别?
  • 代码是否的模块化作的是否足够好?
  • 你是否有其余的解决方案,该方案在代码可维护性、可读性、性能、安全方面表现更好?
  • 是否已经存在相似功能的函数?若是有,为何不复用?
  • 是否有最佳实践、设计模式或特定语言模式能够优化代码?
  • 代码是否遵循面向对象的分析和设计原则,例如单一责任原则,开闭原则,里氏替换原则,接口隔离,依赖注入?

逻辑错误或Bug

  • 你能想到代码不按预期运行的任何用例吗?
  • 你能想到任何可能破坏代码的输入或外部事件吗?

错误处理和日志

  • 错误都被正确处理了吗?
  • 是否有须要增长或删除的日志/debug信息?
  • 错误消息对用户是否友好?
  • 是否有足够的日志,它们的编写方式是不是易于调试的?

可用性和可访问性

  • 从可用性角度出发,所提出的解决方案是否设计合理?
  • API文档是否足够好?
  • 提出的解决方案是否具有可访问性?
  • API/UI是否直观易用?

测试与可测试性

  • 代码是否达到可测试标准?
  • 是否有足够的自动化测试(单元测试/集成测试/系统测试)?
  • 现有测试是否合理覆盖代码变动?
  • 是否有额外的测试用例、输入或边界用例以供测试?

依赖

  • 若是这个修改须要更新代码之外的文件,例如更新文档,配置,readme文件。是否完成了这些更新?
  • 这个修改是否会对系统其余地方形成影响?是否能后向后兼容?

安全和隐私数据

  • 这段代码是否打开软件的安全漏洞?
  • 权限和身份验证是否被正确处理?
  • 是否安全处理了敏感数据,例如用户数据、信用卡信息等?是否正确使用加密方法?
  • 代码更改是否显露了一些私密信息(如迷药,用户名等)?
  • 若是代码处理用户输入,是否解决了跨站点脚本,SQL注入等安全漏洞,是否进行了输入清洗和验证?
  • 从外部API或库中得到的数据是否进行了相应的检查?

性能

  • 这段代码修改是否会对系统性能产生负面影响?
  • 是否能够进一步提高代码性能?

可读性

  • 代码是否容易理解?
  • 哪一部分使你困惑,为何?
  • 能够经过减少方法来提升代码可读性吗?
  • 能够经过使用不一样的函数/方法或变量名称来提高代码可读性吗?
  • 代码是否存放在正确的文件/目录/包?
  • 你是否定为方法应该重构以拥有更直观的控制流程?
  • 数据流是否可理解?
  • 是否有多余的注释?
  • 某些注释是否能够更好的传达信息?
  • 是否更多的注释会使你的代码更容易理解?
  • 是否能够移除一些注释,经过提高代码可读性来理解代码?
  • 是否存在注释掉的代码?

专家意见

  • 你是否定为特定专家(如安全专家或可用性专家)应该先检查代码,而后再提交代码?
  • 这个代码修改会影响其余团队吗?他们也应该发表意见吗?

好了,以上就是最为紧迫的一些问题列表。性能

代码风格和约定

您的团队或公司必须拥有清晰的编码风格指南,这一点很重要。由于这是在代码库中实施惟一性的惟一方法。而且一致性会使代码审查更快,令人们能够轻松地更改项目,并保持您代码的可读性和可维护性。单元测试

Google是作到这一点的很好的例子,无疑,这使Google能够进行快速的代码审查。

首先,我建议使用现成的编码样式来支持Google提供的多种语言。设定基本规则很重要,但要确保一劳永逸。不要持续争论。

尽量自动化

肯定了代码风格之后,请花一些时间正确安装和配置工具,以便一键格式化代码。

另外还有不少事情能够作。例如使用静态检查来代替部分人工审核。这是值得为之努力的。

完整问题列表

checklist

原文连接

www.michaelagreiler.com/code-review…

相关文章
相关标签/搜索