专栏名称: 聊聊架构
在这里煮酒聊架构。
目录
相关文章推荐
高可用架构  ·  微信读书后台架构演进之路 ·  19 小时前  
架构师之路  ·  全球软件工程技术大会,送福利! ·  昨天  
字节跳动技术团队  ·  IJCAI 25 | ... ·  昨天  
架构师之路  ·  美团的童鞋,有个问题麻烦您帮忙看一下... ·  2 天前  
高可用架构  ·  这家公司对网关性能的优化历程,在 ... ·  2 天前  
51好读  ›  专栏  ›  聊聊架构

整天说Code Review重要,你知道应该关注哪些关键点吗?

聊聊架构  · 公众号  · 架构  · 2016-10-25 19:24

正文

请到「今天看啥」查看全文


  • 代码是否真的达到了预期的目标?如果有自动化测试来确保代码的正确性,测试的代码是否真的可以验证代码达到了协定的需求?

  • 代码看上去是否包含不明显的bug,比如使用错误的变量进行检查,或误把and写成or?

你是否考虑过……?

  • 是否需要满足相关监管需求?

  • 作者是否需要创建公共文档或修改现存的帮助文档?

  • 是否检查了面向用户的信息的正确性?

  • 是否有会在生产环境中导致应用停止运行的明显错误?代码是否会错误地指向测试数据库,是否存在应在真实服务中移除的硬编码的stub代码?

  • 你对性能的需求是什么,你是否考虑了安全问题?这些是需要覆盖到的重大区域也是至关重要的话题。

让我们深入探讨下性能,这是一个真正能从代码审查中获益的方面。

系统对性能方面的非功能性需求应当同所有架构、设计的领域一样被置于重要位置。无论你是开发只容许纳秒级延时的低延迟交易系统,还是管理“待办事项”的手机应用,你都应该了解用户所认为的“太慢”。

在考虑我们是否需要就代码性能进行代码审查之前,我们应该问自己几个关于具体需求是什么的问题。虽然一些应用确实不需要考虑每毫秒都花费在哪里,对于大部分应用,花费几个小时的折腾进行优化来获得的些许CPU下降的价值也是有限的,但有些地方还是审查者可以检查一下的,进而确保代码不会有一些常见可避免的性能缺陷。

这段代码是否有硬性的性能需求?

接受审查的代码是否涉及之前发布的服务等级协议(SLA)?或这个需求本身有特别的性能需求?

如果代码导致“登录页面加载太慢”,那原始的开发者需要找出合适的加载时间是多久,不然审查者或作者本人如何确保改进后的速度足够快?

如果有硬性的需求,是否有测试能证明满足了该需求?任何注重性能的系统应该就性能提供自动化测试,这能确保发布的SLA达到预期(如所有订单请求要在10毫秒内处理)。没有这些,你只能依靠你的用户来告诉你没有达到对应的SLA。这不仅是一种糟糕的用户体验,还会带来原本可避免的罚金和支出。

这个修复或新增的功能是否会反向影响到任何现存的性能测试结果

如果你定期运行性能测试或有测试套件可以按需运行它们,那你就需要检查新的代码是否使得性能关键区域的系统性能有所下降。这可以是一个自动化的流程,但由于在持续集成环境中更常运行单元测试而不是性能测试,所以值得特别指出可以在代码审查中检查这项。

调用外部的服务或应用的代价是昂贵的

任何通过网路来使用外部系统的方式通常会比没有很好优化的方法有更差的性能。考虑以下几点:

  1. 调用数据库:最坏的情况是问题隐藏在系统抽象中,如关系对象映射(ORM)中。但是在代码审查中你应该可以找到常见的导致性能问题的问题,如在循环中逐个调用数据库,一种情况就是加载ID列表之后,再在数据库中逐个查询ID对应的每条数据。

  2. 不必要的网络调用:就像数据库一样,远程服务有时也会被过度使用,原来只要一个远程调用就可实现的,或者可以使用批量或缓存防止昂贵网络调用的,却使用多个远程调用来实现。再次强调,像数据库一样,有时抽象类会隐藏调用远程API的方法。

  3. 移动或可穿戴应用过于频繁地调用后端程序:这基本上和“不必要的网络调用”相同,但是在移动设备上会产生其他问题,这不仅会产生不必要的调用后端使得性能变差,还会更快地消耗电量甚至导致用户的金钱支出。

有效且高效地使用资源

代码是否用锁来控制共享资源的访问?这是否会导致性能降低或死锁?







请到「今天看啥」查看全文