- Ensure the program runs when its supposed to
- Ensure the program fails when its supposed to
- Function inputs
- Subroutine outputs
- Note, there is a school of thought that suggests
turning these off in prod
- Create test case for exception locations
- Ensure the program takes the right control path on the right toggles
- Very important that code is refactored to make testing this easy
- Namely, hiding multi if-statements behind routine interfaces
- This allows you to test, and therefore trust, the if-logic
- Then the control path toggled by it is implicitly secure
- Implicit Tests
- If one step of the system is correct:
- The steps after the tested step will have correct info
- If one step of the system is correct:
- Explicit Tests
- If one step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- And the next step of the system is correct
- If one step of the system is correct
- if/else entry and exit
- for/while loop routines
- Critical:
- Perform these tests on dummy data whose VALUES are VERY DIFFERENT from real data
- Here, we are exclusively focusing on the raw operations
- Also, try not to use
static variables
in your testing - better to rely on operations- (This is because if the program changes, so will the exepcted resulting static variables)
- Test any transform of any data that occurs
- Sorting
- Addition
- Creating new columns
- Filling NaNs
- Removing NaNs
- ETL sequences
(Not sold this must be done if everything else is tested)
- These are slow and bulky interfaces to
- Flat files
- Databases
- Anything that takes more than 4 seconds to test
- Ideally, break these into their own suite
- Ideally, have these operations be insulated such that you can test everything around the slow interface
- Do this without neccessitating calling the slow routines
- Checklists from this folder are being used
- Results of the reviews are tracked and used to assess individual growth?
- Checklists are actually effective in improving system quality?
- Excellent communication lines maintained with client
- Communication with client is done over the medium they like most
- Client understands they cant be shiny blue object people
- Client understands that feedback is meant to ensure team is building what theyve committed to building
- Feedback cycles are as short and tight as possible
- Dev team gives client feedback on their feedback
- A testing environment has been created?
- Test environment mimics dev environments?
- Unit tests are run on every pull request?
- Unit tests run fast enough to not impede development?
- Unit tests are kept up to date?
- Unit tests are created on pace with new functionality, if not before?
- Client has made time to witness or test new functionality
- Disparities between Dev understanding and Client expectation are addressed early and often
- Integration tests effectively test the system?
- Test fixtures have been installed to allow faster (and more frequent) testing?
- Performance tests are in place?
- Manual tests are nearly eliminated?