代码精进之路——减少错误
编写优秀的代码,不能仅仅依靠 一个人的战斗。高质量的代码,依赖于高质量的流水线。作为一个程序员,大家都希望写出优秀的代码。不被 bug 所困扰,可是如何才能编写出没有错误的代码呢?
如何减少错误
先来看一段有问题的代码:
其实这段代码非常简单,它有两个判断语句,如果判断条件成立,那就执行“goto fail”语句,如果不成立,那就跳过判断语句继续执行。上面的“goto fail”语句,它的意 思是略过它之后的所有语句,直接跳转到标有“fail”语句的地方,也就是第 6 行。
这一段乍一看没有啥问题,但是我们仔细看一下第三行,是不是就看出了问题,如果还没有看出来,那我们就将代码格式化一下。
是不是一下就清晰了,第三行明显是一个问题,无论第一行如何判断,代码最终都会进入 fail 的代码片段。这显然是一个非常低级的错误。无论是资深的程序员,还是刚刚入行的菜鸟都是会犯错的,无非是高级错误后者低级错误罢了。那么我们怎么样才能减少错误的产生呢?
范老师给出了五点建议:
第一:程序员
提高程序员的修养,是一个永不过时的课题。从别人的失败和自己的失败中学习、积累、 提高,是一个程序员成长的必修课。如果书写上述代码的程序员使用正确的缩进,在 if 语句后面使用大括号。那么这个问题是不是就不再是问题了?
魔鬼藏于细节。很多时候, 优秀的代码源于我们对细节的热情和执着。可能,你遇到的或 者想到的问题,不是每一个都有完美的答案或者解决办法。但是,如果你能够找到哪怕仅 仅是一个小问题的一个小小的改进办法,都有可能会给你的代码质量带来巨大的提升和改变。
第二:编译器
现在很多现代化的编辑器,比如 IntelliJ IDEA 等。他们都是非常强大的,可以在编译器就发现很多代码的缺陷或者是错误,并且给出明确的提示。像上面如果 if 后面没有大括号,或者是某一段代码永远都不会执行。那么编辑器就会给出明确的警告或者是错误,程序员如果将这些警告看在眼里,那么很多错误就可以防范于未然,扼杀在萌芽之中。
第三:回归测试
对关键代码进行单元测试,以确保关键功能能够正确执行。软件测试没有办法覆盖所有的使用场景。但是,我们千万要覆盖关键逻辑和负面清单。一 个没有良好回归测试的软件,很难保证代码变更的质量;也会使得代码变更充满不确定 性,从而大幅地提高代码维护的成本。
第四:代码评审
代码评审是一个有效的在软件研发过程中抵御人类缺陷的制度。我一直都推崇使用代码评审,这样不仅对代码质量提供保障,也对程序员的成长有莫大的帮助。新手可以从老手那里学到很多技巧和代码编写的规范;老手可以不断磨练自己的设计能力和编写优秀代码的机会,通过教学巩固自己的知识体系。毕竟一个知识点自己会写还不算可以,教会别人,和别人说清楚,这才是真正的懂。
第五:代码分析
静态代码分析(Static Code Analysis)是通过对源代码的检查来发现潜在问题的一种软 件质量保障方式。有很多静态代码分析工具可以帮助你检查代码缺陷,比如说商业软件 Coverity,以及开源软件 FindBugs。这些静态代码分析器都可以在上线前找到代码中潜在的问题。