聂同学

一个程序员和架构师的实践与思考

给老爷爷系统(一):代码质量守则和工具

这是一个老爷爷系统。

对于一个历史悠久的老爷爷系统,我们的程序员定下了下面的代码质量守则:

  • 新增方法复杂度不能大于5。
  • 新增类之间不能出现包循环依赖,同层之间可稍微放宽(如Service之间互相调用)。
  • 新增类和方法避免有重复代码,出现重复或者相似度较高的代码应提炼成函数。
  • 过长的方法,新增方法不能过长,代码行数限定在30。
  • 过大的类,新增类不能过大,尽量体现类的单一职责。
  • 变量、方法和类的命名要体现业务含义,不能用如s=5、getString()等命名。
  • 新增方法需编写自动化测试案例。

守则里面有很多“新增”,新增类、新增方法。 因为对于老旧的代码,要求它们的质量不具有可操作性。 我们只能期望通过要求新增的代码符合要求,来改善至少是维持整个系统的代码质量。

如果团队比较有野心,可能想在“新增”里面包括“更新”,也就是所有“触碰过”的类和方法。

有了守则我们需要一个检查工具,让程序员可以快速地检查和自检。 但一般的代码扫描工具不能针对“新增、更新”进行扫描,我们需要自己的工具。 工具的要点在于如何找出所谓的“新增的类和方法”、“更新的类和方法”。

基本思路是:

  • 先找出版本之间的diff,新增的文件和修改过的文件。
    • 比如svn,可以用svn的命令行客户端,也有一些java的api。比如svnKit。
  • 对于新增的文件:
  • 对于修改的文件:
    • parse新版本,找到所有类和方法的起止位置。
    • parse方法同上。
    • 对比文件的diff结果(这个是按行号列出的更改),就可以发现新增的、更新过的类和方法。
  • 当新增、更新的类和方法得到以后,再综合代码扫描(扫描新版本)的结果报告。比如findbugs、jdepend…… 即可得出新增、更新的类和方法的质量指标了。

关键代码在这里:
https://gist.github.com/nielinjie/d8fa324ee0d1d149c5e2

工具, 开发, 质量

分享 -