代码即犯罪现场

简介:

以近些年来涌现出的工具和相关文献的数量来看,度量软件的复杂度是软件开发社区之中流行且常见的活动。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]

相关文章
|
SQL 关系型数据库 MySQL
mysql 简单的sql语句,入门级增删改查
介绍MySQL中的基本SQL语句,包括数据的增删改查操作,使用示例和简单的数据表进行演示。
mysql 简单的sql语句,入门级增删改查
|
JavaScript 物联网 API
vue中使用mqtt
vue中使用mqtt
|
4月前
|
人工智能 安全 数据安全/隐私保护
落实《安全生产法》,企业隐患排查如何实现闭环管理
落实制度靠流程,而流程能不能闭环,很大程度上取决于工具是不是够简洁。在隐患排查这件事上,复杂不一定代表先进,能落地、能用起来、能留下记录,才是关键。
|
2月前
|
并行计算 C++ Windows
|
4月前
|
容器
echarts pie 文字格式改为可换行
echarts pie 文字格式改为可换行
438 0
|
数据采集 机器学习/深度学习 存储
大数据的处理流程
【10月更文挑战第16天】
1502 2
|
存储 文字识别 算法
解析!文档扫描 SDK 中的高级图像处理技术
本博客讨论了图像质量在文档扫描中的重要性,解决了扫描过程中遇到的常见挑战,以及文档扫描 SDK 利用先进的图像处理技术来应对这些挑战。
AC/DC电源模块的工作原理基于一系列的电子组件和电路
AC/DC电源模块的工作原理基于一系列的电子组件和电路
AC/DC电源模块的工作原理基于一系列的电子组件和电路
|
安全 测试技术 网络安全