System testing usually refers to the testing of a specific system in a controlled environment to ensure that it will perform as expected and as required. From a Systems Development perspective, the term System Testing refers to the testing performed by the development team (programmers and other technicians) to ensure that the system works module by module (unit testing) and also as a whole. System Testing should ensure that each function of the system works as expected and all errors (bugs) are detected and analysed. It should also ensure that interfaces for export and import routines will function as required. After meeting the criteria of the Test Plan, the software moves to the next phase of quality check and undergoes User Acceptance Testing. User Acceptance Testing: UAT refers to the test procedures which lead to formal 'acceptance' of new or changed systems. User Acceptance Testing is a critical phase of any project and requires significant participation of 'End Users'. An Acceptance Test Plan is also developed detailing the means by which 'Acceptance' will be achieved. The final part of the UAT can also include a parallel run to compare the new system against the current one. The User Acceptance Test Plan will vary from system to system but, in general, the testing should be planned in order to provide realistic and adequate exposure. The testing can be based upon User Requirements Specifications to which the system should conform. However, problems will continue to arise and it is important to determine what will be the expected and required responses from various parties concerned including Users, Project Team, Vendors and possibly Consultants/Contractors.