With functional tests, you test the application against the given business requirements. They don't require the application to be in full operation. These include:
- Unit testing
- Integration testing
- Acceptance testing
And with non-functional tests, you test the application against its operational environment. For instance, the app will connect to a real data source and use an HTTP connection. These include:
- Security testing
- Usability testing
- Compatibility testing