Testing is Confidence A Developer’s Perspective Brian Demers Open Source Developer BrianDemers bdemers

Who is this guy? @BrianDemers | bdemers

source: Silicon Valley @BrianDemers | bdemers

VS @BrianDemers | bdemers

VS @BrianDemers | bdemers

Developer Productivity Engineering @BrianDemers | bdemers

Topics @BrianDemers | bdemers • Why do we test ? • Types of Testing • Flaky Tests • Developer Productivity • Best Practices

Why do we test ? @BrianDemers | bdemers

@BrianDemers | bdemers

@BrianDemers | bdemers

Why do we test ? @BrianDemers | bdemers

Testing is Con dence fi @BrianDemers | bdemers

Types of Testing @BrianDemers | bdemers • Manual • Unit • Integration • Functional • Non-Functional

Manual Testing Usability Filling in the non-automated gaps Exploratory @BrianDemers | bdemers

Unit Testing @BrianDemers | bdemers • Tests for isolated chunks of code • NO external dependencies • Fast

You cannot refactor without unit tests @BrianDemers | bdemers

What to Test ? @BrianDemers | bdemers

Example Code public User addUser(String firstName, String lastName) { String username = firstName.charAt(0) + lastName; return database.createUser(username, firstName, lastName); } @BrianDemers | bdemers

Unit Tests must be FAST to avoid context switching source: xkcd.com/303 @BrianDemers | bdemers

source: https://www.cshl.edu/quiz/brain-interrupted/ @BrianDemers | bdemers

Integration Tests Aggregates chunks of code and tests them together High Level Tests Has external dependencies @BrianDemers | bdemers

Build Time [INFO] [INFO] [INFO] [INFO] [INFO] [INFO] [INFO] [INFO] [INFO] @BrianDemers | bdemers Java Java Java Java Java Java Java Java Java SDK SDK SDK SDK SDK SDK SDK SDK SDK …………………………… :: Swagger Templates ………… :: API …………………….. :: Impl ……………………. :: Extensions :: HTTP Client …. :: Integration Tests ………… :: Examples ………………… :: Examples :: Quickstart Code .. :: Coverage ………………… SUCCESS SUCCESS SUCCESS SUCCESS SUCCESS SUCCESS SUCCESS SUCCESS SUCCESS [ 2.991 s] [ 2.539 s] [ 7.532 s] [ 18.842 s] [ 11.552 s] [04:31 min] [ 0.036 s] [ 7.390 s] [ 1.401 s]

Component Tests (anti-pattern) @BrianDemers | bdemers

Component Tests (Not always bad) Spring & Guice Binding Integrating with Systems Custom Database Logic @BrianDemers | bdemers

Source: TechValidate. TVID: C42-7D4-678 @BrianDemers | bdemers

https://www. ickr.com/photos/jronaldlee/4579611880/ CC BY 2.0: James Lee fl @BrianDemers | bdemers

Developer Productivity Engineering (DPE) @BrianDemers | bdemers

Slow tests? • • Check Email @BrianDemers | bdemers • Speed up test Split up codebase Faster laptop

Be Happier Developers! Image: © wowomnom – stock.adobe.com @BrianDemers | bdemers

Quality of Test Code @BrianDemers | bdemers

Flaky Tests @BrianDemers | bdemers

The test is flaky. What do you do now? a. Try it again b. Re-run it c. Re-run it again d. Ignore it and approve PR e. All of the above @BrianDemers | bdemers

Track and Analyze Flaky Tests @BrianDemers | bdemers

Flaky Test Days @BrianDemers | bdemers

Functional & Non-Functional Tests @BrianDemers | bdemers

Functional Testing Tests a user’s action and the result as seen by the user. User Story: As a user, I want to search for my customers by their rst and last names. fi @BrianDemers | bdemers

Non-Functional Tests @BrianDemers | bdemers • Performance • Capacity • Quality • Security • Backup • Fail-over • Licensing • …

Code Quality @BrianDemers | bdemers

Code Coverage Cult public void indoctrinate(User user, Cult cult) { cult.add(user.getName()); } @BrianDemers | bdemers

Licensing @BrianDemers | bdemers

Security Test security at every level (unit, integration, etc) Automate application scanning Be involved with up stream dependencies @BrianDemers | bdemers

What Types of Testing Should I Use? @BrianDemers | bdemers

Tips @BrianDemers | bdemers

@BrianDemers | bdemers

@BrianDemers | bdemers

Maven Daemon $ mvnd verify @BrianDemers | bdemers

Multithreaded Builds Build and Test in parallel

Dealing with Legacy Code Legacy Code code without tests @BrianDemers | bdemers

Testing is Con dence fi @BrianDemers | bdemers

Questions? Slides, Links & Free Swag @BrianDemers | bdemers