{"id":5530,"date":"2017-09-29T22:25:36","date_gmt":"2017-09-29T22:25:36","guid":{"rendered":"https:\/\/cheesecakelabs.com\/blog\/?p=5530\/"},"modified":"2022-07-01T17:30:08","modified_gmt":"2022-07-01T17:30:08","slug":"behavior-driven-development","status":"publish","type":"post","link":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/","title":{"rendered":"Behavior-Driven Development: way beyond a testing principle"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Picture this: 5 people talking about the same subject in different languages. What are the chances of misunderstanding? As you can imagine: a lot. Well, this is a common scenario in software development teams up to some point. One of the most common reasons that lead to failure when building a product is the lack of well defined goals and requirements amongst developers and stakeholders. This can be caused by a wide variety of reasons. But it is safe to agree that most of them are due to lack of communication.<\/span><\/p>\n<p><!--more--><\/p>\n<p><span style=\"font-weight: 400;\">Why mention people speaking different languages? <\/span><b>Because every single collaborator involved in a project has their own perspective<\/b><span style=\"font-weight: 400;\">. The gap might get even bigger when talking about different areas of expertise, such as frontend engineers, testers, backend engineers, data analysts, you name it.<\/span> <span style=\"font-weight: 400;\">This can be the equivalent to speaking different languages when it comes to project outcome. As a product owner or business analyst you have to digest the information in a way everyone understands.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">BDD to the rescue!<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">BDD stands for Behaviour Driven Development. Originally conceived in 2003 by<\/span><a href=\"https:\/\/dannorth.net\/about\/\"> <span style=\"font-weight: 400;\">Dan North<\/span><\/a><span style=\"font-weight: 400;\">, it is known to be an <\/span><a href=\"http:\/\/www.agilenutshell.com\/\"><span style=\"font-weight: 400;\">Agile<\/span><\/a><span style=\"font-weight: 400;\"> approach to software development and is emergent in this industry. It aims to do exactly what the title suggests: lead your development driven by behaviour. What does it mean? Behaviour can be described as a feature. A benefit that your product delivers to whomever uses it. BDD was created and designed to give value to stakeholders as its main focus. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">And how do we achieve all of this? There are some key concepts defined by the BDD approach that address these matters. Let me talk about them.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Ubiquitous language<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">A term from <\/span><a href=\"https:\/\/airbrake.io\/blog\/software-design\/domain-driven-design\"><span style=\"font-weight: 400;\">Domain-Driven Design<\/span><\/a><span style=\"font-weight: 400;\"> for a language shared by developers and business people to reach a common understanding of the terminology in a domain. Remember those 5 characters speaking different languages? Now they all speak the same. This means extending business terminologies all the way down from meetings with stakeholders to your code base. Yes, including database tables and class names too. Domain concepts, the same ones understood and used (or agreed) by users and domains experts should be used throughout the entire project stack. Let\u2019s say that during a banking software development the concept of amortization has been introduced and the project designer calls the referred screen or menu link \u201cPayment in installments\u201d. Ubiquitous language is not being put into practice in this case.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Using examples<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">While explaining theory to someone we tend to use practical examples for better clarity, especially in cases of misunderstanding. The human cognition works better this way. So why not apply it to software development? Why not avoid misunderstandings? Planning and developing through examples is one of the key concepts of BDD. Giving real case scenarios of what you should expect from the product makes sense to everyone. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">But how? One powerful and well known approach is the use of the Given-When-Then scenarios. Combined with the use of ubiquitous language it describes features with scenarios breaking them down into small stories consisting of 3 phases:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Given: An initial state or condition. Usually describes the context before your feature is triggered.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">When: An action taken. The behaviour being described.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Then: The output of this behaviour. The expected outcome given the initial state and after the triggered behaviour.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Speaking of which, it couldn&#8217;t be a better place for an example:<\/span><\/p>\n<pre><code>\nFeature: Money transfer\n\n  - Scenario A: Transfer an amount of money lower than my balance\n    - <strong>Given<\/strong>: I have 500 brazilian reais in my account\n             And Rafael has 700 brazilian reais in his account\n    - <strong>When<\/strong>: I transfer 200 brazilian reais from my account to Rafael's account\n    - <strong>Then<\/strong>: I should have 300 brazilian reais in my account\n            And Rafael should have 900 brazilian reais in his account.\n\n  - Scenario B: Transfer an amount of money bigger than my balance\n    - <strong>Given<\/strong>: I have 100 brazilian reais in my account\n             And Rafael has 700 brazilian reais in his account\n    - <strong>When<\/strong>: I transfer 200 brazilian reais from my account to Rafael's account\n    - <strong>Then<\/strong>: I should have 100 brazilian reais in my account\n            And Rafael should have 700 brazilian reais in his account.\n<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">Here we are describing money transfer. We have detailed the scenarios and if you have noticed we have predicted a case where the behaviour was not concretized. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">We have also taken care of making everyone in the project understand what exactly the term <\/span><i><span style=\"font-weight: 400;\">account<\/span><\/i> <span style=\"font-weight: 400;\">means. Considering that you will find more complex terms eventually,<\/span> <span style=\"font-weight: 400;\">this needs practicing. <\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Impact Mapping<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">It&#8217;s all about getting to know what really matters. Impact Mapping sits outside of the box when talking about BDD. It is something used far beyond software development just like this <\/span><a href=\"http:\/\/www.marcusoft.net\/2014\/02\/HospitalImpactMap.html\"><span style=\"font-weight: 400;\">excellent example<\/span><\/a><span style=\"font-weight: 400;\">. But <\/span><a href=\"https:\/\/inviqa.com\/blog\/bdd-guide\"><span style=\"font-weight: 400;\">as mentioned by Stead and Kudryashov<\/span><\/a><span style=\"font-weight: 400;\">, it is a strategy worth pointing out in a BDD approach, since it foments agile mindset when in use. There are various approaches to this method and it has a very high refine rate from the community. I would need an entire article for this subject, but let&#8217;s keep it short.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In software development it is common to see attempts of achieving as many features as possible when building a product. This can be an expensive flaw. Impact mapping consists of the following steps for product development effectiveness:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Knowing your business goals.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Knowing your actors that will be impacted by these goals.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Knowing the impact itself. In what way the actors will be impacted? What will change?<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">What can be done to support the designed impacts? The <\/span><b>deliverable<\/b><span style=\"font-weight: 400;\">.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">This will help your team narrow down the most important features and impacts and what can be done to deliver them. It will reduce waste and help prioritise what is most important. It helps everyone understand what is the business goal and prevent over waste before getting to it, since you get a deep look into complexity vs result.<\/span><\/p>\n<p><img decoding=\"async\" class=\"wp-image-5583 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/Bannerricardo2.png\" alt=\"\" width=\"500\" height=\"500\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/Bannerricardo2.png 1200w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/Bannerricardo2-300x300.png 300w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/Bannerricardo2-768x768.png 768w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/p>\n<h2><span style=\"font-weight: 400;\">Somebody said something about testing<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">What about tests? Once you have all of this pinned down, you know what to expect. The word <\/span><b>should<\/b><span style=\"font-weight: 400;\"> in testing frameworks is all about expectation and responsibility definition. But the key point here is that developers can work in a more collaborative manner, since the focus is the final result. Having a top down approach of testing guarantees the behaviour without forcing technical details to any of your developers. They can decide that in another level. Behaviour and value stays untouched. Are you a fan of unit testing? Stick to the top down approach: have the view of the bigger picture and write your unit tests separately.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">But where is the automation behind all of this? After all, we are talking about software development. Dan North himself developed the first automated BDD testing framework in Java: <\/span><a href=\"http:\/\/jbehave.org\/\"><span style=\"font-weight: 400;\">JBehave<\/span><\/a><span style=\"font-weight: 400;\">. And, after that, came <\/span><a href=\"http:\/\/rspec.info\/\"><span style=\"font-weight: 400;\">RSpec<\/span><\/a><span style=\"font-weight: 400;\"> and <\/span><a href=\"https:\/\/cucumber.io\/\"><span style=\"font-weight: 400;\">Cucumber<\/span><\/a><span style=\"font-weight: 400;\">. With some research you can easily find others.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The best part is that these frameworks have practical functionalities for your project documenting. Although well written and specified behaviours are living documentation for developers, they can automatically generate end (non-technical) user documentation, the one read by stakeholders and non technical collaborators. This can save you a lot of time by integrating documentation with code.<\/span><\/p>\n<p><img decoding=\"async\" class=\"wp-image-5582 aligncenter\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/bannerdocumento.png\" alt=\"\" width=\"500\" height=\"500\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/bannerdocumento.png 1200w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/bannerdocumento-300x300.png 300w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/bannerdocumento-768x768.png 768w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/p>\n<h2><span style=\"font-weight: 400;\">Summing up<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">You now have everyone on the same level of understanding speaking the same language expecting the same results. All of these processes will <\/span><b>demand<\/b><span style=\"font-weight: 400;\"> many iterations involving everyone following a meaningful agile approach. These iterations consequently lead to a discovery process showing you possible flaws in advanced, since you have features put side to side in an atomic view. You can change your plans leaving the other features in peace (You have it all tested!). Again, following an agile methodology. You have also mapped and convinced stakeholders of the most important and impacting features. Which will definitely give a sense of effectiveness by the end of the project and keep developers focused on what really matters. Your stakeholders are happy up to this point. They see it all happening with clarity. Developers are happy. They don&#8217;t have the &#8220;requirements weren&#8217;t explained&#8221; issue that frustrates many. And they have a living documentation to stick to and to use for testing business values and guaranteeing the expected final results. It goes beyond testing. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">I won&#8217;t end this post with that old clich\u00e9 &#8220;It is not the silver bullet&#8221;, because BDD is not a bullet. It is the weapon! You choose the bullets. You adapt it according to your project needs. I gave an overview according to my knowledge of BDD, but you can dive into a sea of information that can give you many other options of use with BDD. <\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Picture this: 5 people talking about the same subject in different languages. What are the chances of misunderstanding? As you can imagine: a lot. Well, this is a common scenario in software development teams up to some point. One of the most common reasons that lead to failure when building a product is the lack [&hellip;]<\/p>\n","protected":false},"author":65,"featured_media":5558,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,1162,7],"tags":[305],"class_list":["post-5530","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business","category-process","category-opinion","tag-tag-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Behavior-Driven Development: way beyond a testing principle<\/title>\n<meta name=\"description\" content=\"One common reason that leads to failure when building a product is the lack of well-defined goals and requirements amongst developers and stakeholders.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Behavior-Driven Development: way beyond a testing principle\" \/>\n<meta property=\"og:description\" content=\"One common reason that leads to failure when building a product is the lack of well-defined goals and requirements amongst developers and stakeholders.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Cheesecake Labs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cheesecakelabs\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-29T22:25:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-01T17:30:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"710\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Cheesecake Labs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:site\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/\"},\"author\":{\"name\":\"Ricardo Lima\"},\"headline\":\"Behavior-Driven Development: way beyond a testing principle\",\"datePublished\":\"2017-09-29T22:25:36+00:00\",\"dateModified\":\"2022-07-01T17:30:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/\"},\"wordCount\":1314,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png\",\"keywords\":[\"development\"],\"articleSection\":[\"Business\",\"Process\",\"Opinion\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/\",\"name\":\"Behavior-Driven Development: way beyond a testing principle\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png\",\"datePublished\":\"2017-09-29T22:25:36+00:00\",\"dateModified\":\"2022-07-01T17:30:08+00:00\",\"author\":{\"@type\":\"person\",\"name\":\"Ricardo Lima\"},\"description\":\"One common reason that leads to failure when building a product is the lack of well-defined goals and requirements amongst developers and stakeholders.\",\"breadcrumb\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png\",\"width\":2000,\"height\":710,\"caption\":\"BDD\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cheesecakelabs.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Behavior-Driven Development: way beyond a testing principle\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/\",\"name\":\"Cheesecake Labs\",\"description\":\"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"name\":\"Ricardo Lima\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/ricardoml2-300x300.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/ricardoml2-300x300.jpg\",\"caption\":\"Ricardo Lima\"},\"description\":\"10 years of experience in Marketing and Sales in the Technology sector. My main purpose is help, support and structure efficient operations and also develop independent and multidisciplinary teams.\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/autor\/ricardolima\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Behavior-Driven Development: way beyond a testing principle","description":"One common reason that leads to failure when building a product is the lack of well-defined goals and requirements amongst developers and stakeholders.","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:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/","og_locale":"en_US","og_type":"article","og_title":"Behavior-Driven Development: way beyond a testing principle","og_description":"One common reason that leads to failure when building a product is the lack of well-defined goals and requirements amongst developers and stakeholders.","og_url":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/","og_site_name":"Cheesecake Labs","article_publisher":"https:\/\/www.facebook.com\/cheesecakelabs","article_published_time":"2017-09-29T22:25:36+00:00","article_modified_time":"2022-07-01T17:30:08+00:00","og_image":[{"width":2000,"height":710,"url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png","type":"image\/png"}],"author":"Cheesecake Labs","twitter_card":"summary_large_image","twitter_creator":"@cheesecakelabs","twitter_site":"@cheesecakelabs","twitter_misc":{"Written by":null,"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#article","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/"},"author":{"name":"Ricardo Lima"},"headline":"Behavior-Driven Development: way beyond a testing principle","datePublished":"2017-09-29T22:25:36+00:00","dateModified":"2022-07-01T17:30:08+00:00","mainEntityOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/"},"wordCount":1314,"commentCount":0,"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png","keywords":["development"],"articleSection":["Business","Process","Opinion"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/","url":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/","name":"Behavior-Driven Development: way beyond a testing principle","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png","datePublished":"2017-09-29T22:25:36+00:00","dateModified":"2022-07-01T17:30:08+00:00","author":{"@type":"person","name":"Ricardo Lima"},"description":"One common reason that leads to failure when building a product is the lack of well-defined goals and requirements amongst developers and stakeholders.","breadcrumb":{"@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#primaryimage","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/BannerRicardo.png","width":2000,"height":710,"caption":"BDD"},{"@type":"BreadcrumbList","@id":"https:\/\/cheesecakelabs.com\/blog\/behavior-driven-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cheesecakelabs.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Behavior-Driven Development: way beyond a testing principle"}]},{"@type":"WebSite","@id":"https:\/\/cheesecakelabs.com\/blog\/#website","url":"https:\/\/cheesecakelabs.com\/blog\/","name":"Cheesecake Labs","description":"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","name":"Ricardo Lima","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/ricardoml2-300x300.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2017\/09\/ricardoml2-300x300.jpg","caption":"Ricardo Lima"},"description":"10 years of experience in Marketing and Sales in the Technology sector. My main purpose is help, support and structure efficient operations and also develop independent and multidisciplinary teams.","url":"https:\/\/cheesecakelabs.com\/blog\/autor\/ricardolima\/"}]}},"_links":{"self":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/5530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/comments?post=5530"}],"version-history":[{"count":1,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/5530\/revisions"}],"predecessor-version":[{"id":10262,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/5530\/revisions\/10262"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media\/5558"}],"wp:attachment":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media?parent=5530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/categories?post=5530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/tags?post=5530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}