Functional Testing in Software: Definition, Types, and How to Run It