基于搜索的软件工程
---
基于搜索的软件工程 ( Search Based Software Engineering,简称 SBSE ),这个概念是由 Harman 等人[1] 1998年首次提出来的,该领域主要是采用
元启发式搜索 技术,从问题的解空间出发来解决软件工程问题。它为软件工程问题的求解提供了一个新的思路,经过几十年的发展,在软件测试方向有很好的应用,经统计有超过 50% 的论文关注的是软件测试和调试方向。
那么什么是“
元启发式搜索”呢? 百度百科介绍 [2] “
启发式搜索就是在状态空间
中的搜索,对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。”,用我们大白话来讲,就是一步一步的逼近目标。
遗传算法 ( Genetic Algorithm ),是一种模拟自然选择进化过程( 即适者生存,不适者淘汰 )的搜索算法。其使用 选择,交叉,变异操作,对原始种群进行进化和筛选,经过数轮迭代得到可能的最优解。
在遗传算法中,每一个可行解都被看作一个“染色体( Chromosome )”。而评价个体优劣程度的指标被称为“适应度( Fitness )”,适应度越高,表示个体越符合要求,反之越不符合要求。遗传算法的“操作算子( Genetic Operator )”包括:选择,交叉,和变异 3种基本形式。
大致流程:初始化一个指定规模的种群,种群中每个染色体都是算计生成;然后算法根据每个染色体的适应度采取选择,交叉和变异,对种群进行迭代;知道满足特定条件终止 1)达到迭代次数 2)得到最优解。
自动程序修复 ( Automatic Program Repair ),旨在与降低开发人员进行调试时的压力,本文的 APR 指的是基于测试集的程序修复方法( Approach to test-suites based program repair )。所谓基于测试集的程序修复就是:将补丁是否通过测试集来作为补丁是否合格的评判标准( 当然,这么做肯定有漏洞,因为有可能生成的补丁通过了测试集,但不是我们想要的,或者功能不完全的,这也是未来程序修复的难点与挑战之一 )。
玄跻峰等 [3] 统计和分析了2008 到 2015年间的相关文献,并将自动程序修复方法归结为3类,即:基于搜索的;基于代码穷举的;基于约束求解的。整体框架如下所示。
图2. 2008 - 2015 的相关论文直方图
当然了,图3 所示的是大体的程序修复框架,在某些算法中某些步骤可能被简化。如“基于代码穷举”的补丁生成方法中,是没有第一步故障定位( Fault Localization )的,它将所有的语句自然排列。再如“基于约束求解”的补丁生成算法中,补丁生成后无需进行“验证补丁”这一环节。
To be continued ...
----------------------
【参考】