During the last lecture in my class ”Analysis and modelling of Software systems” we discussed questions about the software development life cycle (SDLC) such as how it works and how it’s connected to the methodologiess of software development. In this blogpost I’m going to explain what i have learned so far about SDLC.
The Software Development Life Cycle (SDLC) is simply an illustration of the lifecycle of software from concept to development and then finally maintenance. As shown in the figure below this process in most cases is split into six phases: analysis, design, implementation, testing, deployment and maintenance.
The first phase ”Analysis” is about defining and analyzing user requirements for the system like: ”A user should be able to access the service from home” , ”there should be an easy way to reset a password if the user forgets it”, ”what input is required for a login” and so on.
In the ”Design” phase the architectures then use the stated requirements from the previous phase to plan things such as how the user interface should work, color schemes and which programming language should be used etc.
Then in the ”Implementation” phase all the components from the previous phase are coded or implemented by the software developers.
During the fourth phase ”Testing” the code is checked and tested by both users and computer programs to find inefficient or faulty code and bugs.
When the software has been thoroughly tested it enters the ”Deployment” phase in which the software is delivered to the end users. This is done by setting up databases and other hardware that is required for the system to work.
After the system has been the delivered to the end user it then enters the ”Maintenance” phase. During this phase the system needs to be monitored to see if the system works as it should and if the servers and databases can handle the load. As with most software nowadays there will bugs after the deployment, and fixing one bug might create a new one. That’s why it’s important to continuously update the software.
A softwares lifecycle doesn’t just end with maintenance though. Like most things here on earth software doesn’t last forever. Companies doesn’t buy only one system and use it for all eternity. Software will someday be outdated, and then probably replaced by a new one. That’s why I believe there should also be a termination phase. What do you do with all the data stored in the system? How is the data going to be migrated to the next system?
What types of SDLC are there?
There are variety of different life cycle models out there. They all contain the phases in different ways. Here are some of the most wellknown models in my opinion.
The Waterfall model is probably the easiest model to comprehend. The development process flows like a waterfall with sequential steps downward. In order to move to the next step you need to complete the previous one. All planning is done in the beginning of the project and then you move on to development –> testing –> deployment and so on. The sequences can take a lot of time and a big disadvantage is that just like with a real waterfall it is usually not possible to back up a step to a previous sequence.
The Agile model focuses on teamwork and customer satisfaction. The software is openly planned and continuously delivered in short iteration with constant feedback. With this model the development team can go back and forth in the different phases if necessary. Agile frameworks like Scrum and Xtreme programming are very common today within software development. This model is in my opinion the most convenien option for software development because it’s flexible. plans and goals might change during a project, not only in software development. The agile models allows revision during the whole development phase, which i think is a big advantage.
There are also other models: