如何评估代码质量
在写代码的时候,总是会有一个问题,那就是如何评价自己的代码写的好与差。
于是就有了本文来评估代码质量
首先,你要做一个功能的情况下,你想要的功能已经确定下来的时候,那么它就是一定的;下一步就是编码去着手实现这个功能,虽然功能是一定的,但是编写它的代码并非是只有唯一解。对于相同的功能,不同的人编写出来的代码也是千人千面。因此我们需要对代码做评估。
下面是我总结出来的一些经验来提供参考:
可读性与清晰性
一个最基本的要求就是你的代码能让人看到你想要表达的意图,以及不会感到有模棱两可的感觉。好的代码在命名上能够起到自注释的功效,你即使是不写注释也能“不言而喻”
以前的时候遇到过一个反面案例,有个人编写的代码命名混乱、结构奇怪。于是大家都说“你这代码是自带了混淆光环吧”
在命名方面(变量名、类名、方法名……):
合适的命名方法必不可少,包括但不限于驼峰命名法、下划线命名法等。驼峰命名法是较为常见的一种命名法,同时在此基础上根据命名位置的不同也会有些许差别
遵循boolean类型前面加is,例如isMeta、isPlayer等;类名首字母大写,例如MockServer、QPacketHelper等;方法名首字母小写,例如build、setMeta等,并且应当是一个动词来“总结”这个方法要做的事。
另外就是命名是否能够契合内容,越是可读和清晰的代码,命名也就越规范。
这样能够在一定程度上保证了代码的可读性与清晰性。
可维护性
代码的可维护性也是一个非常重要的指标——你也不想修bug的时候突然遇到更加棘手的问题吧?
模块化编码:保证一个类、一个方法只做同一件同属于它的事。就像是你不能在sleep方法里面操作wakeup(?)
代码的耦合度也和维护性息息相关,耦合度表明了代码之间的依赖关系的强弱。高耦合意味着模块间依赖关系强,低耦合意味着模块间依赖关系弱。耦合度越低越好,因为越低耦合的代码越保证修改一处不会影响其他模块。
添加新功能是维护时的常见需求,在这个过程中是否需要大规模重构代码。一旦代码因为不断的新功能加入而导致频繁的重构,那么它的可维护性就不高。(可扩展性)
不要出现大规模的复制粘贴,因为这样做没有意义:大量重复的工作可以通过反复调用、循环来解决。复制粘贴代码是维护的噩梦。
可靠性
可靠性至关重要,它关乎着整个系统的稳定性与安全性。
你的代码是否加入了“防御性编程”思想?防御性编程可以避免一些“喜欢分析系统并钻代码缝”的用户产生危害(业务逻辑漏洞)
测试时需要尽可能多的覆盖到各个方面,以及做一些奇奇怪怪的输入来看系统的处理是否完备和完善,同时也能观察代码是否有逻辑暗病(潜在的逻辑错误或逻辑缺陷)。如果条件允许的话,善用断点来调试。
关于错误处理,可以评估为:是否覆盖了边界条件(最大值、最小值等边界);是否检查了用户输入以避免引发崩溃或异常(如空值、异常值)
时间复杂度
时间复杂度是衡量代码的一个性能指标。时间复杂度越低的代码效率越高,性能也就越好。算法是否避免类似于$O(n^2)$的低效操作,特别在循环中。因为循环会把这种慢效应放大。
总结
没有绝对完美的代码,只有在编码过程中的不断进步与经验积累。多关注这些方面可以明显提升代码的健康度和健壮性