---


基于搜索的软件工程( Search Based Software Engineering,简称 SBSE ),这个概念是由 Harman 等人[1] 1998年首次提出来的,该领域主要是采用  元启发式搜索技术,从问题的解空间出发来解决软件工程问题。它为软件工程问题的求解提供了一个新的思路,经过几十年的发展,在软件测试方向有很好的应用,经统计有超过 50% 的论文关注的是软件测试和调试方向。





元启发式搜索”呢? 百度百科介绍 [2] “ 启发式搜索就是在状态空间 中的搜索,对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。”,用我们大白话来讲,就是一步一步的逼近目标。





遗传算法





在遗传算法中,每一个可行解都被看作一个“染色体( Chromosome )”。而评价个体优劣程度的指标被称为“适应度( Fitness )”,适应度越高,表示个体越符合要求,反之越不符合要求。遗传算法的“操作算子( Genetic Operator )”包括:选择,交叉,和变异 3种基本形式。





大致流程:初始化一个指定规模的种群,种群中每个染色体都是算计生成;然后算法根据每个染色体的适应度采取选择,交叉和变异,对种群进行迭代;知道满足特定条件终止 1)达到迭代次数 2)得到最优解。





搜索软件平台架构 基于搜索的软件工程_python



图1.







自动程序修复





玄跻峰等 [3] 统计和分析了2008 到 2015年间的相关文献,并将自动程序修复方法归结为3类,即:基于搜索的;基于代码穷举的;基于约束求解的。整体框架如下所示。





搜索软件平台架构 基于搜索的软件工程_算法_02



图2. 2008 - 2015 的相关论文直方图





搜索软件平台架构 基于搜索的软件工程_java_03



图3.





当然了,图3 所示的是大体的程序修复框架,在某些算法中某些步骤可能被简化。如“基于代码穷举”的补丁生成方法中,是没有第一步故障定位( Fault Localization )的,它将所有的语句自然排列。再如“基于约束求解”的补丁生成算法中,补丁生成后无需进行“验证补丁”这一环节。





To be continued ...





----------------------



【参考】



[1]   Harman M, Mansouri S A, Zhang Y. Search-based software engineering: Trends, techniques and applications[J]. Acm Computing Surveys, 2012, 45(1):17-20.



[2]   http://baike.baidu.com/link?url=5bBeNbbWzEN7ji4UxJD1pwvzR-IMIr7ZN65yf45WidgVy29qMdD-4L48M4c05jINu5FA7eaUh_ah4g95qmlzCK   启发式搜索



[3]   玄跻峰, 任志磊, 王子元,等. 自动程序修复方法研究进展[J]. 软件学报, 2016(4):771-784.