Each kind of testing has a different focus. Unit testing is a way of making sure that the code works the way the developer thinks it should. Unit testing is performed by the developer who wrote the code. It exercises the interaction between old and new code. Integration testing is usually performed by the developer of the new code.
System testing determines whether the software as a whole works together.
System testing is best performed by a separate group of testers. Beta testing is similar to system testing except that it's handled informally by users external to the development process, usually external to the entire company. The idea behind beta testing is to get a certain level of real-world use. There are additional kinds of testing, some of which focus on requirements and designs, for example. For details, see the books in the additional reading list at the end of this paper.