论文部分内容阅读
程序的不变性(Immumbility)是指类的实例对象的状态在其生命周期内不会发生改变。分析程序的不变性主要有两种技术:一种是采用静态分析技术分析程序的类、属性和方法等,获得不变性信息;另一种是采用动态分析技术,观察程序运行时各个对象的状态变化来判断程序的不变性信息。静态分析具有可自动化、效率高等优点,但是采取保守的分析策略,分析精度不高。动态分析可以准确地观察对象的状态变化,但是分析结果不完备,而且需要多次运行程序,开销高。现有分析不变性的技术主要集中于对程序的静态分析,动态分析方面的工作很少。本文在分析了静、动态分析技术各自的优缺点后,提出了静动态结合的混合分析技术,首先对程序进行静态分析获得初步的静态分析结果,然后对静态分析结果中不确定的部分再进行动态分析,获得最终的分析结果。静动态结合的分析技术比单纯的静态分析提高了分析精度,同时也降低了单纯用动态分析的开销,提高了效率。
本文在提出了静动态结合的不变性分析技术后,采用案例研究(Case Study)的方式讨论了几种不变性信息应用的可能场景。在类级单元测试中,有时需要测试该类的对象在各种状态下对外界的响应情况,因此需要将该类的所有成员方法进行组合生成测试用例,当该类的成员方法较多时,那么组合数将会非常大,如果分析发现某些成员方法的执行小改变对象的状态,则可以在生成测试用例时不考虑这些方法,从而减少测试用例数目。初级程序员在设计程序时,经常忽视程序当中有很多不变的成分,造成程序效率的低下,分析程序的不变性可以辅助程序员优化代码。另一方面,程序员有时没有注意到程序中很多成分是可变的,在使用这些可变成分时不加判断,使得程序中隐藏了潜在的异常,分析程序的不变性可以辅助程序员发现这些程序中的异常。
本文主要工作包括如下三个方面:
(1)完整地定义了不变性的规约,提出了静动态结合的不变性分析技术,提高了分析的精度,首次提出在静态分析过程中加入预处理技术;
(2)用案例研究的方式讨论了不变性信息应用的几个可能场景;
(3)设计了一组支撑静动态结合的分析技术和不变性应用的原型工具。