软件测试技术随着软件研发的出现而产生,也随着软件研发的发展而逐渐进步。早期的软件规模较小,开发比较容易,测试也只是通过手工测试的方法检查运行是否有异常。但随着软件规模变大,传统的手工测试显然无法满足一个快速发展的领域,软件测试开始独立于软件研发,成为一个专业化的领域,软件测试技术也不断完善。近年来,移动终端的普及,移动APP的几何式发展,移动APP的测试开始登上舞台,在目前的移动应用平台中,Android是使用最广泛的移动操作系统。据不完全统计,在2014年,Android大约占80%以上的市场,其次还有iOS、Symbian、WindowsPhone和BlackBerryOS等移动平台。所以,如何解决移动app在频繁更新迭代的发展条件下,不同的平台、语言等带来影响情况下,进行一种便捷、高效、最大化节省成本的测试方式将是移动APP测试将努力的方向。78751
移动APP的功能是与平台无关的。但是在不同的平台之间还是会存在差异,例如消息事件的处理方式等。测试移动APP,并保证它们可以在所有的不同平台上正常工作,是一项非常有挑战的工作。我们需要为不同的平台编写特定的测试用例并且分别执行,这样就会导致在各个平台上的测试覆盖率不一样,而且测试用例相比于原来也会变得越来越难维护。平台级别的差异性实际上和应用程序的功能是无关的,所以理想中的测试用例应该是纯粹使用通用语言进行逻辑描述,不必描述具体的实现细节。行为驱动开发(BDD)测试便是这样一种风格的测试。
BDD(BehaviorDrivenDevelopment,行为驱动开发,以下简称BDD)是DanNorth在2013年提出的一种敏捷软件技术,建立于测试驱动开发[8](TDD)的基础之上[9][10]。其开发根基是一种“通用语言”,这种语言同时被客户和开发者用来定义系统的行为。它要解决的关键问题是提升问题领域人员和解决方案领域人员之间的交流。BDD实践者细心编写验收测试,作为团队成员都能读懂的实例,为此主动去开发一种共享的通用语言来描述和讨论开发的系统。文献综述
BDD最初是由DanNorth在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。在过去数年里,它得到了很大的发展[11]。
2009年,在伦敦发表的“敏捷规格,BDD和极限测试交流”中,DanNorth对BDD给出了如下定义:论文网
BDD是第二代的、由外及内的、基于拉(pull)的、多方利益相关者的(stakeholder)、多种可扩展的、高自动化的敏捷方法。它描述了一个交互循环,可以具有带有良好定义的输出(即工作中交付的结果):已测试过的软件。
BDD的重点是通过与利益相关者的讨论取得对预期的软件行为的清醒认识。它通过用自然语言书写非程序员可读的测试用例扩展了测试驱动开发方法。行为驱动开发人员使用混合了领域中统一的语言的母语语言来描述他们的代码的目的。这让开发着得以把精力集中在代码应该怎么写,而不是技术细节上,而且也最大程度的减少了将代码编写者的技术语言与商业客户、用户、利益相关者、项目管理者等的领域语言之间来回翻译的代价。
DanNorth创造了首个BDD框架:JBehave;之后是Ruby语言的基于故事的RBehave,后来被纳入了RSpec项目。他还与大卫赫利姆斯基、AslakHellesøy及等人开发了RSpec,并一起编写了《TheRSpecBook:BehaviourDrivenDevelopmentwithRSpec,Cucumber,andFriends》。RSpec是第一个基于故事的框架,后来主要被由AslakHellesøy开发的Cucumber取代。
2008年,参与了围绕BDD进行的首轮讨论的克里斯马茨,提出了特性注入(FeatureInjection)的想法,使BDD可以覆盖分析空间并提供从初期的展望到编码和发布的整个软件生命周期过程的改造。