博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
很有意思,如何把代码看成一个犯罪现场
阅读量:6266 次
发布时间:2019-06-22

本文共 1057 字,大约阅读时间需要 3 分钟。

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

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

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

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

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

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

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

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

版本控制取证显示组件的有效所有权。

Tornhill 正就这一话题,目前在 Beta 状态。The Pragmatic Bookshelf 将于近期出版该书,预计出版日期是 2015 年 3 月 10 日。

作者:João Miranda

来源:51CTO

转载地址:http://cqcpa.baihongyu.com/

你可能感兴趣的文章
数字逻辑的一些基本运算和概念
查看>>
ant重新编译打包hadoop-core-1.2.1.jar时遇到的错
查看>>
【★★★★★】提高PHP代码质量的36个技巧
查看>>
3 weekend110的配置hadoop(格式化) + 一些问题解决 + 未免密码配置
查看>>
JavaScript Creating 对象
查看>>
Java compiler level does not match the version of the installed Java project facet.(转)
查看>>
WPF MediaElement.Position属性
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
spring mysql多数据源配置
查看>>
[React] Override webpack config for create-react-app without ejection
查看>>
检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。...
查看>>
测试java的父子类化
查看>>
HDOJ 1008
查看>>
安装thrift出现的一些问题
查看>>
makefile编写---单个子目录编译模板
查看>>
Oracle DB_LINK如何使用
查看>>
cv resource
查看>>
关于加快INSERT语句执行速度和HINT /*+ append */及/*+ append nologging */的使用
查看>>
JDK源代码学习系列07----Stack
查看>>
firefox
查看>>