SlideShare une entreprise Scribd logo
1  sur  26
Writing software that matters


          Temesgen B Meheret (Teme)
               Senior Software Engineer @ Videology
                           Email: teme@videologygroup.com
   Background
   DDs
   Why do Projects Fail?
   Writing Software that matters
   TDD’s promise and it’s shortcomings
   BDD’s evolution
   BDD – Second generation agile methodology
   Enough Talk, now Code!
   Summary & Questions

                                       Temesgen B Meheret
                       Senior Software Engineer @Videology
   My name is Temesgen but you can call me
    “Teme”
   Software Engineer and team lead @Videology
   Ex-Software Engineer @LCG
   Plays Ping-Pong
   Why am I here & not @the Fedexfield for the
    USA-Brazil soccer match?




                           Writing Software that matters
   How many DDs are you aware of?
    ◦ DDD, ATDD, TDD, RDD, MDD…
   How many DD belts do you need before to be
    a great developer? 
   Driven – Keeping the right order
    ◦ HAPPY WIFE – HAPPY LIFE
   Architecture is Opinion. There are no
    absolutes. It is really up to us to evaluate and
    take what applies to our situation.
    ◦ E.g. Aratkilo building architecture


                                  Writing Software that Matters
Adaptation
7
6
5
4
3                                                                                    Adaptation
2
1
0

    0   1   2   3   4   5      6      7      8      9      10 11 12
                        Discussion: Selective Unit Testing – Costs and Benefits by Steven
                        Sanderson
                        Where is our team on this curve for BDD?
                                                 Writing Software that Matters
   What are the top 3 things that you believe contribute to a
    failure of a project?
   Have you ever practiced TDD in your projects? If so,
    ◦ Where do you start testing?
    ◦ What did you test?
    ◦ How much did you rely on your tests (trust) during
      refactoring?
    ◦ How effective were your test in terms of detecting bugs?
    ◦ What did you think was the main intent for writing unit
      tests?




                                    Writing Software that Matters
   Delivering Late or Over Budget
    ◦ Poor planning, estimation
    ◦ E.g. Deriving requirements from a running application – sheep’s
      stomach layers
   Delivering the wrong thing
    ◦ Building the product right but not the right product
    ◦ e.g. Projects shelved after many months of development and investment
   Unstable in Production
    ◦ E.g. The morning after Deployment hell
   Costly to maintain
    ◦ Code Quality

   What do you think about asking developers during
    interviews
    “How many failed projects have you been part of and what
    do you think was the cause?”


                                           Writing Software that matters
Discussion points: Top-Down vs. Bottom-up, Civil-Engineering projects vs. Software projects
Practical example: LOE flowing down from Solutions Team, Architecture reviews




                                                                                Writing Software that Matters
Software development is all about knowing and delivering WHAT
MATTERS most to the business

How do you KNOW WHAT MATTERS?
Through effective communication!

•    Tangible Business Value
•    Delivered on-time, incrementally
•    Easy to deploy and manage
•    Robust in Prod
•    Easy to understand and communicate


    In order to achieve this we need to be adaptive in our planning, requirements
    and design. Regression tests also play a big role to be able to embrace change
    without fear.


                                        Discussion: Nothing replaces People.
                                              Writing software that matters
◦ Clear Communication between Stakeholders
  Discussion: Stake holders and their world point of view
◦ Constant re-Prioritization owned by the product-
  owner
◦ Immediate feedback at every level
◦ Flexibility – Adapting to Feedback
  E.g. client’s needs changed, technology difficulties
◦ Working on feature-level




                              Writing Software that Matters
   The goal of TDD is specification (Design) and not validation
    ◦   But we always seem to think of TDD as testing tool. We focus on the verification. IMHO
        clean code, test assertions and serving as regression suite are all side effects of TDD.
    ◦   Code by example to implement features but when those examples are done then they act as
        tests.
    What went wrong?
 Where to start?
 What to test?
 What not to test?
 How much test in one go?
 What to call the tests?
 How to understand why a test fails?
 The focus on testing, vague terms, more focus on units than behavior, tests reflect
   the structural arrangement of the code
Programmers often think "I'm not going to write all those tests.", "It's really simple code, it
doesn't
need to be tested", "testing is a waste of time", or "I've done this (loop/data
retrieval/functionality, etc.)
millions of times.".




                                                     Writing software that matters
• Core Domain Unit
                                                                            testing (Mocking repo)
                                                                          • MVC unit test (Mocking
                                                                            domain and app
                                                                            services)
                                                                          • AppService Unit Test
                                                                            (mocking domain
                                                                            services)
                                                                          • MVC Acceptance Tests




Our BDD evolution – Though we had so many unit tests, once we push code to QA, we keep getting
surprised with scenarios that we never thought about. Then we decided to make QA do test-case
reviews at the first week of development. We saw a big value in that which led us to start exploring
BDD.



                                                      Writing Software that Matters
   BDD builds on TDD (Discussion: last year presentation)
   Stripping out the word test and making test methods sentences




   Expressive test name is helpful when test fails
   Behavior is more useful word than test – vocabulary change (Jbehave)
   Determine the next most important behavior (next thing system doesn’t do)
   Aha Moment – Requirements are Behavior too!




                                                    Writing Software that matters
    From Testing To Specification.
    You write specifications of what your code will have to do
     - “Specification, not Verification”
    BDD’s definition: "It's about focusing on the behavior of an application from the
     point of view of its stakeholders”
     BDD says you should elevate your mind to a level of behavioral abstraction above
     the code implementation.

   BDD
     ◦   is a second-generation,                                             UT
     ◦   outside-in,
     ◦   pull-based,
     ◦   multiplestakeholder,                                   UT               BDD   UT
     ◦   multiple-scale,
     ◦   high automation, agile methodology.
                                                                                 UT
“It describes a cycle of interactions
with well-defined outputs, resulting
in the delivery of working, tested
software.”


                   Discussions: Press releases


                                                 Writing software that matters
   TDD - BDD
   DDD – BDD
    ◦ Focus on the domain and letting it affect the software very much
    ◦ Ubiquitous language
       DDD enables BDD.
       BDD helps structure the conversations for DDD

   ATDD – BDD
    ◦ "I'd like to avoid "BDD is better than TDD because..." or even "BDD is
      different from TDD (as originally envisioned) because..." TDD is amazing.
      Its initial conception was to solve exactly what I've been trying to do with
      BDD ... It's not the *only* way to come up with good design, and neither is
      BDD.BDD is about understanding the customer's need and
      letting emerging understanding of that need drive the software write ...
      always trying to gain greater understanding. But I bet that's what Kent
      Beck would say if you asked him what TDD was all about."




                                              Writing software that matters
   Vision – Outcomes – Feature – Stories –
    Scenarios


         User Stories:
    In order to [business
      value] As a [role] I
    want to [some action]

          Scenarios:
    Given [context] When
     I do [action] Then I
    should see [outcome]




                             Writing Software that Matters
   It is an expression of the customer’s desire
   It is a Unit of Delivery
   It focuses on the business value
   Each story represents part of a feature and belongs to a
    stake holder (Stake holders belong to a domain)

Title (one line describing the story)
Narrative:
As a [role]
I want [feature]
So that [benefit]
Another flavor:
In order to [business value] As a [role] I want to [some
action]



                                   Writing Software that Matters
   You define scope using Scenarios

Scenario 1: Title
Given [context]
And [some more context]..
When [event]
Then [outcome]
And [another outcome]

The GWT fragments can be written using Gherkin
language. You just create plain text file “.feature”
contain a set of scenario definitions.


                             Writing Software that Matters
   Executable Specifications
    ◦   Each step (scenario) is executable
    ◦   Code scenarios by example
    ◦   Examples become code tests and documentation
    ◦   Scenarios become acceptance tests, regression
        tests and documentation




                                Writing Software that Matters
   Take only what you can consume
   YAGNI
   Any more detail is waste, any less is risk
    Enough is Enough
Agile Manifesto
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

Discussion: Extreme is not good




                                              Writing Software that Matters
   Anyone who cares about the success of the
    project is a stake holder
    ◦ Core stakeholders – the ones with the vision
    ◦ Incident Stakeholders – the non-functional




                                Writing Software that Matters
   Jbehave (Java) – DanNorth/Chris Matt
   Rspec (Ruby)
   Cucubmber (Ruby tool that reads Gherkin)
   Mspec(Context Specifications)
   SpecUnit (SetContext,Because of,ItShould)
   SpecFlow
   Cucumber
   Fitnesse
   Concordion


                           Writing Software that Matters
BDD is more about a mindset rather than the
tools.
 ASP.NET MVC, Specflow, Nunit, Moq, Autofac




                        Writing software that matters
   Easy VS Integration
   VS Debugger Support
   Steps can be defined with any .NET language
   Compiles into a .NET assembly
   Install SpecFlow.Nunit from NuGet
   use existing unit-testing frameworks as the runtime for
    scenario execution




                                    Writing Software that Matters
Writing Software that Matters
   The RSpec Book, David Chelimsky
   http://dannorth.net/introducing-bdd/, Dan
    North
   SPECIFICATION BY EXAMPLE , Gojko Adzik
   http://msdn.microsoft.com/en-
    us/magazine/gg490346.aspx, Brandon Satrom
   http://blog.stevensanderson.com/2010/03/03/b
    ehavior-driven-development-bdd-with-
    specflow-and-aspnet-mvc/, Steven Sanderson
   Domain Driven Design, Eric Evans
   User Stories, Mike Cohen

Contenu connexe

Tendances

Successfully Implementing BDD in an Agile World
Successfully Implementing BDD in an Agile WorldSuccessfully Implementing BDD in an Agile World
Successfully Implementing BDD in an Agile WorldSmartBear
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaSeb Rose
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with CucumberBrandon Keepers
 
BDD testing with cucumber
BDD testing with cucumberBDD testing with cucumber
BDD testing with cucumberDaniel Kummer
 
What Is Cucumber?
What Is Cucumber?What Is Cucumber?
What Is Cucumber?QATestLab
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Lars Thorup
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testingdversaci
 
Introduction to Bdd and cucumber
Introduction to Bdd and cucumberIntroduction to Bdd and cucumber
Introduction to Bdd and cucumberNibu Baby
 
Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Mindfire Solutions
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOpsMatthew David
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD123abcda
 

Tendances (20)

Successfully Implementing BDD in an Agile World
Successfully Implementing BDD in an Agile WorldSuccessfully Implementing BDD in an Agile World
Successfully Implementing BDD in an Agile World
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Test Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and CucumberTest Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and Cucumber
 
BDD with Cucumber
BDD with CucumberBDD with Cucumber
BDD with Cucumber
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for Java
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with Cucumber
 
Cucumber & gherkin language
Cucumber & gherkin languageCucumber & gherkin language
Cucumber & gherkin language
 
Cucumber BDD
Cucumber BDDCucumber BDD
Cucumber BDD
 
BDD testing with cucumber
BDD testing with cucumberBDD testing with cucumber
BDD testing with cucumber
 
What Is Cucumber?
What Is Cucumber?What Is Cucumber?
What Is Cucumber?
 
Gherkin /BDD intro
Gherkin /BDD introGherkin /BDD intro
Gherkin /BDD intro
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
 
Introduction to Bdd and cucumber
Introduction to Bdd and cucumberIntroduction to Bdd and cucumber
Introduction to Bdd and cucumber
 
Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)
 
Tdd and bdd
Tdd and bddTdd and bdd
Tdd and bdd
 
BDD in Action - building software that matters
BDD in Action - building software that mattersBDD in Action - building software that matters
BDD in Action - building software that matters
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD
 
Bdd and spec flow
Bdd and spec flowBdd and spec flow
Bdd and spec flow
 

Similaire à BDD presentation

Topic tdd-and-bdd b4usolution
Topic tdd-and-bdd b4usolutionTopic tdd-and-bdd b4usolution
Topic tdd-and-bdd b4usolutionHoa Le
 
xUnit and TDD: Why and How in Enterprise Software, August 2012
xUnit and TDD: Why and How in Enterprise Software, August 2012xUnit and TDD: Why and How in Enterprise Software, August 2012
xUnit and TDD: Why and How in Enterprise Software, August 2012Justin Gordon
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven DevelopmentAdam Englander
 
TDD and BDD in Sky Deutschland
TDD and BDD in Sky DeutschlandTDD and BDD in Sky Deutschland
TDD and BDD in Sky DeutschlandMurphy Meng
 
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
Behavior Driven Development—A Guide to Agile Practices by Josh EastmanBehavior Driven Development—A Guide to Agile Practices by Josh Eastman
Behavior Driven Development—A Guide to Agile Practices by Josh EastmanQA or the Highway
 
TorontoRb Intro to BDD
TorontoRb   Intro to BDDTorontoRb   Intro to BDD
TorontoRb Intro to BDDnunick
 
CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWDVikas Sarin
 
Understanding Why Testing is Importaint
Understanding Why Testing is ImportaintUnderstanding Why Testing is Importaint
Understanding Why Testing is ImportaintSana Nasar
 
Practiced agile developer with tdd & bdd
Practiced agile developer with tdd & bdd Practiced agile developer with tdd & bdd
Practiced agile developer with tdd & bdd Sakares Saengkaew
 
Behavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineBehavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineRemus Langu
 
Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingUtkarsh Khare
 
Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovSvetlin Nakov
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Jaehoon Oh
 
Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)Synerzip
 
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...Katy Slemon
 
Enter the mind of an Agile Developer
Enter the mind of an Agile DeveloperEnter the mind of an Agile Developer
Enter the mind of an Agile DeveloperBSGAfrica
 

Similaire à BDD presentation (20)

Topic tdd-and-bdd b4usolution
Topic tdd-and-bdd b4usolutionTopic tdd-and-bdd b4usolution
Topic tdd-and-bdd b4usolution
 
xUnit and TDD: Why and How in Enterprise Software, August 2012
xUnit and TDD: Why and How in Enterprise Software, August 2012xUnit and TDD: Why and How in Enterprise Software, August 2012
xUnit and TDD: Why and How in Enterprise Software, August 2012
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
TDD and BDD in Sky Deutschland
TDD and BDD in Sky DeutschlandTDD and BDD in Sky Deutschland
TDD and BDD in Sky Deutschland
 
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
Behavior Driven Development—A Guide to Agile Practices by Josh EastmanBehavior Driven Development—A Guide to Agile Practices by Josh Eastman
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
 
Gateway to Agile: XP and BDD
Gateway to Agile: XP and BDD Gateway to Agile: XP and BDD
Gateway to Agile: XP and BDD
 
TorontoRb Intro to BDD
TorontoRb   Intro to BDDTorontoRb   Intro to BDD
TorontoRb Intro to BDD
 
CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWD
 
Understanding Why Testing is Importaint
Understanding Why Testing is ImportaintUnderstanding Why Testing is Importaint
Understanding Why Testing is Importaint
 
Practiced agile developer with tdd & bdd
Practiced agile developer with tdd & bdd Practiced agile developer with tdd & bdd
Practiced agile developer with tdd & bdd
 
Behavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineBehavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & Jasmine
 
Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme Programming
 
Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin Nakov
 
Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가Tdd 왜 배우기 어려운가
Tdd 왜 배우기 어려운가
 
Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)Building In Quality: The Beauty Of Behavior Driven Development (BDD)
Building In Quality: The Beauty Of Behavior Driven Development (BDD)
 
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
Tdd vs bdd vs atdd — developers’ methodologies to navigate complex developmen...
 
Enter the mind of an Agile Developer
Enter the mind of an Agile DeveloperEnter the mind of an Agile Developer
Enter the mind of an Agile Developer
 
Bdd with m spec
Bdd with m specBdd with m spec
Bdd with m spec
 
Introduction to TDD and BDD
Introduction to TDD and BDDIntroduction to TDD and BDD
Introduction to TDD and BDD
 
Tdd blog
Tdd blogTdd blog
Tdd blog
 

Dernier

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 

Dernier (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 

BDD presentation

  • 1. Writing software that matters Temesgen B Meheret (Teme) Senior Software Engineer @ Videology Email: teme@videologygroup.com
  • 2. Background  DDs  Why do Projects Fail?  Writing Software that matters  TDD’s promise and it’s shortcomings  BDD’s evolution  BDD – Second generation agile methodology  Enough Talk, now Code!  Summary & Questions Temesgen B Meheret Senior Software Engineer @Videology
  • 3. My name is Temesgen but you can call me “Teme”  Software Engineer and team lead @Videology  Ex-Software Engineer @LCG  Plays Ping-Pong  Why am I here & not @the Fedexfield for the USA-Brazil soccer match? Writing Software that matters
  • 4. How many DDs are you aware of? ◦ DDD, ATDD, TDD, RDD, MDD…  How many DD belts do you need before to be a great developer?   Driven – Keeping the right order ◦ HAPPY WIFE – HAPPY LIFE  Architecture is Opinion. There are no absolutes. It is really up to us to evaluate and take what applies to our situation. ◦ E.g. Aratkilo building architecture Writing Software that Matters
  • 5. Adaptation 7 6 5 4 3 Adaptation 2 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 Discussion: Selective Unit Testing – Costs and Benefits by Steven Sanderson Where is our team on this curve for BDD? Writing Software that Matters
  • 6. What are the top 3 things that you believe contribute to a failure of a project?  Have you ever practiced TDD in your projects? If so, ◦ Where do you start testing? ◦ What did you test? ◦ How much did you rely on your tests (trust) during refactoring? ◦ How effective were your test in terms of detecting bugs? ◦ What did you think was the main intent for writing unit tests? Writing Software that Matters
  • 7. Delivering Late or Over Budget ◦ Poor planning, estimation ◦ E.g. Deriving requirements from a running application – sheep’s stomach layers  Delivering the wrong thing ◦ Building the product right but not the right product ◦ e.g. Projects shelved after many months of development and investment  Unstable in Production ◦ E.g. The morning after Deployment hell  Costly to maintain ◦ Code Quality  What do you think about asking developers during interviews “How many failed projects have you been part of and what do you think was the cause?” Writing Software that matters
  • 8. Discussion points: Top-Down vs. Bottom-up, Civil-Engineering projects vs. Software projects Practical example: LOE flowing down from Solutions Team, Architecture reviews Writing Software that Matters
  • 9. Software development is all about knowing and delivering WHAT MATTERS most to the business How do you KNOW WHAT MATTERS? Through effective communication! • Tangible Business Value • Delivered on-time, incrementally • Easy to deploy and manage • Robust in Prod • Easy to understand and communicate In order to achieve this we need to be adaptive in our planning, requirements and design. Regression tests also play a big role to be able to embrace change without fear. Discussion: Nothing replaces People. Writing software that matters
  • 10. ◦ Clear Communication between Stakeholders  Discussion: Stake holders and their world point of view ◦ Constant re-Prioritization owned by the product- owner ◦ Immediate feedback at every level ◦ Flexibility – Adapting to Feedback  E.g. client’s needs changed, technology difficulties ◦ Working on feature-level Writing Software that Matters
  • 11. The goal of TDD is specification (Design) and not validation ◦ But we always seem to think of TDD as testing tool. We focus on the verification. IMHO clean code, test assertions and serving as regression suite are all side effects of TDD. ◦ Code by example to implement features but when those examples are done then they act as tests. What went wrong?  Where to start?  What to test?  What not to test?  How much test in one go?  What to call the tests?  How to understand why a test fails?  The focus on testing, vague terms, more focus on units than behavior, tests reflect the structural arrangement of the code Programmers often think "I'm not going to write all those tests.", "It's really simple code, it doesn't need to be tested", "testing is a waste of time", or "I've done this (loop/data retrieval/functionality, etc.) millions of times.". Writing software that matters
  • 12. • Core Domain Unit testing (Mocking repo) • MVC unit test (Mocking domain and app services) • AppService Unit Test (mocking domain services) • MVC Acceptance Tests Our BDD evolution – Though we had so many unit tests, once we push code to QA, we keep getting surprised with scenarios that we never thought about. Then we decided to make QA do test-case reviews at the first week of development. We saw a big value in that which led us to start exploring BDD. Writing Software that Matters
  • 13. BDD builds on TDD (Discussion: last year presentation)  Stripping out the word test and making test methods sentences  Expressive test name is helpful when test fails  Behavior is more useful word than test – vocabulary change (Jbehave)  Determine the next most important behavior (next thing system doesn’t do)  Aha Moment – Requirements are Behavior too! Writing Software that matters
  • 14. From Testing To Specification. You write specifications of what your code will have to do - “Specification, not Verification”  BDD’s definition: "It's about focusing on the behavior of an application from the point of view of its stakeholders”  BDD says you should elevate your mind to a level of behavioral abstraction above the code implementation.  BDD ◦ is a second-generation, UT ◦ outside-in, ◦ pull-based, ◦ multiplestakeholder, UT BDD UT ◦ multiple-scale, ◦ high automation, agile methodology. UT “It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software.” Discussions: Press releases Writing software that matters
  • 15. TDD - BDD  DDD – BDD ◦ Focus on the domain and letting it affect the software very much ◦ Ubiquitous language  DDD enables BDD.  BDD helps structure the conversations for DDD  ATDD – BDD ◦ "I'd like to avoid "BDD is better than TDD because..." or even "BDD is different from TDD (as originally envisioned) because..." TDD is amazing. Its initial conception was to solve exactly what I've been trying to do with BDD ... It's not the *only* way to come up with good design, and neither is BDD.BDD is about understanding the customer's need and letting emerging understanding of that need drive the software write ... always trying to gain greater understanding. But I bet that's what Kent Beck would say if you asked him what TDD was all about." Writing software that matters
  • 16. Vision – Outcomes – Feature – Stories – Scenarios User Stories: In order to [business value] As a [role] I want to [some action] Scenarios: Given [context] When I do [action] Then I should see [outcome] Writing Software that Matters
  • 17. It is an expression of the customer’s desire  It is a Unit of Delivery  It focuses on the business value  Each story represents part of a feature and belongs to a stake holder (Stake holders belong to a domain) Title (one line describing the story) Narrative: As a [role] I want [feature] So that [benefit] Another flavor: In order to [business value] As a [role] I want to [some action] Writing Software that Matters
  • 18. You define scope using Scenarios Scenario 1: Title Given [context] And [some more context].. When [event] Then [outcome] And [another outcome] The GWT fragments can be written using Gherkin language. You just create plain text file “.feature” contain a set of scenario definitions. Writing Software that Matters
  • 19. Executable Specifications ◦ Each step (scenario) is executable ◦ Code scenarios by example ◦ Examples become code tests and documentation ◦ Scenarios become acceptance tests, regression tests and documentation Writing Software that Matters
  • 20. Take only what you can consume  YAGNI  Any more detail is waste, any less is risk Enough is Enough Agile Manifesto Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan Discussion: Extreme is not good Writing Software that Matters
  • 21. Anyone who cares about the success of the project is a stake holder ◦ Core stakeholders – the ones with the vision ◦ Incident Stakeholders – the non-functional Writing Software that Matters
  • 22. Jbehave (Java) – DanNorth/Chris Matt  Rspec (Ruby)  Cucubmber (Ruby tool that reads Gherkin)  Mspec(Context Specifications)  SpecUnit (SetContext,Because of,ItShould)  SpecFlow  Cucumber  Fitnesse  Concordion Writing Software that Matters
  • 23. BDD is more about a mindset rather than the tools.  ASP.NET MVC, Specflow, Nunit, Moq, Autofac Writing software that matters
  • 24. Easy VS Integration  VS Debugger Support  Steps can be defined with any .NET language  Compiles into a .NET assembly  Install SpecFlow.Nunit from NuGet  use existing unit-testing frameworks as the runtime for scenario execution Writing Software that Matters
  • 26. The RSpec Book, David Chelimsky  http://dannorth.net/introducing-bdd/, Dan North  SPECIFICATION BY EXAMPLE , Gojko Adzik  http://msdn.microsoft.com/en- us/magazine/gg490346.aspx, Brandon Satrom  http://blog.stevensanderson.com/2010/03/03/b ehavior-driven-development-bdd-with- specflow-and-aspnet-mvc/, Steven Sanderson  Domain Driven Design, Eric Evans  User Stories, Mike Cohen