An Event-Driven Tool for Context-Aware Code Smell Detection Using SmellDSL
本文介绍了 SmellHunter,这是一种事件驱动且具备上下文感知能力的工具,它通过领域特定语言(SmellDSL)将静态代码指标与项目及团队元数据相集成,旨在 Eclipse 环境中检测代码异味,并为基于信息的重构决策提供可操作的、基于位置的洞察。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正在管理一座庞大且不断扩张的图书馆。随着时间的推移,书籍会变得杂乱无章:有些书页被撕掉,有些字迹潦草难辨,还有些塞进了太多不相关的故事。在软件世界中,这些杂乱被称为“代码异味”。它们不一定是损坏的代码,但却是设计变得 sloppy( sloppy 意为 sloppy,此处指 sloppy 设计)的警示信号,这使得软件日后更难修复和更新。
长期以来,用于发现这些杂乱的工具有如手持单一、不可更改规则手册的严厉图书管理员。它们扫描书籍并大喊:“这本书页数太多了!”或“这一章太长了!”,而不管是谁写的书、图书馆位于何处,或者管理员团队认为什么才是真正重要的。这往往导致误报,或忽视特定团队真正关心的实际问题。
SmellHunter 是一款全新的、更智能的工具,旨在解决这一问题。以下是它的工作原理,使用了简单的类比:
1. 自定义规则手册(SmellDSL)
SmellHunter 不再使用僵化、一刀切的规则手册,而是允许团队使用一种名为 SmellDSL 的特殊语言编写自己的自定义规则手册。
- 类比:想象一个建筑师团队,他们决定对于他们特定的建筑项目来说,一个房间有 50 扇窗户是可以接受的,但一扇门开在墙上则是灾难。SmellHunter 允许他们将这些具体规则写下来。它不仅仅寻找通用的“杂乱”,而是寻找这个特定团队关心的具体杂乱。
2. “事件驱动”的交付系统
传统工具通常像批量邮件分拣员:它们等到一天结束时才一次性分拣所有邮件,这既缓慢又具有干扰性。SmellHunter 则像一个高速、自动化的快递网络。
- 类比:一旦开发人员发送请求检查代码,就像将一个包裹放入智能传送带(称为 Smell Bus)。
- 站点 1(验证):一个机器人检查包裹是否密封完好且地址真实。
- 站点 2(解读):另一个机器人阅读自定义规则手册,并据此检查代码。
- 站点 3(存储):第三个机器人将结果归档到云数据库中。
- 由于这些站点独立且异步地工作,开发人员无需等待。他们可以继续工作,而“快递员”在后台处理繁重的工作。
3. 添加上下文:“在哪里”和“谁”
这是最独特的部分。旧工具只会说:“这里有一个异味。”SmellHunter 则会说:“这里有一个异味,在这个特定城市、这个特定项目、由这个特定团队处理。"
- 类比:想象一张图书馆地图。SmellHunter 标记的不是简单的“杂乱的书籍”,而是标记“位于纽约分馆、由Alpha 团队撰写、在冬季繁忙期出现的杂乱的书籍”。
- 这帮助团队意识到:“哦,杂乱的书籍只发生在冬季的纽约分馆。”然后,他们可以派遣一名专家(一名"异味猎人")前往该特定地点解决根本原因,而不是试图修复世界上每一本书。
4. 仪表盘与移动应用
该工具通过Eclipse 插件连接到开发人员的电脑,并通过移动应用连接到他们的手机。
- 类比:这就像为你的代码配备了一个智能恒温器。你可以在工作时在电脑屏幕上看到代码的温度(质量)。如果出现问题,你会收到通知。稍后,你可以拿出手机查看不同团队和地点的“热点”(不良异味)分布的热力图,帮助你决定将最好的修复人员派往何处。
为什么这很重要?
该论文声称,SmellHunter 通过将静态、通用的规则转变为动态、特定团队的上下文,从而改变了游戏规则。
- 它承认,对某个团队来说是“不良异味”的东西,对另一个团队来说可能没问题。
- 它将代码质量不仅仅视为技术问题,而是视为随地点和团队文化而变化的人类和组织问题。
- 它允许团队像侦探一样,在自己的环境中追踪特定的衰变模式,而不是遵循通用的检查清单。
简而言之,SmellHunter 是一个具备上下文感知能力、事件驱动的侦探,它利用自定义规则和现实世界的位置数据来指引方向,帮助软件团队在不中断日常工作的情况下,发现并修复其特定的设计杂乱。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。