What are the differences between unit testing, integration testing, system testing, and acceptance testing?