Unit Testing – Testing a new or modified portion of code to see whether or not it is fit for use. In procedural programming a unit may be an individual function or procedure while in object-oriented programming, the smallest unit is usually a class. Unit Testing is usually conducted by a colleague of the original developer following a documented unit test schedule.
Integration Testing – Integration testing is typically performed after Unit Testing to ensure that the sections of code that have been modified, once integrated into the main application, do not introduce bugs or issues. Typically, this would be an application build. Automating the build process is advantageous, and having regular, daily, builds is good practice to eliminate the “big bang” when preparing a software release.
Smoke Testing – Referred to by some industry professionals as a “sanity check”, this is a cut down System Test that should test as many different areas of a system with the least amount of time and effort. Subject to a successful Smoke Test, a more thorough System Test can then be conducted.
System Testing – System Testing covers a number of testing disciplines and can be broken down into smaller components, but, ultimately they all serve the same objective. System Testing aims to verify that new and/or changed functionality functions as it should. Normally system tests would be run against functional requirements.