SBSE—基于搜索的软件工程简介
2018年07月21日 22:46:04 土豆洋芋山药蛋 阅读数:125
下面我将从4个方面介绍SBSE(Search-Based Software Engineering)——即基于搜索的软件工程:
1.引入背景
2.技术和应用分析
3.SBSE优势
4.总结
话不多说,开始上车···
1.引入背景
传统软件工程(SE)的通常面临的问题:
(1)该程序中覆盖所有分支的最小测试用例集是什么nbsp;
(2)构建该系统体系结构以提高其可维护性的最佳方式是什么nbsp;
(3)平衡软件开发成本和客户满意度的需求集是什么nbsp;
(4)对于这个软件开发项目,资源的最佳配置是什么nbsp;
(5)应用于这个系统的最佳重构步骤序列是什么nbsp;
然而,所有这些问题本质上都是优化问题
SBSE已经应用于测试、设计、需求、项目管理和重构。
SBSE简介
SBSE试图将SE问题重新表述为SBO问题(简称“搜索问题”)。
一个搜索问题是在候选解决方案的搜索空间中寻找最优或接近最优的解决方案,由适应度函数指导。
起源
起源可以追溯到20世纪70年代早期关于优化的早期研究。目前已知的对SE问题应用优化的最早尝试是Miller和Spooner在软件测试领域于1976年提出的。
SBSE一词最早由哈曼和琼斯在2001年使用
哈曼和琼斯发现了应用SBO解决SE问题的两个关键因素:
(1)问题的表示方式 Solution Representation
(2)适应度函数的定义 Fitness Function
SBSE使用到的技术
软件的虚拟本质使它非常适合SBO 。这是因为适应性是直接根据工程构件来计算的,不需要对所有其他工程优化方法固有的模拟和建模。SE领域也充满了丰富的度量标准,可以作为适应度函数的初始候选
各种各样的优化和搜索技术可以也已经被使用。最广泛使用的是局部搜索、模拟退火(SA)、遗传算法(GAs)、遗传规划(GP)和爬山(HC)。
SBSE研究的数量有了相当大的增长,整体发展势头良好。
在整个SBSE文献中,50%+的人关注与测试相关的SE应用。
2. 技术和应用分析
EAs使用频率最高,代表了经典的优化算法,如遗传算法,遗传规划等(EAs*代表了自称为优化算法但还未被证实)。
模拟退火算法,爬山算法紧跟其后。
下面的应用场景上面也会用到;
上面的算法下面也会用到。
从图中可以发现测试的工作很重要,这也解释了为什么SBSE在测试领域的应用占到了50%+。
有趣的发现:
软件测试几乎应用到了所有的领域。
-
TS,SQP,MA,EDA四种技术目前仅仅被用在了软件测试领域。
-
应用最广泛的技术是SA,Eas。
SBSE在软件测试中的应用——SBST起源
使用元启发式搜索技术的第一篇论文是Boyer、Elspas和Levitt在选择系统的应用[2]
遗传算法在软件工程问题上的首次应用通常也归因于SBST领域,Xanthakis等的工作,他引入了一种遗传算法来开发整个测试套件。[3]
可以看出,总体趋势继续表明,每年论文数量呈多项式增长,突出了SBST的兴趣广度和强劲的健康状况。
如果这一趋势继续下去,在本十年结束之前将有超过1700篇SBST论文。
多年来,这一比例有所下降,稳定在50%左右。这代表了SBSE的非测试相关领域的增长,而不是SBST上论文数量的下降。
SBSE论文在测试问题上的比例稳定在大约相当于整个软件工程一半的水平, 这也是SBSE日益成熟的一个标志。
SBST——应用和工具
SBST现在已经足够成熟,已经从实验室研究过渡到工业应用,例如Daimler[4]、爱立信[5]和微软[6]
还有用于自动程序修复的公开的SBSE工具[7]和用于流行语言的SBST工具,如AUSTIN[8]、用于C语言的开源SBST系统和用于Java的开源SBST系统EvoSuite[9]。
3. SBSE优势
SBSE研究项目的显著特征之一是SBSE应用于的各种不同的SE问题。
SBO(search-based optimization)在很少的领域仍然没有被应用
在将基于搜索的方法应用于SE问题之前,必须完成的两个主要任务是定义问题的表示,以及捕获要优化的目标或目标的适应度函数。一旦完成这两个任务,就可以开始从许多SBO技术的应用中获得结果。
4. 总结
SBSE的未来是光明的。与SBSE相关的技术肯定适用于许多领域,但尚未充分考虑。在现有的应用领域,结果已经非常激动人心。
如果我们把软件工程看作是一门真正的工程学科,那么我们当然应该接受SBSE作为一个自然的结果。
优化是所有工程的基石!!!
自己感觉:
这就很尴尬了,本来是想着自己可以做一个基于智能算法的ce测试数据生成的一个尝试,但是SEST目前成熟了,而且查看论文几乎都是2014年以前写的SEST论文。
SBSE的通过介绍感觉是一个很重要的方向,但是奈何 自己一个人可能也做不出来什么吧。
不过 通过这些天详细的查找了测试数据生成中的各种语句覆盖,分支覆盖,谓词覆盖,分支/谓词覆盖,复合谓词覆盖以及 路径覆盖,看懂了,弄明白了,虽然说现在用不上但是自己学的应该就不吃亏吧,嘻嘻
具体的自己 找到的 资源上传到:
白盒测试各种测试方法-CSDN下载 https://download.csdn.net/download/luolang_103/10733580
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!