Objective: At the end of this lesson students should understand and should be able to explain what Software Engineering is. Students should also be able to explain the key components and process of Software Engineering.
What is Software Engineering?
“Software Engineering (SE) is concerned with developing and maintaining software systems that behave reliably and efficiently, are affordable to develop and maintain, and satisfy all the requirements that customers have defined for them. It is important because of the impact of large, expensive software systems and the role of software in safety-critical applications. It integrates significant mathematics, computer science and practices whose origins are in engineering” (Computing Degrees and Career, 2013).
Types of Software Development Life Cycles (SDLC)
There are 6 main types of SDLC that will each be listed and briefly explained below.
- The Waterfall Model – “The waterfall Model is a linear sequential flow. In which progress is seen as flowing steadily downwards (like a waterfall) through the phases of software implementation. This means that any phase in the development process begins only if the previous phase is complete. The waterfall approach does not define the process to go back to the previous phase to handle changes in requirement. The waterfall approach is the earliest approach that was used for software development” (Sami, 2012).
The Photo below is an illustration of the Waterfall model.
Photo extracted from https://melsatar.files.wordpress.com/2012/03/waterfall.jpg
- V-Shaped Model – “It is an extension for waterfall model, Instead of moving down in a linear way, the process steps are bent upwards after the coding phase, to form the typical V shape. The major difference between v-shaped model and waterfall model is the early test planning in v-shaped model” (Sami, 2012).
The photo below is an illustration of the V-Shaped Model.
Photo extracted from https://www.automationlearn.com/s/cc_images/teaserbox_4510763.png?t=1405454106
- Evolutionary Prototyping Model – “It refers to the activity of creating prototypes of software applications, for example, incomplete versions of the software program being developed. It is an activity that can occur in software development. It used to visualize some component of the software to limit the gap of misunderstanding the customer requirements by the development team. This also will reduce the iterations may occur in waterfall approach and hard to be implemented due to inflexibility of the waterfall approach. So, when the final prototype is developed, the requirement is considered to be frozen” (Sami, 2012).
The Photo below is an illustration of the Evolutionary Prototyping Model.
Photo extracted from https://njrathod.files.wordpress.com/2013/02/evalutionary.png
- Spiral Method (SDM) – “It is combining elements of both design and prototyping-in-stages, in an effort to combine advantages of top-down and bottom-up concepts. This model of development combines the features of the prototyping model and the waterfall model. The spiral model is favored for large, expensive, and complicated projects. This model uses many of the same phases as the waterfall model, in essentially the same order, separated by planning, risk assessment, and the building of prototypes and simulations” (Sami, 2012).
The Photo below is an illustration of the Spiral Method.
Photo extracted from http://www.hyperthot.com/spiral.jpg
- Iterative and Incremental Method – “It is developed to overcome the weaknesses of the waterfall model. It starts with an initial planning and ends with deployment with the cyclic interactions in between. The basic idea behind this method is to develop a system through repeated cycles (iterative) and in smaller portions at a time (incremental), allowing software developers to take advantage of what was learned during development of earlier parts or versions of the system” (Sami, 2012).
The Photo below is an illustration of the Iterative and Incremental Method.
- Extreme programming (Agile development) – “It is based on iterative and incremental development, where requirements and solutions evolve through collaboration between cross-functional teams” (Sami, 2012).
The Photo below is an illustration of Extreme Programming.
Photo extracted from http://pm-training.net/wp-content/uploads/2016/02/extreme_programming_diagram_01.gif
Software Engineering Process
- Analysis – “The objective of requirements analysis then, is to create a “requirements specification document” or a “target document”, that describes in as much detail and in an unambiguous a manner as possible, exactly what the product should do. This requirements document will then form the basis of the subsequent design phase”(htt1).
- Design and Coding – “Once the analysis of the system has been completed, design or development can begin. This is an attempt to translate a set of requirements and program/data models that were laid down in the “requirements document” into a well-designed and engineering software solution” (htt1).
- Testing – This is done when the coding process is complete to ensure that the system provides the solution to the defined problem and is functioning the way it should. If the system has any issues then debugging must take place so the issue can be resolved.
- Maintenance – The system must be maintained in order for it to keep performing at its best. This sometimes involves the addition of new feature(s) or even the deletion of some feature(s) that are no longer necessary to the system.
(n.d.). Retrieved from https://web.cs.dal.ca/~hawkey/3130/SEBackground4.pdf
Computing Degrees and Career. (2013). Retrieved from Association for Computing Machinery: http://computingcareers.acm.org/?page_id=12
Sami, M. (2012, 3 15). Retrieved from https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies