SlideShare a Scribd company logo
Continuous
Behavior
BDD in Continuous Delivery
CoDers Who Test
15th May 2018
Gáspár Nagy
coach • trainer • bdd addict • creator of specflow
“The BDD Books: Discovery” • http://bddbooks.com
@gasparnagy • gaspar@specsolutions.eu
Continuous Behavior - BDD in Continuous Delivery (CoDers Who Test, Gothenburg, 15/5/2018)
Copyright © Gaspar NagyCopyright © Gaspar Nagy
bdd addict
given.when.then
CAUTION!
on the stage
Gáspár Nagy
coach, trainer and bdd addict
creator of SpecFlow
gaspar@specsolutions.eu
https://specsolutions.eu
@gasparnagy
Copyright © Gaspar NagyCopyright © Gaspar Nagy
What makes you nervous on
the day of the release?
My first app…
A long time ago* in a galaxy
far, far away**…
* 1995
** Veszprém, Hungary
Continuous Behavior - BDD in Continuous Delivery (CoDers Who Test, Gothenburg, 15/5/2018)
Copyright © Gaspar NagyCopyright © Gaspar Nagy
My dream-projects in 1995
• Working software that was in use
• Exciting technical solutions
• Continuous learning
• And no conflicts in the team…
…because I was alone
Copyright © Gaspar NagyCopyright © Gaspar Nagy
My first “real” project…
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Practicing team work
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Practicing team work
And by a
modem for
“A”
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Integration is more than merging…
changed
foo.cpp
changed
bar.cpp
?
void ProcessOrder()
{
…
+ account->Withdraw(sum);
…
}
void FinalizeOrder()
{
…
+ account->Withdraw(sum);
…
}
Copyright © Gaspar NagyCopyright © Gaspar Nagy
What is integration, then?
Ensuring that the improvements developed independently still form a working unit
Resolving file-
level conflicts
Can compile,
can build
Can be
deployed
There is no
regression
[Enter your
specific step
here]
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Proper integration is difficult…
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Frequency reduces difficulty (Fowler)
• „if it hurts, do it more often”
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Continuous Integration, CI
Ensures that the improvements developed independently still form a working unit
• Resolving file-level conflicts
• Compilation, build
• Unit tests
• ...
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Continuous integration revealed the next
problems…
• Manual regression testing does not scale…
• Manual deployments are error-prone…
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Continuous Delivery, CD
Ensures that the application is always in a potentially deployable state (whether we
deploy is a manual decision)
• CI +
• Deployable
• Automated regression tests
(Acceptance Tests)
• ...
Copyright © Gaspar NagyCopyright © Gaspar Nagy
CD vs. CD
Continuous Delivery vs. Continuous Deployment
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Continuous Delivery, Continuous Deployment
Copyright © Gaspar NagyCopyright © Gaspar Nagy
“Continues delivery can be achieved by anyone,
Continues deployment is only for some specific
products…”
/some people/
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Continuous Deployment, CD
Ensures that the application is always actual
• CD +
• Fully* automated verification
• Automated non-functional tests
• Appropriate context (eg. SaaS)
• ...
• ???
„live”
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Continuous Deployment is the key to understand the
“CD” mentality…
…so let’s try!
Copyright © Gaspar NagyCopyright © Gaspar Nagy
What are your fears?
• I am afraid of pushing the “release” button!
• The feedback I get from my tests are not useful!
Copyright © Gaspar NagyCopyright © Gaspar Nagy
More testing and more automation!
Source: World Quality Report 2015/16
increased by 35%
increased by 60%
0%
5%
10%
15%
20%
25%
30%
35%
40%
45%
50%
Amount of IT budget allocated to QA Ratio of test case automation
2014
2015
Small tests = small problems;
Big tests = big problems
• They are SLOOOOOOW!
• They are BRITTLE!
• They need awful lot of MAINTENANCE!
• They FAIL!!!
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Our typical automated tests are
not good enough for CD…
Copyright © Gaspar NagyCopyright © Gaspar Nagy
What’s wrong with our tests?
Episode #1
PO: We have far too many prod issues. We have
to improve our CD pipeline…
Write more tests!
Team: How much more?
Episode #2
PO: Are your tests balanced according to the test
automation pyramid?
Team: … not fully…, more like an ice-cream cone
PO: Then write more unit tests!
Episode #3
PO: You should increase your test coverage!
Team: You mean line coverage? How much?
PO: Well… what is exactly a code line doing?
Episode #4
PO: You should cover the risks better!
Team: How do we know if we have covered
them?
Copyright © Gaspar NagyCopyright © Gaspar Nagy
PO controlling testing activities…
Problem Domain Solution Domain
Lightbulb by Unknown Author is licensed under CC BY-SA
PO
REQ APP
TESTS
Copyright © Gaspar NagyCopyright © Gaspar Nagy
You cannot control something that is
outside of your control…
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Tests should be part of shared ownership…
Problem Domain Solution Domain
Lightbulb by Unknown Author is licensed under CC BY-SA
REQ APP
TESTS
Copyright © Gaspar NagyCopyright © Gaspar Nagy
How could the entire team
own the tests?
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Tests should be part of shared ownership…
Problem Domain Solution Domain
Lightbulb by Unknown Author is licensed under CC BY-SA
The old PIN
should be
correct
public void VerifyOldPin(string enteredOldPin)
{
var db = new CardRespoitory();
var oldPin = db.LoadOldPin(CurrentCard);
if (oldPin != enteredOldPin)
{
throw new InvalidPinException();
}
}
Implements
[TestMethod]
public void ShuldFailWhenOldPinIncorrect()
{
var cardStoreMock = new CardStoreMock();
cardStoreMock.SetCard("1234678", "1234");
var sut = new CardService();
var result = sut.ChangePin("1234678", "1111",
"1212", "1212");
Assert.IsFalse(result);
}
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Specification by example
Problem Domain Solution Domain
Lightbulb by Unknown Author is licensed under CC BY-SA
The old PIN
should be
correct
public void VerifyOldPin(string enteredOldPin)
{
var db = new CardRespoitory();
var oldPin = db.LoadOldPin(CurrentCard);
if (oldPin != enteredOldPin)
{
throw new InvalidPinException();
}
}
Implements
[TestMethod]
public void ShuldFailWhenOldPinIncorrect()
{
var cardStoreMock = new CardStoreMock();
cardStoreMock.SetCard("1234678", "1234");
var sut = new CardService();
var result = sut.ChangePin("1234678", "1111",
"1212", "1212");
Assert.IsFalse(result);
}
Old PIN is incorrect
• PIN is 1234
• Enter old PIN: 1111
• Change PIN
⇒ PIN change rejected
Illustrates
Automates
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Codified tests are hard to maintain
• What was the example?
• Why were these
numbers used?
• What did we want to
verify?
[TestMethod]
public void ShuldFailWhenOldPinIncorrect()
{
var cardStoreMock = new CardStoreMock();
cardStoreMock.SetCard("1234678", "1234");
var sut = new CardService();
var result = sut.ChangePin("1234678", "1111",
"1212", "1212");
Assert.IsFalse(result);
}
Copyright © Gaspar NagyCopyright © Gaspar Nagy
BDD is here to help?
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Formulated BDD scenarios
Problem Domain Solution Domain
The old PIN
should be
correct
public void VerifyOldPin(string enteredOldPin)
{
var db = new CardRespoitory();
var oldPin = db.LoadOldPin(CurrentCard);
if (oldPin != enteredOldPin)
{
throw new InvalidPinException();
}
}
Implements
Old PIN is incorrect
• PIN is 1234
• Enter old PIN: 1111
• Change PIN
⇒ PIN change rejected
Illustrates
Scenario: Old PIN is incorrect
Given my old pin is 1234
And I enter 1111 as old PIN
When I try to change my PIN
Then the PIN change should be rejected [Then]
public void I_enter_PIN_as_old_pin(string pin)
{
changePinContext.SetOldPin(pin);
}
[When]
public void I_enter_PIN_as_old_pin(string pin)
{
changePinContext.SetOldPin(pin);
}
[Given]
public void I_enter_PIN_as_old_pin(string pin)
{
changePinContext.SetOldPin(pin);
}
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Behavior Driven Development
Problem Domain Solution Domain
Lightbulb by Unknown Author is licensed under CC BY-SA
REQ APP
Given
When
Then
SPECS
Validates Verifies
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Behavior Driven Development is about
understanding & validating
business requirements
through illustrative examples
Copyright © Gaspar NagyCopyright © Gaspar Nagy
BDD is not about tests!
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Functional quality is not only about whether
IT WORKS as expected…
but also about
whether the EXPECTATIONS ARE GOOD and
DOCUMENTED…
Functional quality
Episode in a later season…
PO: We have got a strange prod issue. Could we
look into that?
Team: Sure. Let’s have a look at the related BDD
scenarios…
PO: I see. I think there is an important case we
did not detail enough…
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Happy ending
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Finally I’ve got a dream-project again
• It was a complex service used by hundreds of apps and through them millions of
users all over the world
• Processed several thousands of requests per second
• Was critical in the client’s service chain
• We rolled it out without any severe issues…
• And we knew that there will be no problems…
• Because we had shared control over the specs (BDD scenarios)
• And this gave us confidence to push the release button
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Continuous deployment is about CONFIDENCE
…and you need to keep the link to the problem
domain to gain that
Why was my first project working?
• Short cycles
• Instant release
• Close to “business” but also
close to users
Copyright © Gaspar NagyCopyright © Gaspar Nagy
Think about YOUR tests…
Are they also linking the solution with the problem?
Source: https://shashinki.com/
Thank you!
Gáspár Nagy
coach • trainer • bdd addict • creator of specflow
“The BDD Books: Discovery” • http://bddbooks.com
@gasparnagy • gaspar@specsolutions.eu
Copyright © Gaspar NagyCopyright © Gaspar Nagy

More Related Content

What's hot

How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio  How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio
Optimizely
 
Agile Testing Analytics
Agile Testing AnalyticsAgile Testing Analytics
Agile Testing Analytics
QASymphony
 
Optimizely NYC Developer Meetup - Experimentation at Blue Apron
Optimizely NYC Developer Meetup - Experimentation at Blue ApronOptimizely NYC Developer Meetup - Experimentation at Blue Apron
Optimizely NYC Developer Meetup - Experimentation at Blue Apron
Optimizely
 
Definition of Done
Definition of DoneDefinition of Done
Definition of Done
Marcin Niebudek
 
What do you mean, Agile?
What do you mean, Agile?What do you mean, Agile?
What do you mean, Agile?
David Grant
 
QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...
QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...
QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...
QASymphony
 
QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...
QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...
QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...
QAFest
 
GASPing Toward the Future: A Look at What’s In Store for Scrum
GASPing Toward the Future: A Look at What’s In Store for ScrumGASPing Toward the Future: A Look at What’s In Store for Scrum
GASPing Toward the Future: A Look at What’s In Store for Scrum
Mike Cohn
 
DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...
DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...
DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...
Gene Kim
 
A Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsA Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOps
Andreas Grabner
 
HOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearB
HOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearBHOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearB
HOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearB
DevOpsDays Tel Aviv
 
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Marcin Grzejszczak
 
Making the Move to Behavior Driven Development
Making the Move to Behavior Driven DevelopmentMaking the Move to Behavior Driven Development
Making the Move to Behavior Driven Development
QASymphony
 
Evolve or Die: Healthcare IT Testing | QASymphony Webinar
Evolve or Die: Healthcare IT Testing | QASymphony WebinarEvolve or Die: Healthcare IT Testing | QASymphony Webinar
Evolve or Die: Healthcare IT Testing | QASymphony Webinar
QASymphony
 
Scrum in Hardware
Scrum in HardwareScrum in Hardware
Scrum in Hardware
TEST Huddle
 
Atlassian user group in itiviti
Atlassian user group in itivitiAtlassian user group in itiviti
Atlassian user group in itiviti
Gonchik Tsymzhitov
 
Integrated Dev And Qa Team With Scrum
Integrated Dev And Qa Team With ScrumIntegrated Dev And Qa Team With Scrum
Integrated Dev And Qa Team With Scrum
Ethan Huang
 
Let's focus more on Quality and less on Testing by Joel Montvelisky
Let's focus more on Quality and less on Testing by Joel MontveliskyLet's focus more on Quality and less on Testing by Joel Montvelisky
Let's focus more on Quality and less on Testing by Joel Montvelisky
QA or the Highway
 
Accelerating Your Test Execution Pipeline
Accelerating Your Test Execution PipelineAccelerating Your Test Execution Pipeline
Accelerating Your Test Execution Pipeline
SmartBear
 
ATAGTR2017 What Lies Beneath Robotics Process Automation
ATAGTR2017 What Lies Beneath Robotics Process AutomationATAGTR2017 What Lies Beneath Robotics Process Automation
ATAGTR2017 What Lies Beneath Robotics Process Automation
Agile Testing Alliance
 

What's hot (20)

How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio  How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio
 
Agile Testing Analytics
Agile Testing AnalyticsAgile Testing Analytics
Agile Testing Analytics
 
Optimizely NYC Developer Meetup - Experimentation at Blue Apron
Optimizely NYC Developer Meetup - Experimentation at Blue ApronOptimizely NYC Developer Meetup - Experimentation at Blue Apron
Optimizely NYC Developer Meetup - Experimentation at Blue Apron
 
Definition of Done
Definition of DoneDefinition of Done
Definition of Done
 
What do you mean, Agile?
What do you mean, Agile?What do you mean, Agile?
What do you mean, Agile?
 
QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...
QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...
QASymphony and TestPlant: Bringing Together Best-in-Class Test Management and...
 
QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...
QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...
QA Fest 2017. Ирина Жилинская. Тестирование основанное на рисках в реальности...
 
GASPing Toward the Future: A Look at What’s In Store for Scrum
GASPing Toward the Future: A Look at What’s In Store for ScrumGASPing Toward the Future: A Look at What’s In Store for Scrum
GASPing Toward the Future: A Look at What’s In Store for Scrum
 
DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...
DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...
DOES16 San Francisco - David Blank-Edelman - Lessons Learned from a Parallel ...
 
A Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsA Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOps
 
HOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearB
HOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearBHOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearB
HOW TO OPTIMIZE NON-CODING TIME, ORI KEREN, LinearB
 
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
 
Making the Move to Behavior Driven Development
Making the Move to Behavior Driven DevelopmentMaking the Move to Behavior Driven Development
Making the Move to Behavior Driven Development
 
Evolve or Die: Healthcare IT Testing | QASymphony Webinar
Evolve or Die: Healthcare IT Testing | QASymphony WebinarEvolve or Die: Healthcare IT Testing | QASymphony Webinar
Evolve or Die: Healthcare IT Testing | QASymphony Webinar
 
Scrum in Hardware
Scrum in HardwareScrum in Hardware
Scrum in Hardware
 
Atlassian user group in itiviti
Atlassian user group in itivitiAtlassian user group in itiviti
Atlassian user group in itiviti
 
Integrated Dev And Qa Team With Scrum
Integrated Dev And Qa Team With ScrumIntegrated Dev And Qa Team With Scrum
Integrated Dev And Qa Team With Scrum
 
Let's focus more on Quality and less on Testing by Joel Montvelisky
Let's focus more on Quality and less on Testing by Joel MontveliskyLet's focus more on Quality and less on Testing by Joel Montvelisky
Let's focus more on Quality and less on Testing by Joel Montvelisky
 
Accelerating Your Test Execution Pipeline
Accelerating Your Test Execution PipelineAccelerating Your Test Execution Pipeline
Accelerating Your Test Execution Pipeline
 
ATAGTR2017 What Lies Beneath Robotics Process Automation
ATAGTR2017 What Lies Beneath Robotics Process AutomationATAGTR2017 What Lies Beneath Robotics Process Automation
ATAGTR2017 What Lies Beneath Robotics Process Automation
 

Similar to Continuous Behavior - BDD in Continuous Delivery (CoDers Who Test, Gothenburg, 15/5/2018)

Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...
Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...
Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...
Gáspár Nagy
 
How to Better Manage Technical Debt While Innovating on DevOps
How to Better Manage Technical Debt While Innovating on DevOpsHow to Better Manage Technical Debt While Innovating on DevOps
How to Better Manage Technical Debt While Innovating on DevOps
Dynatrace
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Gáspár Nagy
 
An Introduction To Software Development - Test Driven Development
An Introduction To Software Development - Test Driven DevelopmentAn Introduction To Software Development - Test Driven Development
An Introduction To Software Development - Test Driven Development
Blue Elephant Consulting
 
通往測試最高殿堂的旅程 - GTAC 2016
通往測試最高殿堂的旅程 - GTAC 2016通往測試最高殿堂的旅程 - GTAC 2016
通往測試最高殿堂的旅程 - GTAC 2016
Chloe Chen
 
The Most Important Thing: How Mozilla Does Security and What You Can Steal
The Most Important Thing: How Mozilla Does Security and What You Can StealThe Most Important Thing: How Mozilla Does Security and What You Can Steal
The Most Important Thing: How Mozilla Does Security and What You Can Steal
mozilla.presentations
 
Bob Galen : Great sprint reviews
Bob Galen : Great sprint reviews   Bob Galen : Great sprint reviews
Bob Galen : Great sprint reviews
AgileDenver
 
Jonathon Rochelle @ FOWA Feb 07
Jonathon Rochelle @ FOWA Feb 07Jonathon Rochelle @ FOWA Feb 07
Jonathon Rochelle @ FOWA Feb 07
carsonsystems
 
Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...
Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...
Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...
Price Intelligently
 
CppCat, an Ambitious C++ Code Analyzer from Tula
CppCat, an Ambitious C++ Code Analyzer from TulaCppCat, an Ambitious C++ Code Analyzer from Tula
CppCat, an Ambitious C++ Code Analyzer from Tula
Andrey Karpov
 
BDD Scenarios in a Testing Strategy
BDD Scenarios in a Testing StrategyBDD Scenarios in a Testing Strategy
BDD Scenarios in a Testing Strategy
Gáspár Nagy
 
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
Gáspár Nagy
 
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Demi Ben-Ari
 
Agile Gambling: A Cautionary Tale!
Agile Gambling: A Cautionary Tale!Agile Gambling: A Cautionary Tale!
Agile Gambling: A Cautionary Tale!
Ravi Verma (SPC, CLP, PST, EBMgt Consultant)
 
Moving to tdd bdd
Moving to tdd bddMoving to tdd bdd
Moving to tdd bdd
Kim Carter
 
Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)
Keith Casey
 
TDD: seriously, try it! 
TDD: seriously, try it! TDD: seriously, try it! 
TDD: seriously, try it! 
Nacho Cougil
 
Inside3DPrintingSantaClara_JoshJacobson
Inside3DPrintingSantaClara_JoshJacobsonInside3DPrintingSantaClara_JoshJacobson
Inside3DPrintingSantaClara_JoshJacobson
MecklerMedia
 
What if you could eliminate the hidden costs of development?
What if you could eliminate the hidden costs of development?What if you could eliminate the hidden costs of development?
What if you could eliminate the hidden costs of development?
Rogue Wave Software
 
"What we learned from 5 years of building a data science software that actual...
"What we learned from 5 years of building a data science software that actual..."What we learned from 5 years of building a data science software that actual...
"What we learned from 5 years of building a data science software that actual...
Dataconomy Media
 

Similar to Continuous Behavior - BDD in Continuous Delivery (CoDers Who Test, Gothenburg, 15/5/2018) (20)

Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...
Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...
Introducing BDD to Legacy Applications with SpecFlow/Cucumber (Agilia Confere...
 
How to Better Manage Technical Debt While Innovating on DevOps
How to Better Manage Technical Debt While Innovating on DevOpsHow to Better Manage Technical Debt While Innovating on DevOps
How to Better Manage Technical Debt While Innovating on DevOps
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
 
An Introduction To Software Development - Test Driven Development
An Introduction To Software Development - Test Driven DevelopmentAn Introduction To Software Development - Test Driven Development
An Introduction To Software Development - Test Driven Development
 
通往測試最高殿堂的旅程 - GTAC 2016
通往測試最高殿堂的旅程 - GTAC 2016通往測試最高殿堂的旅程 - GTAC 2016
通往測試最高殿堂的旅程 - GTAC 2016
 
The Most Important Thing: How Mozilla Does Security and What You Can Steal
The Most Important Thing: How Mozilla Does Security and What You Can StealThe Most Important Thing: How Mozilla Does Security and What You Can Steal
The Most Important Thing: How Mozilla Does Security and What You Can Steal
 
Bob Galen : Great sprint reviews
Bob Galen : Great sprint reviews   Bob Galen : Great sprint reviews
Bob Galen : Great sprint reviews
 
Jonathon Rochelle @ FOWA Feb 07
Jonathon Rochelle @ FOWA Feb 07Jonathon Rochelle @ FOWA Feb 07
Jonathon Rochelle @ FOWA Feb 07
 
Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...
Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...
Hiten Shah and Marie Prokopets - Lessons Learned from Building 5 Products in ...
 
CppCat, an Ambitious C++ Code Analyzer from Tula
CppCat, an Ambitious C++ Code Analyzer from TulaCppCat, an Ambitious C++ Code Analyzer from Tula
CppCat, an Ambitious C++ Code Analyzer from Tula
 
BDD Scenarios in a Testing Strategy
BDD Scenarios in a Testing StrategyBDD Scenarios in a Testing Strategy
BDD Scenarios in a Testing Strategy
 
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (BDDx L...
 
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
 
Agile Gambling: A Cautionary Tale!
Agile Gambling: A Cautionary Tale!Agile Gambling: A Cautionary Tale!
Agile Gambling: A Cautionary Tale!
 
Moving to tdd bdd
Moving to tdd bddMoving to tdd bdd
Moving to tdd bdd
 
Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)Is Your API Misbehaving (workshop)
Is Your API Misbehaving (workshop)
 
TDD: seriously, try it! 
TDD: seriously, try it! TDD: seriously, try it! 
TDD: seriously, try it! 
 
Inside3DPrintingSantaClara_JoshJacobson
Inside3DPrintingSantaClara_JoshJacobsonInside3DPrintingSantaClara_JoshJacobson
Inside3DPrintingSantaClara_JoshJacobson
 
What if you could eliminate the hidden costs of development?
What if you could eliminate the hidden costs of development?What if you could eliminate the hidden costs of development?
What if you could eliminate the hidden costs of development?
 
"What we learned from 5 years of building a data science software that actual...
"What we learned from 5 years of building a data science software that actual..."What we learned from 5 years of building a data science software that actual...
"What we learned from 5 years of building a data science software that actual...
 

More from Gáspár Nagy

Ramp up your testing solution, ExpoQA 2023
Ramp up your testing solution, ExpoQA 2023Ramp up your testing solution, ExpoQA 2023
Ramp up your testing solution, ExpoQA 2023
Gáspár Nagy
 
Fighting against technical debt (CukenFest 2020)
Fighting against technical debt (CukenFest 2020)Fighting against technical debt (CukenFest 2020)
Fighting against technical debt (CukenFest 2020)
Gáspár Nagy
 
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Gáspár Nagy
 
Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)
Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)
Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)
Gáspár Nagy
 
Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)
Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)
Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)
Gáspár Nagy
 
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...
Gáspár Nagy
 
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
Gáspár Nagy
 
Property Based BDD Examples (ETSI UCAAT 2016, Budapest)
Property Based BDD Examples (ETSI UCAAT 2016, Budapest)Property Based BDD Examples (ETSI UCAAT 2016, Budapest)
Property Based BDD Examples (ETSI UCAAT 2016, Budapest)
Gáspár Nagy
 
Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...
Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...
Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...
Gáspár Nagy
 
Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)
Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)
Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)
Gáspár Nagy
 
Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)
Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)
Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)
Gáspár Nagy
 

More from Gáspár Nagy (11)

Ramp up your testing solution, ExpoQA 2023
Ramp up your testing solution, ExpoQA 2023Ramp up your testing solution, ExpoQA 2023
Ramp up your testing solution, ExpoQA 2023
 
Fighting against technical debt (CukenFest 2020)
Fighting against technical debt (CukenFest 2020)Fighting against technical debt (CukenFest 2020)
Fighting against technical debt (CukenFest 2020)
 
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
 
Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)
Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)
Behavior Driven UI Automation (Agile Testing Days 2017, Potsdam)
 
Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)
Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)
Testing is Difficult (Agile in the City Bristol 2017, Lightening talk)
 
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...
Behavior Driven Web UI Automation with Selenium and Cucumber/SpecFlow (Qualit...
 
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
A tesztelés szerepe folyamatos kihelyezést használó projektekben (Microsoft, ...
 
Property Based BDD Examples (ETSI UCAAT 2016, Budapest)
Property Based BDD Examples (ETSI UCAAT 2016, Budapest)Property Based BDD Examples (ETSI UCAAT 2016, Budapest)
Property Based BDD Examples (ETSI UCAAT 2016, Budapest)
 
Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...
Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...
Given/When/Then-ready sprint planning with Example Mapping (Agilia Budapest 2...
 
Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)
Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)
Folyamatos integráció és kódépítés (ALM Day Budapest, 24/11/2015, Hungarian)
 
Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)
Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)
Given/When/Then-ready sprint planning (Agile Tour Vienna 2015)
 

Recently uploaded

Girls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in City
Girls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in CityGirls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in City
Girls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in City
neshakor5152
 
Odoo E-commerce website development guides
Odoo E-commerce website development guidesOdoo E-commerce website development guides
Odoo E-commerce website development guides
jhkdigitalmarketing
 
HIRE A HACKER FOR CHEATING HUSBAND/WIFE)
HIRE A HACKER FOR CHEATING HUSBAND/WIFE)HIRE A HACKER FOR CHEATING HUSBAND/WIFE)
HIRE A HACKER FOR CHEATING HUSBAND/WIFE)
josephinedrea942
 
Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...
Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...
Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...
rachitkumar09887
 
Hotel Management Software Development Company
Hotel Management Software Development CompanyHotel Management Software Development Company
Hotel Management Software Development Company
XongoLab Technologies LLP
 
How To Fill Timesheet in TaskSprint: Quick Guide 2024
How To Fill Timesheet in TaskSprint: Quick Guide 2024How To Fill Timesheet in TaskSprint: Quick Guide 2024
How To Fill Timesheet in TaskSprint: Quick Guide 2024
TaskSprint | Employee Efficiency Software
 
Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …
908dutch
 
Google ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learningGoogle ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learning
VishrutGoyani1
 
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
dream girl
 
React Native vs Flutter - SSTech System
React Native vs Flutter  - SSTech SystemReact Native vs Flutter  - SSTech System
React Native vs Flutter - SSTech System
SSTech System
 
當測試開始左移
當測試開始左移當測試開始左移
當測試開始左移
Jersey (CHE-PING) Su
 
VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...
VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...
VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...
jealousviolet
 
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
87tomato
 
Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...
Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...
Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...
3610stuck
 
Top Chinese Government-backed APT Groups
Top Chinese Government-backed APT GroupsTop Chinese Government-backed APT Groups
Top Chinese Government-backed APT Groups
SOCRadar
 
welcome to presentation on Google Apps
welcome to   presentation on Google Appswelcome to   presentation on Google Apps
welcome to presentation on Google Apps
AsifKarimJim
 
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
revolutionary575
 
Artificial intelligence in customer services or chatbots
Artificial intelligence  in customer services or chatbotsArtificial intelligence  in customer services or chatbots
Artificial intelligence in customer services or chatbots
kayash1656
 
TEQnation 2024: Sustainable Software: May the Green Code Be with You
TEQnation 2024: Sustainable Software: May the Green Code Be with YouTEQnation 2024: Sustainable Software: May the Green Code Be with You
TEQnation 2024: Sustainable Software: May the Green Code Be with You
marcofolio
 
Introduction to Cloud computing for Internet of Things
Introduction to Cloud computing for Internet of ThingsIntroduction to Cloud computing for Internet of Things
Introduction to Cloud computing for Internet of Things
NachuSubramanian1
 

Recently uploaded (20)

Girls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in City
Girls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in CityGirls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in City
Girls Call Mysore 000XX00000 Provide Best And Top Girl Service And No1 in City
 
Odoo E-commerce website development guides
Odoo E-commerce website development guidesOdoo E-commerce website development guides
Odoo E-commerce website development guides
 
HIRE A HACKER FOR CHEATING HUSBAND/WIFE)
HIRE A HACKER FOR CHEATING HUSBAND/WIFE)HIRE A HACKER FOR CHEATING HUSBAND/WIFE)
HIRE A HACKER FOR CHEATING HUSBAND/WIFE)
 
Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...
Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...
Agra Girls Call Agra 0X0000000X Unlimited Short Providing Girls Service Avail...
 
Hotel Management Software Development Company
Hotel Management Software Development CompanyHotel Management Software Development Company
Hotel Management Software Development Company
 
How To Fill Timesheet in TaskSprint: Quick Guide 2024
How To Fill Timesheet in TaskSprint: Quick Guide 2024How To Fill Timesheet in TaskSprint: Quick Guide 2024
How To Fill Timesheet in TaskSprint: Quick Guide 2024
 
Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …Prada Group Reports Strong Growth in First Quarter …
Prada Group Reports Strong Growth in First Quarter …
 
Google ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learningGoogle ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learning
 
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
 
React Native vs Flutter - SSTech System
React Native vs Flutter  - SSTech SystemReact Native vs Flutter  - SSTech System
React Native vs Flutter - SSTech System
 
當測試開始左移
當測試開始左移當測試開始左移
當測試開始左移
 
VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...
VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...
VVIP Girls Call Mumbai 9910780858 Provide Best And Top Girl Service And No1 i...
 
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
 
Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...
Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...
Mumbai Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service A...
 
Top Chinese Government-backed APT Groups
Top Chinese Government-backed APT GroupsTop Chinese Government-backed APT Groups
Top Chinese Government-backed APT Groups
 
welcome to presentation on Google Apps
welcome to   presentation on Google Appswelcome to   presentation on Google Apps
welcome to presentation on Google Apps
 
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
 
Artificial intelligence in customer services or chatbots
Artificial intelligence  in customer services or chatbotsArtificial intelligence  in customer services or chatbots
Artificial intelligence in customer services or chatbots
 
TEQnation 2024: Sustainable Software: May the Green Code Be with You
TEQnation 2024: Sustainable Software: May the Green Code Be with YouTEQnation 2024: Sustainable Software: May the Green Code Be with You
TEQnation 2024: Sustainable Software: May the Green Code Be with You
 
Introduction to Cloud computing for Internet of Things
Introduction to Cloud computing for Internet of ThingsIntroduction to Cloud computing for Internet of Things
Introduction to Cloud computing for Internet of Things
 

Continuous Behavior - BDD in Continuous Delivery (CoDers Who Test, Gothenburg, 15/5/2018)

  • 1. Continuous Behavior BDD in Continuous Delivery CoDers Who Test 15th May 2018 Gáspár Nagy coach • trainer • bdd addict • creator of specflow “The BDD Books: Discovery” • http://bddbooks.com @gasparnagy • gaspar@specsolutions.eu
  • 3. Copyright © Gaspar NagyCopyright © Gaspar Nagy bdd addict given.when.then CAUTION! on the stage Gáspár Nagy coach, trainer and bdd addict creator of SpecFlow gaspar@specsolutions.eu https://specsolutions.eu @gasparnagy
  • 4. Copyright © Gaspar NagyCopyright © Gaspar Nagy What makes you nervous on the day of the release?
  • 6. A long time ago* in a galaxy far, far away**… * 1995 ** Veszprém, Hungary
  • 8. Copyright © Gaspar NagyCopyright © Gaspar Nagy My dream-projects in 1995 • Working software that was in use • Exciting technical solutions • Continuous learning • And no conflicts in the team… …because I was alone
  • 9. Copyright © Gaspar NagyCopyright © Gaspar Nagy My first “real” project…
  • 10. Copyright © Gaspar NagyCopyright © Gaspar Nagy Practicing team work
  • 11. Copyright © Gaspar NagyCopyright © Gaspar Nagy Practicing team work And by a modem for “A”
  • 12. Copyright © Gaspar NagyCopyright © Gaspar Nagy Integration is more than merging… changed foo.cpp changed bar.cpp ? void ProcessOrder() { … + account->Withdraw(sum); … } void FinalizeOrder() { … + account->Withdraw(sum); … }
  • 13. Copyright © Gaspar NagyCopyright © Gaspar Nagy What is integration, then? Ensuring that the improvements developed independently still form a working unit Resolving file- level conflicts Can compile, can build Can be deployed There is no regression [Enter your specific step here]
  • 14. Copyright © Gaspar NagyCopyright © Gaspar Nagy Proper integration is difficult…
  • 15. Copyright © Gaspar NagyCopyright © Gaspar Nagy Frequency reduces difficulty (Fowler) • „if it hurts, do it more often”
  • 16. Copyright © Gaspar NagyCopyright © Gaspar Nagy Continuous Integration, CI Ensures that the improvements developed independently still form a working unit • Resolving file-level conflicts • Compilation, build • Unit tests • ...
  • 17. Copyright © Gaspar NagyCopyright © Gaspar Nagy Continuous integration revealed the next problems… • Manual regression testing does not scale… • Manual deployments are error-prone…
  • 18. Copyright © Gaspar NagyCopyright © Gaspar Nagy Continuous Delivery, CD Ensures that the application is always in a potentially deployable state (whether we deploy is a manual decision) • CI + • Deployable • Automated regression tests (Acceptance Tests) • ...
  • 19. Copyright © Gaspar NagyCopyright © Gaspar Nagy CD vs. CD Continuous Delivery vs. Continuous Deployment
  • 20. Copyright © Gaspar NagyCopyright © Gaspar Nagy Continuous Delivery, Continuous Deployment
  • 21. Copyright © Gaspar NagyCopyright © Gaspar Nagy “Continues delivery can be achieved by anyone, Continues deployment is only for some specific products…” /some people/
  • 22. Copyright © Gaspar NagyCopyright © Gaspar Nagy Continuous Deployment, CD Ensures that the application is always actual • CD + • Fully* automated verification • Automated non-functional tests • Appropriate context (eg. SaaS) • ... • ??? „live”
  • 23. Copyright © Gaspar NagyCopyright © Gaspar Nagy Continuous Deployment is the key to understand the “CD” mentality… …so let’s try!
  • 24. Copyright © Gaspar NagyCopyright © Gaspar Nagy What are your fears? • I am afraid of pushing the “release” button! • The feedback I get from my tests are not useful!
  • 25. Copyright © Gaspar NagyCopyright © Gaspar Nagy More testing and more automation! Source: World Quality Report 2015/16 increased by 35% increased by 60% 0% 5% 10% 15% 20% 25% 30% 35% 40% 45% 50% Amount of IT budget allocated to QA Ratio of test case automation 2014 2015
  • 26. Small tests = small problems; Big tests = big problems • They are SLOOOOOOW! • They are BRITTLE! • They need awful lot of MAINTENANCE! • They FAIL!!!
  • 27. Copyright © Gaspar NagyCopyright © Gaspar Nagy Our typical automated tests are not good enough for CD…
  • 28. Copyright © Gaspar NagyCopyright © Gaspar Nagy What’s wrong with our tests?
  • 29. Episode #1 PO: We have far too many prod issues. We have to improve our CD pipeline… Write more tests! Team: How much more?
  • 30. Episode #2 PO: Are your tests balanced according to the test automation pyramid? Team: … not fully…, more like an ice-cream cone PO: Then write more unit tests!
  • 31. Episode #3 PO: You should increase your test coverage! Team: You mean line coverage? How much? PO: Well… what is exactly a code line doing?
  • 32. Episode #4 PO: You should cover the risks better! Team: How do we know if we have covered them?
  • 33. Copyright © Gaspar NagyCopyright © Gaspar Nagy PO controlling testing activities… Problem Domain Solution Domain Lightbulb by Unknown Author is licensed under CC BY-SA PO REQ APP TESTS
  • 34. Copyright © Gaspar NagyCopyright © Gaspar Nagy You cannot control something that is outside of your control…
  • 35. Copyright © Gaspar NagyCopyright © Gaspar Nagy Tests should be part of shared ownership… Problem Domain Solution Domain Lightbulb by Unknown Author is licensed under CC BY-SA REQ APP TESTS
  • 36. Copyright © Gaspar NagyCopyright © Gaspar Nagy How could the entire team own the tests?
  • 37. Copyright © Gaspar NagyCopyright © Gaspar Nagy Tests should be part of shared ownership… Problem Domain Solution Domain Lightbulb by Unknown Author is licensed under CC BY-SA The old PIN should be correct public void VerifyOldPin(string enteredOldPin) { var db = new CardRespoitory(); var oldPin = db.LoadOldPin(CurrentCard); if (oldPin != enteredOldPin) { throw new InvalidPinException(); } } Implements [TestMethod] public void ShuldFailWhenOldPinIncorrect() { var cardStoreMock = new CardStoreMock(); cardStoreMock.SetCard("1234678", "1234"); var sut = new CardService(); var result = sut.ChangePin("1234678", "1111", "1212", "1212"); Assert.IsFalse(result); }
  • 38. Copyright © Gaspar NagyCopyright © Gaspar Nagy Specification by example Problem Domain Solution Domain Lightbulb by Unknown Author is licensed under CC BY-SA The old PIN should be correct public void VerifyOldPin(string enteredOldPin) { var db = new CardRespoitory(); var oldPin = db.LoadOldPin(CurrentCard); if (oldPin != enteredOldPin) { throw new InvalidPinException(); } } Implements [TestMethod] public void ShuldFailWhenOldPinIncorrect() { var cardStoreMock = new CardStoreMock(); cardStoreMock.SetCard("1234678", "1234"); var sut = new CardService(); var result = sut.ChangePin("1234678", "1111", "1212", "1212"); Assert.IsFalse(result); } Old PIN is incorrect • PIN is 1234 • Enter old PIN: 1111 • Change PIN ⇒ PIN change rejected Illustrates Automates
  • 39. Copyright © Gaspar NagyCopyright © Gaspar Nagy Codified tests are hard to maintain • What was the example? • Why were these numbers used? • What did we want to verify? [TestMethod] public void ShuldFailWhenOldPinIncorrect() { var cardStoreMock = new CardStoreMock(); cardStoreMock.SetCard("1234678", "1234"); var sut = new CardService(); var result = sut.ChangePin("1234678", "1111", "1212", "1212"); Assert.IsFalse(result); }
  • 40. Copyright © Gaspar NagyCopyright © Gaspar Nagy BDD is here to help?
  • 41. Copyright © Gaspar NagyCopyright © Gaspar Nagy Formulated BDD scenarios Problem Domain Solution Domain The old PIN should be correct public void VerifyOldPin(string enteredOldPin) { var db = new CardRespoitory(); var oldPin = db.LoadOldPin(CurrentCard); if (oldPin != enteredOldPin) { throw new InvalidPinException(); } } Implements Old PIN is incorrect • PIN is 1234 • Enter old PIN: 1111 • Change PIN ⇒ PIN change rejected Illustrates Scenario: Old PIN is incorrect Given my old pin is 1234 And I enter 1111 as old PIN When I try to change my PIN Then the PIN change should be rejected [Then] public void I_enter_PIN_as_old_pin(string pin) { changePinContext.SetOldPin(pin); } [When] public void I_enter_PIN_as_old_pin(string pin) { changePinContext.SetOldPin(pin); } [Given] public void I_enter_PIN_as_old_pin(string pin) { changePinContext.SetOldPin(pin); }
  • 42. Copyright © Gaspar NagyCopyright © Gaspar Nagy Behavior Driven Development Problem Domain Solution Domain Lightbulb by Unknown Author is licensed under CC BY-SA REQ APP Given When Then SPECS Validates Verifies
  • 43. Copyright © Gaspar NagyCopyright © Gaspar Nagy Behavior Driven Development is about understanding & validating business requirements through illustrative examples
  • 44. Copyright © Gaspar NagyCopyright © Gaspar Nagy BDD is not about tests!
  • 45. Copyright © Gaspar NagyCopyright © Gaspar Nagy Functional quality is not only about whether IT WORKS as expected… but also about whether the EXPECTATIONS ARE GOOD and DOCUMENTED… Functional quality
  • 46. Episode in a later season… PO: We have got a strange prod issue. Could we look into that? Team: Sure. Let’s have a look at the related BDD scenarios… PO: I see. I think there is an important case we did not detail enough…
  • 47. Copyright © Gaspar NagyCopyright © Gaspar Nagy Happy ending
  • 48. Copyright © Gaspar NagyCopyright © Gaspar Nagy Finally I’ve got a dream-project again • It was a complex service used by hundreds of apps and through them millions of users all over the world • Processed several thousands of requests per second • Was critical in the client’s service chain • We rolled it out without any severe issues… • And we knew that there will be no problems… • Because we had shared control over the specs (BDD scenarios) • And this gave us confidence to push the release button
  • 49. Copyright © Gaspar NagyCopyright © Gaspar Nagy Continuous deployment is about CONFIDENCE …and you need to keep the link to the problem domain to gain that
  • 50. Why was my first project working? • Short cycles • Instant release • Close to “business” but also close to users
  • 51. Copyright © Gaspar NagyCopyright © Gaspar Nagy Think about YOUR tests… Are they also linking the solution with the problem?
  • 53. Thank you! Gáspár Nagy coach • trainer • bdd addict • creator of specflow “The BDD Books: Discovery” • http://bddbooks.com @gasparnagy • gaspar@specsolutions.eu
  • 54. Copyright © Gaspar NagyCopyright © Gaspar Nagy