代码审查(Code Review)是软件开发中常用的手段,和QA测试相比,它更容易发现和架构以及时序相关等较难发现的问题,还可以帮助团队成员提高编程技能,统一编程风格等。
一.审查原因(Why)
持续、有效的开展代码走查,将会收获许多收益,具体表现在:
1. 能及时发现代码中的Bug,保证版本质量。
2. 提升代码的可读性、可维护性,建立团队共同的编码风格。
3. 有利于知识共享,打破技能壁垒,避免单点故障。
4. 通过展示自己的优秀代码和设计思路,提升了个人成就感。
5. 通过讲解自己的代码,对个人沟通能力也是一种提升。
6. 提高开发者的对编码的责任感。
二.审查对象内容(What)
前后端所有研发人员审查周期内提交的代码及数据库脚本
如代码数量过多可挑选部分重要功能模块进行
三.审查人员(Who)
代码走查不只是开发人员的事情!需要多种角色同时参与,因为走查活动不仅仅要看功能是否实现了,还要看代码和设计是否一致?测试用例是否完备和有效?
1. 主持人(老王)
负责主持整个走查活动,控制时间和进度。
2. 讲解人(被审查研发人员)
负责对走查的代码进行讲解。
3. 评审人(其他研发人员,测试,UI)
负责对走查代码提出问题,建议。
四.审查地点(Where)
会议室
五.周期计划(When)
一周一次,时间每周四下午17:30
六.审查规范方法(How)
6.1编码习惯:(关注点-框架使用与基本功)
1. 没有被使用的变量要删除。
2. 针对不同的 Exception 要用不同的 catch 语句,而不是一个 Exception 解决所有问题。
3. 针对变量,方法和类要用相同的命名方法。
4. 常量应该被写在独立的常量类中。
5. 每行代码的尾部不要有多余的空格。在什么地方放置空格和断行符?使用制表符还是空格?大括号如何放置?
6. 对于括号,循环,if语句等等要用统一的格式。
7. 每一个单独的方法不应该超过100行。
8. 一个单独的语句不应该超过编辑器的可视区域,它可以被拆分成几行。
9. 检查 String 对象既不是null也不是空的最好方法是 if(“”.equals(str))
10. 假如类有很多成员变量,并且实例化的时候只需要少数变量传入的话,最好使用静态工厂方法,而不是重载构造函数。
11. 给方法添加适当的访问控制,而不是所有都是 public。
12. 遵守项目中使用的框架的最佳实践建议,例如 Spring,Struts,Hibernate,jQuery。
13. 域、常量、变量、参数、类的名称是否符合标准?命名是否太短?
6.2业务实现:(关注点-设计思路与业务逻辑)
1. 如果类似的逻辑被使用了多次,应该把它写成一个帮助类,然后在多出调用。
2. 鼓励使用 API 而不是重复编写代码解决相同的问题。
3. 要强调代码的单元测试。
4. 任何新加的代码不应该破坏已有的代码。
6.3安全:(关注点-系统安全性sql注入等)
1. 任何代码都不能执行用户的输入,除非转义过了。这个常常包含 JavaScript 的 eval 函数和 SQL 语句。
2. 禁止那些在短时间内提交非常多请求的 IP。
3. 任何类,变量,还有方法都应该有正确的访问域。
6.4性能:(关注点-系统运行消耗和可扩展性)
1. 所有数据库和文件操句柄在不需要的时候都应该被关闭。
2. SQL 语句的写法会导致性能千差万别。
3. 鼓励创建不可变(immutable)的类。
4. 类似的逻辑代码,尽量通过 if else 语句来实现更多的重用。
5. 尽量避免使用重对象(heavy objects)。
6. 如果是 Web 项目,请检查是否使用了合适的图片尺寸,CSS sprites 和浏览器缓存等技术。
7. 全局都需要的信息保存在 application context 中。
8.检查代码是否包含无效代码、多余变量、可复用方法、不必要的开销
9.操作码,异常码是否符合统一要求规范
6.5注释:(关注点-代码可读性注释清晰完善)
1.在有处理逻辑的代码中,源程序有效注释量必须在20%以上。
2.文件注释:文件注释写入文件头部。
3.类和接口的注释:该注释放在class定义之前,using或package关键字之后。
4.类和接口的注释内容:类的注释主要是一句话功能简述、功能详细描述,说明:可根据需要列出:版本号、生成日期、作者、内容、功能、与其它类的关系等。
5.类属性、公有和保护方法注释:写在类属性、公有和保护方法上面。用//来注释,需要对齐被注释代码。
6.注释的内容要清楚、明了,含义准确,防止注释二义性。说明:错误的注释不但无益反而有害
7.对于方法内部用throw语句抛出的异常,必须在方法的注释中标明,对于所调用的其他方法所抛出的异常,选择主要的在注释中说明。对于非RuntimeException ,即throws子句声明会抛出的异常,必须在方法的注释中标明。
6.6新技术:(关注点-适用性和扩展学习)
1.代码使用新技术是否有效,是否最优,一起讨论学习
推荐阅读
【远程医疗】互联网医院 卫健委数据上报平台技术方案
【技术选型】你的公司,你的项目真的适合微服务吗?
【划划重点】论大数据中主数据的重要性
【视频问诊】ffmpeg+HLS直播与回放技术
【远程医疗】智能导诊技术方案