基于搜索的软件工程
基于搜索的软件工程( SBSE )应用了元数据搜索技术,例如遗传算法,模拟退火和禁忌搜索搜索到软件工程问题。软件工程中的许多活动都可以说为优化问题。线性编程或动态编程等操作研究的优化技术对于大规模软件工程问题通常是不切实际的,因为它们的计算复杂性或对问题结构的假设。研究人员和从业人员使用元启发式搜索技术,这些技术对问题结构几乎没有假设,以找到近乎最佳或“良好”的解决方案。
SBSE问题可以分为两种类型:
- 黑框优化问题,例如,将人员分配到任务(典型的组合优化问题)。
- 需要考虑在源代码上操作的白色框问题。
定义
SBSE将软件工程问题转换为计算搜索问题,该问题可以通过元启发式解决。这涉及定义搜索空间或一组可能的解决方案。这个空间通常太大而无法进行详尽的探索,暗示了一种荟萃的方法。然后,使用度量标准(也称为健身函数,成本函数,目标函数或质量度量)来衡量潜在解决方案的质量。许多软件工程问题可以作为计算搜索问题进行重新纠正。
相比之下,“基于搜索的应用程序”一词是指在另一个工业应用中使用搜索引擎技术而不是搜索技术。
历史简介
1976年,韦伯·米勒(Webb Miller)和戴维·斯波纳(David Spooner)在软件测试领域报告了最早的优化方法之一。 1992年,Xanthakis和他的同事首次将搜索技术应用于软件工程问题。 SBSE一词是由Harman和Jones于2001年首次使用的。到2013年,研究界成长为包括800多名作者,涵盖了40个国家的大约270家机构。
应用区域
基于搜索的软件工程适用于软件开发过程的几乎所有阶段。软件测试一直是主要应用之一。搜索技术已应用于其他软件工程活动,例如需求分析,设计,重构,开发和维护。
需求工程
需求工程是确定和管理软件用户和环境需求的过程。基于搜索的方法已用于选择和优化,目的是找到与用户请求相匹配的最佳需求子集,例如有限的资源和需求之间的相互依存关系。这个问题通常被作为多标准决策问题解决,通常涉及向决策者提出一系列良好的成本和用户满意度之间的良好妥协以及需求风险。
调试和维护
识别软件错误(或代码气味),然后调试(或重构)该软件在很大程度上是手动和劳动密集型的努力,尽管该过程是工具支持的。 SBSE的一个目的是自动识别和修复错误(例如,通过突变测试)。
遗传编程是一种以生物学启发的技术,涉及通过使用交叉和突变来发展程序,已被用来通过更改几行源代码来搜索程序的维修。 GenProg Evolutionary计划维修软件在一项测试中以大约8美元的价格修理了105个错误中的55个错误。
共同进化采用了“捕食者和猎物”的隐喻,其中一套计划和一套单位测试共同发展并相互影响。
测试
基于搜索的软件工程已应用于软件测试,包括自动生成测试用例(测试数据),测试案例最小化和测试用例优先级。回归测试也受到了一些关注。
优化软件
在程序优化中使用SBSE,或修改软件以使其在速度和资源使用方面更有效,这是成功研究的对象。在一个例子中,基因改进了50,000行计划,导致程序的平均速度快70倍。 Basios等人的最新工作。表明,通过优化数据结构,Google Guava发现执行时间有9%的改善,记忆消耗提高了13%,CPU使用分别提高了4%。
项目管理
例如,项目经理通常可以自动执行许多决定,例如项目调度。
工具
可用于SBSE的工具包括OpenPAT, EvoSuite和Coverage ,这是Python的代码覆盖范围测量工具。
方法和技术
有许多方法和技术可用,包括:
- 通过仪器进行分析,以监视程序的某些部分。
- 获得与程序相关联的抽象语法树,可以自动检查该树,以了解其结构。
- 与SBSE相关的程序切片的应用包括软件维护,优化和程序分析。
- 代码覆盖范围允许测量使用给定的一组输入数据执行多少代码。
- 静态程序分析
行业接受
作为一个相对较新的研究领域,SBSE尚未获得广泛的行业接受。
SBSE在行业中的成功应用主要可以在软件测试中找到,在软件测试中,自动生成大规模发现错误的随机测试输入的能力对公司很有吸引力。 2017年, Facebook收购了SapeRup Majicke Limited,该软件开发了Sapienz,这是一个基于搜索的错误查找应用程序。
在其他应用程序场景中,软件工程师可能不愿采用几乎没有控制的工具,或者生成与人类生产的解决方案。在SBSE在修复或改进程序中使用的背景下,开发人员需要确信,任何自动产生的修改都不会在系统需求范围和测试环境范围之外产生意外行为。考虑到完全自动化的编程尚未实现,这种修改的理想属性是,人类需要轻松理解它们以支持维护活动。
另一个问题是SBSE可能会使软件工程师多余。支持者声称,SBSE的动机是增强工程师与计划之间的关系。