Contrary to popular belief, Functional testing can be and should be performed on the beginning of the development stage. Pretty much a black box testing technique, it involves initial feeding of input to the system and a subsequent validation of the response, against the main specifications.
It tests the logical reasoning pertaining to the working of the program. For example, it can check if the result arising out of a calculation is true or incorrect.
One of the most preliminary of tests, smoke testing reveals the most elementary of errors. It addresses the most basic of functionalities crucial to the working of the product. It addresses questions like, "Can the program run?" "Is the window opening on pressing the click button?"
As the name suggests, user acceptability testing involves creation of a scenario where the targeted customers or the end users get a chance to review the functioning of a product. Can be something as basic as testing the attachment function in Gmail.
Many a times, a bug is revealed in the functioning of an application, post minor variation in configuration due to an upgrade. This is called a regression. Regression testing's aim is to eliminate any such eventuality and make the product resistant to glitches in the aftermath of a patch or upgrade.
As part of a strong foundation towards building a top class software product, functional testing thus proves to be the bed rock and is a crucial part of every test routine.
Click for complete information about functional testing tools here.