The evident exception is the GUIs regression testing, which normally must be executed manually.
In most software development situations, it is considered good coding practice, when a bug is located and fixed, to record a test that exposes the bug and re-run that test regularly after subsequent changes to the program.
[7] Common strategies are to run such a system after every successful compile (for small projects), every night, or once a week.
Regression testing is an integral part of the extreme programming software development method.
Though it is expensive as it needs to re-run all the cases, it ensures that there are no errors because of the modified code.
[10] In a software development environment which tends to use black box components from a third party, performing regression testing can be tricky, as any change in the third-party component may interfere with the rest of the system (and performing regression testing on a third-party component is difficult, because it is an unknown entity).
Unit tests exercise individual functions, subroutines, or object methods.
A functional test may be a scripted series of program inputs, possibly even involving an automated mechanism for controlling mouse movements and clicks.