Efficient Software Testing

Avoid embarrassing bugs!
Learn to verify and design software using efficient testing techniques.


There's no such thing as perfect software.

Humans make mistakes, and AI-generated code is also often wrong. Some bugs are mild annoyances, others are a source of embarrassment, huge costs, privacy nightmares, or worse.

However, you can make good and reliable software.

The testing approaches in this course will let you catch most bugs early in development, with little overhead.

Watch the free intro for more details!

Course Contents

  7 chapters, from basic to advanced
  1.5 h
  English
* In local currency.
Payment and access to videos is done using Vimeo. Separate Terms of Service and Privacy Policy apply.
Approaches Overview of testing and workflows 8m 30s
Test-Driven Development How to integrate testing into your work 12m
Unit Testing Testing individual software parts 15m 30s
Integration Testing Testing groups of units working in tandem 7m 30s
Good Test Design Principles for good and efficient testing 14m
Testing Complex Code Systemic approaches for complicated software 23m
Testing Random Code Testing software that uses randomness, including scientific research software 10m 30s

The course does not award a certificate, but it will help prepare you for pursuing entry-level certifications like Certified Tester Foundation Level (CTFL) from ISTQB or Certified Software Test Professional Associate Level (CSTP-A) from IIST.

Course Requirements

You should:

  • be comfortable working with functions
  • know some basic programming jargon (recommended)
  • know how to run commands from the terminal (optional)

The course is mainly aimed at beginner–to–intermediate level programmers with a formal computational background (computer science, software engineering, adjacent), as well as scientists, researchers, or engineers with an informal computational background, who write programs as part of their work.


About the Instructor

Filip has been programming for 25 years and has abundant experience with both professional and scientific research software development. He has also played a range of roles, from high-level design, modeling, analysis, to building large systems from scratch, as well as handling project coordination and customer support.
Areas he has worked in include machine learning, big data processing, computational biology, bioinformatics, mathematical modeling, algorithm design, simulation and analysis, software verification, scheduling and optimization, and database design.
He is a strong proponent of Agile methodologies for both industry and science, and he has a pragmatic, quality‑oriented philosophy to software craftsmanship.




Page last updated November 16, 2023