To understand the need of software development, we need to stop briefly to look back to the recent past of computing. This history helps to understand the problems that began to become apparent in the late sixties and early seventies, and the solutions that have been active in the field of software for creating. They mentioned some of the problems, such as "The software Crisis," so named for the symptoms of the problem. The situation might have called "The Complexity Barrier," so named for the primary cause of the problems. Some refer to the software crisis in the past tense. The crisis is not yet over, but thanks to the development of many new techniques that are now included under the heading of software development, we have made and will continue to have progress.
In the early days of computing was the primary concern in the building or acquiring the hardware. Software almost expected to take care of yourself. The consensus held that "hardware" is "hard" to change, and the "software" of "soft" and easy to change. According to most people in the industry carefully planned hardware development but gave considerably less forethought to the software. If the software is not working, it was believed that it would be easy enough to change until it works. In that case, why bother to plan?
The cost of software has attained such a small fraction of the cost of the hardware that no one considered very important to manage its development. Everyone, however, saw the importance of producing programs were effective, and ran quickly because of the time saved on expensive hardware. People time was assumed to save machine time. This is how people process efficient received little priority.
This approach was deemed appropriate in the early days of computing, when the software was simple. However, the computing matured, programs and projects become increasingly complex growing, and programs regularly since then defined, written, operation and maintenance of all the same person, the program began to develop teams of programmers to meet someone & # 39; expectations.
than the individual effort through the work of the group. Communication and coordination which once went to a man's head had to happen between leaders of many individuals, so the whole process is more complicated. As a result, communication, management, planning and documentation became critical.
Consider this analogy: carpentry work to build a simple house for himself without more than a general concept of the plan. He was able to work things out and change the work progresses. It & # 39; and that the early programs were written. But if the home is more complicated, or if it is built for someone else, the carpenter has to plan more carefully, that the house was to be built. Plans need to consider the future owner before construction begins reviewed. And if the house is built by many carpenters, the whole project will certainly have to be planned prior to the start of work to build a single table of the house, the other did not build another house on the other side. Scheduling becomes a key element to the cement contractors pour the basement walls before the carpenters start the framing. As housing becomes more complex, and more people & # 39; s work should be coordinated, blueprints and management plans required.
The programs become more complex, the early methods used to make blueprints (flowcharts) were no longer satisfactory to represent this greater complexity. And it's so hard to become a person who needs a program written to convey to another person, the programmer just what he wanted, or for programmers to convey to each other what they are doing. In fact, no better visualization methods become even more difficult with a programmer to keep track of what he was doing.
The time needed to write programs, costs began to exceed all estimates. It was not unusual for systems cost more than twice as many had predicted and the weeks, months or years longer than expected. The system is turned over to the client often does not work properly because of money or time ran out before the programs could be developed as originally planned. Or the program is so complex that any attempt to fix a problem produced more problems than it fixed. As a client, finally he saw what he starts, often changed their minds about what they want. At least one very large military software systems project costing several hundred million dollars was abandoned because it could never be made to work properly.
The quality of the programs has become a big concern. As computers and programs used in more basic tasks, such as monitoring of life-saving equipment, program quality took on new meaning. Because of increased dependency on computers and in many cases no longer do without them, we discovered how important it is to operate.
Making a change within a complex program turned out to be very expensive. Often that the program was not a little bit different so heavy that it was easier to throw out the old program and start again. This was, of course, expensive. The evolution of software development approach to learning systems develop that are built well enough the first time that simple changes can be easily solved.
However, the hardware was growing less and less expensive. Tubes were replaced by transistors and transistors were replaced by integrated circuits until micro computers costing less than three thousand dollars has become a multi-million dollars. As to how quickly change is made, the cost of a given amount of calculation is reduced by half every two years. Since this adjustment, the time and cost to develop the software is not as small as the hardware that may be disregarded.
As the cost of hardware plummeted, software is still written by people whose wages are rising. The savings systems improve the productivity of software development from the use of compilers, assemblers, and database management is not acting as fast as the hardware cost savings. Indeed, today software costs not only can no longer be ignored, become greater than the hardware cost. Some current developments such as nonprocedural (fourth generation) languages and artificial intelligence (fifth generation), show promise in increasing the productivity of software development, but are just now beginning to see that it is possible.
The other problem was that the previous programs was often not fully understood what the program needed to do. After the program has been completed, the client began to express dissatisfaction. And if the customer is dissatisfied, ultimately the producer also unhappy. As time went by software developers learned to lay out paper and pencil exactly what you intend to do before starting. Then it would review the plans for the client, if the client is satisfied & # 39; s expectations. It is simpler and less expensive to carry out these changes in the paper and pencil version than to the system after they are built. Using good planning makes it less likely that the changes to be made when the program ends.
Unfortunately, until a few years ago no good method of representation existed to describe satisfactorily systems as complex as those that are being developed today. The only good representation of what the product will look like it was the finished product. The developers were able to demonstrate to customers what they planned. And customers could not see whether what the software was what they wanted until it was built. Then it was too expensive to change.
Again, consider the analogy of building construction. An architect draw a floor plan. The client usually refers markets, as the designer intended and does not give feedback that is appropriate. Floorplans reasonably easy for the layman to understand, because most people are aware of the drawings representing geometrical objects. The architect and the client share common concepts of space and geometry. But the software engineer must represent the client system that includes logic and information processing. Since they have no common concepts of the language, the software engineer must teach a new language that can communicate with the customer before.
Furthermore, it is important that this language should be simple, so you can learn.