There are two basic approaches to testing: functional and structural. In functional testing the structure of the program is not considered. Test cases are decided solely on the basis of the requirements or specifications of the program or module, and the internals module of the program are not considered for selection of test cases.
Due to its nature, functional testing is often called “black box testing.” In the structural approach, test cases are generated based on the actual code of the program or module to be tested. This structural approach is sometimes called “glass box testing”