The words "Stable", "Testing" and "Unstable" are first and foremost pointing at package versions.
Packages enter Unstable once they have been correctly packaged as per Debian standards and tested for major incompatibilities in the "Experimental" branch. "Unstable" does not mean "Will crash", but "the application/library versions are upgraded continuously from upstream in this branch, and thus the versions are not stable".
Testing is the current candidate for the next "Stable" version. Packages propagate from "Unstable" when they have been deemed good enough for a possible inclusion in a future "Stable" release. In "Testing" they are further "tested", and here the application/library versions are also updated until the "freeze" occurs (this happens a few months before declaring this version as the new "Stable" version).
After the "freeze", the aggregate amount of known bugs among all applications/libraries in "Testing" are worked down to 0, and finally the release is declared Stable. This version will now retain the current package version with almost exclusively security updates during the lifetime of the stable distribution. "Why?", you ask: in e.g. a corporate environment where everything must "just work" (tm), this is essential, since no one will pat you on the back for keeping the packages at the latest version if it risks downtime because of newly introduced bugs.
At home you should in practice be able to be completely safe with "Testing". Many (including myself) use "Unstable", not because we like living on the edge and don't care about availability, but because this gets you new package versions and a good opportunity to help iron out bugs and such.
So, if you want to stay within Debian and have the most recent upstream package versions, use "Unstable".