Actually, pretty much all professional software development models include all the stages described by username. The difference is that the more sophisticated ones interleave those stages one way or another, which enables them to get a better result in a shorter time.

Why? Because in software development, it is embarassingly often the case that you don't know how to do it right until after you've done it wrong, and having to start over from scratch because you find out during testing that the whose system is crap because the requirements weren't specified exactly is a real bitch. So instead, you try to do everything at the same time in a way that allows fundamental changes with minimal pain (by trying to make them early).

Realizing the necessity for this and incorporating it into your project management is the first and most important step towards mastering software engineering.