图3 典型的事件运行序列
第二部分 通过持续集成进行静态分析代码检测
静态分析是一个广义的概念,它包含了很多种对源代码进行分析的方法,进行静态分析时,不需要真正构建和运行代码(虽然好工具也可以显示出该项目在运行过程中的情况)。静态分析可以被看作代码质量谱的结构端的测试,动态测试则主要负责功能方面的测试。静态分析可保证代码遵循最佳编码惯例,还能够发现很多问题,包括未定义行为、可移植性问题、由语言误用产生的危险但是合法的构建、代码清晰度问题、代码的实际布局问题等。静态分析也可以发现动态测试不能发现的一些问题,还能够帮助简化脚本,使脚本更易于维护,更加高效。虽然自动化的静态分析不能完全取代代码评审,但是对于代码评审来说,它是非常重要的一部分。
静态分析一个非常重要的方面就在于:在完成第一行代码之后,就可以立即进行静态分析,这就将测试代码的重点放到了开发初期。
静态分析的关键在于,能够在早期和持续的应用程序代码评审中大量减少代码中存在的问题,确保在项目的编码阶段,能够遵循最佳编码惯例。为了提高效率,需要大部分代码评审工作都能够实现自动化:代码还是需要开发人员来评审,但是传统代码评审中找出的问题,大多数都能够自动检测到。“尽早、经常性”的代码评审策略与持续集成的概念非常吻合——因此,将自动代码检查与持续集成过程结合起来,是大有裨益的。
代码集成中存在的问题同样存在于执行编码规范的过程中:如果将问题一直留到代码编写完成,那这个做法一定是有问题的。
如果将新编码规范应用于之前未遵循该编码规范的代码,常常会发现很多违规行为。要解决所发现的问题不仅会耗费很多时间,而且在修改功能的过程中,还可能会使代码更加糟糕,甚至还可能引进更多严重的违规行为。
所以,在编写代码时就遵循编码规范会更加有效率、更加安全;开发人员在编码代码的时候,就应该及时解决所发现的编码问题。
因此,进行集成和执行编码规范时,都应该“尽早开始,并经常进行”。
增量执行编码规范最主要的优点就是能够保证代码的质量,但同时也会带来其它好处。可以将很多度量都收集起来,作为静态分析的一部分,而且增量测试可以形成一个趋势图,可以通过观察所形成的趋势图来判断项目是否健康。如果度量开始与期望偏离(可能是通过与“优质标准的项目”进行对比),就可以有针对性地采取措施,使项目回归正常。