Functional Testing: An Overview