论文部分内容阅读
随着计算机科学与技术的不断快速发展,软件系统的规模和复杂性日益增大,软件系统的开发、维护和演化成本也随之不断上升。如何有效地控制复杂性、保障正确性和可靠性、降低成本是软件领域研究和开发人员长期面对的挑战。有效地认识和理解复杂程序的各类属性是保障软件可靠性重要基础。当程序的某一个属性即使发生微小变化,也会引起该程序的相关属性产生很大波动,我们就称该程序属性变化敏感。本文针对若干程序属性的变化敏感性分析问题展开研究工作,主要内容包括以下三个方面。 1.数值变化敏感性分析 数值变化敏感性分析检测软件的输出结果是否对其输入和中间数值的微小变化敏感,该问题来源于数值计算软件的需求。对于数值计算软件来说,数值误差的积累是其面临的重要问题,直接威胁到软件的正确性和可靠性。已有的误差分析工作虽然可以从理论上估计数值的稳定程度,但是仍然有很多方面存在不足。首先,数值计算理论假设程序的设计编码人员经过严格的数值分析训练,而实际上随着硬件技术的高速发展和数值计算技术的广泛应用,有相当多未经严格训练的开发人员要参与到相应软件的开发中来;其次,已有的理论需要很多人工的判断工作才能完成,而随着软件规模和复杂性的增加,人工的判断很难完全满足实际工业界误差分析的需要。本文提出了基于数值扰动的解决方案来解决相关的数值变化敏感性分析问题,该解决方案通过扰动程序的输入和计算过程的中间数值,并自动地度量程序输出结果的变化程度来判断程序的数值误差稳定性。相对于传统的数值误差分析技术,本文的解决方案具有实现简单、效率较高、吞吐量大等优点,适合分析较大规模的软件。通过文献中常用的多个数值计算程序和开源科学计算库GNU Scientific Library(GSL)上的实例评估,本文验证了数值扰动方案在解决数值变化敏感性分析问题上的有效性。 2.算式变化敏感性分析 算式变化敏感性分析检测软件的输出是否对其程序中算术表达式的等价变换敏感,即看似可修改的计算先后次序是否会对程序的结果产生影响。面向算式变化的敏感性分析,能够帮助软件开发人员认识和理解理论上等价的算术表达式在实际平台上以不同的方式和优先级执行时可能引起的结果差异,并由此指导开发人员构建计算规范的可靠软件。本文使用算式扰动方法来解决这一分析问题,将程序计算过程中的算术表达式自动地转换为一系列在实数域上等价的计算形式,并分析这些形式在实际运行平台上计算结果的差异,能帮助软件开发人员定位程序中不稳定的算术表达式。由于算式扰动的求解空间往往很大,因此需要设法将扰动实施在其解空间的某个随机抽样上,并保证该抽样的统计性质和抽样前的总体保持一致。本文进一步基于多核或者多系统平台对算式扰动方法进行了优化。在多个计算用例和工业开源库上的实例评估表明了算式扰动方法在解决算式变化敏感性分析问题上有效性和可行性。 3.时间变化敏感性分析 时间变化敏感性分析检测实时软件任务的整体执行时间是否对软件中各个程序点局部执行时间的微小变化敏感。实时系统不仅要求软件在功能逻辑上正确无误,而且要求保障软件任务完成的实时性。实时系统的时间相关错误不仅会在软件的开发过程中产生,在开发完成之后的软件维护和演化过程中由于维护不当也会破坏原系统保持的时间约束条件、导致相关的时间错误。时间变化敏感性分析可以帮助软件维护人员分析局部修改可能会引起的整体时间变化、减少或者避免引入相关的时间错误。本文提出了一种基于时间扰动的解决方案来解决相关的时间变化敏感性分析问题,该解决方案采用测试方法来检测程序中对时间变化敏感的程序位置点,它通过在程序中不同的位置点插桩代码时延,达到对任务执行时间的扰动作用;对这些扰动作用下的程序任务执行时间变化进行统计分析,就可以得到程序中各个位置点对时间影响的定量度量。该项技术在实时系统最坏状况执行时间分析的M(a)lardalen基准用例集和开源多媒体项目FLAC上进行了实验,实验结果显示了其有效性和可行性。