采用基于程序频谱的缺陷定位方法,

    程序频谱:在执行测试用例时程序实体(例如语句、谓词或函数等)是否被覆盖过,覆盖的具体次数,程序实体执行前后的状态,程序实体的执行时间,程序实体间的调用序列等。

    四元组:
    image.png
    可疑度(Suspiciousness)是指程序实 体内部含有缺陷的可能性,其与该程序实体被成功测试用例覆盖的次数成反比,与该程序实体被失败 测试用例覆盖的次数成正比,在程序自动修复问题 中,程序实体的可疑度决定了在后续缺陷修复时其被选中的概率

    之前:1:0.1:0 现在:应用软件缺陷定位领域中的一些经典可疑度计算公式

    Tarantula:
    image.png
    Ochia:
    image.png
    Jaccard:
    image.png

    之前是按照可疑度进行排名,根据贪心策略进行缺陷定位,认为程序缺陷产生于较高怀疑度语句相关联语句中,错误定位在真实程序中的应用准确性并不理想。

    在初始化种群时,同时考虑多处候选出错位置,并同时生成候选补丁,以此来缓解定位不准确带来的影响。

    补丁生成方面,固定搜索空间的大小,如何针对不同的程序设定合适的搜索空间依然是个难题,设定过小或者过大均可能影响修复效果

    非随机初始种群方法和混合式交叉方式两种遗传操作来缩小搜索空间和加速算法收敛,达到高效搜索变异体的目的

    程序修复补丁生成优化策略

    • 改进遗传算子
    • 改善适应度函数
    • 融合其他算法
    • GA并行化

      交叉概率和变异概率都为固定值,导致后期种群多样性差、搜索能力差, 交叉算子和变异算子的自适应变化 通过适应度函数可以评估相应启发式搜索算法 输入参数的性能优劣,采用矩阵存储个体经过的路径,对适应度函数做出改善,若产生 某条路径的测试用例数量多了,则降低适应度,使种群朝着测试用例数量少的路径方向进化 蚁群遗传算法与标准遗传算法并行化计算,与其他算法的融合发挥了遗传算法全局搜索能力强的优点,改善了局部搜索能力弱、易早熟收敛的缺点