There are many different tests that can be carried out.
Validation tests make sure that the system only allows 'sensible' data to be entered. Unless the input data is sensible, the computer could crash or produce results that don't make sense.
Verification tests clarify that the program is working as intended and is producing the outputs that were expected. This will be based on criteria set out in the first stage of the development cycle.
Functional tests look at a specific function within the program. The purpose of a functional test is to see if all of the system or units work in the way that a user would expect them to work. It involves checking against a list of the functions the software was designed to perform (a specification) and to see if it does what it was intended to do.
Non-functional tests look at the bigger picture of how a program performs. For example, a program might perform as expected (functional) with one user, but then crash unexpectedly if multiple users use it (non-functional).
Typical non-functional tests include: