Functional testing refers to activities that verify a specific action or function of the code. These are usually found in the code requirements documentation, although some development methodologies work from use cases or user stories. Functional tests tend to answer the question of "can the user do this" or "does this particular feature work."
Functional testing is testing the application against business requirements. Functional testing is done using the functional specifications provided by the client or by using the design specifications like use cases provided by the design team.
Functional Testing covers:
- Unit Testing
- Smoke testing / Sanity testing
- Integration Testing (Top Down, Bottom up Testing)
- Interface & Usability Testing
- System Testing
- Regression Testing
- Pre User Acceptance Testing(Alpha & Beta)
- User Acceptance Testing
- White Box & Black Box Testing
- Globalization & Localization Testing
Non-functional testing refers to aspects of the software that may not be related to a specific function or user action, such as scalability or other performance, behavior under certain constraints, or security. Non-functional requirements tend to be those that reflect the quality of the product, particularly in the context of the suitability perspective of its users.
Non-Functional Testing covers:
- Load and Performance Testing
- Ergonomics Testing
- Stress & Volume Testing
- Compatibility & Migration Testing
- Data Conversion Testing
- Security / Penetration Testing
- Operational Readiness Testing
- Installation Testing
- Security Testing (Application Security, Network Security, System Security)