SlideShare a Scribd company logo
Google Confidential and Proprietary
Continuous Integration at
Google Scale
By John Micco
Developer Infrastructure
Google Confidential and Proprietary
● >30,000 developers in 40+ offices
● 13,000+ projects under active development
● 30k submissions per day (1 every 3 seconds)
● Single monolithic code tree with mixed language code
● Development on one branch - submissions at head
● All builds from source
● 30+ sustained code changes per minute with 90+ peaks
● 50% of code changes monthly
● 150+ million test cases / day, > 150 years of test / day
● Supports continuous deployment for all Google teams!
Speed and Scale
Google Confidential and Proprietary
Overview
1. Continuous Integration Goals
2. Continuous Integration at Google
3. Future of testing
Google Confidential and Proprietary
● Provide real-time information to build monitors
○ Identify failures fast
○ Identify culprit Changes
○ Handle flaky tests
● Provide frequent green builds for cutting releases
○ Identify recent green builds
○ Show results of all testing together
○ Allow release tooling to choose a green build
○ Handle flaky tests
"green build" = all tests contained in that build are passing at a given
Change.
Continuous Integration
Google Confidential and Proprietary
● Develop Safely
○Sync to last green changelist
○Identify whether change will break the build before submit
○Submit with confidence
○Handle flaky tests
Continuous Integration (cont)
Google Confidential and Proprietary
Standard Continuous Build System
● Triggers builds in continuous cycle
● Cycle time = longest build + test cycle
● Tests many changes together
● Which change broke the build?
Google Confidential and Proprietary
● Triggers tests on every change
● Uses fine-grained dependencies
● Change 2 broke test 1
Google Continuous Build System
Google Confidential and Proprietary
Continuous Integration Display
Google Confidential and Proprietary
● Identifies failures sooner
● Identifies culprit change precisely
○ Avoids divide-and-conquer and tribal knowledge
● Lower compute costs using fine grained dependencies
● Keeps the build green by reducing time to fix breaks
● Accepted enthusiastically by product teams
● Enables teams to ship with fast iteration times
○ Supports submit-to-production times of less than 36
hours for some projects
Benefits
Google Confidential and Proprietary
● Requires enormous investment in compute resources (it
helps to be at Google) grows in proportion to:
○ Submission rate
○ Average build + test time
○ Variants (debug, opt, valgrind, etc.)
○ Increasing dependencies on core libraries
○ Branches
● Requires updating dependencies on each change
○ Takes time to update - delays start of testing
Costs
Google Confidential and Proprietary
● Makes testing available before submit
● Uses fine-grained dependencies
○ Recalculate any dependency changes
● Uses same pool of compute resources at high priority
● Avoids breaking the build
● Captures contents of a change and tests in isolation
○ Tests against head
○ Identifies problems with missing files
● Integrates with
○ submission tool - submit iff testing is green
○ Code Review Tool - results are posted to the review thread
Developing Safely - presubmit
Google Confidential and Proprietary
Example Presubmit Display
Google Confidential and Proprietary
Practical Matters - Test Growth
● Sources of growth in test execution time
○ More developers = increased submission rate
○ More tests
○ Longer running tests
○ Tests consuming more resources (threading)
● Examine the growth trends
○ Predict compute needs
○ Look for any build system features required
Build / Test Compute Resources
Jan
2011
Jan
2012
Jan
2013
Jul 2012
Jul 2011
Google Confidential and Proprietary
● Problems
○ Quadratic execution time growth w/ 2 factors
■ Submit rate - grows linearly
■ Test pool size - grows linearly
○ Ultimately cannot run every affected test @ every change
○ Low latency results still top requirement
● Solution: Just in time scheduling (JIT)
Test Growth
Continuous Integration:
● Run every test affected at every changelist.
In Production:
● Build and run tests concurrently on Google’s distributed
build and test backend.
JIT
as often as possible
JIT Scheduling
Schedule tests to run only when
system has capacity.
Produce project-wide results at
periodic changelists.
Milestone Property
A changelist C is a milestone iff ...
● All tests affected at C are run
● All tests affected since the previous
milestone are run.
● All these tests are run at their greatest
affecting changelist <= C.
Milestone Property
A changelist C is a milestone iff ...
● All tests affected at C are run
● All tests affected since the previous
milestone are run.
● All these tests are run at their greatest
affecting changelist <= C.
Exactly the work
necessary to deliver a
conclusive project status
Confidential + Proprietary
Change Lists
AffectedTestTargetset
Cut milestone
at this CL
21
Confidential + Proprietary
Change Lists
AffectedTestTargetset
22
Confidential + Proprietary
Change Lists
AffectedTestTargetset
23
Confidential + Proprietary
Change Lists
AffectedTestTargetset
24
Confidential + Proprietary
Change Lists
AffectedTestTargetset
25
Google Confidential and Proprietary
JIT scheduling results
● JIT scheduler changed compute growth from quadratic to linear!
● Without it, compute demand would have already consumed all of
Google's capacity
○ We literally either would have had to stop testing this way or stop
running user searches
● Enabled Google to keep providing fast feedback to developers with
reasonable compute costs
Google Confidential and Proprietary
Cuprit Finding - Transition to Fail
A
Time
Targets
Changelists
1 2 3
Passed
Affected, but not run (yet)
Milestone
Non-milestone
4
Failed
Schedule these
Google Confidential and Proprietary
Cuprit Finding - Transition to Fail
A
Time
Targets
Changelists
1 2 3
Passed
Affected, but not run (yet)
Milestone
Non-milestone
4
Failed
A: Change 3 broke test A.
Google Confidential and Proprietary
Future Direction
● Atif Memon is working with us (on sabbatical) to analyze our data
● He is finding that the dependency distance between a target and
the triggering source file is highly correlated with the probability of
introducing a non-flaky failure. We are working with him to publish
his findings.
Google Confidential and Proprietary
Q & A
For more information:
● http://google-engtools.blogspot.com/2011/06/testing-at-speed-and-scale-of-google.html
● http://www.youtube.com/watch?v=b52aXZ2yi08
● http://www.infoq.com/presentations/Development-at-Google
● http://google-engtools.blogspot.com/
● http://misko.hevery.com/2008/11/11/clean-code-talks-dependency-injection/
● https://www.youtube.com/watch?v=KH2_sB1A6lA&feature=youtube_gdata_player
Q & A

More Related Content

What's hot

Continuous integration with teamcity
Continuous integration with teamcityContinuous integration with teamcity
Continuous integration with teamcity
Eugene Sheretov
 

What's hot (20)

Master the Monorepo
Master the MonorepoMaster the Monorepo
Master the Monorepo
 
Static Code Analysis
Static Code AnalysisStatic Code Analysis
Static Code Analysis
 
Rust Programming Language
Rust Programming LanguageRust Programming Language
Rust Programming Language
 
Quarkus Denmark 2019
Quarkus Denmark 2019Quarkus Denmark 2019
Quarkus Denmark 2019
 
Azure DevOps CI/CD For Beginners
Azure DevOps CI/CD  For BeginnersAzure DevOps CI/CD  For Beginners
Azure DevOps CI/CD For Beginners
 
Come Fly With Me: Database Migration Patterns with Flyway
Come Fly With Me: Database Migration Patterns with FlywayCome Fly With Me: Database Migration Patterns with Flyway
Come Fly With Me: Database Migration Patterns with Flyway
 
GraalVM Native and Spring Boot 3.0
GraalVM Native and Spring Boot 3.0GraalVM Native and Spring Boot 3.0
GraalVM Native and Spring Boot 3.0
 
Introduction to CI/CD
Introduction to CI/CDIntroduction to CI/CD
Introduction to CI/CD
 
GraalVM
GraalVMGraalVM
GraalVM
 
Continuous integration with teamcity
Continuous integration with teamcityContinuous integration with teamcity
Continuous integration with teamcity
 
Kotlin
KotlinKotlin
Kotlin
 
Advanced Git
Advanced GitAdvanced Git
Advanced Git
 
Software Architecture Patterns
Software Architecture PatternsSoftware Architecture Patterns
Software Architecture Patterns
 
Chaos Engineering: Why the World Needs More Resilient Systems
Chaos Engineering: Why the World Needs More Resilient SystemsChaos Engineering: Why the World Needs More Resilient Systems
Chaos Engineering: Why the World Needs More Resilient Systems
 
Embedded SW Testing
Embedded SW TestingEmbedded SW Testing
Embedded SW Testing
 
Kotlin
KotlinKotlin
Kotlin
 
Provisioning Infrastructure Using Terraform
Provisioning Infrastructure Using TerraformProvisioning Infrastructure Using Terraform
Provisioning Infrastructure Using Terraform
 
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
 
Introduction to Design Patterns and Singleton
Introduction to Design Patterns and SingletonIntroduction to Design Patterns and Singleton
Introduction to Design Patterns and Singleton
 
12-Factor Apps
12-Factor Apps12-Factor Apps
12-Factor Apps
 

Viewers also liked

Continuous integration by Rémy Virin
Continuous integration by Rémy VirinContinuous integration by Rémy Virin
Continuous integration by Rémy Virin
CocoaHeads France
 
Inverting The Testing Pyramid
Inverting The Testing PyramidInverting The Testing Pyramid
Inverting The Testing Pyramid
Naresh Jain
 

Viewers also liked (11)

La Hora del Código (2016)
La Hora del Código (2016)La Hora del Código (2016)
La Hora del Código (2016)
 
Continuous integration by Rémy Virin
Continuous integration by Rémy VirinContinuous integration by Rémy Virin
Continuous integration by Rémy Virin
 
Continuous integration at scale
Continuous integration at scaleContinuous integration at scale
Continuous integration at scale
 
GdG DevFestMed 2016 - 06/11/2016
GdG DevFestMed 2016 - 06/11/2016GdG DevFestMed 2016 - 06/11/2016
GdG DevFestMed 2016 - 06/11/2016
 
Inverting The Testing Pyramid
Inverting The Testing PyramidInverting The Testing Pyramid
Inverting The Testing Pyramid
 
Achieving DevOps using Open Source Tools in the Enterprise
Achieving DevOps using Open Source Tools in the EnterpriseAchieving DevOps using Open Source Tools in the Enterprise
Achieving DevOps using Open Source Tools in the Enterprise
 
Continuous Delivery Sounds Great but it Won't Work Here
Continuous Delivery Sounds Great but it Won't Work HereContinuous Delivery Sounds Great but it Won't Work Here
Continuous Delivery Sounds Great but it Won't Work Here
 
How to Implement Domain Driven Design in Real Life SDLC
How to Implement Domain Driven Design  in Real Life SDLCHow to Implement Domain Driven Design  in Real Life SDLC
How to Implement Domain Driven Design in Real Life SDLC
 
How Google Works
How Google WorksHow Google Works
How Google Works
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Similar to 2016 04-25 continuous integration at google scale

Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013
Moataz Nabil
 

Similar to 2016 04-25 continuous integration at google scale (20)

Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
 
Testing in a continuous delivery environment
Testing in a continuous delivery environmentTesting in a continuous delivery environment
Testing in a continuous delivery environment
 
Continues delivery - Introduction
Continues delivery - IntroductionContinues delivery - Introduction
Continues delivery - Introduction
 
Release & Iterate Faster: Stop Manual Testing
Release & Iterate Faster: Stop Manual TestingRelease & Iterate Faster: Stop Manual Testing
Release & Iterate Faster: Stop Manual Testing
 
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
 
Room 2 - 4 - Juncheng Anthony Lin - Redhat - A Practical Approach to Traditio...
Room 2 - 4 - Juncheng Anthony Lin - Redhat - A Practical Approach to Traditio...Room 2 - 4 - Juncheng Anthony Lin - Redhat - A Practical Approach to Traditio...
Room 2 - 4 - Juncheng Anthony Lin - Redhat - A Practical Approach to Traditio...
 
Gerrit Code Review
Gerrit Code ReviewGerrit Code Review
Gerrit Code Review
 
GitOps , done Right
GitOps , done RightGitOps , done Right
GitOps , done Right
 
Introduction to CI/CD
Introduction to CI/CDIntroduction to CI/CD
Introduction to CI/CD
 
Expedia 3x3 presentation
Expedia 3x3 presentationExpedia 3x3 presentation
Expedia 3x3 presentation
 
Building Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software EngineeringBuilding Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software Engineering
 
Release Engineering
Release EngineeringRelease Engineering
Release Engineering
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud Pipelines
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud Pipelines
 
Agile lifecycle handbook by bhawani nandan prasad
Agile lifecycle handbook by bhawani nandan prasadAgile lifecycle handbook by bhawani nandan prasad
Agile lifecycle handbook by bhawani nandan prasad
 
Software management for tech startups
Software management for tech startupsSoftware management for tech startups
Software management for tech startups
 
Agile Development Lifecycle and Best Practices with Denodo
Agile Development Lifecycle and Best Practices with DenodoAgile Development Lifecycle and Best Practices with Denodo
Agile Development Lifecycle and Best Practices with Denodo
 
Agile process with a fixed cost
Agile process with a fixed costAgile process with a fixed cost
Agile process with a fixed cost
 
Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013Working Agile with Scrum and TFS 2013
Working Agile with Scrum and TFS 2013
 
Bots on guard of sdlc
Bots on guard of sdlcBots on guard of sdlc
Bots on guard of sdlc
 

Recently uploaded

Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
mbmh111980
 

Recently uploaded (20)

Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysis
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabber
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
KLARNA -  Language Models and Knowledge Graphs: A Systems ApproachKLARNA -  Language Models and Knowledge Graphs: A Systems Approach
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Breaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdfBreaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdf
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
A Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data MigrationA Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data Migration
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
 
10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 

2016 04-25 continuous integration at google scale

  • 1. Google Confidential and Proprietary Continuous Integration at Google Scale By John Micco Developer Infrastructure
  • 2. Google Confidential and Proprietary ● >30,000 developers in 40+ offices ● 13,000+ projects under active development ● 30k submissions per day (1 every 3 seconds) ● Single monolithic code tree with mixed language code ● Development on one branch - submissions at head ● All builds from source ● 30+ sustained code changes per minute with 90+ peaks ● 50% of code changes monthly ● 150+ million test cases / day, > 150 years of test / day ● Supports continuous deployment for all Google teams! Speed and Scale
  • 3. Google Confidential and Proprietary Overview 1. Continuous Integration Goals 2. Continuous Integration at Google 3. Future of testing
  • 4. Google Confidential and Proprietary ● Provide real-time information to build monitors ○ Identify failures fast ○ Identify culprit Changes ○ Handle flaky tests ● Provide frequent green builds for cutting releases ○ Identify recent green builds ○ Show results of all testing together ○ Allow release tooling to choose a green build ○ Handle flaky tests "green build" = all tests contained in that build are passing at a given Change. Continuous Integration
  • 5. Google Confidential and Proprietary ● Develop Safely ○Sync to last green changelist ○Identify whether change will break the build before submit ○Submit with confidence ○Handle flaky tests Continuous Integration (cont)
  • 6. Google Confidential and Proprietary Standard Continuous Build System ● Triggers builds in continuous cycle ● Cycle time = longest build + test cycle ● Tests many changes together ● Which change broke the build?
  • 7. Google Confidential and Proprietary ● Triggers tests on every change ● Uses fine-grained dependencies ● Change 2 broke test 1 Google Continuous Build System
  • 8. Google Confidential and Proprietary Continuous Integration Display
  • 9. Google Confidential and Proprietary ● Identifies failures sooner ● Identifies culprit change precisely ○ Avoids divide-and-conquer and tribal knowledge ● Lower compute costs using fine grained dependencies ● Keeps the build green by reducing time to fix breaks ● Accepted enthusiastically by product teams ● Enables teams to ship with fast iteration times ○ Supports submit-to-production times of less than 36 hours for some projects Benefits
  • 10. Google Confidential and Proprietary ● Requires enormous investment in compute resources (it helps to be at Google) grows in proportion to: ○ Submission rate ○ Average build + test time ○ Variants (debug, opt, valgrind, etc.) ○ Increasing dependencies on core libraries ○ Branches ● Requires updating dependencies on each change ○ Takes time to update - delays start of testing Costs
  • 11. Google Confidential and Proprietary ● Makes testing available before submit ● Uses fine-grained dependencies ○ Recalculate any dependency changes ● Uses same pool of compute resources at high priority ● Avoids breaking the build ● Captures contents of a change and tests in isolation ○ Tests against head ○ Identifies problems with missing files ● Integrates with ○ submission tool - submit iff testing is green ○ Code Review Tool - results are posted to the review thread Developing Safely - presubmit
  • 12. Google Confidential and Proprietary Example Presubmit Display
  • 13. Google Confidential and Proprietary Practical Matters - Test Growth ● Sources of growth in test execution time ○ More developers = increased submission rate ○ More tests ○ Longer running tests ○ Tests consuming more resources (threading) ● Examine the growth trends ○ Predict compute needs ○ Look for any build system features required
  • 14. Build / Test Compute Resources Jan 2011 Jan 2012 Jan 2013 Jul 2012 Jul 2011
  • 15.
  • 16. Google Confidential and Proprietary ● Problems ○ Quadratic execution time growth w/ 2 factors ■ Submit rate - grows linearly ■ Test pool size - grows linearly ○ Ultimately cannot run every affected test @ every change ○ Low latency results still top requirement ● Solution: Just in time scheduling (JIT) Test Growth
  • 17. Continuous Integration: ● Run every test affected at every changelist. In Production: ● Build and run tests concurrently on Google’s distributed build and test backend. JIT as often as possible
  • 18. JIT Scheduling Schedule tests to run only when system has capacity. Produce project-wide results at periodic changelists.
  • 19. Milestone Property A changelist C is a milestone iff ... ● All tests affected at C are run ● All tests affected since the previous milestone are run. ● All these tests are run at their greatest affecting changelist <= C.
  • 20. Milestone Property A changelist C is a milestone iff ... ● All tests affected at C are run ● All tests affected since the previous milestone are run. ● All these tests are run at their greatest affecting changelist <= C. Exactly the work necessary to deliver a conclusive project status
  • 21. Confidential + Proprietary Change Lists AffectedTestTargetset Cut milestone at this CL 21
  • 22. Confidential + Proprietary Change Lists AffectedTestTargetset 22
  • 23. Confidential + Proprietary Change Lists AffectedTestTargetset 23
  • 24. Confidential + Proprietary Change Lists AffectedTestTargetset 24
  • 25. Confidential + Proprietary Change Lists AffectedTestTargetset 25
  • 26. Google Confidential and Proprietary JIT scheduling results ● JIT scheduler changed compute growth from quadratic to linear! ● Without it, compute demand would have already consumed all of Google's capacity ○ We literally either would have had to stop testing this way or stop running user searches ● Enabled Google to keep providing fast feedback to developers with reasonable compute costs
  • 27. Google Confidential and Proprietary Cuprit Finding - Transition to Fail A Time Targets Changelists 1 2 3 Passed Affected, but not run (yet) Milestone Non-milestone 4 Failed Schedule these
  • 28. Google Confidential and Proprietary Cuprit Finding - Transition to Fail A Time Targets Changelists 1 2 3 Passed Affected, but not run (yet) Milestone Non-milestone 4 Failed A: Change 3 broke test A.
  • 29. Google Confidential and Proprietary Future Direction ● Atif Memon is working with us (on sabbatical) to analyze our data ● He is finding that the dependency distance between a target and the triggering source file is highly correlated with the probability of introducing a non-flaky failure. We are working with him to publish his findings.
  • 30. Google Confidential and Proprietary Q & A For more information: ● http://google-engtools.blogspot.com/2011/06/testing-at-speed-and-scale-of-google.html ● http://www.youtube.com/watch?v=b52aXZ2yi08 ● http://www.infoq.com/presentations/Development-at-Google ● http://google-engtools.blogspot.com/ ● http://misko.hevery.com/2008/11/11/clean-code-talks-dependency-injection/ ● https://www.youtube.com/watch?v=KH2_sB1A6lA&feature=youtube_gdata_player Q & A