- Software Engineering - Overview
This article presents an overview of software engineering, which is a branch of engineering associated with the development of software products, computer programs, using well-defined scientific principles, methods and procedures. The result of software engineering is an efficient and reliable software product.
Software project management has a broader scope than the software engineering process as it involves communication, pre- and post-delivery support, maintenance, etc.
This tutorial presents a general understanding of the software product, software design and software development process, software project management and project complexities, etc.
By the end of the tutorial, you should have a good understanding of software engineering concepts.
Who should read this tutorial
Beginner or full-level professionals who need to learn, understand or review the fundamental concepts for the development of high quality software products.
Software Engineering Overview
First we must understand what software engineering means. The term is made up of two words: software and engineering.
software it's more than just program code. A program is executable code, which serves some computational purpose. Software is considered a collection of executable programming code, associated libraries, and documentation. Software, when made for a specific requirement, or a specific business domain, is called a software product.
engineering, on the other hand, deals with product development, using well-defined scientific principles and methods.
Software Engineering, therefore, is a branch of engineering associated with the development of software products, using well-defined scientific principles, methods and procedures. The result of software engineering is an efficient and reliable software product.
Software Engineering Definitions
Some formal definitions, published by recognized institutions and researchers in the field:
(1) The application of a systematic, disciplined and quantifiable approach to the development, operation and maintenance of software; that is, the application of engineering to software.
(2) The study of approaches as in the above statement.IEEE
Software engineering is the establishment and use of sound engineering principles to obtain software that is economically reliable and works efficiently on real machines.Fritz Bauer, computer scientist
The process of developing a software product uses software engineering principles and methods. This process is known as software evolution. This includes the initial software development, its implementation, maintenance and updates, until the planned software product is defined as finished, that is, it satisfies the expected requirements.
In fact, the process tends to be more complicated, as some software can work and receive updates for decades, so software evolution is better related to the context of a software development project, which can be software built from scratch, or a project to incorporate significant improvements into it – version releases or continuous improvements.
The evolution process starts from the requirements gathering process. Several methods can be applied from this stage to conduct the evolutionary project of software construction. One of the methods is the creation of a prototype of the software to be presented to users and sponsors, in order to obtain their feedback in the initial stage of the software product development. In this way they can identify change needs, in which several consecutive updates and maintenance also change. This process constantly changes the original software, until the defined goal for the desired software project is reached.
Software prototypes can be developed at various levels of refinement. Read about in the article Software Prototyping.
Even after the user has the desired software in hand, advancing technology and changing requirements force the software product to change accordingly, following the market, the business they support, or technological improvements. Rebuilding existing software from scratch and dealing with requirements is often not feasible. The most viable and cost-effective solution is to constantly update existing software so that it meets the latest requirements.