What we learned from Part 2, Functional Testing
Part 2, Functional Testing, has considered the behavior of your application in a wide range of situations, from security to usability to core application functions. These are all functional tests: when you do X, your application does Y. In that simple view, you check if your program's output is correct for all the relevant inputs.
That may sound exhaustive, but there are still types of testing we have not covered yet. In Part 3, Non-Functional Testing, we will consider destructive testing, in which you deliberately disable part of the working system to check its resilience and ability to recover. Load testing ensures that your application performs consistently within its specified limits, with no unexpected latency or intermittent errors.
Finally, stress testing checks what happens when your system is pushed beyond its limits and its ability to protect its core functions even when asked to do unreasonable workloads. Some of...