代码即犯罪现场

简介:

以近些年来涌现出的工具和相关文献的数量来看,度量软件的复杂度是软件开发社区之中流行且常见的活动。Adam Tornhill 从其工程和心理学背景出发,在 QCon 伦敦上建议大家在版本控制工具的帮助下把代码当成一个犯罪现场看待。

Tornhill 认为目前对软件复杂度的度量是不完美的。于是他转向从心理学知识中寻找答案。地理罪犯分析(Geographical offender profiling)调查法基于了这样一个原则:罪犯的老窝往往就在他/她作案地点的边界之内。

在诸如 CodeCity 等工具的帮助下,Tornhill 将这一原则应用到代码上。其背后的思想是为代码创造地理呈现。区域和建筑物映射代码的结构,如包或类。代码属性(如代码行数或方法数量)决定区域和建筑物的尺寸。然后,Tornhill 借助于版本控制工具,将这些代码结构信息与代码中他所谓的空间运动进行了结合。

版本控制工具提供了大量取证细节,诸如何人、何时、在版本库的何处做了改变。将这一空间信息与代码结构相结合,则突出了热点。Tornhill 宣称在一个案例分析中(40 万行代码,89 名开发人员,18000+ 次提交)有 8 个缺陷集中区域,72% 的缺陷集中在4% 的代码中,用热点精确定位了其中的 7 个区域。


<a href=https://yqfile.alicdn.com/f2249e6c1f036836c4224662931a622571c5d863.png" >

一个热点被高亮的代码城市。

使用版本控制信息可以做时空耦合分析。如果两个代码文件在同一时间发生改变,这意味着文件之间是物理耦合的,例如:一个类调用另一个。然而它们可能只是逻辑形式上的耦合,常见的拷贝-粘贴就会出现这样的结果。如果没有时空耦合分析的话,会很容易忽略掉这些问题。

时空耦合分析在其它方面也很有用。当来自于不同团队的人在同一时间改变不同组件时,它可以指出其变化模式。这个模式可以提示系统的体系结构和团队结构之间的不一致,而这种不一致会导致从提出变更请求到部署上线之间更长的周期时间。

版本控制信息也可以用于挖掘知识的所有者和组件的所有权。如果一个开发人员是一个给定代码文件或组件的主要提交者,那么我们可以有把握地认为他就是 这个组件的知识所有者,哪怕他不在负责这个组件的团队中。这也意味着“撞车”将有迹可循并得以缓解。在更极端的案例中,知识所有者已经不在公司里了,那么 就会出现知识的缺口。这些技术帮助发现这些缺口并弥合它们。


0a3bdc91aa606d3c3b5080f9ce35f3935686597a

版本控制取证显示组件的有效所有权。
文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
2月前
流星雨代码
流星雨代码
|
4月前
你写过的最蠢的代码是?
你写过的最蠢的代码是?
16 0
|
11月前
|
Java Python
长见识,让大家看看什么是垃圾代码
长见识,让大家看看什么是垃圾代码
78 0
|
12月前
|
存储 设计模式 缓存
这45个小技巧,让你的代码突然又优雅了2
这45个小技巧,让你的代码突然又优雅了2
这45个小技巧,让你的代码突然又优雅了2
|
前端开发
代码为什么越写越乱?
这个问题往大的说是业务治理问题,往小了说是代码分拆。且看作者怎么写出好代码。
106 0
|
存储 SQL 缓存
10行代码!
10行代码!
165 0
10行代码!
不要傻乎乎的去找不同了,一起来用代码完成“找不同”游戏吧
不要傻乎乎的去找不同了,一起来用代码完成“找不同”游戏吧
425 0
不要傻乎乎的去找不同了,一起来用代码完成“找不同”游戏吧
|
设计模式 前端开发 Java
握草,你竟然在代码里下毒!
Java程序员👨‍💻‍,10个编码小技巧,用好了升职加薪,用不好开除走人!
879 0
握草,你竟然在代码里下毒!
|
测试技术 UED 开发者
被劣质代码“残害”的这些年
都已经 2020 年了,但我们仍然在生产劣质软件。自从计算机诞生以来,已经过去了近 70 年,但我们似乎还没有吸取所有的教训,仍然在犯着重复的错误。
每天写出好代码的5个建议
译文出自:伯乐在线
633 0