I used to be a software testing engineer for a cad/cam company... so, I have a lot of experience with the software dev. lifecycle. This is a basic model of how it usually works:
1) Developer writes code, and performs whitebox testing.
2) After the program will compile without errors, and won't crash by simply running it, it's passed on to the inhouse software testers, and they perform Alpha testing. Alpha testing is only done on internal builds... an application will go through thousands of versions before finished product. The developers then continue to add more features and fix bugs reported by the testers, test/debug/compile, and then pass on a new internal build to the inhouse testers for alpha testing.
3) After all features that are going to be included in the final version are developed, and the internal testers have completed alpha testing (basically they can't find any more bugs), then a beta release is built and given to a select group of beta testers.
4) Beta testers assimilate feedback through whatever channels are set up, and the developers use the feedback to fix bugs. They build more internal versions, and give them to the inhouse testers for more alpha testing... and then when this stage of alpha testing is done, another beta release is built and given to the group of beta testers. This process "loops" until the beta testers aren't finding any more bugs (or until the deadline starts to get too close... this is usually the case. haha).
5) Once everyone who is involved (developers, testers, beta testers, etc.) are confident with the app another beta release is built and is given the name "release candidate". This just means it's getting very close to completion and may be the last beta release... unless a show stopping bug is found.
6) Once everyone is satisfied with the release candidate (or the deadline is tomorrow), they make a final build and release it to the public.
This whole process is the reason why you see version numbers such as this: V4.3.5.2.01. The 2 could indicate a second release candidate, and the 5 could mean the fifth beta release, and so on (although not every dev team will use the same methods, but usually something similar).