The term "software engineering" was first used as the title of a convention held in Garmisch, Germany, in 1968 that was convened to address an emerging "software crisis." NATO called the conference because of its concern with the state of the software industry, which had begun to have great difficulty providing the large, complex software systems that governments and businesses required, on time and within budget. Some advocated an "engineering" approach to the software crisis, bringing the discipline of time-proven engineering methods to the relatively new field of software in order to put the new field on a more secure footing.
In the early 1970s software engineering came to be recognized as a field of study and practice that was distinct from hardware engineering. However, early software development models were based on hardware development models. In 1976 Barry Boehm published a paper titled "Software Engineering" in which he defined the term as "The practical application of scientific knowledge in the design and construction of computer programs and the associated documentation required to develop, operate, and maintain them." A later author, Bruce Blum, built on Boehm's definition to define software engineering as "the application of tools, methods, and disciplines to produce and maintain an automated solution to a real-world problem."
In his 1976 paper Boehm described a software life-cycle model that came to be known as the waterfall development model. The waterfall model is made up of a series of stages that are completed one after another, in order. Similar to the stages of hardware development, the stages of the waterfall model are:
Requirements analysis and definition--Developers and users of the proposed system determine its purpose and functions
System and software design--Developers determine how the system and software will actually perform the required functions and meet its purpose.
Implementation and unit testing--Developers build and test the units of the system.
Integration and system testing--Developers integrate the system's units and test the entire system.
Operation and maintenance--Developers and/or users put the system into operation and maintain it.
Boehm's paper is a landmark in the history of software engineering, but the waterfall model of software development has fallen under criticism for its failure to take into account the differences between software and hardware and the way those differences impact the software development process.
New methods of software development have been proposed and successfully used. Some of the new methods are:
Incremental design--With this model a basic working system is built as soon as possible, and then further developed and refined until it works as required.
Prototyping--The prototyping method also produces an early system that is then used to establish system requirements. Once the requirements are agreed on, a new, functional system is built to meet the requirements.
Spiral model--Boehm proposed the spiral model as a refinement of the waterfall model in 1988. In the spiral model, the steps of thee waterfall method are accompanied by a series of risk analyses and prototypes that enable developers to produce a set of low-risk system requirements.
Formalism--The formalism or "formal transformation" method seeks to develop a set of formal requirements and then flesh those out in increasing level of detail until the system is completely built.
The design phase of software development is the process of determining and documenting the architecture, interface, components, algorithms, and data structures, etc. necessary to satisfy the requirements specification. (The requirements specification may be modified as part of the design process.)
There are two basic types of software designs: function-oriented and object-oriented. Until the mid-1980s most software designs were based on the functions the software was to provide. Recently many designers have designed software as sets of objects rather than as sets of functions. Whereas function-oriented design centralizes system state, object-oriented design allows each object to have its own state and operations that act on the basis of its state. In object-oriented design, objects interact by sending messages or by calling other objects' procedures. When working on large software systems, designers may take both function- and object-oriented approaches at different points in their work.
Just as current approaches to software engineering and design have evolved over time, so have approaches to software testing. In the early days of software development, testing software involved programmers modifying the code to remove known bugs from the software product. In the late 1950s testing came to be viewed as a process that included detecting new bugs--a process that was entirely separate from programming; testing was performed only after initial programming was completed.
In the late 1960s along with the awareness of a "software crisis" and the development of software engineering as a discipline, there was a growing emphasis on the importance of testing throughout the software development process. In the 1970s early testing methods were proposed. Quality standards for software were established by different groups in the 1980s, providing a basis for testing. In the 1990s automated testing tools became commercially available. Although many organizations now use accepted standards, methods, and tools, testing is still frequently short-changed in the software development process.
Definitions of testing have changed as the field has evolved, and there is still a range of perspectives on the purpose of testing. In general, though, testing involves ensuring that software:
Is error free
Meets the requirements specification
Meets quality standards
Is reliable
Is acceptable to the user(s)
Testing is often referred to as "verification and validation" or "V&V." V&V addresses the entire software development process to validate that the software meets requirements and to verify that it functions accurately and reliably.
This is the complete article, containing 899 words
(approx. 3 pages at 300 words per page).