SlideShare a Scribd company logo
1 of 54
Download to read offline
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
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
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 AnalyticsQASymphony
 
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 ApronOptimizely
 
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 ScrumMike 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 DevOpsAndreas 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, LinearBDevOpsDays 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 DevelopmentQASymphony
 
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 WebinarQASymphony
 
Scrum in Hardware
Scrum in HardwareScrum in Hardware
Scrum in HardwareTEST Huddle
 
Atlassian user group in itiviti
Atlassian user group in itivitiAtlassian user group in itiviti
Atlassian user group in itivitiGonchik 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 ScrumEthan 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 MontveliskyQA or the Highway
 
Accelerating Your Test Execution Pipeline
Accelerating Your Test Execution PipelineAccelerating Your Test Execution Pipeline
Accelerating Your Test Execution PipelineSmartBear
 
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 AutomationAgile 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 DevOpsDynatrace
 
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 DevelopmentBlue Elephant Consulting
 
通往測試最高殿堂的旅程 - GTAC 2016
通往測試最高殿堂的旅程 - GTAC 2016通往測試最高殿堂的旅程 - GTAC 2016
通往測試最高殿堂的旅程 - GTAC 2016Chloe 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 Stealmozilla.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 07carsonsystems
 
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 TulaAndrey Karpov
 
BDD Scenarios in a Testing Strategy
BDD Scenarios in a Testing StrategyBDD Scenarios in a Testing Strategy
BDD Scenarios in a Testing StrategyGá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
 
Moving to tdd bdd
Moving to tdd bddMoving to tdd bdd
Moving to tdd bddKim 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_JoshJacobsonMecklerMedia
 
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
 
Continuous delivery is more than dev ops
Continuous delivery is more than dev opsContinuous delivery is more than dev ops
Continuous delivery is more than dev opsAgile Montréal
 

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
 
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...
 
Continuous delivery is more than dev ops
Continuous delivery is more than dev opsContinuous delivery is more than dev ops
Continuous delivery is more than dev ops
 

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 2023Gá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

Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 

Recently uploaded (20)

Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 

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
  • 2.
  • 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
  • 7.
  • 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