SlideShare a Scribd company logo
Domain Driven Testing:
Know What You’re Doing
Dmitry Vinnik
@DmitryVinnik dvinnik.com
What are our goals?
@DmitryVinnik dvinnik.com
Goals
Domain Driven Testing (DDT):
What, Why, How and When
DDT In Practice: Test Pyramid
Finding Right Technique For Your Team
@DmitryVinnik dvinnik.com
Where do we start?
@DmitryVinnik dvinnik.com
Let’s start with the Title
@DmitryVinnik dvinnik.com
Domain Driven Testing
Know What You’re Doing
@DmitryVinnik dvinnik.com
Domain Driven
@DmitryVinnik dvinnik.com
Domain Driven … What?
@DmitryVinnik dvinnik.com
Domain Driven Design
@DmitryVinnik dvinnik.com
What is Design?
@DmitryVinnik dvinnik.com
What is it good for?
Patterns
Modules
Models
@DmitryVinnik dvinnik.com
Is there a Problem?
@DmitryVinnik dvinnik.com
Yes, there is!
@DmitryVinnik dvinnik.com
Common Design Pitfalls
One Size
Fits All
Design
Stagnation
No Design
Evolution
Dogmatism
@DmitryVinnik dvinnik.com
How to Tackle?
@DmitryVinnik dvinnik.com
Domain Driven Design
@DmitryVinnik dvinnik.com
Common Design Pitfalls
One Size
Fits All
Design
Stagnation
No Design
Evolution
Dogmatism
@DmitryVinnik dvinnik.com
One Size
Fits All
Dogmatism
One Size
Fits All
Dogmatism
Design
Stagnation
No Design
Evolution
No Design
Evolution
Design
Stagnation
Domain Driven Design
One Size
Fits All
Context
Matters
Dogmatism
Design
Guidance
No Design
Evolution
Design
Evolution
Design
Stagnation
Design
Lifetime
Design
Guidance
Design
Evolution
Design
Lifetime
@DmitryVinnik dvinnik.com
Context Matters
Ubiquitous
Language
Domain
Segregation
Bound
Context
Bound
Context
Domain
Segregation
@DmitryVinnik dvinnik.com
Context Matters:
Ubiquitous Language
@DmitryVinnik dvinnik.com
Ubiquitous Language
Engineers Testers
Domain
Experts
@DmitryVinnik dvinnik.com
Conclusion?
@DmitryVinnik dvinnik.com
Communication is
Essential in DDD
@DmitryVinnik dvinnik.com
Context Matters
Ubiquitous
Language
Domain
Segregation
Bound
Context
Bound
Context
Domain
Segregation
@DmitryVinnik dvinnik.com
Ubiquitous
Language
Bound
Context
Context Matters:
Bound Context
Linguistic
Boundary
Logical
Boundary
Physical
Boundary@DmitryVinnik dvinnik.com
Context Matters
Ubiquitous
Language
Domain
Segregation
Bound
Context
Bound
Context
Domain
Segregation
@DmitryVinnik dvinnik.com
Ubiquitous
Language
Bound
Context
Bound
Context
Domain
Segregation
Back to Core DDD
@DmitryVinnik dvinnik.com
One Size
Fits All
Dogmatism
One Size
Fits All
Dogmatism
Design
Stagnation
No Design
Evolution
No Design
Evolution
Design
Stagnation
Domain Driven Design
One Size
Fits All
Context
Matters
Dogmatism
Design
Guidance
No Design
Evolution
Design
Evolution
Design
Stagnation
Design
Lifetime
Design
Guidance
Design
Evolution
Design
Lifetime
@DmitryVinnik dvinnik.com
Context
Matters
Design
Guidance
Design Guidance
Context
Mapping
Minimalism
Design by
Contract
Minimalism
Design by
Contract
@DmitryVinnik dvinnik.com
Context Map, Martin Fowler
Context Map Example
@DmitryVinnik dvinnik.com
Design Guidance:
Context Mapping
Documentation Communication
Current State
@DmitryVinnik dvinnik.com
Galactic Modeling
Language
Box Line
Label
@DmitryVinnik dvinnik.com
Context Map, Martin Fowler
Context Map Example
@DmitryVinnik dvinnik.com
Design Guidance
Context
Mapping
Minimalism
Design by
Contract
Context
Mapping
Minimalism
Design by
Contract
Context
Mapping
Context
Mapping
MinimalismMinimalism
Design by
Contract
@DmitryVinnik dvinnik.com
Design Guidance:
Design by Contract
@DmitryVinnik dvinnik.com
“Require No More,
Promise No Less”
Quote from Bertrand Meyer,
“Design by Contract”
@DmitryVinnik dvinnik.com
Design by Contract
@DmitryVinnik dvinnik.com
One Size
Fits All
Dogmatism
One Size
Fits All
Dogmatism
Design
Stagnation
No Design
Evolution
No Design
Evolution
Design
Stagnation
Domain Driven Design
One Size
Fits All
Context
Matters
Dogmatism
Design
Guidance
No Design
Evolution
Design
Evolution
Design
Stagnation
Design
Lifetime
Design
Guidance
Design
Evolution
Design
Lifetime
@DmitryVinnik dvinnik.com
Context
Matters
Design
Guidance
Design
Guidance
Design
Evolution
Design Evolution
Strategic
Decisions
Supple Design
Strategic
Decisions
@DmitryVinnik dvinnik.com
Design Evolution:
Supple Design
Declarative
Design
Domain Specific
Languages
Immutable
Operations
@DmitryVinnik dvinnik.com
Domain Specific
Languages
↑ Readability
Ubiquitous
Language
Tailored to
Domain
@DmitryVinnik dvinnik.com
Design Evolution
Strategic
Decisions
Supple Design
Strategic
Decisions
Supple Design
Strategic
Decisions
@DmitryVinnik dvinnik.com
Design Evolution:
Strategic Decisions
Team
Collaboration
Absorbing
Feedback
Experience
Diversity@DmitryVinnik dvinnik.com
One Size
Fits All
Dogmatism
One Size
Fits All
Dogmatism
Design
Stagnation
No Design
Evolution
No Design
Evolution
Design
Stagnation
Domain Driven Design
One Size
Fits All
Context
Matters
Dogmatism
Design
Guidance
No Design
Evolution
Design
Evolution
Design
Stagnation
Design
Lifetime
Design
Guidance
Design
Evolution
Design
Lifetime
@DmitryVinnik dvinnik.com
Context
Matters
Design
Guidance
Design
Guidance
Design
Evolution
Design
Evolution
Design
Lifetime
Design Lifetime:
Expiration Date
@DmitryVinnik dvinnik.com
10 years
Expiration Date
2003 2013
@DmitryVinnik dvinnik.com
One Size
Fits All
Dogmatism
One Size
Fits All
Dogmatism
Design
Stagnation
No Design
Evolution
No Design
Evolution
Design
Stagnation
Domain Driven Design
One Size
Fits All
Context
Matters
Dogmatism
Design
Guidance
No Design
Evolution
Design
Evolution
Design
Stagnation
Design
Lifetime
Design
Guidance
Design
Evolution
Design
Lifetime
@DmitryVinnik dvinnik.com
Context
Matters
Design
Guidance
Design
Guidance
Design
Evolution
Design
Evolution
Design
Lifetime
Design
Lifetime
Context
Matters
Design
Guidance
Design
Evolution
Design
Lifetime
Let’s Step Back
@DmitryVinnik dvinnik.com
Domain Driven Testing
Know What You’re Doing
@DmitryVinnik dvinnik.com
Domain Driven Testing
Know What You’re Doing
@DmitryVinnik dvinnik.com
Domain Driven Testing
Know What You’re Doing
@DmitryVinnik dvinnik.com
Domain Driven Testing
as Design Principle
@DmitryVinnik dvinnik.com
Looking back at DDD
@DmitryVinnik dvinnik.com
Domain Driven Design
Bound
Context
Context
Mapping
Ubiquitous
Language
@DmitryVinnik dvinnik.com
Domain Driven Testing
Bound
Context
Context
Mapping
Ubiquitous
Language
Context
Mapping
Bound
Context
Ubiquitous
Language
Context
Mapping
Test Plan
@DmitryVinnik dvinnik.com
Domain Driven Testing:
Context Mapping
@DmitryVinnik dvinnik.com
Domain Driven Testing:
Test Plan
@DmitryVinnik dvinnik.com
Context Map, Martin Fowler
Context Map Example
@DmitryVinnik dvinnik.com
Domain Driven Testing
Bound
Context
Context
Mapping
Ubiquitous
Language
Context
Mapping
Bound
Context
Ubiquitous
Language
Context
Mapping
Test PlanTest Plan
Bound
Context
Test
Structure
@DmitryVinnik dvinnik.com
Domain Driven Testing:
Bound Context
@DmitryVinnik dvinnik.com
Domain Driven Testing:
Test Structure
@DmitryVinnik dvinnik.com
Production Entities
Test Entities
@DmitryVinnik dvinnik.com
Domain Driven Testing
Bound
Context
Context
Mapping
Ubiquitous
Language
Context
Mapping
Bound
Context
Ubiquitous
Language
Context
Mapping
Test PlanTest Plan
Bound
Context
Test
Structure
Ubiquitous
Language
Test
Structure
Test Cases
@DmitryVinnik dvinnik.com
Domain Driven Testing:
Ubiquitous Language
@DmitryVinnik dvinnik.com
Domain Driven Testing:
Test Cases
@DmitryVinnik dvinnik.com
Enough Theory!
@DmitryVinnik dvinnik.com
Let’s get more Practice
@DmitryVinnik dvinnik.com
How do we usually test?
@DmitryVinnik dvinnik.com
Test Pyramid
↑ Fidelity
↓ Speed
↑ Cost
↓ Fidelity
↑ Speed
↓ Cost
@DmitryVinnik dvinnik.com
Let’s Put DDD Spin on It
@DmitryVinnik dvinnik.com
Test Pyramid
@DmitryVinnik dvinnik.com
↑ Fidelity
↓ Speed
↑ Cost
↓ Fidelity
↑ Speed
↓ Cost
DDD Test Pyramid
@DmitryVinnik dvinnik.com
Domain Enforcing
Unit Tests
Tests as
Auditor
Last Day
Style
Invariants
Approval Testing
@DmitryVinnik dvinnik.com
What is
Approval Testing?
@DmitryVinnik dvinnik.com
Approval Testing
↑ Fidelity
Requirements
Driven
Evolving
Validation
↑ Cost
@DmitryVinnik dvinnik.com
Back to Domain
Enforcing Unit Tests
@DmitryVinnik dvinnik.com
Invariants Approval
Testing
Property Based
Testing
Schema Based
Testing
QuickTheory
Schema Based
Testing
JSON Schema
Validator
JSON Schema
Validator
@DmitryVinnik dvinnik.com
QuickTheory
@DmitryVinnik dvinnik.com
DDD Test Pyramid
↓ Fidelity
↑ Speed
↓ Cost
@DmitryVinnik dvinnik.com
Component
Approval Testing
Text Based
Testing
Visual
Testing
Snapshot
Testing
TextTest
Snapshot
Testing
Snapshot
Testing
Visual
Testing
Jest
Visual
Testing
Applitools
TextTest Jest
BackstopJ
S@DmitryVinnik dvinnik.com
BackstopJS
DDD Test Pyramid
↑ Fidelity
↓ Speed
↑ Cost
↓ Fidelity
↑ Speed
↓ Cost
@DmitryVinnik dvinnik.com
End-to-End Task
Testing
@DmitryVinnik dvinnik.com
User Centric Testing
Interactions Tasks
Page Object
Model
Screenplay
Pattern
@DmitryVinnik dvinnik.com
Conclusion
@DmitryVinnik dvinnik.com
Focus on User Dimension
@DmitryVinnik dvinnik.com
User Dimensions
Web User Client Side
API User Server Side
Protractor
RestAssured
@DmitryVinnik dvinnik.com
Protractor with Cucumber
@DmitryVinnik dvinnik.com
DDD Test Pyramid
↑ Fidelity
↓ Speed
↑ Cost
↓ Fidelity
↑ Speed
↓ Cost
@DmitryVinnik dvinnik.com
How to find flaws in DDT?
@DmitryVinnik dvinnik.com
Experiment!
@DmitryVinnik dvinnik.com
Domain Breakers
Outsiders
Exploratory
Testing
Chaos
Testing
Fuzzing
Testing
@DmitryVinnik dvinnik.com
Bringing it all together
@DmitryVinnik dvinnik.com
There is a place for
Design in Testing!
@DmitryVinnik dvinnik.com
Place for
Domain Driven Design
@DmitryVinnik dvinnik.com
Call For Action
Evaluate Test
Architecture
Create
Context
Boundaries
Unify Test
Strategy
Experiment!
@DmitryVinnik dvinnik.com
Q/A
@DmitryVinnik dvinnik.com
About Speaker
Twitter: @DmitryVinnik
Blog: dvinnik.com
LinkedIn: in/dmitry-vinnik/
Email: dmitry@dvinnik.com

More Related Content

What's hot

Shaping and implementing a DesignOps function
Shaping and implementing a DesignOps functionShaping and implementing a DesignOps function
Shaping and implementing a DesignOps function
Matt Gottschalk
 
ATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven Development
Naresh Jain
 
Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...
Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...
Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...
UserZoom
 
Web accessibility workshop 1
Web accessibility workshop 1Web accessibility workshop 1
Web accessibility workshop 1
Vladimir Tomberg
 
Users' Story: UX Storyboarding
Users' Story: UX StoryboardingUsers' Story: UX Storyboarding
Users' Story: UX Storyboarding
Frank Garofalo
 
Discovery Phase [What is it and why is it important?]
Discovery Phase [What is it and why is it important?]Discovery Phase [What is it and why is it important?]
Discovery Phase [What is it and why is it important?]
Stfalcon
 
Design for solving the right problem
 Design for solving the right problem Design for solving the right problem
Design for solving the right problem
FITC
 
Web Accessibility for Web Developers
Web Accessibility for Web DevelopersWeb Accessibility for Web Developers
Web Accessibility for Web Developers
Alexander Loechel
 
Validation and hypothesis based product management by Abdallah Al-Khalidi
Validation and hypothesis based  product management by Abdallah Al-KhalidiValidation and hypothesis based  product management by Abdallah Al-Khalidi
Validation and hypothesis based product management by Abdallah Al-Khalidi
Abdallah Al-Khalidi
 
Dual Track Agile Or, How I learned to stop worrying and love the scrum
Dual Track Agile Or, How I learned to stop worrying and love the scrumDual Track Agile Or, How I learned to stop worrying and love the scrum
Dual Track Agile Or, How I learned to stop worrying and love the scrum
UXDXConf
 
Managing Product Development Chaos with Jira Software and Confluence
Managing Product Development Chaos with Jira Software and ConfluenceManaging Product Development Chaos with Jira Software and Confluence
Managing Product Development Chaos with Jira Software and Confluence
Atlassian
 
Introduction to Information Architecture
Introduction to Information ArchitectureIntroduction to Information Architecture
Introduction to Information Architecture
Abby Covert
 
How to Teach UX Design
How to Teach UX DesignHow to Teach UX Design
How to Teach UX Design
Christina Wodtke
 
Specification by Example
Specification by ExampleSpecification by Example
Specification by Example
Declan Whelan
 
How to Build a Product Roadmap by Walmart Senior Product Manager
How to Build a Product Roadmap by Walmart Senior Product ManagerHow to Build a Product Roadmap by Walmart Senior Product Manager
How to Build a Product Roadmap by Walmart Senior Product Manager
Product School
 
Shift left-testing
Shift left-testingShift left-testing
Shift left-testing
Alan Richardson
 
KCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an OpportunityKCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
Andreas Grabner
 
Org Topologies at Scrum Day Europe 2022, Amsterdam
Org Topologies at Scrum Day Europe 2022, AmsterdamOrg Topologies at Scrum Day Europe 2022, Amsterdam
Org Topologies at Scrum Day Europe 2022, Amsterdam
Alexey Krivitsky
 
Application Resilience Patterns
Application Resilience PatternsApplication Resilience Patterns
Application Resilience PatternsKiran Sama
 

What's hot (20)

Shaping and implementing a DesignOps function
Shaping and implementing a DesignOps functionShaping and implementing a DesignOps function
Shaping and implementing a DesignOps function
 
ATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven Development
 
Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...
Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...
Benchmarking Mini-series Part #2: Conducting Quick, Cost-Effective UX Benchma...
 
Web accessibility workshop 1
Web accessibility workshop 1Web accessibility workshop 1
Web accessibility workshop 1
 
Users' Story: UX Storyboarding
Users' Story: UX StoryboardingUsers' Story: UX Storyboarding
Users' Story: UX Storyboarding
 
Discovery Phase [What is it and why is it important?]
Discovery Phase [What is it and why is it important?]Discovery Phase [What is it and why is it important?]
Discovery Phase [What is it and why is it important?]
 
Design for solving the right problem
 Design for solving the right problem Design for solving the right problem
Design for solving the right problem
 
Web Accessibility for Web Developers
Web Accessibility for Web DevelopersWeb Accessibility for Web Developers
Web Accessibility for Web Developers
 
Validation and hypothesis based product management by Abdallah Al-Khalidi
Validation and hypothesis based  product management by Abdallah Al-KhalidiValidation and hypothesis based  product management by Abdallah Al-Khalidi
Validation and hypothesis based product management by Abdallah Al-Khalidi
 
Dual Track Agile Or, How I learned to stop worrying and love the scrum
Dual Track Agile Or, How I learned to stop worrying and love the scrumDual Track Agile Or, How I learned to stop worrying and love the scrum
Dual Track Agile Or, How I learned to stop worrying and love the scrum
 
Managing Product Development Chaos with Jira Software and Confluence
Managing Product Development Chaos with Jira Software and ConfluenceManaging Product Development Chaos with Jira Software and Confluence
Managing Product Development Chaos with Jira Software and Confluence
 
Introduction to Information Architecture
Introduction to Information ArchitectureIntroduction to Information Architecture
Introduction to Information Architecture
 
Scamper
ScamperScamper
Scamper
 
How to Teach UX Design
How to Teach UX DesignHow to Teach UX Design
How to Teach UX Design
 
Specification by Example
Specification by ExampleSpecification by Example
Specification by Example
 
How to Build a Product Roadmap by Walmart Senior Product Manager
How to Build a Product Roadmap by Walmart Senior Product ManagerHow to Build a Product Roadmap by Walmart Senior Product Manager
How to Build a Product Roadmap by Walmart Senior Product Manager
 
Shift left-testing
Shift left-testingShift left-testing
Shift left-testing
 
KCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an OpportunityKCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
 
Org Topologies at Scrum Day Europe 2022, Amsterdam
Org Topologies at Scrum Day Europe 2022, AmsterdamOrg Topologies at Scrum Day Europe 2022, Amsterdam
Org Topologies at Scrum Day Europe 2022, Amsterdam
 
Application Resilience Patterns
Application Resilience PatternsApplication Resilience Patterns
Application Resilience Patterns
 

Similar to Domain Driven Testing: Know What You’re Doing

Testing at Scale at Meta and Salesforce
Testing at Scale at Meta and SalesforceTesting at Scale at Meta and Salesforce
Testing at Scale at Meta and Salesforce
Dmitry Vinnik
 
Engineer in Test: Bridging the Gap
Engineer in Test: Bridging the GapEngineer in Test: Bridging the Gap
Engineer in Test: Bridging the Gap
Dmitry Vinnik
 
Uphill Battle of Mobile Visual Regression
Uphill Battle of Mobile Visual RegressionUphill Battle of Mobile Visual Regression
Uphill Battle of Mobile Visual Regression
Dmitry Vinnik
 
Gauge + Taiko, BDD for Web Revived
Gauge + Taiko, BDD for Web RevivedGauge + Taiko, BDD for Web Revived
Gauge + Taiko, BDD for Web Revived
Dmitry Vinnik
 
Fixing Broken Windows: Dealing with Legacy Systems, Poor Quality and Gaps
Fixing Broken Windows: Dealing with Legacy Systems, Poor Quality and GapsFixing Broken Windows: Dealing with Legacy Systems, Poor Quality and Gaps
Fixing Broken Windows: Dealing with Legacy Systems, Poor Quality and Gaps
Dmitry Vinnik
 
From Robotium to Appium: Choose your Journey
From Robotium to Appium: Choose your Journey From Robotium to Appium: Choose your Journey
From Robotium to Appium: Choose your Journey
Dmitry Vinnik
 
Do you even Function? Guiding Through Functional Interfaces
Do you even Function? Guiding Through Functional InterfacesDo you even Function? Guiding Through Functional Interfaces
Do you even Function? Guiding Through Functional Interfaces
Dmitry Vinnik
 
Hands-on React Native: From Zero to Hero
Hands-on React Native: From Zero to HeroHands-on React Native: From Zero to Hero
Hands-on React Native: From Zero to Hero
All Things Open
 
Hands on React Native: From Zero to Hero
Hands on React  Native:  From Zero to HeroHands on React  Native:  From Zero to Hero
Hands on React Native: From Zero to Hero
Dmitry Vinnik
 
Techniques for Designing with Drupal 8
Techniques for Designing with Drupal 8Techniques for Designing with Drupal 8
Techniques for Designing with Drupal 8
Snake Hill Web Agency
 
Modern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond Selenium Modern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond Selenium
Dmitry Vinnik
 
Better Start: Enforcing Best Engineering Practices with Kotlin
Better Start: Enforcing Best Engineering Practices with KotlinBetter Start: Enforcing Best Engineering Practices with Kotlin
Better Start: Enforcing Best Engineering Practices with Kotlin
Dmitry Vinnik
 
Web Design Trends for Healthcare
Web Design Trends for HealthcareWeb Design Trends for Healthcare
Web Design Trends for Healthcare
Geonetric
 
Design Sprints at The Home Depot
Design Sprints at The Home Depot Design Sprints at The Home Depot
Design Sprints at The Home Depot
Brooke Katalinich
 
Assignment 3 - Manipulative Images
Assignment 3 - Manipulative ImagesAssignment 3 - Manipulative Images
Assignment 3 - Manipulative Images
David Finzi
 
Testing Svelte with Jest: Validate Your Components Quickly!
Testing Svelte with Jest: Validate Your Components Quickly!Testing Svelte with Jest: Validate Your Components Quickly!
Testing Svelte with Jest: Validate Your Components Quickly!
Dmitry Vinnik
 
Using design sprints to drive product innovation.
Using design sprints to drive product innovation.Using design sprints to drive product innovation.
Using design sprints to drive product innovation.
Code Computerlove
 
The 10,000 Steps of Open Source Project Health
The 10,000 Steps of Open Source Project HealthThe 10,000 Steps of Open Source Project Health
The 10,000 Steps of Open Source Project Health
Dmitry Vinnik
 
KLC Architects Feature Presentation
KLC Architects Feature PresentationKLC Architects Feature Presentation
KLC Architects Feature Presentation
Smart cow marketing
 
Designing with tests
Designing with testsDesigning with tests
Designing with tests
Dror Helper
 

Similar to Domain Driven Testing: Know What You’re Doing (20)

Testing at Scale at Meta and Salesforce
Testing at Scale at Meta and SalesforceTesting at Scale at Meta and Salesforce
Testing at Scale at Meta and Salesforce
 
Engineer in Test: Bridging the Gap
Engineer in Test: Bridging the GapEngineer in Test: Bridging the Gap
Engineer in Test: Bridging the Gap
 
Uphill Battle of Mobile Visual Regression
Uphill Battle of Mobile Visual RegressionUphill Battle of Mobile Visual Regression
Uphill Battle of Mobile Visual Regression
 
Gauge + Taiko, BDD for Web Revived
Gauge + Taiko, BDD for Web RevivedGauge + Taiko, BDD for Web Revived
Gauge + Taiko, BDD for Web Revived
 
Fixing Broken Windows: Dealing with Legacy Systems, Poor Quality and Gaps
Fixing Broken Windows: Dealing with Legacy Systems, Poor Quality and GapsFixing Broken Windows: Dealing with Legacy Systems, Poor Quality and Gaps
Fixing Broken Windows: Dealing with Legacy Systems, Poor Quality and Gaps
 
From Robotium to Appium: Choose your Journey
From Robotium to Appium: Choose your Journey From Robotium to Appium: Choose your Journey
From Robotium to Appium: Choose your Journey
 
Do you even Function? Guiding Through Functional Interfaces
Do you even Function? Guiding Through Functional InterfacesDo you even Function? Guiding Through Functional Interfaces
Do you even Function? Guiding Through Functional Interfaces
 
Hands-on React Native: From Zero to Hero
Hands-on React Native: From Zero to HeroHands-on React Native: From Zero to Hero
Hands-on React Native: From Zero to Hero
 
Hands on React Native: From Zero to Hero
Hands on React  Native:  From Zero to HeroHands on React  Native:  From Zero to Hero
Hands on React Native: From Zero to Hero
 
Techniques for Designing with Drupal 8
Techniques for Designing with Drupal 8Techniques for Designing with Drupal 8
Techniques for Designing with Drupal 8
 
Modern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond Selenium Modern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond Selenium
 
Better Start: Enforcing Best Engineering Practices with Kotlin
Better Start: Enforcing Best Engineering Practices with KotlinBetter Start: Enforcing Best Engineering Practices with Kotlin
Better Start: Enforcing Best Engineering Practices with Kotlin
 
Web Design Trends for Healthcare
Web Design Trends for HealthcareWeb Design Trends for Healthcare
Web Design Trends for Healthcare
 
Design Sprints at The Home Depot
Design Sprints at The Home Depot Design Sprints at The Home Depot
Design Sprints at The Home Depot
 
Assignment 3 - Manipulative Images
Assignment 3 - Manipulative ImagesAssignment 3 - Manipulative Images
Assignment 3 - Manipulative Images
 
Testing Svelte with Jest: Validate Your Components Quickly!
Testing Svelte with Jest: Validate Your Components Quickly!Testing Svelte with Jest: Validate Your Components Quickly!
Testing Svelte with Jest: Validate Your Components Quickly!
 
Using design sprints to drive product innovation.
Using design sprints to drive product innovation.Using design sprints to drive product innovation.
Using design sprints to drive product innovation.
 
The 10,000 Steps of Open Source Project Health
The 10,000 Steps of Open Source Project HealthThe 10,000 Steps of Open Source Project Health
The 10,000 Steps of Open Source Project Health
 
KLC Architects Feature Presentation
KLC Architects Feature PresentationKLC Architects Feature Presentation
KLC Architects Feature Presentation
 
Designing with tests
Designing with testsDesigning with tests
Designing with tests
 

More from Dmitry Vinnik

Leadership in Open Source and Why Companies Care
Leadership in Open Source and Why Companies CareLeadership in Open Source and Why Companies Care
Leadership in Open Source and Why Companies Care
Dmitry Vinnik
 
Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...
Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...
Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...
Dmitry Vinnik
 
Testing React with Jest: Validate Your Components Quickly!
Testing React with Jest: Validate Your Components Quickly!Testing React with Jest: Validate Your Components Quickly!
Testing React with Jest: Validate Your Components Quickly!
Dmitry Vinnik
 
Cross-Platform CSS (Yes, it's Possible!) with Yoga
Cross-Platform CSS (Yes, it's Possible!) with YogaCross-Platform CSS (Yes, it's Possible!) with Yoga
Cross-Platform CSS (Yes, it's Possible!) with Yoga
Dmitry Vinnik
 
Documentation Made Easy with Docusaurus
Documentation Made Easy with DocusaurusDocumentation Made Easy with Docusaurus
Documentation Made Easy with Docusaurus
Dmitry Vinnik
 
Ent: Making Data Easy in Go
Ent: Making Data Easy in GoEnt: Making Data Easy in Go
Ent: Making Data Easy in Go
Dmitry Vinnik
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptx
Dmitry Vinnik
 
Remote Work: Gateway to Freedom
Remote Work: Gateway to FreedomRemote Work: Gateway to Freedom
Remote Work: Gateway to Freedom
Dmitry Vinnik
 
Kindness Engineering: Focusing on What Matters
Kindness Engineering: Focusing on What MattersKindness Engineering: Focusing on What Matters
Kindness Engineering: Focusing on What Matters
Dmitry Vinnik
 
Modern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond SeleniumModern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond Selenium
Dmitry Vinnik
 
Stress Driven Development, and How to Avoid It
Stress Driven Development, and How to Avoid ItStress Driven Development, and How to Avoid It
Stress Driven Development, and How to Avoid It
Dmitry Vinnik
 
Back to the CompletableFuture: Concurrency in Action
Back to the CompletableFuture: Concurrency in ActionBack to the CompletableFuture: Concurrency in Action
Back to the CompletableFuture: Concurrency in Action
Dmitry Vinnik
 
Build Tests to Build Websites
Build Tests to Build WebsitesBuild Tests to Build Websites
Build Tests to Build Websites
Dmitry Vinnik
 

More from Dmitry Vinnik (13)

Leadership in Open Source and Why Companies Care
Leadership in Open Source and Why Companies CareLeadership in Open Source and Why Companies Care
Leadership in Open Source and Why Companies Care
 
Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...
Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...
Maximizing React Speed: Hands-On Guide to Debugging and Optimizing React Appl...
 
Testing React with Jest: Validate Your Components Quickly!
Testing React with Jest: Validate Your Components Quickly!Testing React with Jest: Validate Your Components Quickly!
Testing React with Jest: Validate Your Components Quickly!
 
Cross-Platform CSS (Yes, it's Possible!) with Yoga
Cross-Platform CSS (Yes, it's Possible!) with YogaCross-Platform CSS (Yes, it's Possible!) with Yoga
Cross-Platform CSS (Yes, it's Possible!) with Yoga
 
Documentation Made Easy with Docusaurus
Documentation Made Easy with DocusaurusDocumentation Made Easy with Docusaurus
Documentation Made Easy with Docusaurus
 
Ent: Making Data Easy in Go
Ent: Making Data Easy in GoEnt: Making Data Easy in Go
Ent: Making Data Easy in Go
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptx
 
Remote Work: Gateway to Freedom
Remote Work: Gateway to FreedomRemote Work: Gateway to Freedom
Remote Work: Gateway to Freedom
 
Kindness Engineering: Focusing on What Matters
Kindness Engineering: Focusing on What MattersKindness Engineering: Focusing on What Matters
Kindness Engineering: Focusing on What Matters
 
Modern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond SeleniumModern Web Testing: Going Beyond Selenium
Modern Web Testing: Going Beyond Selenium
 
Stress Driven Development, and How to Avoid It
Stress Driven Development, and How to Avoid ItStress Driven Development, and How to Avoid It
Stress Driven Development, and How to Avoid It
 
Back to the CompletableFuture: Concurrency in Action
Back to the CompletableFuture: Concurrency in ActionBack to the CompletableFuture: Concurrency in Action
Back to the CompletableFuture: Concurrency in Action
 
Build Tests to Build Websites
Build Tests to Build WebsitesBuild Tests to Build Websites
Build Tests to Build Websites
 

Recently uploaded

Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
abdulrafaychaudhry
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
QuickwayInfoSystems3
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 

Recently uploaded (20)

Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Enterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptxEnterprise Software Development with No Code Solutions.pptx
Enterprise Software Development with No Code Solutions.pptx
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 

Domain Driven Testing: Know What You’re Doing

Editor's Notes

  1. Design perspective, not testing DDD application
  2. https://www.slideshare.net/syedmuhammadhammad/software-design-13430869
  3. https://www.slideshare.net/syedmuhammadhammad/software-design-13430869
  4. One size fits all,
  5. One size fits all,
  6. One size fits all,
  7. Conway’s law Opera -> not going to dance
  8. Example???
  9. Example???
  10. Example???
  11. Example???
  12. Logical - Layered architecture (app, domain, infra) Physical - Microservice
  13. Example: Startup with Mobile vs. Web
  14. One size fits all,
  15. Example???
  16. Source: https://martinfowler.com/bliki/BoundedContext.html
  17. Design is the code, the code is design Big ball of mud, make it visibl
  18. According to Kent Beck (http://wiki.c2.com/?GalacticModelingLanguage)
  19. Source: https://martinfowler.com/bliki/BoundedContext.html
  20. Example???
  21. One size fits all,
  22. Example???
  23. Design is the code, the code is design
  24. DSL Examples: CSS, HTML
  25. Example???
  26. Working with Domain Experts, Testers, Developers Really get and use the feedback from every stackholder Try to have engineers of all levels, of all backgrounds (atomic missles)
  27. One size fits all,
  28. Layer Design -> Hexagonal design and SOA Emotionally attached to software (kill your darlings -) References: https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215 https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/ref=pd_sim_14_2/146-5573393-8712768?_encoding=UTF8&pd_rd_i=0321834577&pd_rd_r=0HHESFRXFB5RETT0N0G9&pd_rd_w=V0P7D&pd_rd_wg=OozwD&psc=1&refRID=0HHESFRXFB5RETT0N0G9
  29. Layer Design -> Hexagonal design and SOA Emotionally attached to software (kill your darlings -) References: https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215 https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/ref=pd_sim_14_2/146-5573393-8712768?_encoding=UTF8&pd_rd_i=0321834577&pd_rd_r=0HHESFRXFB5RETT0N0G9&pd_rd_w=V0P7D&pd_rd_wg=OozwD&psc=1&refRID=0HHESFRXFB5RETT0N0G9
  30. One size fits all,
  31. Requirements
  32. Requirements
  33. Requirements
  34. Source: https://martinfowler.com/bliki/BoundedContext.html
  35. Requirements
  36. Requirements
  37. Explain width is #tests
  38. Explain width is #tests Think Acceptance Tests !Exploratory tests under breaker
  39. Explain width is #tests Think Acceptance Tests !Exploratory tests under breaker
  40. Bug is not a bug situation Not upfront Tackling blindness
  41. Bug is not a bug situation Not upfront Tackling blindness
  42. Design by Contract
  43. Design by Contract
  44. Example - how many hours of netflix Text test Diffy Json schema validator
  45. Explain width is #tests Think Acceptance Tests !Exploratory tests under breaker
  46. Explain width is #tests Think Acceptance Tests !Exploratory tests under breaker
  47. Possibly talk about screenplay vs interation, explain why task SOLID pattern
  48. Possibly talk about screenplay vs interation, explain why task SOLID pattern
  49. Explain width is #tests Think Acceptance Tests !Exploratory tests under breaker
  50. New Hires (point about multiple backgrounds people) Great book Explore It by
  51. Will be sharing slides, github and useful links