Developments in software technology continue to be dynamic. New tools and techniques are announced in quick succession. This has forced the software engineers and industry to continuously look for new approaches to software design and development, and they are becoming more and more critical in view of the increasing complexity of software systems as well as the highly competitive nature of the industry. These rapid advances appear to have created a situation of crisis within the industry. The following issued need to be addressed to face the crisis:
• How to represent real-life entities of problems in system design?
• How to design system with open interfaces?
• How to ensure reusability and extensibility of modules?
• How to develop modules that are tolerant of any changes in future?
• How to improve software productivity and decrease software cost?
• How to improve the quality of software?
• How to manage time schedules?

Software Evaluation

Ernest Tello, A well known writer in the field of artificial intelligence, compared the evolution of software technology to the growth of the tree. Like a tree, the software evolution has had distinct phases “layers” of growth. These layers were building up one by one over the last five decades as shown in fig. 1.1, with each layer representing and improvement over the previous one. However, the analogy fails if we consider the life of these layers. In software system each of the layers continues to be functional, whereas in the case of trees, only the uppermost layer is functional.

Procedure-Oriented Programming

In the procedure oriented approach, the problem is viewed as the sequence of things to be done such as reading, calculating and printing such as cobol, fortran and c. The primary focus is on functions. A typical structure for procedural programming is shown in fig.1.2. The technique of hierarchical decomposition has been used to specify the tasks to be completed for solving a problem.

Object Oriented Paradigm

The major motivating factor in the invention of object-oriented approach is to remove some of the flaws encountered in the procedural approach. OOP treats data as a critical element in the program development and does not allow it to flow freely around the system. It ties data more closely to the function that operate on it, and protects it from accidental modification from outside function. OOP allows decomposition of a problem into a number of entities called objects and then builds data and function around these objects. The organization of data and function in object-oriented programs is shown in fig.1.3. The data of an object can be accessed only by the function associated with that object. However, function of one object can access the function of other objects.

Software crisis is a term used in the early days of computer science for the difficulty of writing useful and efficient computer programs in the time required. The software crisis was due to rapid increases in the power of computers and the complexity of problems that could not be addressed. With the increase in software complexity, many software problems arose because existing methods were insufficient.

The causes of the software crisis were linked to the overall hardware complexity and software development process. The crisis manifested itself in several ways:
• Overweight projects
• Projects that are over-executed
• The software was very inefficient
• The software was of poor quality
• The software often did not meet the requirements
• Projects were unmanageable and the code difficult to maintain
• The software was never delivered.

The main reason is that improvements in computing power had outpaced programmers' ability to effectively use those capabilities. During the last decades, several processes and methodologies have been developed to improve software quality management, such as procedural programming and object-oriented programming. However, software projects that are large, complicated, poorly specified and involve unknown aspects remain vulnerable to large and unforeseen problems.