【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

  • 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:001300
用户头像

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

关注

评论

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

2023年最新iOS打包发布流程汇总

雪奈椰子

低代码开发,是稳打稳扎还是饮鸩止渴?

引迈信息

前端 低代码 JNPF

我们与AI共生的未来 | 社区征文

TiAmo

人工智能 AI 三周年征文

基于HashData湖仓一体解决方案的探索与实践

酷克数据HashData

windows制作apple苹果证书-appuploader​

雪奈椰子

Adobe全新AI工具引关注,生成式人工智能Firefly助力创作更高效、更有创意

Geek_2d6073

高效前端代码编辑器:Sublime Text 4 Dev for Macv4.0(4148) 中文版

真大的脸盆

Mac 代码编辑器 Mac 软件 前端代码编辑

PCB为什么常用50Ω阻抗?6大原因

华秋PCB

科普 电路 阻抗 PCB PCB设计

没有研发过程数字化,DevOps就是水中月、雾中花

行云创新

DevOps 研发管理 云原生IDE

AIGC:数字内容创新的新引擎,还有藏着更多你知道的细节

加入高科技仿生人

人工智能 AI AIGC

应用火山引擎DataTester“避坑”,抖音实现用A/B实验快速试错

字节跳动数据平台

大数据 抖音 实验 A/B测试 企业号 4 月 PK 榜

打造 API 接口的堡垒

Apifox

API API 安全 API 接口

【云享专刊】开源遇上华为云,OCP架构变身“云原生框架”

华为云开发者联盟

开源 云原生 华为云 华为云开发者联盟 企业号 4 月 PK 榜

实践分享:如何在自己的App 中引入AI画图!

FN0

小程序 小程序容器 AI绘画

升级企业数智化底座,用友iuap助力企业高质量发展

用友BIP

用友 技术大会 iuap平台

【一行代码秒上云】Serverless六步构建全栈网站

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 4 月 PK 榜

MobTech MobLink|裂变拓新,助力运营

MobTech袤博科技

被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了

程序员小富

Java git

来2023用友BIP技术大会,与北京地铁等领先企业探索数智化转型路径

用友BIP

技术大会 用友iuap 用友技术大会 数智底座 技术底座

DSW-Gallery使用体验+生成吸引人眼球的新闻标题

六月的雨在InfoQ

模型训练 机器学习PAI DSW-Gallery EasyNLP

Mac磁盘清理DaisyDisk4中文版评测:一种优雅而有趣的释放存储空间的方式

魔仙苹果mac堡

磁盘清理 DaisyDisk Mac版下载 DaisyDisk中文版 如何清理Mac磁盘

ARM版CentOS Linux系统镜像文件(苹果M1专用)

魔仙苹果mac堡

Linux系统 苹果电脑 pd18虚拟机 Mac双系统安装

运维堡垒机定义以及作用简单讲解-行云管家

行云管家

堡垒机 运维堡垒机

Downie4最常用的几种下载方法,全能网页视频下载工具Downie使用教程

魔仙苹果mac堡

downie 4 Mac 视频下载工具

LilyView for mac(无边框轻量级图片浏览器)

魔仙苹果mac堡

LilyView Mac版 苹果图片浏览软件 LilyView下载

软件测试/测试开发丨容器编排K8S 下部署分布式UI自动化解决方案

测试人

k8s 软件测试 #Kubernetes#

540p秒变1080p!小红书端侧实时超分带你免流量玩嗨短视频

小红书技术REDtech

AI 算法 短视频

人人可用的敏捷指标工具!Kyligence Zen 正式发布 GA 版

Kyligence

数据分析 Kyligence Zen 指标平台 大数据管理

中文版IBM SPSS Statistics(spss数据统计与分析软件)

魔仙苹果mac堡

数据分析 spss数据统计 IBM SPSS Statistics中文 IBM SPSS Statistics破解 IBM SPSS Statistics下载

跟ChatGPT聊天、需求润色优化,禅道OpenAI 插件发布!

禅道项目管理

项目管理 openai ChatGPT

阿里云 EMAS & 魔笔:3月产品动态

移动研发平台EMAS

阿里云 DevOps 测试 低代码开发 移动端开发

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