Forth's necessity of carrying the stack in short-term memory while coding and debugging has seemed to me its deepest flaw as a tool for mortals.
From the debugging side, well-factored code consists primarily of short pure functions with a very small number of code paths. This couldn't be a more perfect scenario for TDD. In my own projects I use an extremely simple unit testing system called the Test Anything Protocol (TAP). Here's an example of a fixture:
https://github.com/JohnEarnest/Mako/blob/master/lib/Test/tes...