This post provides a list of major differences between Functional Testing and Non-Functional Testing.
Definition
Functional Testing is a process to validate that each functionality of a software application is implemented according to the end-user or customer expectations conforming to the software specification document.
Non-Functional Testing ensures that the software application meets the specified performance requirements. It includes testing or readiness of several non-functional aspects of the application specific to performance, reliability, security etc.
Timing
Functional Testing will always be done prior to Non-Functional Testing to make sure that the application works according to the specifications.
Non-Functional Testing will be done once Functional Testing completes. It assumes that the application works according to the business and functional requirements, hence focuses on other aspects of the application.
Resources
Functional Testing can be performed manually. It is preferred to test the application manually before automating the manual test cases. Test automation has to be done based on application stability and the project budget.
Non-Functional Testing is difficult to perform manually. It always needs good tools and experienced resources to cover non-functional aspects of the application.
Testing Types
Types of Functional Testing includes Unit Testing, Smoke Testing, Integration Testing, Regression Testing, System Testing, User Acceptance Testing.
Types of Non-Functional Testing includes Volume testing, Load Testing, Stress Testing, Recovery Testing, Scalability Testing, Security Testing
Test Cases & Test Data Source
In Functional Testing, test cases and test data preparation always need the functional specification document.
In Non-Functional Testing, the performance requirements can be considered as the source to prepare test cases and test data.
Testing Tools
Testing tools used for Functional Testing includes UFT(Previously QTP), Selenium, Ranorex, Telerik Test Studio, Micro Focus, Sahi, TestComplete, IBM Rational.
Testing tools used for Non-Functional Testing includes JMeter, LoadRunner, WebLOAD, NeoLoad, LoadComplete.
Test Case Example
Functional Testing - Test whether the user is able to login to the application.
Non-Functional Testing - Time required to load the home page.