Testing is the process of executing a program with the intention of finding errors. Software testing is an analysis that gives data to estimate quality and includes executing programs to find bugs. Testing is done by software testers, developers, project leads, and end users and includes both manual and automated methods. Functional testing examines a system's functionality against requirements while non-functional testing examines reliability, efficiency and other non-functional aspects.