Testing is Confidence - A Developer’s Perspective

A presentation at JCON EUROPE in June 2023 in Cologne, Germany by Brian Demers

Slide 1

Slide 1

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

Slide 2

Slide 2

Who is this guy? @BrianDemers | bdemers

Slide 3

Slide 3

source: Silicon Valley @BrianDemers | bdemers

Slide 4

Slide 4

VS @BrianDemers | bdemers

Slide 5

Slide 5

VS @BrianDemers | bdemers

Slide 6

Slide 6

Developer Productivity Engineering @BrianDemers | bdemers

Slide 7

Slide 7

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

Slide 8

Slide 8

Why do we test ? @BrianDemers | bdemers

Slide 9

Slide 9

@BrianDemers | bdemers

Slide 10

Slide 10

@BrianDemers | bdemers

Slide 11

Slide 11

Why do we test ? @BrianDemers | bdemers

Slide 12

Slide 12

Testing is Con dence fi @BrianDemers | bdemers

Slide 13

Slide 13

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

Slide 14

Slide 14

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

Slide 15

Slide 15

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

Slide 16

Slide 16

You cannot refactor without unit tests @BrianDemers | bdemers

Slide 17

Slide 17

What to Test ? @BrianDemers | bdemers

Slide 18

Slide 18

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

Slide 19

Slide 19

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

Slide 20

Slide 20

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

Slide 21

Slide 21

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

Slide 22

Slide 22

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]

Slide 23

Slide 23

Component Tests (anti-pattern) @BrianDemers | bdemers

Slide 24

Slide 24

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

Slide 25

Slide 25

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

Slide 26

Slide 26

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

Slide 27

Slide 27

Developer Productivity Engineering (DPE) @BrianDemers | bdemers

Slide 28

Slide 28

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

Slide 29

Slide 29

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

Slide 30

Slide 30

Quality of Test Code @BrianDemers | bdemers

Slide 31

Slide 31

Flaky Tests @BrianDemers | bdemers

Slide 32

Slide 32

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

Slide 33

Slide 33

Track and Analyze Flaky Tests @BrianDemers | bdemers

Slide 34

Slide 34

Flaky Test Days @BrianDemers | bdemers

Slide 35

Slide 35

Functional & Non-Functional Tests @BrianDemers | bdemers

Slide 36

Slide 36

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

Slide 37

Slide 37

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

Slide 38

Slide 38

Code Quality @BrianDemers | bdemers

Slide 39

Slide 39

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

Slide 40

Slide 40

Licensing @BrianDemers | bdemers

Slide 41

Slide 41

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

Slide 42

Slide 42

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

Slide 43

Slide 43

Tips @BrianDemers | bdemers

Slide 44

Slide 44

@BrianDemers | bdemers

Slide 45

Slide 45

@BrianDemers | bdemers

Slide 46

Slide 46

Maven Daemon $ mvnd verify @BrianDemers | bdemers

Slide 47

Slide 47

Multithreaded Builds Build and Test in parallel

Slide 48

Slide 48

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

Slide 49

Slide 49

Testing is Con dence fi @BrianDemers | bdemers

Slide 50

Slide 50

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