Due to the constant increasing complexity in the systems we use, reliance on abstractions increase in the software development industry. Each of these abstractions attempts to hide the complexity, allowing me as a software developer to create a code that can cater for all the variations in complexity that is required in the modern computing. To create reliable software, there is a greater need for me to learn and understand many of the abstractions underlying details. Abstraction also finds a lot of applications in software reuse. In this case, abstraction plays a central role. For effective software artifacts reuse, concise and expressive abstractions are essential. Higher levels abstractions in the reuse technique reduce the effort required to go from the initial concept of a software system to representations in the reuse technique (Medvidovic & Taylor 2000: 70-93).
During the verification of software, abstraction is highly used. This allows debugging of a specific software component. Simulation and validation of the software component is done at each abstraction level, resulting in abstraction of different components of the target hardware architecture. The abstract architecture model hides details of the underlying implementation of the hardware platform, while ensuring a sufficient level of control that the software code can be validated in terms of performance, efficiency, and reliable functionality (Popovich, 2010: 17).
Abstraction is a powerful heuristic. It has allowed development of systems that implement and integrate abstraction in problem-solving process. Development of systems with abstraction helps to improve on the efficiency of the systems. On the other hand, from the basic understanding that abstraction hides the complexity underlying the systems, we deduce that it reduces the search space. The concept of data abstraction helps software developers in the integration of both structural and