SlideShare a Scribd company logo
1 of 28
Download to read offline
Software Testing
April 30, 2021 - Anyscale
Andrew Wang
andrew@umbrant.com
Twitter: @umbrant
Airtable Tech Lead, Storage and Caching
Scale AI First staff-level engineering hire
Cloudera Tech Lead, HDFS and ML platform
Berkeley CS PhD track, distributed systems
UVa B.S. Computer Science
About Me
2
War Stories
3
4
Therac-25, from Wikipedia
5
6
7
Mars Climate Orbiter, 1998
8
Personal experiences
● Incorrectly parsing an old version of a file format, producing an
erroneous empty result
● Under-calculating how much data to flush to disk
● Full site outage caused by a rogue query, followed by broad database
corruption from bad database restart procedure
● A “save” button that would almost always throw a 500
How to prevent software defects?
9
● Typechecker
● Static analysis
● Unit tests
● Integration tests
● System tests
● UI tests
● Manual tests
● Performance tests
● Canary tests
● ….and more!
A. Compiler error?
B. Unit test failure?
C. Manual QA issue?
D. Customer issue?
Write your answers in chat!
10
1 second
1 minute
2 hours
5-10 hours
Time to fix a...
11
Test Pyramid
https:/
/martinfowler.com/articles/practical-test-pyramid.html
Test Ice Cream Cone
12
https:/
/www.james-willett.com/the-evolution-of-the-testing-pyramid/
13
Test Trophy
https:/
/kentcdodds.com/blog/write-tests
General principles
● Most of your test coverage should be fast and easy to run
● Write automated tests
● Write tests with different granularity
14
Unit tests
● Most granular type of testing
● Testing a single function, class, or component
● Narrow scope makes it easy to identify and isolate bugs
● Run fast (1 second)
15
Integration tests
● Tests multiple components together
● Multiple threads, processes, DBs, filesystem, etc
● Run in 10-100 seconds
16
UI tests
● Golden age of frontend
development
● React is pretty testable
● Cypress is awesome
17
System tests
● Testing multiple services in a realistic environment
● Full end-to-end customer workflows
○ Create a resource
○ Use the resource
○ Delete it
● Tests things that are expensive or limited
○ Uses something that you only have one of
○ Calling external services
○ Expensive operations
18
Manual tests
● Most flexible but also most expensive and slowest
● Less necessary these days, because of great testing libraries
● Generally want to avoid if possible
● Exceptions
○ During development
○ When there’s a site incident
○ The functionality is rarely used
○ The setup overhead is just too high (for now)
19
Continuous Integration
● Test every change
● Run different tests at different times, based on cost/speed
● Detect and identify bugs as early as possible
20
Continuous Integration
21
Stage Additional Tests Run
Pre-commit Unit + integration tests
Post-commit UI tests
Nightly System tests
Staging Manual tests
Canary Live user testing
Continuous Integration
● The faster the test suite, the more often you can run it
● My rule of thumb: getting a cup of coffee ☕
● Run tests in parallel and distributed
○ https://www.umbrant.com/2016/08/25/distributed-testing/
○ 60x improvement for Hadoop’s test suite, 8.5 hours -> 8 minutes
● Testing can be 💰💰💰, but are generally worth it
○ $100s/mo per developer
22
Flaky tests
● Tests that spuriously fail x% of the time
● Can waste a lot of time triaging failures and retrying builds
● Kills trust in the test suite!
● Strategies
○ Temporarily disable flaky tests and fix with urgency
○ Make a dashboard of flaky rate per test
○ Track test flakiness over time to help bisect the suspect commit
23
Why do tests flake?
● Timing dependencies in multi-threaded applications
○ time.sleep() is a code smell
○ Use barriers/locks/condition variables instead
○ Use a FakeTicker class to advance system time
● Calling external services
○ Just don’t!
○ Spy your HTTP/RPC libraries to detect errant network calls
● Leaked global state
○ Run tests individually in isolation
○ Run tests in a deterministic random order
○ Don’t use statics
24
Why tests are a developer’s best friend
● Fast Develop -> Test -> Debug loop
● Demonstrates that the code works
● Acts as a contract for the behavior of the code
○ Prevents other people from breaking your code
● Lets you fearlessly refactor the codebase
○ Prevents you from breaking other people’s code
25
What we didn’t cover
● Code review
● Design review
● Deploy process
● Monitoring and alerting
● Feature flags
26
Takeaway
● Write tests
● Write automated tests
● Write different kinds of tests
● Run your tests often
● Make the test suite fast
27
Resources
● Martin Fowler’s site: https://martinfowler.com/testing/
● JUnit docs: https://junit.org/junit5/docs/current/user-guide/#writing-tests
● Google Testing Blog: https://testing.googleblog.com/
● Uber: Keeping master green at scale
https://eng.uber.com/research/keeping-master-green-at-scale/
● Cindy Sridharan: Testing in Production, the safe way
https://copyconstruct.medium.com/testing-in-production-the-safe-way-18ca10
2d0ef1
● Automating safe, hands-off deployments (AWS):
https://aws.amazon.com/builders-library/automating-safe-hands-off-deploym
ents/
28

More Related Content

What's hot

Test Automation - Keytorc Approach
Test Automation - Keytorc Approach Test Automation - Keytorc Approach
Test Automation - Keytorc Approach
Keytorc Software Testing Services
 
Unit testing best practices
Unit testing best practicesUnit testing best practices
Unit testing best practices
nickokiss
 
UNIT TESTING PPT
UNIT TESTING PPTUNIT TESTING PPT
UNIT TESTING PPT
suhasreddy1
 

What's hot (20)

Automated Testing with Agile
Automated Testing with AgileAutomated Testing with Agile
Automated Testing with Agile
 
Software testing
Software testingSoftware testing
Software testing
 
Test Automation - Keytorc Approach
Test Automation - Keytorc Approach Test Automation - Keytorc Approach
Test Automation - Keytorc Approach
 
Software Testing
Software TestingSoftware Testing
Software Testing
 
Gatling
Gatling Gatling
Gatling
 
Unit testing best practices
Unit testing best practicesUnit testing best practices
Unit testing best practices
 
Types of testing
Types of testingTypes of testing
Types of testing
 
Bug life cycle
Bug life cycleBug life cycle
Bug life cycle
 
Testing in Agile Projects
Testing in Agile ProjectsTesting in Agile Projects
Testing in Agile Projects
 
Test Automation
Test AutomationTest Automation
Test Automation
 
Software testing
Software testingSoftware testing
Software testing
 
Software testing
Software testingSoftware testing
Software testing
 
Agile QA and Testing process
Agile QA and Testing processAgile QA and Testing process
Agile QA and Testing process
 
Testing techniques
Testing techniquesTesting techniques
Testing techniques
 
Software Testing Life Cycle – A Beginner’s Guide
Software Testing Life Cycle – A Beginner’s GuideSoftware Testing Life Cycle – A Beginner’s Guide
Software Testing Life Cycle – A Beginner’s Guide
 
Agile Testing and Test Automation
Agile Testing and Test AutomationAgile Testing and Test Automation
Agile Testing and Test Automation
 
UNIT TESTING PPT
UNIT TESTING PPTUNIT TESTING PPT
UNIT TESTING PPT
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 
What Is Functional Testing?
What Is Functional Testing?What Is Functional Testing?
What Is Functional Testing?
 
Test Process
Test ProcessTest Process
Test Process
 

Similar to Software Testing

A testing strategy for hexagonal applications
A testing strategy for hexagonal applicationsA testing strategy for hexagonal applications
A testing strategy for hexagonal applications
Matthias Noback
 

Similar to Software Testing (20)

Expedia 3x3 presentation
Expedia 3x3 presentationExpedia 3x3 presentation
Expedia 3x3 presentation
 
Security in CI/CD Pipelines: Tips for DevOps Engineers
Security in CI/CD Pipelines: Tips for DevOps EngineersSecurity in CI/CD Pipelines: Tips for DevOps Engineers
Security in CI/CD Pipelines: Tips for DevOps Engineers
 
Antifragility and testing for distributed systems failure
Antifragility and testing for distributed systems failureAntifragility and testing for distributed systems failure
Antifragility and testing for distributed systems failure
 
Tests immutable when refactoring - SegFault Unconference Cracow 2019
Tests immutable when refactoring - SegFault Unconference Cracow 2019Tests immutable when refactoring - SegFault Unconference Cracow 2019
Tests immutable when refactoring - SegFault Unconference Cracow 2019
 
DevOps in realtime
DevOps in realtimeDevOps in realtime
DevOps in realtime
 
Ensuring Performance in a Fast-Paced Environment (CMG 2014)
Ensuring Performance in a Fast-Paced Environment (CMG 2014)Ensuring Performance in a Fast-Paced Environment (CMG 2014)
Ensuring Performance in a Fast-Paced Environment (CMG 2014)
 
MockServer-driven testing
MockServer-driven testingMockServer-driven testing
MockServer-driven testing
 
Test your code
Test your codeTest your code
Test your code
 
CI/CD and automated Test
CI/CD and automated TestCI/CD and automated Test
CI/CD and automated Test
 
Remote iOS Devices Server – Scaling iOS
Remote iOS Devices Server – Scaling iOSRemote iOS Devices Server – Scaling iOS
Remote iOS Devices Server – Scaling iOS
 
Unit testing legacy code
Unit testing legacy codeUnit testing legacy code
Unit testing legacy code
 
ContainerCon - Test Driven Infrastructure
ContainerCon - Test Driven InfrastructureContainerCon - Test Driven Infrastructure
ContainerCon - Test Driven Infrastructure
 
Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8
 
Ui Testing with Ghost Inspector
Ui Testing with Ghost InspectorUi Testing with Ghost Inspector
Ui Testing with Ghost Inspector
 
A testing strategy for hexagonal applications
A testing strategy for hexagonal applicationsA testing strategy for hexagonal applications
A testing strategy for hexagonal applications
 
Series of Unfortunate Netflix Container Events - QConNYC17
Series of Unfortunate Netflix Container Events - QConNYC17Series of Unfortunate Netflix Container Events - QConNYC17
Series of Unfortunate Netflix Container Events - QConNYC17
 
Integration Testing as Validation and Monitoring
 Integration Testing as Validation and Monitoring Integration Testing as Validation and Monitoring
Integration Testing as Validation and Monitoring
 
Automation for Anyone at Nutanix NEXT 2017 US
Automation for Anyone at Nutanix NEXT 2017 USAutomation for Anyone at Nutanix NEXT 2017 US
Automation for Anyone at Nutanix NEXT 2017 US
 
TLC2018 Thomas Haver: The Automation Firehose - Be Strategic and Tactical
TLC2018 Thomas Haver: The Automation Firehose - Be Strategic and TacticalTLC2018 Thomas Haver: The Automation Firehose - Be Strategic and Tactical
TLC2018 Thomas Haver: The Automation Firehose - Be Strategic and Tactical
 
The journey to Native Cloud Architecture & Microservices, tracing the footste...
The journey to Native Cloud Architecture & Microservices, tracing the footste...The journey to Native Cloud Architecture & Microservices, tracing the footste...
The journey to Native Cloud Architecture & Microservices, tracing the footste...
 

Recently uploaded

%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Recently uploaded (20)

AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 

Software Testing

  • 1. Software Testing April 30, 2021 - Anyscale Andrew Wang andrew@umbrant.com Twitter: @umbrant
  • 2. Airtable Tech Lead, Storage and Caching Scale AI First staff-level engineering hire Cloudera Tech Lead, HDFS and ML platform Berkeley CS PhD track, distributed systems UVa B.S. Computer Science About Me 2
  • 5. 5
  • 6. 6
  • 8. 8 Personal experiences ● Incorrectly parsing an old version of a file format, producing an erroneous empty result ● Under-calculating how much data to flush to disk ● Full site outage caused by a rogue query, followed by broad database corruption from bad database restart procedure ● A “save” button that would almost always throw a 500
  • 9. How to prevent software defects? 9 ● Typechecker ● Static analysis ● Unit tests ● Integration tests ● System tests ● UI tests ● Manual tests ● Performance tests ● Canary tests ● ….and more!
  • 10. A. Compiler error? B. Unit test failure? C. Manual QA issue? D. Customer issue? Write your answers in chat! 10 1 second 1 minute 2 hours 5-10 hours Time to fix a...
  • 12. Test Ice Cream Cone 12 https:/ /www.james-willett.com/the-evolution-of-the-testing-pyramid/
  • 14. General principles ● Most of your test coverage should be fast and easy to run ● Write automated tests ● Write tests with different granularity 14
  • 15. Unit tests ● Most granular type of testing ● Testing a single function, class, or component ● Narrow scope makes it easy to identify and isolate bugs ● Run fast (1 second) 15
  • 16. Integration tests ● Tests multiple components together ● Multiple threads, processes, DBs, filesystem, etc ● Run in 10-100 seconds 16
  • 17. UI tests ● Golden age of frontend development ● React is pretty testable ● Cypress is awesome 17
  • 18. System tests ● Testing multiple services in a realistic environment ● Full end-to-end customer workflows ○ Create a resource ○ Use the resource ○ Delete it ● Tests things that are expensive or limited ○ Uses something that you only have one of ○ Calling external services ○ Expensive operations 18
  • 19. Manual tests ● Most flexible but also most expensive and slowest ● Less necessary these days, because of great testing libraries ● Generally want to avoid if possible ● Exceptions ○ During development ○ When there’s a site incident ○ The functionality is rarely used ○ The setup overhead is just too high (for now) 19
  • 20. Continuous Integration ● Test every change ● Run different tests at different times, based on cost/speed ● Detect and identify bugs as early as possible 20
  • 21. Continuous Integration 21 Stage Additional Tests Run Pre-commit Unit + integration tests Post-commit UI tests Nightly System tests Staging Manual tests Canary Live user testing
  • 22. Continuous Integration ● The faster the test suite, the more often you can run it ● My rule of thumb: getting a cup of coffee ☕ ● Run tests in parallel and distributed ○ https://www.umbrant.com/2016/08/25/distributed-testing/ ○ 60x improvement for Hadoop’s test suite, 8.5 hours -> 8 minutes ● Testing can be 💰💰💰, but are generally worth it ○ $100s/mo per developer 22
  • 23. Flaky tests ● Tests that spuriously fail x% of the time ● Can waste a lot of time triaging failures and retrying builds ● Kills trust in the test suite! ● Strategies ○ Temporarily disable flaky tests and fix with urgency ○ Make a dashboard of flaky rate per test ○ Track test flakiness over time to help bisect the suspect commit 23
  • 24. Why do tests flake? ● Timing dependencies in multi-threaded applications ○ time.sleep() is a code smell ○ Use barriers/locks/condition variables instead ○ Use a FakeTicker class to advance system time ● Calling external services ○ Just don’t! ○ Spy your HTTP/RPC libraries to detect errant network calls ● Leaked global state ○ Run tests individually in isolation ○ Run tests in a deterministic random order ○ Don’t use statics 24
  • 25. Why tests are a developer’s best friend ● Fast Develop -> Test -> Debug loop ● Demonstrates that the code works ● Acts as a contract for the behavior of the code ○ Prevents other people from breaking your code ● Lets you fearlessly refactor the codebase ○ Prevents you from breaking other people’s code 25
  • 26. What we didn’t cover ● Code review ● Design review ● Deploy process ● Monitoring and alerting ● Feature flags 26
  • 27. Takeaway ● Write tests ● Write automated tests ● Write different kinds of tests ● Run your tests often ● Make the test suite fast 27
  • 28. Resources ● Martin Fowler’s site: https://martinfowler.com/testing/ ● JUnit docs: https://junit.org/junit5/docs/current/user-guide/#writing-tests ● Google Testing Blog: https://testing.googleblog.com/ ● Uber: Keeping master green at scale https://eng.uber.com/research/keeping-master-green-at-scale/ ● Cindy Sridharan: Testing in Production, the safe way https://copyconstruct.medium.com/testing-in-production-the-safe-way-18ca10 2d0ef1 ● Automating safe, hands-off deployments (AWS): https://aws.amazon.com/builders-library/automating-safe-hands-off-deploym ents/ 28