Testing
Please open notebook rrsepython-s2r1.ipynb
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
- laziness 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.
- Testing won’t correct 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
read output
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
?
Next: Reading - Designing Tests