# Testing¶

## Introduction¶

### A few reasons not to do testing¶

Sensibility

Sense

It’s boring

Maybe

Code is just a one off throwaway

As with most research codes

No time for it

A bit more code, a lot less debugging

Tests can be buggy too

See above

Not a professional programmer

See above

Will do it later

See above

### A few reasons to do testing¶

• lazyness testing saves time

• peace of mind tests (should) ensure code is correct

• runnable specification best way to let others know what a function should do and not do

• reproducible debugging debugging that happened and is saved for later reuse

• code structure / modularity since the code is designed for at least two situations

• easier to modify since results can be tested

### Not a panacea¶

Trying to improve the quality of software by doing more testing is like trying to lose weight by weighting yourself more often. - Steve McConnell

• Testing won’t corrrect a buggy code

• Testing will tell you were the bugs are…

• … if the test cases cover the bugs

### Tests at different scales¶

Level of test

Area covered by test

Unit testing

smallest logical block of work (often < 10 lines of code)

Component testing

several logical blocks of work together

Integration testing

all components together / whole program

• Always start at the smallest scale!

• If a unit test is too complicated, go smaller.

### Legacy code hardening¶

• Very difficult to create unit-tests for existing code

• Instead we make a regression test

• Run program as a black box:

setup input
run program
check output against expected result

• Does not test correctness of code

• Checks code is as similarly wrong on day N as day 0

### Testing vocabulary¶

• fixture: input data

• action: function that is being tested

• expected result: the output that should be obtained

• actual result: the output that is obtained

• coverage: proportion of all possible paths in the code that the tests take

### Branch coverage:¶

if energy > 0:
! Do this
else:
! Do that


Is there a test for both energy > 0 and energy <= 0?