Unit Tests
Testing at the smallest granularity. Ideally, for every single function in a software project there should be a corresponding test routine, which makes sure that the function really delivers what it should be doing by setting some context and then calling the function in both meaningful but also wrong ways to see if the function returns what's expected for each of those tries. It is actually as important to also test "stupid" function calls just to make sure that the function is able to handle them too and doesn't crash the whole project.