Module (Unit, component) testing is aimed at examining separate small components of the software application which, as a rule, can be tested independently of each other. In this type of testing, separate functions, methods on classes, classes themselves, the relationship between classes, small libraries, separate components of software applications are checked. Often, this testing is performed using specialized technologies and test automation tools that significantly facilitate and accelerate the development of relevant test cases.
Quality control company is involved in reviewing the testing stages of development lifecycle to ensure that the products are in compliance with requirements/specifications.
Unit Testing focuses on investigating atomic parts of the code; component testing is meant to check libraries and structural components of an application. But this classification has not been standardized yet, and different authors interpret testing types in different ways.
Integration Testing (integration testing, pairwise integration testing, component integration testing, system integration testing, interface testing, incremental testing, thread testing) is conducted to examine interrelation between several components of a software application (each of them, in turn, is verified individually during module testing. Unfortunately, even if you use the highest quality components, their interaction may appear to be problematic. Just the problems of the kind are identified in the course of integration testing.
By the way, continuous integration services are designed mostly for private and open source projects; they help to support these throughout the entire development cycle by building & testing source code frequently.
System Testing is used to check application as a whole, which was built from components tested in the previous stages. This verification process allows to detect defects in the components and properly interact with the app from the perspective of the end user, employing many other types of testing.
There is a tendency to outsource software testing as this way of verifying IT products has proven to be very effective. You manage to improve the quality of your goods while paying much less for the work than you would do if using onshore testing services.