Software engineering can be defined as 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.
The above is the official definition of software engineering offered by the Institute of Electrical and Electronics Engineers in their Standard Glossary of Software Engineering Terminology (R).
What is Software Engineering, Really?
This definition of software engineering illustrates the importance of applying engineering approaches to software. This application has shown, time and time again, capable of managing large-scale projects with repeated success.
Software engineering processes allow software to be extended rather than designed from scratch, to ensure client requirements are met wholly, and to maximize the effectiveness of communication within development teams.
These processes can be categorized into one of four broad categories that make up a layered model for software engineering practices. This model, while generic in nature, provides a flexible framework from which more specific process modeling can evolve.
Layer Model of Software Engineering
Such that engineers in China may use similar approaches as Danish engineers to build bridges, so too might software engineers in the United States use similar practices as engineers from Argentina in designing new business software. Conceptually, software engineering can be divided into the following layers of focus/discipline (1):
- Tools – Automated or semi-automated support for processes and methods.
- Methods – Technical how-tos for building software including guidance for communication, construction, modeling, and testing.
- Process – The strategies used to deliver successful software products. Defines the context in which tools and methods are applied.
- Quality Management – Various frameworks to provide a means of process improvement for software products and serves as the foundation of software engineering.
Process Model of Software Engineering
The above aspects of software engineering represent basic conceptual dissections of larger focal points in software engineering. One aspect of particular note is the process layer. This layer encompasses the collection of activities, actions, and tasks performed to deliver products successfully (1). The broad applicability of this layer makes it worth particular focus.
A software engineering process model can be broken down into a more granular framework to help address needs more specifically. While such frameworks can be (and should be) catered specifically to projects, a general outline can serve as a strong foundational guide:
Communication with project stakeholders is essential to establish project requirements. Without accurate knowledge of a project’s objectives, there stands little chance for success. It’s important to note a project stakeholder is anyone with a vested interest in the successful outcome—clients, developers, managers, C-suite are all included.
Planning helps identify the tasks that need to be completed to meet project goals, identify possible risks, and describes technical challenges more completely. Robust planning helps ensure a project’s goals are realized within achievable timelines and with anticipated resource requirements. Simply put; planning increases the likelihood projects will be delivered on-time and on-budget.
Modeling is an essential stage in the software engineering process—and design process really—where initial ideas are given form. Much like a bridge-builder would first sketch a bridge, so too should software engineers first “sketch” a software product. This stage includes things like UML diagrams, flow charts, and basic object modeling.
This stage takes the concepts from the modeling stages and gives them a more concrete form. While initial construction stages may not produce deliverable products, this stage does result in more concrete expressions than prototypes and/or discrete tests. The goal of the construction stage is to give form to project ideas.
Also referred to as delivery, this stage encompasses the process of handing the result of a completed development cycle to a customer for feedback. Note: development cycles can result in either partial or complete products, depending on project goals.
In addition to the five processes within the process framework, there are other activities relevant to software engineering. These activities, referred to as Umbrella Activities, are more flexible in nature and can be applied somewhat universally within several stages of development. These are the eight most common umbrella activities:
- Tracking & Control – The ability to assess project progress with respect to the project plan and take action accordingly. May include projections based on task completion times, re-allocation of resources, or issuance of communication to stakeholders.
- Risk Management – The practice of assessing possible risks to the outcome or quality of the project. May include assessment of resource shortages, changed requirements, or market conditions.
- Quality Assurance – Actions taken to maintain a level of quality deemed necessary to meet project outcomes in a manner satisfactory to stakeholders.
- Technical Review – Conduct audits at each stage of the process framework to assess errors and address them before transitioning to the next process stage.
- Measurement – Defining and collecting data related to processing, project, and product to assess and assist the development team in achieving successful project outcomes.
- Configuration Management – The practice of managing change throughout the processes such that errors are minimized and the rate of progression towards project outcomes is maximized.
- Reusability Management – Defines, establishes, and maintains guidelines for the creation of project assets (including software components) that can be reused throughout the project. This may include such specific items as decoupled methods to more general tools such as testing suites.
- Product Preparation & Management – Tasks related to activities involved with the creation of models, documentation, project logs, and other project-specific informational resources.
The field of software engineering is vast but united by a shared goal: coupling common engineering practices to software. It’s through these quantifiable, repeatable, and systematic processes that large-scale, complex, and even multi-disciplinary projects achieve success. While every project may necessitate a unique adaptation of these processes, nearly all can benefit from their most generic direction and guidance.
- McGraw Hill, et al. ISE SOFTWARE ENGINEERING: A PRACTITIONERS APPROACH. 9th ed., McGraw-Hill Education, 2019.