1 Introduction
The art of effective and efficient software development has long depended on programmers being able to sort through pages of program specifications to assemble a set of procedural elements which herald data and other resources of the computer and deliver solutions to the user in a timely manner.[1] While developing software, a programmer must select an appropriate combination of algorithms and data structures that facilitate the delivery of a software solution that addresses the wants and needs of the end user within the constraints of time, cost and available computing power. However, when the technical specifications fail to convey the full meaning of the end user requirements, misunderstandings will arise between the end-user and the program developer and will take on the form of output errors, unwanted features and awkward user interfaces.