写点什么

借助软件演化理解大型代码库

  • 2016-05-15
  • 本文字数:1714 字

    阅读完需:约 6 分钟

GOTO 阿姆斯特丹 2016 大会上,《代码即犯罪现场》一书的作者 Adam Tornhill 将介绍如何借助“软件演化(software evolution)”理解大型代码库。

InfoQ 采访了他,内容涉及软件演化、从代码挖掘社交信息、如何使用这些信息加深对大型代码库的理解、如何创建代码地理分析以及类似社交信息挖掘和地理分析这样的技术所带来的好处。

InfoQ:您能解释下软件演化是指什么吗?

Tornhill:软件演化是指理解代码库如何变得越来越大。实际上,代码库的演化遵循特定的模式。有些模式不错,但有些模式预示着严重的维护问题。我的方法是分析代码库的历史。一旦我们了解了过去,我们就会获得大量有用的信息。这些信息让我们可以发现生产力瓶颈、难以维护的部分,甚至是代码库中可能引入缺陷的部分。

InfoQ:您能举例说明下如何从代码中挖掘社交信息吗?

Tornhill:当然,我们可以从代码演化中提取许多信息。例如,我们可以构建代码库的知识地图。知识地图可以显示出,在代码的不同部分,哪位程序员做的工作最多。我利用这些信息简化沟通过程,保证我找对了谈论设计的人,或者只是推断系统的知识分布。

以此为基础,我们可以对数据做各种有趣的分析。我最喜欢做的分析是识别存在过度并行开发的代码,就是那些总是有多名程序员在修改的代码。这样的代码存在引入缺陷的风险,可能会导致协作瓶颈,同时,这表明存在设计问题,因为代码频繁修改总是有原因的。

InfoQ:社交信息挖掘如何加深对代码库的理解?

Tornhill:在 Empear,作为日常工作的一部分,我分析了大量的代码库。我经常会发现,组织问题被误认成了技术问题。主要的原因是代码本身包含的社交信息不可见。那导致我们把注意力放在了解决错误的问题上。让我们看一些具体的例子。

不同的组织往往会遇到一些相同的问题。例如,我见过许多这样的情况,不同特性的分支难以合并,发布质量难以预测,人们抱怨代码难以理解。不过,结果往往证明,真正的问题是社交;在如何设计系统和实际上如何编码之间存在偏差。例如,关注技术解决方案,如更好地合并或比较工具,只能帮助你缓解症状。相反,要想真正实现改进,第一步是判断和理解问题背后的真正原因。

InfoQ:在 QCon 伦敦 2015 大会上,您在题为“将代码视为犯罪现场”的演讲中解释了如何构建代码地理分析。您能简单地描述下这是如何操作的吗?

Tornhill:大多数有关代码质量的讨论都是以代码复杂度为中心。然而,复杂度只有在你需要解决它的时候才成为问题。如果你观察下有关我们的代码如何变得越来越大的数据,就会发现我们的开发工作往往都集中在相对较少的几个模块上;大部分的代码很少触及。就是说,我们喜欢优先改进那些我们做工作最多的代码部分。这实际上是一个大难题。

我曾参与过取证,我发现,犯罪调查员面临的问题同我们类似,都是开放性的大问题。我在演讲“将代码视为犯罪现场”中介绍的技术就是基于识别犯罪现场地理分布模式。以此为基础,我将同样的基本原则应用到了代码上。我使用代码库历史来识别我们做工作最多的代码部分,并结合代码复杂度的基本度量。我将这两个维度的重叠部分称为“热点”。热点代表经常使用的复杂代码。在设定改进 / 重构优先级时,热点分析是一个很棒的工具,而且它还可以确保我们获得了实际的效果。

InfoQ:类似社交信息挖掘和地理分析这样的技术有什么好处?

Tornhill:有多个重大的好处。最明显的是,这样的信息可以帮助我们专注于最需要的改进。另一个好处是,我们可以用数据支撑我们的决策。我认为,这是软件行业落后于许多其他学科的一个关键点。

最后,我们能够从演化途径获取的是那些我们无法从代码本身获取的信息。例如,使用代码历史,我们能够发现高级的变更模式,根据架构原则对它们进行评价,看看它们和我们的组织方式的匹配程度。代码的静态结构不包含任何的时间概念。当我们了解了过去,我们就可以增加那个缺失的维度,并且能够更高效地推断我们的工作方式。这是一个激动人心、充满希望的领域。

GOTO 阿姆斯特丹 2016 大会将于 6 月 14-15 日举行。这是一个由从业者推动的企业软件开发大会,面向团队负责人、架构师和项目管理人员。InfoQ 将以 Q&A、概要和文章的形式对大会进行报道。

查看英文原文 Understanding Large Codebases with Software Evolution

2016-05-15 19:001398
用户头像

发布了 1008 篇内容, 共 387.8 次阅读, 收获喜欢 344 次。

关注

评论

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

备战2023春招,P7大佬手打26大后端面试专题神技,1500题解析助力

钟奕礼

Java java程序员 java面试 java编程

linux常用服务配置、网络配置 和 基于FTP的上传和下载的几种方式

C++后台开发

Linux linux开发 Linux服务器开发 ftp C++开发

阿里内部总结的微服务笔记,从入门到精通小白也能学的会

小二,上酒上酒

Java 架构 分布式 微服务

数据结构与算法完整版 | 超详细图解,看这一篇就够了

小二,上酒上酒

Java 数据结构 面试 算法

GaussDB拿下的安全认证CC EAL4+究竟有多难

华为云开发者联盟

数据库 后端 华为云

好消息 突破:IM开源项目OpenIM采用wasm技术实现jssdk

Geek_1ef48b

华为云桌面Workspace,让你的办公更加舒适惬意

科技怪授

华为云会议

双十一优惠持续,华为云会议让沟通简单化

i生活i科技

华为云桌面

云原生系列 二【基于CCE Kubernetes编排实战】

叶秋学长

Kubernetes 云原生 11月月更

五年数据库专家,带你深入高性能MySQL架构系统,不来后悔一辈子

钟奕礼

Java java程序员 java面试 java编程

云原生系列一 【基于CCE Kubernetes编排实战】

叶秋学长

Kubernetes 云原生 CCE 11月月更

2022年Java后端面试题,备战秋招,查缺补漏,吃透16套专题技术栈

小二,上酒上酒

Java 面试 面试题 大厂面试

EasyRecovery15数据恢复软件下载使用安装教程

茶色酒

EasyRecovery15

从12K到60K,这2023Java研发必问高级面试题,过关斩将拿offer

钟奕礼

Java java面试 java编程 程序员‘

The Micro-service design of E-commerce System

David

架构实战营

华为云桌面Workspace,随时随地随心的办公新体验

i生活i科技

Java岗史上最全八股文面试真题汇总,堪称2022年面试天花板

小二,上酒上酒

Java 面试 java面试 大厂面试 八股文

7天带你全方位刷爆数据结构与算法,每天一道,高效刷题

小二,上酒上酒

数据结构 面试 算法 大厂面试

面试90%会问到的200+Java面试题汇总(含答案解析)

钟奕礼

Java java程序员 java面试 java编程

2022最全168道Spring全家桶面试题(含答案)

钟奕礼

Java java面试 java编程 程序员‘

看我如何连夜自建网站背刺我的求职对手们

华为云开发者联盟

云计算 华为云 云服务器 自建网站

手把手教你,从零开始搭建Spring Cloud Alibaba!这份笔记太牛了

钟奕礼

Java java程序员 java面试 java编程

EasyExcel常用API与注解

陈老老老板

EasyExcel java; 11月月更

EasyExcel导出数据超过Excel单表上限解决方案

陈老老老板

EasyExcel java; 11月月更

糟了,线上服务出现OOM了

小小怪下士

Java 程序员

想你所想,华为云桌面Workspace助你轻松办公

爱尚科技

远程触发Jenkins的Pipeline任务的并发问题处理

程序员欣宸

Java DevOps jenkins 11月月更 pipelien

大厂敲门砖,Github霸榜的顶级并发编程宝典被我搞到手了!

小小怪下士

Java 面试 并发编程 JVM

华为云桌面Workspace,实惠更实用!

科技怪授

华为云桌面

吃透这份“腾讯限量版”Java架构笔记,要个40k不过分吧?

钟奕礼

Java 程序员 java面试 java编程

华为云会议,让云上办公变得简单高效

科技怪授

华为云会议

借助软件演化理解大型代码库_架构_Ben Linders_InfoQ精选文章