This post describes my current approach to testing. When I started
programming professionally, I knew how to write good code, but good
tests remained a mystery for a long time. This is not due to the
lack of advice — on the contrary, there’s abundance of information &
terminology about testing. This celestial emporium of benevolent
knowledge includes TDD, BDD, unit tests, integrated tests,
integration tests, end-to-end tests, functional tests,
non-functional tests, blackbox tests, glassbox tests, …
Knowing all this didn’t help me to create better software. What did
help was trying out different testing approaches myself, and looking
at how other people write tests. Keep in mind that my background is
mostly in writing
compiler
front-ends for
IDEs. This is a rather niche area, which is especially amendable to
testing. Compilers are pure self-contained functions. I don’t know
how to best test modern HTTP applications built around inter-process
communication.