论文部分内容阅读
随着计算机软件的不断发展,尤其是数据库软件和Web用字符串在软件程序中扮演的角色日益重要。与此同时,针对字符串的程序分析-字符串分析,也取得了长足的发展,并在软件验证等领域中得到了成功的应用。 软件演化和维护是软件生命周期的重要组成部分,其涉及的主要任务是源代码修改。由于软件源代码中通常包含很多字符串,涉及字符串的源代码修改任务也很常见。为了支持源代码修改任务,需要从取值需要修改的变量开始,根据数据赋值关系,回溯定位到这个变量的数据来源。一些现有的支持源代码修改任务的程序分析,如程序切片等,虽然具有回溯定位能力,但是不支持处理字符串变量和字符串操作。而现有的字符串分析虽然能够处理字符串变量和字符串操作,但缺乏回溯定位能力,因此无法对源代码修改任务提供有效的支持。 综上所述,为了支持实际软件演化和维护过程中常见的涉及字符串的源代码修改任务,需要支持源代码回溯定位的字符串分析。 为此,本文提出了一种支持源代码回溯定位的字符串分析,能够定位给定字符串变量在源代码中的全部数据来源,并能够根据开发人员提供的约束和程序输入,进一步根据需求精确定位待修改的数据来源,本文的具体工作包括: 1.提出了一种静态字符串源分析技术。这一技术主要对现有的字符串标记分析中的标记类型进行了扩展,通过引入字符串位置标记,定位给定字符串变量的所有数据来源。 2.提出了一种序约束的描述与求解技术。在使用静态字符串源分析技术获得给定字符串变量的所有数据来源之后,为了精确定位待修改数据来源,应当允许开发人员可以对数据来源进行约束。本文提出了序约束的概念,对于取值具有一定结构的字符串变量(如表示SQL语句的变量),序约束可以描述出现在变量取值的特定结构(如表名位置)中的数据来源。本文还提出用于求解序约束的序标记传播技术。 3.提出了一种动态字符串源分析技术。在给定程序输入下,这一技术可以定位给定字符串变量运行时取值的任意子串的数据来源。当开发人员需要运行待修改软件时(例如软件排错时),这一技术可以精确地定位给定字符串变量的运行时错误取值中错误部分的数据来源,从而能够精确地定位待修改数据来源。这一技术主要通过定义信息更丰富的字符串位置标记和分析运行时信息提高数据来源定位的精确性。 4.将支持源代码回溯定位的字符串分析应用于新的源代码修改任务。本文研究两类新的源代码修改任务:软件国际化中的待翻译字符串定位和Web应用软件界面修改,基于支持源代码回溯定位的字符串分析设计了这两类任务的自动化解决方案,实现了相应的工具,并在实际开源上软件上验证了本文所提出的方案的有效性。