Component testing verifies individual software components and modules in isolation from the rest of the system using stubs and drivers. Integration testing tests interfaces between components and interactions between systems. System testing evaluates the entire system against requirements and from the perspective of end users. Acceptance testing is conducted by customers or users to determine if the system is fit for purpose prior to deployment.