codereview CodeReview 常见代码问题( 上 )( 二 )


基类和实例字段和方法也属于公共函数的范畴。尽量不要修改基类。
单一测量问题
单项测量是保证工程质量的第一道重要防线。单项测试的问题一般包括:a .单项测试没有全部通过;b .重要业务逻辑缺乏单一测试;c .缺乏异常单项测试;D .缺乏代码更改或BUG修复的单一测试。
所有单次测试通过都应该是将代码提交给代码库和审查代码的前提条件。代码提交者应确保所有单项测试通过。没有捷径。只有当所有单项测试都通过了,才会提交到代码库,可以通过工具自动实现。对于maven管理的项目,只需要一个命令:mvntest & amp;& ampgit push origin分支名称.单项测试更应该注重质量,而不是单纯追求覆盖率。
缺少单个测试的重要业务逻辑,就像一根电线暴露在空空气中。虽然能跑,但是容易触电。方法:增加单一测试,全面覆盖。
缺少异常的单项测试也是代码提交者经常忽略的问题。异常也是一个实际的业务场景,反映了系统的健壮性和友好性。相应的单元测试应涵盖例外情况。创建条件抛出异常,判断该异常是否为指定异常;如果没有引发异常或者没有指定异常,您应该声明失败,而不是传递。
对于代码变更和BUG修复,如果由于时间限制当时没有写,应该在后面补充。对于每个代码变更和BUG,都可以提取对应的代码部分,由对应的单个测试覆盖,并注明原因。
与原始业务逻辑不兼容
变更对于当前的需求来说是合理的,但是与原有的业务逻辑不兼容,这也是一个常见的问题。例如,如果添加了搜索条件,则不能与原始条件一起查询。
与原有业务不兼容,一般出现在:
一对一与一对多的变化。 比如原来的关系是一个订单对应一个物流信息, 后来变化为一个订单可能对应多个物流信息; 原来的逻辑是一个订单显示多个物流信息可以更改,后来要求一个订单只展示最近一次的物流信息可以修改。多个业务组合。 业务 A 与业务 B 原来是分开发展的, 后来开展一种活动,将业务A与业务B进行一种组合营销。 此时,多半会出现很多 if-else 语句。业务逻辑的兼容性一般体现在系统的可重用性和可扩展机制上。良好的系统可重用性和可扩展性可以使业务逻辑更容易兼容。主要有以下几个层次:
自动兼容。 增加一种类型, 只是 biz_type 的值多了一种, 系统自动将已有功能适配给新的 biz_type;一点改动。增加一个分支语句, 对 biz_type 的某个特性进行扩展;一些改动。 需要见缝插针地增加一个单独的分支判断和逻辑处理模块, 对整体可扩展性没有影响, 但会造成局部的复杂化;一部分功能改动。 只需要对其中一个功能模块做个扩展;多处改动。 需要对多个功能模块做相应的改造,不过更多是新增而不是修改;难以改动。 需要深入到功能模块内部做艰难的修改, 并要保证原有功能不受影响。怎么处理?
针对关联关系, 在项目之初, 可以询问清楚: 将来在产品上是否有可扩展的变化? 及早预留空间, 或者确定产品上的对策; 在代码实现上, 兼顾考虑一对一到一对多,或一对多到一对一的关联变化。比如使用列表来表达单个信息, 使用索引从列表中获取单个信息。针对业务组合, 明确各业务的核心部分, 抽离出业务的可复用的部分,形成 API ; 考虑组合模式和装饰器模式来进行扩展。核心不变,周边定制。
缺少必要的日志
对于重要和关键的实例状态、代码路径和API调用,应该添加适当的INFO日志。对于异常,应该捕获并添加错误日志。日志的缺乏不会影响业务功能,但出现故障排除问题时,会非常不方便,甚至会错失宝贵的机会(尤其是难以重现的时候)。另外,缺少日志也会导致可控性差,难以做数据统计分析。

推荐阅读