QUICK REVIEW
[论文解读] M3: An Open Model for Measuring Code Artifacts
Anastasia Izmaylova, Paul Klint|arXiv (Cornell University)|Dec 4, 2013
Software Engineering Research被引用 9
一句话总结
M³ 提出了一种开放、可扩展且可组合的模型,用于通过不可变的、带类型的关联关系和基于 URI 的源代码位置,表示源代码工件。该模型构建于 Rascal 编程语言之上,通过一种标准化、可序列化的模型,将解析器与度量消费者解耦,实现了语言无关的代码分析,支持类型推断、源代码追踪以及跨项目和依赖项的增量式组合代码度量。
ABSTRACT
This document details design considerations of M3: a meta model for source code artifacts
研究动机与目标
- 为解决在多种编程语言和度量指标之间衡量代码质量的挑战,创建一种统一、可扩展的代码工件模型。
- 通过一种标准化、语言无关的模型,将代码提取器(解析器)与度量和可视化工具解耦。
- 通过基于物理和逻辑 URI 的位置,实现度量结果对源代码的精确可追溯性。
- 通过不可变的持久数据结构,支持跨文件、项目和依赖项的增量式和可组合的代码分析。
- 为软件分析与演化研究中的可重用、可扩展的代码分析流水线提供基础。
提出的方法
- M³ 模型作为源代码工件之间的不可变、带类型的关联关系构建,利用 Rascal 对集合、关联关系和模式匹配的原生支持。
- 源代码位置通过 URI 建模,其中包含用于物理位置(如 file://、project://)和逻辑位置(如 java+class://)的方案,以支持在代码移动过程中保持可追溯性和稳定性。
- 核心关联关系包括包含关系(工件层次结构)、声明关系(将逻辑位置映射到物理位置)以及使用关系(依赖追踪)。
- 抽象语法树(AST)根据模型关联关系按需重建,节点附带源代码位置和类型信息的注释。
- 类型符号作为一等公民值建模,以支持参数化类型推理和对泛型类型的度量计算。
- 通过显式的并集和链接操作组合模型:并集用于融合关联关系,而链接则更新权威字段,以支持跨项目的引用。
实验结果
研究问题
- RQ1如何通过单一、可扩展的模型,在多种编程语言中表示源代码工件,同时保持对源代码的可追溯性?
- RQ2哪些设计原则能够实现代码提取器与度量和可视化工具之间的语言无关解耦?
- RQ3如何设计源代码位置标识符,使其在非功能性代码变更下仍保持人类可读性和稳定性?
- RQ4哪些机制支持跨文件、项目和依赖项的增量式和可组合的代码度量分析?
- RQ5如何统一建模类型系统,以支持涉及参数化类型和类型实例化的度量?
主要发现
- M³ 通过标准化一组最小的代数类型(Expression、Declaration、Statement、Type、Modifier)表示抽象语法,实现了语言无关的代码分析流水线构建。
- 使用基于 URI 的源代码位置,可实现对衍生度量结果的精确、人类可读且稳定的源代码链接,支持结果的调试与解释。
- 该模型支持增量分析:体积度量可在融合外部依赖项之前计算,而深度继承度量则需要在融合后访问所有声明。
- 类型符号作为一等公民值建模,支持计算如泛型类型的可能实例化数量等度量。
- 该模型已在乌得勒赫特大学(UvA)和荷兰国家数学与计算机科学研究所(CWI)的课程和研究项目中成功应用,证明其在真实世界软件分析工作流中的可用性。
- 目前正初步支持 Java、C# 和 PHP,未来计划扩展支持控制流和程序依赖关系。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。