蹊径图
劳务调派信息打点系统 砍柴工" class="aligncenter size-large wp-image-29116" title="o_CR代码问题" src="/uploads/allimg/c180718/1531UQ100I30-1U92.png" />
常见代码问题
常见的潜在代码问题是当前直接会导致BUG、妨碍可能产物成果不能正常事情的种别。
空值恐怕是最容易呈现的处所之一。 常见错误有: a. 值为NULL导致空指针异常; b. 参数字符串含有前导或后缀空格没有Trim导致查询为空。 导致以上功效的原因主要有: 无此记录、有此记录但由于SQL会见异常而没查到、网络挪用失败、记录中有脏数据、参数没传。
原则上,对付任何异常, 但愿可以或许打印出详细的错误信息,按照错误信息很快大白是什么原因, 而不是一个 null ,还要在代码里去推敲为什么为空。这样我们必需识别出措施中大概的null,昆山软件开发, 并实时检测、捕捉和抛出异常。
对付空值,最好的防护是“防止式编程”。当获取到工具之后, 利用之前老是判定是否为空,并适当抛出异常、打错误日志或做其它处理惩罚。 有的人嫌检测为空的 if 语句充斥在代码里会粉碎代码的可维护性, 对此我的发起是:
class NullChecker { public static void checkNull(Object obj, Error error) { if (obj == null) { throw new BizException(error); } } }
第二个容易堕落的处所是未捕捉潜在的异常。挪用API接口、库函数或系统处事等,只顾着享受便利却不做防护,常导致因为局部失败而影响整体的成果。最好的防护依然是“防止式编程”。 要么在当前要领捕捉异常并返回符合的空值或空工具,要么抛给高层处理惩罚。
切不行冷静”吞掉错误和异常”。 假如这样做了, 出问题了等着加班和淹灭大量脑细胞吧!
在CodeReview的时候必然要仔细询问:这里是否大概会抛出异常?假如抛异常会怎么处理惩罚?是否会影响整体处事和返回功效?
低机能会导致产物成果欠好用、不行用,甚至导致产物失败。
常见环境有:a. 轮回地逐个挪用单个接口获取数据或会见数据库; b. 反复建设险些完全沟通的(开销大的)工具;c. 数据库会见、网络挪用等处事未处理惩罚超时的环境; d. 多重轮回对付大数据量处理惩罚的算法机能低;e. 大量字符串拼接时利用了String而非StringBuilder.
对付 a,最好提供批量接口或批量并发获取数据; 对付 b, 将可复用工具抽离出轮回,一次建设多次利用; 对付 c,配置公道的超时时间并捕捉超时异常处理惩罚; 对付 d,利用预排序或预处理惩罚, 结构符合的数据布局, 使得算法平均机能在 O(n) 或 O(nlogn) ; 对付 e, 记着: 少量字符串拼接利用String, 大量字符串拼接利用 StringBuilder, 凡是不会利用到 StringBuffer.
对多个模块依赖的民众函数的修改,容易造成影响范畴高出当前业务窜改,无意识地粉碎依赖于该民众函数的其他业务。要出格慎重。靠得住的方法是:先查察该民众函数的挪用, 假如只有本身的业务用,可适当斗胆一些; 假如有多个处所依赖,抽离一个新的函数,抽离原函数里的可复用部门,然后基于可复用部门构建新的函数。修改原则遵循“开闭”原则,才气尽大概使窜改影响低落到最小化。
基类及实例字段和要领也属于民众函数的领域。 只管不要修改基类的对象。
单测是担保工程质量的第一道重要防地。单测问题一般包罗: a. 单测未全部通过; b. 重要业务逻辑缺乏单测; c. 缺乏异常单测; d. 代码改观或BUG修复缺乏单测。
单测全部通过该当是提交接码到代码库以及代码Review的前提条件。代码提交者该当担保单测全部通过。没有捷径可走。仅当单测全部通过才提交到代码库, 可以通过东西自动化实现。 对付 maven 打点的工程, 只需一个呼吁: mvn test && git push origin branch_name 。 单测该当更注重质,而非纯真追求包围率。
缺乏单测的重要业务逻辑就像裸露在氛围中的电线一样,固然能跑起来,却是很容易“触电”的。 要领: 增加包围较量全面的单测。