Functional Testing is probably the most widely used form of software testing in the Information Technology world today. The vast majority of software producing companies have tight budgets, tight deadlines and lots of competition. The main aim of this type of software testing is to answer the following question:
Does the software do what it was designed to do?
Software developments are nearly always driven by business requirements, as they form the reason why the software is being developed in the first place. Business requirements can be documented in several ways, either grouped under the one single banner of business requirements or separated into sections such as user requirements, functional requirements and system requirements etc. Functional Testing is typically planned to satisfy business requirements as a group or individually. Some requirements are not testable, which does not necessarily mean that there was a mistake, but simply means another form of testing will have to be used to satisfy the requirement. Functional requirements should always be testable however. It is common for company departments and project stakeholders alike to request a list of requirements and their associated test case results. This is why the importance of this type of software testing is ranked highly in the development life-cycle.
Requirements are created at the beginning of the software development life-cycle, so Functional Testing can be a consideration very early on. Questions like “How am I going to test this?” are valid at any stage, and so the earlier on it can be answered the better. Requirement reviews can be said to include Functional Testing as both an input and an output, such is the importance of this type of testing.
Functional Testing is based on the external behavior of the software under test, otherwise known as ‘black-box testing’, which means that no knowledge of the inner design of the code or logic is required. An example of a form of this type of software testing is ‘Security Testing’, which tests the functions relating to threats from malicious persons and viruses etc. Interoperability testing can also be considered to be a form of Functional Testing as the capability of the software product to interact with other specified components or systems is being tested.