【敏捷开发】敏捷环境中的行为驱动开发(BDD)和软件测试
敏捷环境有效地弥合了产品和工程之间的沟通差距。 BDD是Agile QA发生的最好的事情;-)
测试的神话.
在大学里,我学到了软件测试的基本概念,但无法全面了解整个过程。所以我曾经认为测试是一个耗时的过程,有很多理论术语。但是当我在职业生涯中成长并开始全职为软件行业工作时,我意识到确保我们编写的软件质量的机制的真正需要。让我与您分享我的发现。
软件测试(定义)
软件测试是一系列旨在调查,评估和确定软件产品完整性和质量的过程。此过程通过验证和验证确保软件产品符合法规,业务,技术,功能和用户要求。
验证(Validation) - 我们是否正在构建正确的产品
验证(Verification) - 我们是否正确构建产品
V&V信心 - 确保产品符合目的
在进入我们的主题之前,我假设您对以下概念图中的基本软件测试概念有所了解。
软件测试分类 - 今天的软件团队使用上述测试方法的组合来满足他们的测试目标。
传统测试
在传统的软件开发环境中,开发和测试是两个不同的阶段,大部分时间由两个不同的小组完成;
- 编写程序和构建功能的开发人员
- 测试书面软件的测试人员
质量保证 - 测试人员编写并执行全面的测试套件,以查找新开发的功能中的错误,同时验证新编写的代码未在已开发的功能中引起任何错误(回归测试)
走向敏捷
快速的软件开发和不断提供的新质量功能现在通常是我们开发的软件系统的最重要的要求。企业运营迅速,我们的软件产品需要快速发展,以反映不断变化的业务需求。但传统的测试方法无法确保以更快的速度获得预期的良好质量。为了跟上不同的发展节奏,需要一种确保软件质量的新方法。那就是敏捷!
敏捷方法的重点是减少软件过程中的开销,并能够快速响应不断变化的需求,而无需过多的返工。
敏捷宣言
敏捷方法总是致力于通过评估来发现构建软件的更好方法;
个人和互动 - 过程和工具
工作软件 - 综合文档
客户协作 - 通过合同谈判
响应变革 - 遵循计划
在敏捷中进行测试
敏捷方法通过引入测试自动化,协作测试,全生命周期测试,减少开销和最少文档等概念,避免了传统测试方法的低效率和开销。首先,我来介绍一些术语。
- 测试驱动开发(TDD) - 在代码之前编写测试并通过测试是开发的关键驱动因素。
- 验收测试驱动开发(ATDD) - 具有不同观点的团队成员(客户,业务分析师,测试人员,开发人员)在实施相应功能之前协作并编写验收测试。
- 行为驱动开发(BDD) - 测试是用非技术语言编写的,每个人都可以理解(例如像Gherkin这样的特定于域的语言)。 BDD结合了TDD和ATDD的原理,并形成了一种方法,通过讨论示例来建立对要构建的软件类型的共享理解。
测试自动化
在敏捷中,几乎所有时间,我们都尝试以自动方式实现测试套件。由于现代计算机非常擅长快速运行重复性任务,因此自动化测试套件比使用手动测试更有效。每当向系统添加新功能时,都可以运行测试,并且可以立即捕获新代码引入的问题(这可以成功实现持续集成实践)。
行为驱动开发(BDD)
在敏捷环境中,BDD起着至关重要的作用,因为它强烈鼓励在开发和测试过程中使用敏捷方法。 BDD将软件产品的客户,最终用户,BA,QAs和SE集中到一个表中,以便有效地共享系统知识及其测试要求。
BDD由一系列要遵循的步骤组成。
- 识别业务功能。
- 确定所选功能下的方案。
- 为每个方案定义步骤。
- 运行功能并失败。
- 编写代码以使步骤通过。
- 重构代码,创建可重用的自动化库。
- 运行功能并通过。
- 生成测试报告。
写作特性
功能,方案和步骤一起形成行为测试。在大多数情况下,这些测试通常由业务分析师(BA)以商业可读,域特定语言(DSL)编写。小黄瓜是一种流行语言,用于编写叙述性用户故事。
使用Gherkin语法示例编写要素文件
在功能文件的最开头,我们将操作标题称为功能。然后,可以选择向该功能添加说明。它采用以下格式,
As [role]
I want [feature]
So that [benefit/business reason]
功能的验收标准是其中的方案。仅当该功能中的所有方案都成功时,才会成功通过功能。场景采用以下格式,
Given Exact context
When Action/Event
Then Outcomes
And/But More of the same…
Gherkin有更酷的选项,如示例,场景轮廓,背景和标签。因此,请务必仔细阅读Gherkin文档,以便更好地了解Gherkin的可能性。
如果您是一个试图编写出色功能的人,首先,您必须最大限度地减少功能气味(时间依赖性,相互依赖性,多场景场景,过度使用变量)
创建测试
在商务人员编写功能文件后,QA人员开始实施测试套件。对于编写BDD测试,使用BDD测试框架。为了自动化测试过程,Test Runner代码也使用jUnit(Java),TestNG(Java),Mocha(JavaScript)等技术实现。
热门BDD框架:
- Java — Cucumber, JBehave
- Ruby — Cucumber
- PHP — Behat
- JavaScript — cucumber.js, jasmine
完整的测试周期
总之,BDD涉及上述活动的周期,需要跨职能团队的参与和协作,该团队由客户/客户,BA,QAs,测试人员,UI和UX设计人员以及软件开发人员组成。 这是一种精心开发的方法,同时牢记敏捷宣言的原则。
BDD的优点
行为测试的最大优点可能是它们以非常具体和直接的方式描述了用户期望从系统中获得的一组函数。这些行为的总和基本上记录了与用户/客户的合同。如果任何测试失败,则不支持此合同。
虽然为现有代码编写单元测试可能非常困难,但可以在任何时间为系统编写行为测试:开发之前,期间或之后。首先编写测试的情况称为行为驱动开发。
单元测试套件提供每个组件仍在工作的持续反馈。单元测试作为不能过时的文档,不像单独的文档,这可以并经常做。当测试通过并重构生产代码以删除重复时,很明显代码已完成,开发人员可以继续进行新的测试。
测试驱动的开发迫使进行关键分析和设计,因为开发人员无法在不真正了解所需结果以及如何测试的情况下创建生产代码。该软件往往设计得更好,即松散耦合且易于维护,因为开发人员可以随时自由地做出设计决策和重构,并确信软件仍在工作。通过运行测试可以获得这种信心。可能会出现对设计模式的需求,并且可以在那时更改代码。
测试套件充当了错误的回归安全网:如果发现错误,开发人员应该创建一个测试来揭示错误,然后修改生产代码,以便bug消失,所有其他测试仍然通过。在每次连续的测试运行中,都会验证以前的所有错误修复。它还减少了调试时间。
下一步
为了完全理解BDD,让我们在下一个教程中创建一个示例项目,用Cucumber,jUnit / TestNG,Java和Selenium来测试BDD风格的Web应用程序。
推荐阅读
- BDD in Action: Behavior-Driven Development for the whole software lifecycle — by John Ferguson Smart
- https://johnfergusonsmart.com/feature-mapping-a-simpler-path-from-stories-to-executable-acceptance-criteria/
- https://www.toptal.com/freelance/your-boss-won-t-appreciate-tdd-try-bdd
参考
- https://www.toadworld.com/platforms/oracle/b/weblog/archive/2017/03/23/testing-in-an-agile-development-environment-tdd-vs-bdd
- http://istqbexamcertification.com/what-are-the-different-agile-testing-methodology-test-driven-development-behavior-driven-development/
- https://dzone.com/articles/a-day-or-a-sprint-in-the-life-of-a-bdd-team
Image Sources: https://www.safaribooksonline.com/library/view/bdd-in-action/9781617291654/, https://jovanamiljanovic.com/wp-content/uploads/2017/03/testirovshhiki-razrabotchiki-vzaimodeystvie.png, http://2.bp.blogspot.com/-SIWC4Nb2VQo/VzFfyjkAckI/AAAAAAAAAR4/XQGIel6Q_LorBWXSo55S3CRQmviXqxaYgCK4B/s1600/bdd.png
Tools in images: http://serenity-bdd.info, http://serenity-js.org
本文:http://pub.intelligentx.net/node/511
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 174 次浏览