Over the last 50 years there has been revolutionary advancement in the field of technology, leading to improvements in hardware performance and profound changes in computing architectures. This advancement has led to the production of complex computer-based systems that are capable of providing information in a wide variety of formats. The increase in computer power has made unrealistic computer applications a feasible proposition, marking the genesis of an era where software products are far more complex as compared to their predecessors. By using software engineering practices, these complex systems can be developed in a systematic and efficient manner.
According to IEEE, software engineering is defined as 'the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.' In anutshell, software engineering can be defined as a systematic approach to developsoftware within specified time and budget.
Software engineering is a technological discipline that combines the concepts of computer science, economics, communication skills, and management science with the problem-solving approach of engineering. It also involves a standardized approach to program development, both in its managerial and technical aspects.
The profound knowledge of computer science both theoretical and practical forms the basis of software engineering. The theoretical knowledge provides an understanding of which problems are resolvable, what data structures and algorithms are appropriate, when and how they are to be used, etc. On the other hand, the practical knowledge provides an understanding of how hardware functions, how to utilize the power of programming languages and tools while developing software, etc.
One of the main objectives of software engineering is to help developers obtain high quality software. This quality is achieved through use of Total Quality Management (TQM), which enables continuous process improvement custom that leads to the development of more established approaches to software engineering.
Software Engineering Layers
Software engineering can be viewed as a layered technology. Various layers are listed below.
The process layer allows the development of software on time. It defines an outline for a set of key process areas that must be acclaimed for effective delivery of software engineering technology.
The method layer provides technical knowledge for developing software. This layer covers a broad array of tasks that include requirements analysis, design, coding, testing, and maintenance phase of the software development.
The tools layer provides computerized or semi-computerized support for the process and the method layer. Sometimes tools are integrated in such a way that other tools can use information created by one tool. This multi-usage is commonly referred to as Computer-Aided Software Engineering (CASE).CASE combines software, hardware, and software engineering database to create software engineering analogous to Computer-Aided Design (CAD) for hardware. CASE helps in application development including analysis, design, code generation, and debugging and testing. This is possible by using CASE tools, which provide automated methods for designing and documenting traditional-structure programming techniques. For example, two prominent technologies using CASE tools are PC-based workstations and application generators that provide graphics-based interfaces to automate the development process.