Efficient Software Testing

If you write any sort of code, chances are you have encountered bugs, even surprising ones that caused a lot of headache.

This course teaches a collection of simple techniques that not only help you prevent bugs, but also help you design software and focus on the broader structure of your project.

It will show you how testing can be very efficient with your time, and also fun!

Course Contents:

1. Approaches: overview of testing and workflows
2. Test-Driven Development: how to integrate testing in your work
3. Unit Testing: testing individual parts
4. Integration Testing: testing groups of unit working in tandem
5. Good Test Design: principles for good and efficient testing
6. Testing Complex Code: systemic approaches for complicated software
7. Testing Random Code: testing software that uses randomness

  • 1. Approaches

    8m 30s

    The various methods are briefly presented in a conceptual context and some typical use cases are mentioned.

    Learning Goals:
    1. Get an overview of software testing methods
    2. Form a mental map: when and how to use methods

  • 2. Test-Driven Development


    The Test-Driven Development (TDD) process is described as a way for building software in step with testing, as well as a tool for designing and refining software.

    Learning Goals:
    1. Understand the TDD workflow
    2. Learn to use TDD as a design tool

  • 3. Unit Testing


    The unit testing method, intended for testing individual units of software on their own, is presented, along with examples and a demo.

    Learning Goals:
    1. Understand what unit tests are concerned with
    2. How set up quick unit tests

  • 4. Integration Testing

    7m 32s

    The need for integration testing is presented, along with its benefits and best practices for performing it during development cycles.

    Learning Goals:
    1. Learn what integration testing is concerned with
    2. See how it can find bugs in groups of correctly-working units

  • 5. Good Test Design


    Good general testing principles are presented, to give a solid foundation that can be used in most circumstances.

    Learning Goals:
    1. Understand some typical psychological biases around testing
    2. Assess and address risk
    3. Form a defensive testing mindset

  • 6. Testing Complex Code


    Testing strategies and demos for complex code are presented, with a focus on property-based testing (PBT). Common PBT patterns and typical examples are covered.

    Learning Goals:
    1. Recognize when code can have complex behavior
    2. Form a systemic perspective on your code
    3. Learn how to generate t...

  • 7. Testing Random Code


    Testing approaches are presented for randomized code, such as statistical or data processing software, machine learning, games, and much more. Additionally, best practices for randomized research software are listed.

    Learning Goals:
    1. Form a systemic image of randomness in your code
    2. Learn to...