Software Engineering Models

4 minute read

To begin with…
Software Development life cycle consists of

  1. Requirements
  2. Design
  3. Implementation
  4. Quality Assurance
  5. Maintenance

Every Software Engineering process goes through these 5 steps, and software development model is a methodology of how you are going to develop the software. In short, it is a series of building process. There are many different types of model to choose when you develop a piece of software. Obviously, a good software engineer is not only the one who have outstanding coding skills but also the one who choose right software development model in a given situation i.e. requirements.

1. Waterfall

waterfall
Waterfall Method, I think, is the way that you can come up with fairly easily. It is, like its name implies, a linear sequence model that starts from ‘Requirement’ stage and cascade over to ‘Maintenance’ stage, step by step. Therefore, this model is easy to use and organise the workflow and people. However, simplicity is not always the best option, as some risky disadvantages follow. For its nature is linear, possible errors or risks are prone to be identified after completion of each stage. Unfortunately, the lessons you learned after the completion of a certain stage do affect previous stages, so you may have to restart the whole cycle again.

2. Spiral

spiral
Unlike Waterfall Model, Spiral Model does not follow the linear steps. If I have to say, I would say it follows an evolutionary way. As you can guess from the picture, Spiral Method complements the disadvantages of Waterfall Method. You can fix errors as soon as you identify those, and while keep on proceeding the method, you make several prototypes, which evolve every time. However, it has one weak point, where it only suits to a large scale project due to the high cost of managing the method.

Quick Summary:

  Waterfall Method Spiral Method
  waterfall spiral
pros Easy to use and manage Mitigates risk of failure
  Useful when requirements are stable and communication cost is high Useful when Frequent requirement refinement is needed
cons Not Flexible in constant changes Expensive for small projects
  Lessons learned after affect earlier stages  

3. Agile

agile
Check this Agile Menifesto

Practices that support Agile

  1. Continuous delivery and integration
    Continuous delivery is a continuous sequence of stages, which are Testing (Unit testing, Platform testing), Staging, Deploy to Production, and Post-Deploy test. These stages form a circle and keeps going on during the development.
    Continuous Integration is generally achieved by version/source control system like git and bitbucket. Several developers who are taking part in a flexible team commit their changes to the version/source control server, and those are being fetched to the Integration server, which allows notification of the result from the change to every developer.

  2. Test-driven Development
    Personally, this model seemed quite innovative when i first encountered it. Unlike other models, you first write a Test. Once the test has been passed, you start Refactoring (addressed in the next part). Again, you write a different Test based upon a feedback you will have got from the previous experience.
    From this model, you can notify potential bugs much earlier, and it is far less likely to develop some redundant features that your clients did not require.

  3. Refactoring
    When you are Refactoring a code, you are restructuring an existing body of code, altering its internal structure without changing its external behavior. So, for example, from the test you proceeded, if you could realise that you could optimize your code, what you want to do is refactoring. This has to be done continuously.

  4. Pair Programming
    Be social programmers! This is literally a method that programmers work side-by-side at one computer in pair, continuously collaborating on the same design, algorithm, code, and test. One role is a Driver, who actually type the codes. The other is Navigator, who guides the code and looks for tactical defects.
    This can yield higher quality codes and can halve the expected-time for deployment. And it’s no longer lonely :)

3-1. Scrum

scrum Scrum is one of several Agile Methodologies, and it is gaining ground these days.

3-2. Extreme Programming

Extreme Programming (a.k.a XP) is the most commonly implemented Agile Methodology.

Many more models will be introduced here! Stay Tuned :)

Reference

  1. My note taken from Dr. Sergey Mechtaev’s lectures at UCL - COMP0010: Software Engineering (19/20)
  2. Agile Menifesto: http://agilemanifesto.org/
  3. waterfall, spiral and scrum images are labeled for noncommercial reuse
  4. agile image: https://www.360logica.com/blog/the-importance-of-different-agile-methodologies-included-in-agile-manifesto/

Leave a comment