以近些年来涌现出的工具和相关文献的数量来看,度量软件的复杂度是软件开发社区之中流行且常见的活动。Adam Tornhill 从其工程和心理学背景出发,在 QCon 伦敦上建议大家在版本控制工具的帮助下把代码当成一个犯罪现场看待。
Tornhill 认为目前对软件复杂度的度量是不***的。于是他转向从心理学知识中寻找答案。地理罪犯分析(Geographical offender profiling)调查法基于了这样一个原则:罪犯的老窝往往就在他/她作案地点的边界之内。
在诸如 CodeCity 等工具的帮助下,Tornhill 将这一原则应用到代码上。其背后的思想是为代码创造地理呈现。区域和建筑物映射代码的结构,如包或类。代码属性(如代码行数或方法数量)决定区域和建筑物的尺寸。然后,Tornhill 借助于版本控制工具,将这些代码结构信息与代码中他所谓的空间运动进行了结合。
版本控制工具提供了大量取证细节,诸如何人、何时、在版本库的何处做了改变。将这一空间信息与代码结构相结合,则突出了热点。Tornhill 宣称在一个案例分析中(40 万行代码,89 名开发人员,18000+ 次提交)有 8 个缺陷集中区域,72% 的缺陷集中在4% 的代码中,用热点精确定位了其中的 7 个区域。
一个热点被高亮的代码城市。
使用版本控制信息可以做时空耦合分析。如果两个代码文件在同一时间发生改变,这意味着文件之间是物理耦合的,例如:一个类调用另一个。然而它们可能只是逻辑形式上的耦合,常见的拷贝-粘贴就会出现这样的结果。如果没有时空耦合分析的话,会很容易忽略掉这些问题。
时空耦合分析在其它方面也很有用。当来自于不同团队的人在同一时间改变不同组件时,它可以指出其变化模式。这个模式可以提示系统的体系结构和团队结构之间的不一致,而这种不一致会导致从提出变更请求到部署上线之间更长的周期时间。
版本控制信息也可以用于挖掘知识的所有者和组件的所有权。如果一个开发人员是一个给定代码文件或组件的主要提交者,那么我们可以有把握地认为他就是这个组件的知识所有者,哪怕他不在负责这个组件的团队中。这也意味着“撞车”将有迹可循并得以缓解。在更极端的案例中,知识所有者已经不在公司里了,那么就会出现知识的缺口。这些技术帮助发现这些缺口并弥合它们。
版本控制取证显示组件的有效所有权。
Tornhill 正就这一话题写一本书,目前在 Beta 状态。The Pragmatic Bookshelf 将于近期出版该书,预计出版日期是 2015 年 3 月 10 日。