软件交互式可视化:测量、建模与实现
1. 软件测量
当提及软件测量时,实际是要测量构成或代表软件的制品,或是软件的某些静态或动态方面。常见的制品类型包括源代码文件、各类软件模型、执行跟踪记录或版本历史等。
为了测量这些制品,需要正式定义的度量。最常见的度量类型是软件指标,它是将数字(指标值)赋予软件或软件组件的明确抽象。指标基于描述被测量软件或组件的制品进行计算,依据不同指标,会使用制品语言的形式语言构造实例(如编程语言或建模语言)或与语言无关的制品属性(如代码行数)。
除了指标,还应关注软件组件及其关系所体现的软件结构信息。其中最重要的关系是组合层次结构和依赖关系。这些关系可通过相应语言构造直接在软件制品中找到(如方法调用代表两个类之间的依赖),也可从包含组件的关系中推导得出(如两个包因包含相互依赖的类而存在依赖)。此外,这些关系也有自身的指标。关系可分为形成树的关系(如包含或继承层次结构)和形成图的关系(如调用图、一般依赖图)。
测量的技术应用依赖于相应的制品和制品语言。逆向工程是一种通用、经过研究和标准化的软件测量方法,其目标是通过推导更高层次抽象的模型来了解现有软件,从直接表示软件制品的与语言相关的模型(通常为抽象语法树/图形式)开始,到仅由高度聚合的结构和指标组成的与语言无关的模型(如知识发现模型或软件指标模型)结束。模型转换和查询语言可用于正式描述应用的测量。
为创建示例数据和相应可视化,使用 MoDisco 逆向工程框架从现有 Java 源代码推导 AST 模型。使用受 OCL 启发的 Xtend 内部 DSL 基于 MoDisco 模型描述和执行软件测量,测量所有方法的 McCabe 和 Halstead 复杂度、所有类的 CK 指标集、类之间基于方法调用和字段访