SlideShare una empresa de Scribd logo
1 de 73
http://blog.drorhelper.com
A history lesson Methodologies
Books! Books!
Books!
Tools overview
little a few flaws
lot many more flaws
feature works
customer's requirements
1991 1994 1997 2000 2002
Taligent
framework
NUnit 2.0Kent Beck
writes first
version of
SUnit test
framework*
Kent Beck &
Erich Gamma
create JUnit
During a flight
to OOPSLA
Michael
Features
ports JUnit to
C++ (CppUnit)
Test Suite
Fixture
Test Case
Test Case
Test Case
Test Case
Test Case
Fixture
Test Case
Test Case
Fixture
Test Case
Test Case
Test Case
public class BeforeAndAfter {
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void test1() {
}
@Test
public void test2() {
}
}
method
specific functionality,
clear pass/fail
runs in isolation
feedback
stupid
regression
without fear
documentation
Red
Green
Refactor
is not
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
}
public class ArabicToRoman {
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
public class ArabicToRoman {
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
public class ArabicToRoman {
public String convert(int num) {
return null;
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
public class ArabicToRoman {
public String convert(int num) {
return null;
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
public class ArabicToRoman {
public String convert(int num) {
return “I”;
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
public class ArabicToRoman {
public String convert(int num) {
return “I”;
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
@Test
public void Pass2_ReturnII() {
cut = new ArabicToRoman();
String result = cut.convert(2);
assertEquals("II", result);
}
public class ArabicToRoman {
public String convert(int num) {
return “I”;
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
@Test
public void Pass2_ReturnII() {
cut = new ArabicToRoman();
String result = cut.convert(2);
assertEquals("II", result);
}
public class ArabicToRoman {
public String convert(int num) {
return “I”;
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
@Test
public void Pass2_ReturnII() {
cut = new ArabicToRoman();
String result = cut.convert(2);
assertEquals("II", result);
}
public class ArabicToRoman {
public String convert(int num) {
if(i == 2)
return "II";
return "I";
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
@Test
public void Pass2_ReturnII() {
cut = new ArabicToRoman();
String result = cut.convert(2);
assertEquals("II", result);
}
public class ArabicToRoman {
public String convert(int num) {
if(i == 2)
return "II";
return "I";
}
}
@Test
public void Pass1_ReturnI() {
cut = new ArabicToRoman();
String result = cut.convert(1);
assertEquals("I", result);
}
@Test
public void Pass2_ReturnII() {
cut = new ArabicToRoman();
String result = cut.convert(2);
assertEquals("II", result);
}
public class ArabicToRoman {
public String convert(int num) {
result = new StringBuilder();
for(int i = 0 ; i < num ; i++)
{
result.append("I");
}
return result.toString();
}
}
S.Else Server
Call
CommClient Phone
RingMessage
OnCallRequested
AmazingUIAmazing UI
S Calling U
Accept Call
ConnectToServer
ConnectMessage
Server Comm Client UITestFake Comm
“
”
implementing
what you think the users want
1996 2002 2002 2003
Automated tests
are part of Extreme
Programming.
Ward Cunningham
publishes Fit
Bob Martin
combines Fit with
Wikis tocreate
Fitnesse
Kent Beck briefly
mentions ATDD in
“TDD: By Example”
but dismisses it as
impractical
user story
development team implementation phase.
Unit tests Acceptance tests
Fast Slow
No side effects Side effects
Simple to run Dependent on environment
Test single “unit of work” Test single scenario/feature
Written by developers Written by customers
Verify that code works Overall system works as required
Test must pass before check-in Test may only pass when feature is
done
Fake other units Fake other systems
numerator Denominator quotient?
10 2 5.0
12.6 3 4.2
100 4 33
org/FitNesse.FullReferenceGuide.UserGuide.WritingAcceptanceTests.FixtureCode
public class Division {
private double numerator,
denominator;
public void setNumerator(double
numerator) {
this.numerator = numerator;
}
public void setDenominator(double
denominator) {
this.denominator = denominator;
}
public double quotient() {
return numerator/denominator;
}
}
Red
Green
Refactor
Red
Green
Refactor Red
Green
RefactorRed
Green
Refactor
Red
Green
Refactor Red
Green
Refactor
Red
Green
Refactor
Discuss
DistillDevelop
Demo
ed.com/wp-content/uploads/2011/04/atddexample.pdf
Story
item
Red
Green
Refactor
TDD
“
”
Specifications are supposed to be general
Examples only highlight a few points
http://martinfowler.com/bliki/SpecificationByExample.html
/drawings/d/1cbfKq-KazcbMVCnRfih6zMSDBdtf90KviV7l2oxGyWM/edit?hl=en
Business goal/desired effect
Scope
Key Examples
Specification with Examples
Executable Specification
Living Documentation
Derive the scope from goals
Specify collaboratively
Refine the specification
Validate frequently
Automate literally
Sensors PLC ModelClient
Business
logic
Raw data
Converted
data
command
less of a wax-on, wax-off process of
gradual mastery than a series of blind alleys…
presentTDD in a way
that gets straight to the good stuff and avoids all the
pitfalls.
public class CustomerLookupTest extendsTestCase {
testFindsCustomerById() {
}
testFailsForDuplicateCustomers() {
}
}
× Test123
× CustomerTest
× PerchaseOrderTestNew
× MoveBatteryVanilla
 CalculateTax_InvalidYear_LogErrorToFile
 OrdersShouldBeCreated
 OrdersWithNoProductsShouldFail
“
”
comprehensively
describe the behaviour of your system
“Behaviour” is a more useful word than “test”
Steps
Scenarios
Story
In Order to…
As a…
I want to…
Scenario 1
Given When Then
Scenario 2
Given When Then
public class TraderSteps{
private TradingService service;
private Stock stock;
@Given("a stock and a threshold of $threshold")
public void aStock(double threshold) {
stock = service.newStock("STK", threshold);
}
@When("the stock is traded at price $price")
public void theStockIsTraded(double price){
stock.tradeAt(price);
}
@Then("the alert status is $status")
public void theAlertStatusIs($status){
assertThat(stock.getStatus().Name(), equalTo(status));
}
}
Scenario: A trader is alerted of status
Given a stock and a threshold of 15.0
When stock is traded at 5.0
Then the alert status should be off
Feature: Addition
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
Scenario: Add two numbers
Given I have entered 50 into the calculator
And I have entered 70 into the calculator
When I press add
Then the result should be 120 on the screen
From: https://cukes.info/
describe Stack do
it "should return a blank instance" do
Stack.new.should == {}
end
it "element is added to the stack on top of the stack" do
stack = Stack.new
stack.push 'a value'
stack.pop.should == 'a value'
end
end
Stack
should return a blank instance
element is added to the stack on top of the stack
[Test]
public void OutOfStorageWhileCreatingFileAndExactFilesToMakeRoom()
{
var fakeSystemInfo = A.Fake<ISystemInfo>();
A.CallTo(() => fakeSystemInfo.GetFreeDiskSpaceInBytes()).Returns(0);
var logfiles = new[]
{
new LogFile
{
Name = "file-1.log",
Size = 50000
},
new LogFile
{
Name = "file-2.log",
Size = 50000
}
};
var fakeLogFolder = A.Fake<ISharedStorageFolder>();
A.CallTo(() => fakeLogFolder.GetFiles()).Returns(logfiles);
var logFileWriter = new LogFileWriter(fakeSystemInfo, fakeLogFolder);
logFileWriter.Write("some message");
A.CallTo(() => fakeLogFolder.DeleteFile("file-1.log")).MustHaveHappened();
A.CallTo(() => fakeLogFolder.DeleteFile("file-2.log")).MustHaveHappened();
}
SCENARIO("First roll is strike")
{
GIVEN("Bowled strike on first turn")
{
Game game;
game.Roll(10);
WHEN("Next roll is spare then roll five")
{
game.Roll(3);
game.Roll(7);
game.Roll(5);
RollSeveral(game, 15, 0);
THEN("Total score is 40")
{
REQUIRE(game.Score() == 40);
}
}
WHEN("Next two rolls are strike then gutter balls")
{
game.Roll(10);
game.Roll(10);
RollSeveral(game, 16, 0);
THEN("Total score is 60")
{
REQUIRE(game.Score() == 60);
}
}
}
}
TDD
Classic
London
ATDD
SbE
BDD
Stories
Specification
Choose 2
“
”http://lizkeogh.com/2011/03/04/step-away-from-the-tools/
http://geek-and-poke.com/geekandpoke/2013/6/6/dont-ask-your-boss
“
”http://blog.mattwynne.net/2012/11/20/tdd-vs-bdd/
They're just both useful to have in your back
pocket as you go around trying to write decent
software to solve useful problems.
But I bet
that's what Kent Beck would say if you asked him
whatTDD was all about.
Dan North, DefiningTDD,
https://groups.google.com/forum/#!msg/behaviordrivendevelopment/OQnb3APpUJk/RklRiyEKde4J
Thank you
drorh@codevalue.net
http://blog.drorhelper.com

Más contenido relacionado

La actualidad más candente

Concurrency Concepts in Java
Concurrency Concepts in JavaConcurrency Concepts in Java
Concurrency Concepts in JavaDoug Hawkins
 
關於測試,我說的其實是......
關於測試,我說的其實是......關於測試,我說的其實是......
關於測試,我說的其實是......hugo lu
 
(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and backDavid Rodenas
 
Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)Ray Buse
 
Example First / A Sane Test-Driven Approach to Programming
Example First / A Sane Test-Driven Approach to ProgrammingExample First / A Sane Test-Driven Approach to Programming
Example First / A Sane Test-Driven Approach to ProgrammingJonathan Acker
 
Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*Intel® Software
 
Swiss army knife Spring
Swiss army knife SpringSwiss army knife Spring
Swiss army knife SpringMario Fusco
 
Verilog Lecture4 2014
Verilog Lecture4 2014Verilog Lecture4 2014
Verilog Lecture4 2014Béo Tú
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydneyjulien.ponge
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesAndrey Karpov
 
How Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzerHow Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzerAndrey Karpov
 

La actualidad más candente (20)

Symbolic Execution And KLEE
Symbolic Execution And KLEESymbolic Execution And KLEE
Symbolic Execution And KLEE
 
Introduzione al TDD
Introduzione al TDDIntroduzione al TDD
Introduzione al TDD
 
Concurrency Concepts in Java
Concurrency Concepts in JavaConcurrency Concepts in Java
Concurrency Concepts in Java
 
關於測試,我說的其實是......
關於測試,我說的其實是......關於測試,我說的其實是......
關於測試,我說的其實是......
 
(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back
 
TDD Hands-on
TDD Hands-onTDD Hands-on
TDD Hands-on
 
Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)
 
Example First / A Sane Test-Driven Approach to Programming
Example First / A Sane Test-Driven Approach to ProgrammingExample First / A Sane Test-Driven Approach to Programming
Example First / A Sane Test-Driven Approach to Programming
 
Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*
 
Golang dot-testing-lite
Golang dot-testing-liteGolang dot-testing-lite
Golang dot-testing-lite
 
Swiss army knife Spring
Swiss army knife SpringSwiss army knife Spring
Swiss army knife Spring
 
GMock framework
GMock frameworkGMock framework
GMock framework
 
Agile Android
Agile AndroidAgile Android
Agile Android
 
Verilog Lecture4 2014
Verilog Lecture4 2014Verilog Lecture4 2014
Verilog Lecture4 2014
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
 
Migrating to JUnit 5
Migrating to JUnit 5Migrating to JUnit 5
Migrating to JUnit 5
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error Examples
 
Agile mobile
Agile mobileAgile mobile
Agile mobile
 
How Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzerHow Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzer
 

Similar a Navigating the xDD Alphabet Soup

33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good TestsTomek Kaczanowski
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good TestsTomek Kaczanowski
 
Chapter i(introduction to java)
Chapter i(introduction to java)Chapter i(introduction to java)
Chapter i(introduction to java)Chhom Karath
 
Android testing
Android testingAndroid testing
Android testingSean Tsai
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsPROIDEA
 
How to write clean tests
How to write clean testsHow to write clean tests
How to write clean testsDanylenko Max
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to javaciklum_ods
 
PQTimer.java A simple driver program to run timing t.docx
  PQTimer.java     A simple driver program to run timing t.docx  PQTimer.java     A simple driver program to run timing t.docx
PQTimer.java A simple driver program to run timing t.docxjoyjonna282
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy codeShriKant Vashishtha
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitMichelangelo van Dam
 
Unit testing patterns for concurrent code
Unit testing patterns for concurrent codeUnit testing patterns for concurrent code
Unit testing patterns for concurrent codeDror Helper
 
Cool JVM Tools to Help You Test
Cool JVM Tools to Help You TestCool JVM Tools to Help You Test
Cool JVM Tools to Help You TestSchalk Cronjé
 
TDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving TestingTDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving TestingDavid Rodenas
 
Testing in android
Testing in androidTesting in android
Testing in androidjtrindade
 

Similar a Navigating the xDD Alphabet Soup (20)

33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests33rd Degree 2013, Bad Tests, Good Tests
33rd Degree 2013, Bad Tests, Good Tests
 
2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests2012 JDays Bad Tests Good Tests
2012 JDays Bad Tests Good Tests
 
Android TDD
Android TDDAndroid TDD
Android TDD
 
C# labprograms
C# labprogramsC# labprograms
C# labprograms
 
Chapter i(introduction to java)
Chapter i(introduction to java)Chapter i(introduction to java)
Chapter i(introduction to java)
 
Android testing
Android testingAndroid testing
Android testing
 
Thread
ThreadThread
Thread
 
Unit testing - A&BP CC
Unit testing - A&BP CCUnit testing - A&BP CC
Unit testing - A&BP CC
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
 
PHPUnit testing to Zend_Test
PHPUnit testing to Zend_TestPHPUnit testing to Zend_Test
PHPUnit testing to Zend_Test
 
Getting Started With Testing
Getting Started With TestingGetting Started With Testing
Getting Started With Testing
 
How to write clean tests
How to write clean testsHow to write clean tests
How to write clean tests
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to java
 
PQTimer.java A simple driver program to run timing t.docx
  PQTimer.java     A simple driver program to run timing t.docx  PQTimer.java     A simple driver program to run timing t.docx
PQTimer.java A simple driver program to run timing t.docx
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy code
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnit
 
Unit testing patterns for concurrent code
Unit testing patterns for concurrent codeUnit testing patterns for concurrent code
Unit testing patterns for concurrent code
 
Cool JVM Tools to Help You Test
Cool JVM Tools to Help You TestCool JVM Tools to Help You Test
Cool JVM Tools to Help You Test
 
TDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving TestingTDD CrashCourse Part4: Improving Testing
TDD CrashCourse Part4: Improving Testing
 
Testing in android
Testing in androidTesting in android
Testing in android
 

Más de Dror Helper

Unit testing patterns for concurrent code
Unit testing patterns for concurrent codeUnit testing patterns for concurrent code
Unit testing patterns for concurrent codeDror Helper
 
The secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you aboutThe secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you aboutDror Helper
 
Debugging with visual studio beyond 'F5'
Debugging with visual studio beyond 'F5'Debugging with visual studio beyond 'F5'
Debugging with visual studio beyond 'F5'Dror Helper
 
From clever code to better code
From clever code to better codeFrom clever code to better code
From clever code to better codeDror Helper
 
From clever code to better code
From clever code to better codeFrom clever code to better code
From clever code to better codeDror Helper
 
A software developer guide to working with aws
A software developer guide to working with awsA software developer guide to working with aws
A software developer guide to working with awsDror Helper
 
The secret unit testing tools no one has ever told you about
The secret unit testing tools no one has ever told you aboutThe secret unit testing tools no one has ever told you about
The secret unit testing tools no one has ever told you aboutDror Helper
 
The role of the architect in agile
The role of the architect in agileThe role of the architect in agile
The role of the architect in agileDror Helper
 
Harnessing the power of aws using dot net core
Harnessing the power of aws using dot net coreHarnessing the power of aws using dot net core
Harnessing the power of aws using dot net coreDror Helper
 
Developing multi-platform microservices using .NET core
 Developing multi-platform microservices using .NET core Developing multi-platform microservices using .NET core
Developing multi-platform microservices using .NET coreDror Helper
 
Harnessing the power of aws using dot net
Harnessing the power of aws using dot netHarnessing the power of aws using dot net
Harnessing the power of aws using dot netDror Helper
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutDror Helper
 
C++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the uglyC++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the uglyDror Helper
 
Working with c++ legacy code
Working with c++ legacy codeWorking with c++ legacy code
Working with c++ legacy codeDror Helper
 
Visual Studio tricks every dot net developer should know
Visual Studio tricks every dot net developer should knowVisual Studio tricks every dot net developer should know
Visual Studio tricks every dot net developer should knowDror Helper
 
Secret unit testing tools
Secret unit testing toolsSecret unit testing tools
Secret unit testing toolsDror Helper
 
Electronics 101 for software developers
Electronics 101 for software developersElectronics 101 for software developers
Electronics 101 for software developersDror Helper
 
Building unit tests correctly
Building unit tests correctlyBuilding unit tests correctly
Building unit tests correctlyDror Helper
 
Who’s afraid of WinDbg
Who’s afraid of WinDbgWho’s afraid of WinDbg
Who’s afraid of WinDbgDror Helper
 
Designing with tests
Designing with testsDesigning with tests
Designing with testsDror Helper
 

Más de Dror Helper (20)

Unit testing patterns for concurrent code
Unit testing patterns for concurrent codeUnit testing patterns for concurrent code
Unit testing patterns for concurrent code
 
The secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you aboutThe secret unit testing tools no one ever told you about
The secret unit testing tools no one ever told you about
 
Debugging with visual studio beyond 'F5'
Debugging with visual studio beyond 'F5'Debugging with visual studio beyond 'F5'
Debugging with visual studio beyond 'F5'
 
From clever code to better code
From clever code to better codeFrom clever code to better code
From clever code to better code
 
From clever code to better code
From clever code to better codeFrom clever code to better code
From clever code to better code
 
A software developer guide to working with aws
A software developer guide to working with awsA software developer guide to working with aws
A software developer guide to working with aws
 
The secret unit testing tools no one has ever told you about
The secret unit testing tools no one has ever told you aboutThe secret unit testing tools no one has ever told you about
The secret unit testing tools no one has ever told you about
 
The role of the architect in agile
The role of the architect in agileThe role of the architect in agile
The role of the architect in agile
 
Harnessing the power of aws using dot net core
Harnessing the power of aws using dot net coreHarnessing the power of aws using dot net core
Harnessing the power of aws using dot net core
 
Developing multi-platform microservices using .NET core
 Developing multi-platform microservices using .NET core Developing multi-platform microservices using .NET core
Developing multi-platform microservices using .NET core
 
Harnessing the power of aws using dot net
Harnessing the power of aws using dot netHarnessing the power of aws using dot net
Harnessing the power of aws using dot net
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you about
 
C++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the uglyC++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the ugly
 
Working with c++ legacy code
Working with c++ legacy codeWorking with c++ legacy code
Working with c++ legacy code
 
Visual Studio tricks every dot net developer should know
Visual Studio tricks every dot net developer should knowVisual Studio tricks every dot net developer should know
Visual Studio tricks every dot net developer should know
 
Secret unit testing tools
Secret unit testing toolsSecret unit testing tools
Secret unit testing tools
 
Electronics 101 for software developers
Electronics 101 for software developersElectronics 101 for software developers
Electronics 101 for software developers
 
Building unit tests correctly
Building unit tests correctlyBuilding unit tests correctly
Building unit tests correctly
 
Who’s afraid of WinDbg
Who’s afraid of WinDbgWho’s afraid of WinDbg
Who’s afraid of WinDbg
 
Designing with tests
Designing with testsDesigning with tests
Designing with tests
 

Último

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 

Último (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

Navigating the xDD Alphabet Soup

Notas del editor

  1. Setup Execution Validation Cleanup
  2. Never write a single line of code unless you have a failing automated test. Eliminate duplication.
  3. BDD is essentially Test Domain Driven Design
  4. Business readable + writable Similar to what ATDD had to offer  closer to developers
  5.  2005 as an experiment by Steven Baker, with early contributions from Dave Astels and Aslak Hellesøy.  RSpec 1.0 was released in May of 2007 Rspec 3 was released in June 2014
  6. Need actual example
  7. So what are those good habits? Specifically, I think those good habits are: Working outside-in, starting from a business or organisational goal Using examples to clarify requirements Developing and using a ubiquitous language