论文部分内容阅读
计算机的发展和普及使软件系统日益庞大和复杂。近年来,随着社会化编程方式的广泛使用,不同软件项目之间韵依赖增强,大量相互协同和依赖的软件项目组成了软件生态系统。这些给软件维护带来了巨大的困难。调试工作是软件维护中开销最大的过程,其中包括两项主要任务,分别是缺陷定位和缺陷修复。对这两项任务的研究和改进,有利于减轻开发者在调试过程中的负担,并提高软件质量。缺陷定位的研究致力于根据测试中收集的数据结合程序信息为开发者缩小寻找缺陷的范围。软件测试过程是由很多事件组成的,例如某条语句被执行和测试结果出错,如何通过这些事件找到缺陷是研究者要解决的问题。在软件生态系统中,多样的软件项目给缺陷定位提出了新的挑战。在软件生态系统中,缺陷可能会沿着依赖关系影响到其它项目,形成阻塞性缺陷。与普通缺陷的修复不同,阻塞性缺陷的修复涉及多个软件项目或模块,更加复杂和困难。现有研究关注对阻塞性缺陷的预测,然而即使识别出了阻塞性缺陷,仍难以改变其修复困难的情况。本文围绕软件生态系统中的缺陷定位和阻塞性缺陷这两个重要问题进行研究。首先,使用测试事件信息量对缺陷定位方法进行改进,提高缺陷定位在不同软件项目上的准确性和稳定性。然后,对开发者使用权变措施修复跨项目缺陷的过程进行实证研究,归纳总结了权变措施的特征和模式。最后,对阻塞性缺陷的可打破进行研究,分析与可打破性相关的缺陷特征,并提出了预测方法。本文的主要工作和贡献如下:第一,软件生态系统中的项目和测试用例集呈现多样性,给缺陷定位带来困难。基于频谱的缺陷定位方法定位使用测试事件发生的次数进行定位,容易受到数据集和缺陷类型的影响。为解决这些问题,本文提出了基于测试事件信息量的缺陷定位方法(SIQ),使用测试事件信息量对不同事件的在缺陷定位过程中的影响进行动态调整。在多个软件项目上的实验结果显示SIQ方法具有更好的定位准确性与稳定性,使用测试事件信息量可以提高缺陷定位方法对软件生态系统中不同项目与缺陷的适应性。第二,在软件生态系统中,跨项目缺陷给下游项目的维护带来很大困难。本文对跨项目缺陷的权变措施进行了实证研究,通过对权变措施的分析发现下游项目使用的权变措施与上游项目提出的修复是有显著差别的,并找到了三种可以进行权变措施的缺陷类型以及下游设计权变措施的四种模式。这些发现对开发权变措施相关的辅助工具有积极意义。第三,阻塞性缺陷通过权变措施等方式是可以打破的,这种可打破性对软件生态系统的调试过程有重要的意义。本文首先分析了缺陷特征与可打破性的关联性,发现开发者相关的属性对可打破性有很大的影响。然后提出了预测可打破性的方法,辅助下游开发者进行缺陷修复。无法打破的阻塞关系可能对下游项目造成长期的影响,这类缺陷需要上游开发者更多关注。本文提出了一种通过可变阈值调整预测精度的方法,对不可打破的阻塞关系进行更准确的预测,为上游开发者提供优先修复缺陷的建议。