{"id":803,"date":"2017-04-20T12:05:21","date_gmt":"2017-04-20T10:05:21","guid":{"rendered":"https:\/\/zaven.co\/blog\/?p=803"},"modified":"2025-04-08T19:55:09","modified_gmt":"2025-04-08T17:55:09","slug":"bdd-frameworks-part-1","status":"publish","type":"post","link":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/","title":{"rendered":"BDD frameworks (part 1)"},"content":{"rendered":"<p>Programmer, tester, manager, client \u2013 mutual understanding between these people is essential for the positive completion of any mobile application programming project. Nobody said it would be easy, but <abbr title=\"Behavior Driven Development\">BDD<\/abbr> frameworks can help.<!--more--><\/p>\n<p>At the very beginning of a project, as its contractor, we have to define the requirements of an android app with the client. Each required functionality should be described on the basis of a specific structure: title, description and acceptance criterion.<\/p>\n<p>The description should contain information about its: user,&nbsp; business value, and effect (what happens after the function is performed).<\/p>\n<p>Acceptance criterion is a defined list of steps that must be taken to achieve the desired goal.<\/p>\n<h2>Behavior driven testing<\/h2>\n<p>To determine that a feature meets the agreed upon acceptance criteria, we must test it. This is where the team often encounters communication barriers on the line: tester-developer or manager-client.<\/p>\n<p><strong>Non-technical people understand the data specified in the test by the programmers differently.<\/strong> In relation to that, they are often unable to check what a given test performs and whether it meets the criteria described in the requirements. Behavior-Driven Development will come to our aid.<\/p>\n<p>In the first part of the article, &#8220;BDD frameworks&#8221;, I will briefly describe the main assumptions of BDD as the sections following describe selected <a href=\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-2\/\" target=\"_blank\" rel=\"noopener\"><u>User Interface testing frameworks<\/u><\/a> and <a href=\"https:\/\/zaven.co\/blog\/bdd-farameworks-part-3\/\" target=\"_blank\" rel=\"noopener\"><u>Unit testing frameworks<\/u><\/a>.<\/p>\n<h2>What is Behavior-Driven Development?<\/h2>\n<p>BDD is a software development process created in 2003 on the basis of <abbr title=\"Test Driven Development\">TDD<\/abbr>. Its main task is to describe the behavior of a system from the perspective of its users. With BDD testing tools we can test application views or perform unit tests, among other things.<\/p>\n<h2>BDD development<\/h2>\n<p>The main rules of Behavior-Driven Development are as follows:<\/p>\n<ul>\n<li>The language in which we describe user behavior needs to be natural (understandable to non-technical users)<\/li>\n<li>A <code>feature<\/code> must be found in each test (i.e., the title and description of the feature, information regarding what function it is to perform as in the requirements).<\/li>\n<li>Each test also has a&nbsp;<code>scenario<\/code> (i.e., steps of acceptance, a description of the business situation as in the requirements)<\/li>\n<\/ul>\n<p>In the description of the system behavior 3 keywords are used:<\/p>\n<ul>\n<li><code>Given<\/code>\u2013 context, scenario<\/li>\n<li><code>When<\/code>\u2013 behavior, action<\/li>\n<li><code>Then<\/code>\u2013 result<\/li>\n<\/ul>\n<h2>Practical example of \u201cBehavior Driven Development Testing\u201d<\/h2>\n<p><code>Feature: Login feature<\/code><\/p>\n<p><code>&nbsp; &nbsp; Scenario: As a valid user I can log into my app<\/code><br \/>\n<code>&nbsp; &nbsp; &nbsp; When I press \"Login\"<\/code><br \/>\n<code>&nbsp; &nbsp; &nbsp; Then I see \"Welcome to the coolest app ever\"<\/code><\/p>\n<p>After learning the main assumptions of BDD we can move on.<\/p>\n<p>See the following articles:<\/p>\n<ul>\n<li><a href=\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-2\/\" target=\"_blank\" rel=\"noopener\"><span style=\"text-decoration: underline;\">BDD frameworks (part 2)<\/span><\/a>: About User Interface Testing<\/li>\n<li><a href=\"https:\/\/zaven.co\/blog\/bdd-farameworks-part-3\/\" target=\"_blank\" rel=\"noopener\"><span style=\"text-decoration: underline;\">BDD frameworks (part 3)<\/span><\/a>: About Unit Testing Framework<\/li>\n<\/ul>\n<hr>\n<h3>You can find the source code on my <a href=\"https:\/\/github.com\/woszos\/bdd-android-frameworks\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/h3>\n<hr>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programmer, tester, manager, client \u2013 mutual understanding between these people is essential for the positive completion of any mobile application programming project. Nobody said it would be easy, but BDD frameworks can help.<\/p>\n","protected":false},"author":13,"featured_media":808,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59,56,60,5],"tags":[6,77,76,90,78,40,79],"class_list":["post-803","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agile-methodology","category-android-development","category-project-management","category-tutorials","tag-android","tag-app-testing","tag-bdd","tag-bdd-frameworks","tag-behaviour-driven-development","tag-mobile-app","tag-unit-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.8.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Behavior-Driven Development. BDD framework (part 1) | Zaven Blog<\/title>\n<meta name=\"description\" content=\"In the first part of the article, &quot;BDD frameworks&quot;, I will briefly describe the main assumptions of BDD as the sections.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Behavior-Driven Development. BDD framework (part 1) | Zaven Blog\" \/>\n<meta property=\"og:description\" content=\"In the first part of the article, &quot;BDD frameworks&quot;, I will briefly describe the main assumptions of BDD as the sections.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Zaven Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-20T10:05:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-08T17:55:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"3000\" \/>\n\t<meta property=\"og:image:height\" content=\"1840\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Wojciech Sz\u00f3stak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wojciech Sz\u00f3stak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/\",\"url\":\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/\",\"name\":\"Behavior-Driven Development. BDD framework (part 1) | Zaven Blog\",\"isPartOf\":{\"@id\":\"https:\/\/zaven.co\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg\",\"datePublished\":\"2017-04-20T10:05:21+00:00\",\"dateModified\":\"2025-04-08T17:55:09+00:00\",\"author\":{\"@id\":\"https:\/\/zaven.co\/blog\/#\/schema\/person\/6a25629cbfe7aef5ecf9eacd3b4757b6\"},\"description\":\"In the first part of the article, \\\"BDD frameworks\\\", I will briefly describe the main assumptions of BDD as the sections.\",\"breadcrumb\":{\"@id\":\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#primaryimage\",\"url\":\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg\",\"contentUrl\":\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg\",\"width\":3000,\"height\":1840,\"caption\":\"BDD frameworks\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zaven.co\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"BDD frameworks (part 1)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zaven.co\/blog\/#website\",\"url\":\"https:\/\/zaven.co\/blog\/\",\"name\":\"Zaven Blog\",\"description\":\"Software development blog. Generative AI, web &amp; mobile applications.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zaven.co\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zaven.co\/blog\/#\/schema\/person\/6a25629cbfe7aef5ecf9eacd3b4757b6\",\"name\":\"Wojciech Sz\u00f3stak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zaven.co\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cbebf8b35feebd842c320b56f1edbf1a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cbebf8b35feebd842c320b56f1edbf1a?s=96&d=mm&r=g\",\"caption\":\"Wojciech Sz\u00f3stak\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/wojciech-szstak-513020113\/\"],\"url\":\"https:\/\/zaven.co\/blog\/author\/wojciech\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Behavior-Driven Development. BDD framework (part 1) | Zaven Blog","description":"In the first part of the article, \"BDD frameworks\", I will briefly describe the main assumptions of BDD as the sections.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Behavior-Driven Development. BDD framework (part 1) | Zaven Blog","og_description":"In the first part of the article, \"BDD frameworks\", I will briefly describe the main assumptions of BDD as the sections.","og_url":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/","og_site_name":"Zaven Blog","article_published_time":"2017-04-20T10:05:21+00:00","article_modified_time":"2025-04-08T17:55:09+00:00","og_image":[{"width":3000,"height":1840,"url":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg","type":"image\/jpeg"}],"author":"Wojciech Sz\u00f3stak","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Wojciech Sz\u00f3stak","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/","url":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/","name":"Behavior-Driven Development. BDD framework (part 1) | Zaven Blog","isPartOf":{"@id":"https:\/\/zaven.co\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#primaryimage"},"image":{"@id":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg","datePublished":"2017-04-20T10:05:21+00:00","dateModified":"2025-04-08T17:55:09+00:00","author":{"@id":"https:\/\/zaven.co\/blog\/#\/schema\/person\/6a25629cbfe7aef5ecf9eacd3b4757b6"},"description":"In the first part of the article, \"BDD frameworks\", I will briefly describe the main assumptions of BDD as the sections.","breadcrumb":{"@id":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#primaryimage","url":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg","contentUrl":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2017\/04\/polowa-mniejsze.jpg","width":3000,"height":1840,"caption":"BDD frameworks"},{"@type":"BreadcrumbList","@id":"https:\/\/zaven.co\/blog\/bdd-frameworks-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zaven.co\/blog\/"},{"@type":"ListItem","position":2,"name":"BDD frameworks (part 1)"}]},{"@type":"WebSite","@id":"https:\/\/zaven.co\/blog\/#website","url":"https:\/\/zaven.co\/blog\/","name":"Zaven Blog","description":"Software development blog. Generative AI, web &amp; mobile applications.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zaven.co\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/zaven.co\/blog\/#\/schema\/person\/6a25629cbfe7aef5ecf9eacd3b4757b6","name":"Wojciech Sz\u00f3stak","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zaven.co\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cbebf8b35feebd842c320b56f1edbf1a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cbebf8b35feebd842c320b56f1edbf1a?s=96&d=mm&r=g","caption":"Wojciech Sz\u00f3stak"},"sameAs":["https:\/\/www.linkedin.com\/in\/wojciech-szstak-513020113\/"],"url":"https:\/\/zaven.co\/blog\/author\/wojciech\/"}]}},"_links":{"self":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts\/803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/comments?post=803"}],"version-history":[{"count":17,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts\/803\/revisions"}],"predecessor-version":[{"id":69940,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts\/803\/revisions\/69940"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/media\/808"}],"wp:attachment":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/media?parent=803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/categories?post=803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/tags?post=803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}