Testing Methodology
Unit testing: The act of testing software at the most basic (object) level. Generally performed by developers, run in "friend classes" with code-level access to read and manipulate objects.
Acceptance testing: Also known as acceptance tests, build verification tests, basic verification tests, these are rudimentary tests which prove whether or not a given build is worth deeper testing. The term "smoke test" is a colloquial term -- when machines are built, engineers will power them up and just let them run, looking for smoke as a sign of serious problems.
Functional testing: Functional testing takes a user story or a product feature and tests all of the functionality contained within that feature. For example, in a photo application like Photoshop, functional testing would cover all the functionality contained within a feature like opening files (resolving file paths, determining appropriate format filters, passing the file path off to the filter) as well as handling errors within that functionality.
System testing: Testing the project as a collective system. For the Photoshop application, an example would be to open a file in a given format, manipulate that file in various ways, and then output the file. System testing generally combines multiple features into an end-to-end process or scenario.
Performance testing: Tests an application's performance characteristics, be it file size, concurrent users, or mean-time-to-failure.
Security testing: A collection of tests focused on probing an application's security, or its ability to protect user assets.



