SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Behaviour Driven Development With NBehave Linking User Stories and Domain Driven Design to Testing David Ross W: www.pebblesteps.com E: willmation@gmail.com
Behavior Driven DevelopmentTools and techniques Talk overview ,[object Object],  Topics  ,[object Object]
Top down and Bottom up Testing
NBehaveUsing library Using the test runner ,[object Object]
Acceptance testing,[object Object]
Behavior Driven Development BDD is not: a testing framework or style of testing a method for writing tests BDD is: A formalised template for User Stories Able to create testable User Stories since they are defined in a formal manner Promotes “security” to a first call citizen in the analysis process
Simple Trading application Excel spreadsheet replacement
Allow Portfolio Manager to decide the percentage split between Cash, Property and Stock within the Portfolio Inform the Trader when the Portfolio needs to be rebalanced (ie split in the pie has changed significantly) Allow Operations to standardise Portfolio names Simple Trading application Requirements
Test First Development Small steps Red - Analysis/Design Hat ,[object Object]
Asking "What I want is...“Green - Creative Hat (Fun part) ,[object Object],Refactor- Engineering ,[object Object],Red Green Refactor
Test First DevelopmentHow easy is it to use TFD for the following Requirement/Story Value = Units * Market Price Increase the performance of the User Security module by automatically caching the user’s manager Id The system must email the Portfolio manager when the Portfolio needs to be rebalanced Build a web site so that customers can see the performance of the portfolio
Test First DevelopmentDo you feel guilty??	 Do you write a Failing unit test before every piece of code? Do you write a line of Unit Test code for EVERY line of production code?
Behavior Driven How do you write a test when you don’t know where you are going?  Maybe we need requirements that are easy to write tests for?
RequirementsWhat are they Describes what a system should do but not how it will be done Contract between the implementation team and the analysis team Audience is typically the stake holders and not the development team
Requirements Precise and clear over verbose We want requirements that    ,[object Object]
Are attainable!!! 
Are traceable into code!!!,[object Object]
BDD User StoriesFormal template for User Stories Story Template As a [User/Role]I want [Behaviour]so that [I receive benefit] Example As a “Operations staff member”I want “To create a Portfolio”so that“So that it can be traded”
BDD User StoriesFormal template for User Stories Scenario Template Given some initial context (the givens),When an event occurs,then ensure some outcomes. Example Given “New portfolio is called Balanced Fund”When “Portfolio already exists”then “Portfolio can no be created”
.NET Library for writing automated BDD style tests Fluent syntax for building up a BDD Style User Stories Test runner that executes the stories and generates a report listing the contents of the stories NBehave What is it?
Creating a BDD Theme Collection of related stories [Theme("Portfolio Maintenance")] public class PortfolioMaintenanceStory { [Story] public void portfolio_create_story () { ... } [Story] public void portfolio_delete_story() { ... } } Reference:NBehave.Narrator.Framework.dll
Creating a Story  Fluent interface to define the story var story = new Story("Create portfolio"); story.AsA(“Operations team member") 	.IWant("To create a new portfolio on behalf of a portfolio manager") 	.SoThat("the portfolio manager can configure the portfolio and the front office can trade");
Creating a Scenario Fluent interface to define the story story.WithScenario("portfolio does not exist") .Given("portfolio name is $name", "Aggressive Fund") .When("portfolio does not exist in the database") .Then("new portfolio should be created"); story.WithScenario("portfolio already exists") 	.Given("portfolio name is $name", "Aggressive Fund") 	.When("portfolio already exists in database") 	.Then("an error should occur");
Executing the test WithNBehave runner or mbUnit Ouch we get an error??? The scenario throws an exception – NBehave isn’t validating any code Use Pending story.WithScenario("portfolio does not exist") 	.Pending("In progress") 	.Given("portfolio name is $name", "Aggressive Fund") 	.When("portfolio does not exist in the database") 	.Then("new portfolio should be created");
Behavior Driven Development Across the Project (Story) Life Cycle Story Pending Scenario Stubbed Behavior Cycle (Red, Green, Refactor) Real Behavior Cycle (Red, Green, Refactor) Acceptance Test
Stubbing out the behavior WithNBehave and Rhino.Mocks Steps to generate an API Go through the User story and find all the domain objects Create a class for each domain object but don’t add state Go through the User story and create a find all the services that are required (Repositories etc) Create an interface for each service but don’t add any methods
Steps to generate the API continued... Slowly implement the story Add domain object properties as required Add methods signatures as required Use Stubs to explore Inputs/Outputsto the methods Stubbing out the behavior WithNBehave and Mocking
Stubbing example Create a new portfolio story stringportfolioName = ""; Portfoliop = null; varportfolioRepository = MockRepository.GenerateStub<IPortfolioRepository>(); varportfolioService = MockRepository.GenerateStub<IPortfolioService>(); s.WithScenario("portfolio already exists") 	.Given("portfolio name is $name", "Aggressive Fund",   n => { portfolioName= n; 		p = new Portfolio { Name = portfolioName }; portfolioRepository. 			Stub(x => x.FindPortfolioByName(portfolioName)).Return(p); portfolioService. 			Stub(X => X.CreatePortfolio(p)).Throw(new ItemExistsException()); 		})
Stubbing example Create a new portfolio story .When("portfolio already exists in database", 	 () => Assert.IsNotNull( portfolioRepository.FindPortfolioByName(portfolioName)) 	) .Then("new portfolio create should fail", 	() => Assert.Throws<ItemExistsException>(() => portfolioService.CreatePortfolio(p)) 	);
TFD/BDD Comparison Behavior Driven ,[object Object]
Design starting with interfaces (using stubs)
Back fill with code later  Output ,[object Object],Test First ,[object Object]
Lots of little steps working towards a solution    Output  ,[object Object],[object Object]
Test Driven Development Development/Testing Phases Stubs Domain Model User Stories Behaviour Driven Development GUI Testing Fitness User Acceptance Test Unit & Component Test Mocks Implemented Behaviour System Integration Test No Mocks /Stubs Deployment Verification Test

Weitere ähnliche Inhalte

Was ist angesagt?

Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPeter Hendriks
 
Zend Studio Tips and Tricks
Zend Studio Tips and TricksZend Studio Tips and Tricks
Zend Studio Tips and TricksRoy Ganor
 
Testing Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation FrameworksTesting Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation FrameworksŁukasz Morawski
 
PHPConf.asia 2016 - BDD with Behat for Beginners
PHPConf.asia 2016 - BDD with Behat for BeginnersPHPConf.asia 2016 - BDD with Behat for Beginners
PHPConf.asia 2016 - BDD with Behat for BeginnersAdam Englander
 
Modern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsModern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsVolodymyr Voytyshyn
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappearedLuc Bors
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Peter Hendriks
 
Jug Guice Presentation
Jug Guice PresentationJug Guice Presentation
Jug Guice PresentationDmitry Buzdin
 
Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDiego Lewin
 
[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for Android[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for AndroidHazem Saleh
 
Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010Lars Vogel
 
Flavours - Classic/Technical BDD
Flavours - Classic/Technical BDDFlavours - Classic/Technical BDD
Flavours - Classic/Technical BDDDavid Harrison
 
Babble article - Test Automation & Text Translation
Babble article - Test Automation & Text TranslationBabble article - Test Automation & Text Translation
Babble article - Test Automation & Text TranslationDavid Harrison
 
Functional Dependency Injection in C#
Functional Dependency Injection in C#Functional Dependency Injection in C#
Functional Dependency Injection in C#Thomas Jaskula
 
Eclipse BPEL Designer
Eclipse BPEL DesignerEclipse BPEL Designer
Eclipse BPEL Designermilliger
 

Was ist angesagt? (18)

Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIs
 
Zend Studio Tips and Tricks
Zend Studio Tips and TricksZend Studio Tips and Tricks
Zend Studio Tips and Tricks
 
Testing Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation FrameworksTesting Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation Frameworks
 
PHPConf.asia 2016 - BDD with Behat for Beginners
PHPConf.asia 2016 - BDD with Behat for BeginnersPHPConf.asia 2016 - BDD with Behat for Beginners
PHPConf.asia 2016 - BDD with Behat for Beginners
 
Modern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsModern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design Patterns
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappeared
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)
 
Jug Guice Presentation
Jug Guice PresentationJug Guice Presentation
Jug Guice Presentation
 
Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony Container
 
Go f designpatterns 130116024923-phpapp02
Go f designpatterns 130116024923-phpapp02Go f designpatterns 130116024923-phpapp02
Go f designpatterns 130116024923-phpapp02
 
[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for Android[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for Android
 
Google Guice
Google GuiceGoogle Guice
Google Guice
 
Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010Eclipse e4 on Java Forum Stuttgart 2010
Eclipse e4 on Java Forum Stuttgart 2010
 
CDI @javaonehyderabad
CDI @javaonehyderabadCDI @javaonehyderabad
CDI @javaonehyderabad
 
Flavours - Classic/Technical BDD
Flavours - Classic/Technical BDDFlavours - Classic/Technical BDD
Flavours - Classic/Technical BDD
 
Babble article - Test Automation & Text Translation
Babble article - Test Automation & Text TranslationBabble article - Test Automation & Text Translation
Babble article - Test Automation & Text Translation
 
Functional Dependency Injection in C#
Functional Dependency Injection in C#Functional Dependency Injection in C#
Functional Dependency Injection in C#
 
Eclipse BPEL Designer
Eclipse BPEL DesignerEclipse BPEL Designer
Eclipse BPEL Designer
 

Andere mochten auch

Test Infected Presentation
Test Infected PresentationTest Infected Presentation
Test Infected Presentationwillmation
 
Post Sharp Talk
Post Sharp TalkPost Sharp Talk
Post Sharp Talkwillmation
 
10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer Experience10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer ExperienceYuan Wang
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionIn a Rocket
 
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanHow to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanPost Planner
 

Andere mochten auch (6)

Mpi.Net Talk
Mpi.Net TalkMpi.Net Talk
Mpi.Net Talk
 
Test Infected Presentation
Test Infected PresentationTest Infected Presentation
Test Infected Presentation
 
Post Sharp Talk
Post Sharp TalkPost Sharp Talk
Post Sharp Talk
 
10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer Experience10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer Experience
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
 
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanHow to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media Plan
 

Ähnlich wie Behaviour Driven Development V 0.1

CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWDVikas Sarin
 
Bridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous DeliveryBridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous Deliverymasoodjan
 
Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2Daniel Egan
 
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual StudioSPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual StudioNCCOMMS
 
BDD with JBehave and Selenium
BDD with JBehave and SeleniumBDD with JBehave and Selenium
BDD with JBehave and SeleniumNikolay Vasilev
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginnersAdam Englander
 
Synchronized Development for Distributed Teams
Synchronized Development for Distributed TeamsSynchronized Development for Distributed Teams
Synchronized Development for Distributed TeamsTogakangaroo
 
Nitin_updated_Profile
Nitin_updated_ProfileNitin_updated_Profile
Nitin_updated_ProfileNitin Saxena
 
Spec flow – functional testing made easy
Spec flow – functional testing made easySpec flow – functional testing made easy
Spec flow – functional testing made easyPaul Stack
 
Content Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortalsContent Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortalsAxway
 
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...Dave Bost
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksSunil Patil
 
Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...marcin_pajdzik
 
BDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesBDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesSauce Labs
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .NetRichard Banks
 

Ähnlich wie Behaviour Driven Development V 0.1 (20)

CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWD
 
Bridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous DeliveryBridging the communication Gap & Continuous Delivery
Bridging the communication Gap & Continuous Delivery
 
Drupal 7 ci and testing
Drupal 7 ci and testingDrupal 7 ci and testing
Drupal 7 ci and testing
 
Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2
 
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual StudioSPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
 
BDD with JBehave and Selenium
BDD with JBehave and SeleniumBDD with JBehave and Selenium
BDD with JBehave and Selenium
 
JAX 08 - Agile RCP
JAX 08 - Agile RCPJAX 08 - Agile RCP
JAX 08 - Agile RCP
 
Tdd,Ioc
Tdd,IocTdd,Ioc
Tdd,Ioc
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginners
 
Resume
ResumeResume
Resume
 
Synchronized Development for Distributed Teams
Synchronized Development for Distributed TeamsSynchronized Development for Distributed Teams
Synchronized Development for Distributed Teams
 
Nitin_updated_Profile
Nitin_updated_ProfileNitin_updated_Profile
Nitin_updated_Profile
 
Spec flow – functional testing made easy
Spec flow – functional testing made easySpec flow – functional testing made easy
Spec flow – functional testing made easy
 
Coding Naked 2023
Coding Naked 2023Coding Naked 2023
Coding Naked 2023
 
Content Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortalsContent Strategy and Developer Engagement for DevPortals
Content Strategy and Developer Engagement for DevPortals
 
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...
Shine a Light with Prism (the Composite Application Guidance for WPF and Silv...
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source Frameworks
 
Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...Bridging the gap between business and technology - Behaviour Driven Developme...
Bridging the gap between business and technology - Behaviour Driven Developme...
 
BDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesBDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User Stories
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
 

Kürzlich hochgeladen

John Halpern sued for sexual assault.pdf
John Halpern sued for sexual assault.pdfJohn Halpern sued for sexual assault.pdf
John Halpern sued for sexual assault.pdfAmzadHosen3
 
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...amitlee9823
 
Falcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to ProsperityFalcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to Prosperityhemanthkumar470700
 
Dr. Admir Softic_ presentation_Green Club_ENG.pdf
Dr. Admir Softic_ presentation_Green Club_ENG.pdfDr. Admir Softic_ presentation_Green Club_ENG.pdf
Dr. Admir Softic_ presentation_Green Club_ENG.pdfAdmir Softic
 
Call Girls In Panjim North Goa 9971646499 Genuine Service
Call Girls In Panjim North Goa 9971646499 Genuine ServiceCall Girls In Panjim North Goa 9971646499 Genuine Service
Call Girls In Panjim North Goa 9971646499 Genuine Serviceritikaroy0888
 
How to Get Started in Social Media for Art League City
How to Get Started in Social Media for Art League CityHow to Get Started in Social Media for Art League City
How to Get Started in Social Media for Art League CityEric T. Tung
 
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...allensay1
 
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesMysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesDipal Arora
 
Cracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptxCracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptxWorkforce Group
 
RSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors DataRSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors DataExhibitors Data
 
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...Sheetaleventcompany
 
Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...
Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...
Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...lizamodels9
 
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptxB.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptxpriyanshujha201
 
Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1kcpayne
 
FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756dollysharma2066
 
Business Model Canvas (BMC)- A new venture concept
Business Model Canvas (BMC)-  A new venture conceptBusiness Model Canvas (BMC)-  A new venture concept
Business Model Canvas (BMC)- A new venture conceptP&CO
 
Uneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration PresentationUneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration Presentationuneakwhite
 
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...daisycvs
 

Kürzlich hochgeladen (20)

John Halpern sued for sexual assault.pdf
John Halpern sued for sexual assault.pdfJohn Halpern sued for sexual assault.pdf
John Halpern sued for sexual assault.pdf
 
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
 
Falcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to ProsperityFalcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to Prosperity
 
Dr. Admir Softic_ presentation_Green Club_ENG.pdf
Dr. Admir Softic_ presentation_Green Club_ENG.pdfDr. Admir Softic_ presentation_Green Club_ENG.pdf
Dr. Admir Softic_ presentation_Green Club_ENG.pdf
 
Call Girls In Panjim North Goa 9971646499 Genuine Service
Call Girls In Panjim North Goa 9971646499 Genuine ServiceCall Girls In Panjim North Goa 9971646499 Genuine Service
Call Girls In Panjim North Goa 9971646499 Genuine Service
 
How to Get Started in Social Media for Art League City
How to Get Started in Social Media for Art League CityHow to Get Started in Social Media for Art League City
How to Get Started in Social Media for Art League City
 
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
 
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesMysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
 
Cracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptxCracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptx
 
Falcon Invoice Discounting platform in india
Falcon Invoice Discounting platform in indiaFalcon Invoice Discounting platform in india
Falcon Invoice Discounting platform in india
 
RSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors DataRSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors Data
 
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
 
Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...
Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...
Call Girls From Pari Chowk Greater Noida ❤️8448577510 ⊹Best Escorts Service I...
 
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptxB.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
 
Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1Katrina Personal Brand Project and portfolio 1
Katrina Personal Brand Project and portfolio 1
 
FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Majnu Ka Tilla, Delhi Contact Us 8377877756
 
VVVIP Call Girls In Greater Kailash ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Greater Kailash ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...VVVIP Call Girls In Greater Kailash ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Greater Kailash ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
 
Business Model Canvas (BMC)- A new venture concept
Business Model Canvas (BMC)-  A new venture conceptBusiness Model Canvas (BMC)-  A new venture concept
Business Model Canvas (BMC)- A new venture concept
 
Uneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration PresentationUneak White's Personal Brand Exploration Presentation
Uneak White's Personal Brand Exploration Presentation
 
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
Quick Doctor In Kuwait +2773`7758`557 Kuwait Doha Qatar Dubai Abu Dhabi Sharj...
 

Behaviour Driven Development V 0.1

  • 1. Behaviour Driven Development With NBehave Linking User Stories and Domain Driven Design to Testing David Ross W: www.pebblesteps.com E: willmation@gmail.com
  • 2.
  • 3. Top down and Bottom up Testing
  • 4.
  • 5.
  • 6. Behavior Driven Development BDD is not: a testing framework or style of testing a method for writing tests BDD is: A formalised template for User Stories Able to create testable User Stories since they are defined in a formal manner Promotes “security” to a first call citizen in the analysis process
  • 7. Simple Trading application Excel spreadsheet replacement
  • 8. Allow Portfolio Manager to decide the percentage split between Cash, Property and Stock within the Portfolio Inform the Trader when the Portfolio needs to be rebalanced (ie split in the pie has changed significantly) Allow Operations to standardise Portfolio names Simple Trading application Requirements
  • 9.
  • 10.
  • 11. Test First DevelopmentHow easy is it to use TFD for the following Requirement/Story Value = Units * Market Price Increase the performance of the User Security module by automatically caching the user’s manager Id The system must email the Portfolio manager when the Portfolio needs to be rebalanced Build a web site so that customers can see the performance of the portfolio
  • 12. Test First DevelopmentDo you feel guilty?? Do you write a Failing unit test before every piece of code? Do you write a line of Unit Test code for EVERY line of production code?
  • 13. Behavior Driven How do you write a test when you don’t know where you are going? Maybe we need requirements that are easy to write tests for?
  • 14. RequirementsWhat are they Describes what a system should do but not how it will be done Contract between the implementation team and the analysis team Audience is typically the stake holders and not the development team
  • 15.
  • 17.
  • 18. BDD User StoriesFormal template for User Stories Story Template As a [User/Role]I want [Behaviour]so that [I receive benefit] Example As a “Operations staff member”I want “To create a Portfolio”so that“So that it can be traded”
  • 19. BDD User StoriesFormal template for User Stories Scenario Template Given some initial context (the givens),When an event occurs,then ensure some outcomes. Example Given “New portfolio is called Balanced Fund”When “Portfolio already exists”then “Portfolio can no be created”
  • 20. .NET Library for writing automated BDD style tests Fluent syntax for building up a BDD Style User Stories Test runner that executes the stories and generates a report listing the contents of the stories NBehave What is it?
  • 21. Creating a BDD Theme Collection of related stories [Theme("Portfolio Maintenance")] public class PortfolioMaintenanceStory { [Story] public void portfolio_create_story () { ... } [Story] public void portfolio_delete_story() { ... } } Reference:NBehave.Narrator.Framework.dll
  • 22. Creating a Story Fluent interface to define the story var story = new Story("Create portfolio"); story.AsA(“Operations team member") .IWant("To create a new portfolio on behalf of a portfolio manager") .SoThat("the portfolio manager can configure the portfolio and the front office can trade");
  • 23. Creating a Scenario Fluent interface to define the story story.WithScenario("portfolio does not exist") .Given("portfolio name is $name", "Aggressive Fund") .When("portfolio does not exist in the database") .Then("new portfolio should be created"); story.WithScenario("portfolio already exists") .Given("portfolio name is $name", "Aggressive Fund") .When("portfolio already exists in database") .Then("an error should occur");
  • 24. Executing the test WithNBehave runner or mbUnit Ouch we get an error??? The scenario throws an exception – NBehave isn’t validating any code Use Pending story.WithScenario("portfolio does not exist") .Pending("In progress") .Given("portfolio name is $name", "Aggressive Fund") .When("portfolio does not exist in the database") .Then("new portfolio should be created");
  • 25. Behavior Driven Development Across the Project (Story) Life Cycle Story Pending Scenario Stubbed Behavior Cycle (Red, Green, Refactor) Real Behavior Cycle (Red, Green, Refactor) Acceptance Test
  • 26. Stubbing out the behavior WithNBehave and Rhino.Mocks Steps to generate an API Go through the User story and find all the domain objects Create a class for each domain object but don’t add state Go through the User story and create a find all the services that are required (Repositories etc) Create an interface for each service but don’t add any methods
  • 27. Steps to generate the API continued... Slowly implement the story Add domain object properties as required Add methods signatures as required Use Stubs to explore Inputs/Outputsto the methods Stubbing out the behavior WithNBehave and Mocking
  • 28. Stubbing example Create a new portfolio story stringportfolioName = ""; Portfoliop = null; varportfolioRepository = MockRepository.GenerateStub<IPortfolioRepository>(); varportfolioService = MockRepository.GenerateStub<IPortfolioService>(); s.WithScenario("portfolio already exists") .Given("portfolio name is $name", "Aggressive Fund", n => { portfolioName= n; p = new Portfolio { Name = portfolioName }; portfolioRepository. Stub(x => x.FindPortfolioByName(portfolioName)).Return(p); portfolioService. Stub(X => X.CreatePortfolio(p)).Throw(new ItemExistsException()); })
  • 29. Stubbing example Create a new portfolio story .When("portfolio already exists in database", () => Assert.IsNotNull( portfolioRepository.FindPortfolioByName(portfolioName)) ) .Then("new portfolio create should fail", () => Assert.Throws<ItemExistsException>(() => portfolioService.CreatePortfolio(p)) );
  • 30.
  • 31. Design starting with interfaces (using stubs)
  • 32.
  • 33.
  • 34. Test Driven Development Development/Testing Phases Stubs Domain Model User Stories Behaviour Driven Development GUI Testing Fitness User Acceptance Test Unit & Component Test Mocks Implemented Behaviour System Integration Test No Mocks /Stubs Deployment Verification Test
  • 35. Fixtures to Specifications Loosing Assert from tests. Easier to read? For BAs, yes... Assert.IsTrue(component.IsValid) component.IsValid.ShouldBeTrue() Assert.Contains(s, “hello world”); s.ShouldContains(“hello world”); NBehave contains extension methods for NUnit, mbUnit, xUnit
  • 36. Fixtures to Specifications Is it necessary? [TestFixture] [Context] [Test] [Specification] [Context] public class When_using_tokenized_stories { [Specification] public void should_replace_token_with_value() {} Stories for BDD. Specifications for focussed tests. The word Test has become a dirty word...
  • 37. Stories to documentation NBehave-Console.exe PebbleSteps.NBehave.Stories.dll /o stories.txt Theme: Trade Compliance Story: Pretrade compliance check As a Trader I want verify a trade against the portfolio before I call the broker So that the portfolio does not move out of compliance Scenario: trade will move portfolio out of compliance Given portfolio with name Balanced Fund And asset allocation pie contains segments Cash 0.4, Stock 0.3, Property 0.3 And allocation pie 0.05 And portfolio contains Stock IBM 1, Cash GBP 1, Property SW5 1Hb 1, Stock BHP 1 When market prices are IBM 1, GBP 1, SW5 1Hb 1, BHP 1 Then portfolio value is 4 And portfolio constituents are Stock totalValue:2 percentOfPie:0.5 lower:0.25 upper:0.35, Cash totalValue:1 percentOfPie:0.25 lower:0.35 upper:0.45, Property totalValue:1 percentOfPie:0.25 lower:0.25 upper:0.35, And portfolio is balanced
  • 38. MSBuild <UsingTask AssemblyFile="NBehave.MSBuild.dll" TaskName="NBehave.MSBuild.NBehaveTask" /> <NBehaveTask DryRun="false" FailBuild="false" StoryOutputPath="output.xml" TestAssemblies="PebbleSteps.NBehave.Stories.dll" />
  • 39. Still in beta… What’s left to do? The parameter regular expression is on [a-z][A-Z] $example0, $example1 – In story output first parameter is printed twice Gallio integration/replacement of current story runner Current story runner text output formatting is poor HTML or a XSLT for current XML output Occassional crash in the parsing engine that links text to delegate parameters
  • 40. More information http://nbehave.org/ http://www.codeplex.com/NBehave http://behaviour-driven.org/ http://dannorth.net/ Code will be placed onto www.pebblesteps.com Questions?

Hinweis der Redaktion

  1. Lets dive into TDD and TFD. The famous Red, Green, Green...
  2. Welcome everyone on this cold winter night. This is my first Winter in London so you will have to excuse my scarf and gloves...My name is David Ross and I will be presenting with Chris Roff.Tonight we will be introducing Test Driven Development.
  3. Lets dive into TDD and TFD. The famous Red, Green, Green...
  4. Lets dive into TDD and TFD. The famous Red, Green, Green...