Software Engineering
Software engineering is the branch of computer science that seeks principles to guide the development of large, complex software systems. The problems faced when developing such systems are more than enlarged versions of those problems faced when writing small programs. For instance, the development of such systems requires the efforts of more than one person over an extended period of time during which the requirements of the proposed system may be altered and the personnel assigned to the project may change. Consequently, software engineering includes topics such as personnel and project management that are more readily associated with business management than computer science.
The Software Life Cycle
The most fundamental concept in software engineering is the software life cycle. Once software is developed, it enters a cycle of being used and maintained—acycle that continues for the rest of the software’s life. The maintenance phase tends to consist of correcting or updating.
The Traditional Development Phase
The major steps in the traditional software development life cycle are requirements analysis, design, implementation, and testing.
Requirements Analysis
The software life cycle begins with requirements analysis— the goal of which is to specify what services the proposed system will provide, to identify any conditions (time constraints, security, and so on) on those services, and to define how the outside world will interact with the system.
In any case, the requirements analysis process consists of compiling and analyzing the needs of the software user; negotiating with the project’s stakeholders over trade-offs between wants, needs, costs, and feasibility; and finally developing a set of requirements that identify the features and services that the finished software system must have. These requirements are recorded in a document called a software requirements specification. The following is our software requirements specification.
Design
Design involves creating a plan for the construction of the proposed system. Design is about developing a solution to the problem. It is in the design stage that the internal structure of the software system is established. The result of the design phase is a detailed description of the software system’s structure that can be converted into programs.
Implementation
Implementation involves the actual writing of programs, creation of data files, and development of databases. It is at the implementation stage that we see the distinction between the tasks of a software analyst (sometimes referred to as a system analyst) and a programmer. The former is a person involved with the entire development process, perhaps with an emphasis on the requirements analysis and design steps. The latter is a person involved primarily with the implementation step.
Testing
Testing is essentially equated with the process of debugging programs and confirming that the final software product was compatible with the software requirements specification. The elimination of errors is one of the goals of software engineering.