前端未来的主流技术方向有哪些?腾讯、京东、同城旅行等大厂都是怎么布局的?戳此了解 了解详情
写点什么

代码即犯罪现场

2015 年 3 月 11 日

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

查看英文原文: Your Code as a Crime Scene


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015 年 3 月 11 日 03:321621

评论

发布
暂无评论
发现更多内容

声网2020实时大会后的弱网对抗实践

Fenngton

音视频 网络环境 视频编解码 声网 弱网下的极限实时视频通信

花一周整理!Python全系列学习资料,全是干货

李运辰

APP透露的焦虑

wgc

杂谈

5分钟速读之Rust权威指南(二)

码生笔谈

rust

Netty整体架构学习笔记

风翱

Netty 5月日更

聊聊Spring的XML Schema扩展机制的使用方式

Hex

spring

不是会员不让复制粘贴?看我“三板斧”!

liuzhen007

使用技巧 5月日更

全球广告市场 2021 年复苏

󠀛Ferry

5月日更

TcaplusDBx 王者荣耀|五五开黑节背后的数据存储挑战

TcaplusDB

nosql 分布式 存储 TcaplusDB

世界电信和信息社会日 | TcaplusDB君节日介绍

数据人er

数据库 nosql tencentdb TcaplusDB

JavaScript 进阶——井字棋游戏智能AI搭建

空城机

JavaScript 前端 5月日更 web游戏

《互联网人的英语私教课》复习

IT蜗壳-Tango

5月日更

今天被问微服务,这几点,让面试官刮目相看

Damon

面试 微服务 5月日更

世界电信和信息社会日 | 电信助力产业发展

TcaplusDB

数据库 nosql 分布式 存储 TcaplusDB

打破思维定式(十)

Changing Lin

就这?腾讯云高工熬夜手写'Java微服务学习笔记'也就让我月薪涨3k

云流

Java 编程 程序员 架构 面试

JS中every()和some()的对比使用

三掌柜

5月日更

TcaplusDBx 王者荣耀|五五开黑节与其背后的数据库

数据人er

数据库 nosql tencentdb TcaplusDB

腾讯云TcaplusDB与华为鲲鹏完成兼容性认证

数据人er

数据库 nosql tencentdb TcaplusDB 华为鲲鹏

腾讯云TcaplusDB & 华为鲲鹏完成兼容性认证

TcaplusDB

数据库 nosql TcaplusDB NoSQL数据库

数据挖掘从入门到放弃(一):线性回归和逻辑回归

数据社

机器学习 5月日更

这个世界不会欺负诚实的人,也绝对不会亏待努力的人

小天同学

5月日更 真诚 诚信 努力

服务调用链相关基础知识

luojiahu

调用链

Golang library source file 库源码文件

escray

go 极客时间 学习笔记 5月日更 Go语言核心36讲

数据续谈

顿晓

数据 5月日更

学生管理系统考试试卷存储方案

Simon

架构实战营

Nginx通过split_client实现客户端分流

运维研习社

nginx 灰度发布 5月日更 分流

小企业面对大数据如何破局,高并发与海量数据技术又如何操作?

读字节

大数据 分布式架构 高并发系统设计 战略思考

Flutter开发:Gridview的使用

三掌柜

5月日更

API网关关键技术

lenka

5月日更

今日学习小结

Nydia

学习笔记

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

代码即犯罪现场-InfoQ