The objective of this mini article is to introduce software engineering in terms of: why software needs engineering, how engineering can be applied to software development, a brief introduction to the history of software processes, introduce the waterfall software process and introduce the agile software process.
INTRODUCTION TO SOFTWARE ENGINEERING
A good start for a Software Engineering article would be to define what is Software Engineering. In 1972, Friedrich Ludwig Bauer wrote a very simple definition for this in his book entitled “Software Engineering”:
“Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.”
Pressman adds the followings questions to this definition in one of the most important books about Software Engineering, entitled “Software Engineering – A Particioner´s Approach” which are:
“What are the “sound engineering principles” that can be applied to computer software development? How do we “economically” build software so that it is “reliable”? What is required to create computer programs that work “efficiently” on not one but many different “real machines”?”
Of course these questions are the challenge on building software, and software engineering methodologies and processes are the tools necessary to answers questions which may be applied to: “How to plan”, “Execute”, “Test” and provide a final result with reliable “Quality”.
SOFTWARE ENGINEERING PROCESSES
Software Engineering processes are the methodologies which are be applied in a software development process in order to get the expected results with excellence. Pressman gives a simple definition to software engineering as “I define a software process as a framework for the activities, actions, and tasks that are required to build high-quality software.” (Pressman, 2010).
THE WATERFALL SOFTWARE DEVELOPMENT PROCESS
A definition for the waterfall model is very simple, basically it is linear, that means each phase is developed and completed before the next phase starts and with no overlapping. This was the first process model to be introduced in the software engineering (Sommerville, 2007).
Figure 1 Illustration of a linear software development process – Waterfall
THE AGILE CONCEPT / INTERACTIVE AND INCREMENTAL PROCESS
“Rapid development and delivery is therefore now often the most critical requirement for software systems. In fact, many businesses are willing to trade-off software quality and compromise on requirements against rapid software delivery.” (Sommerville, 2007).
The agile software development processes came with the idea of bringing up rapid deliveries and getting faster feedback from the users and clients in a technological world full of change in the businesses, the laws, the teams, etc… The idea of planning, developing, testing, and delivering together in order to achieve a common goal, is the key aspect for the agile methodologies “Results and deliverable component / functionality comes first”, if a change is needed, this is done in a dynamical process which they call simply “Agile”.
One of the most common process in the agile space, is the scrum process, which brings a both iterative and incremental approach, and is considered one of the most common software development processes today.
Figure 2 illustration of the Scrum process
A simple definition for how a Scrum process works is: The user stories are put to a product backlog, which is basically holds a bunch of functionalities desired by the user, the product owner and the other team members. Sprints are created, which are basically iterations which may have a common objective of deliverable functionalities. Daily meetings happens in order to improve communication between the team, it must take from 10 to 15 minutes, and should be done everyday. At the end of the sprint, basically a demonstration of the deliverables are presented to the team. Grooming sessions and planning sessions are also part of the scrum methodology. All the prototyping, analysis, design, development and testing happens in an iterative and incremental approach with the common objective of bringing up faster deliverables at the end of the sprint.
Bauer, F. L., 1972. Software Engineering. 1st ed. Germany: Information Processing.
Pressman, R. S., 2010. Software engineering : a practitioner’s approach. 5th ed. New York: McGraw-Hill.
Sommerville, I., 2007. Software Engineering. 5th ed. England: Pearson Education Limited.