Software Development Life Cycle (SDLC)1
The software development lifecycle is a process used to develop an application composed of several distinct stages such as planning, design, building, testing, and deployment.
The stages of the SDLC:
1. Identify the problems – The first stage aims at gathering information about what the clients’ current system and what can be improved on it. Information is gathered from all stakeholders, salespeople, industry experts, and programmers.
2. Plan – The team gathers the requirements, determines the cost and needed resources for the application. Risks about the application are discussed and pre-emptive plans are made to soften the risks. The Software Requirement Specification document is created and filled in at this stage.
3. Design – The software requirements are used to get the Design Specification. This document gets reviewed by all stakeholders and give feedback/suggestions.
4. Build – The application gets coded, using the design specifications from step 3.
5. Test – The build application gets tested rigorously for any bugs and unexpected results, which get fixed until there is none and the applications meets the specifications.
6. Deploy – You launch the application but the scale may start off only with a small group to get more feedback from end users so you can further tweak the application.
7. Maintain – Everything changes and the application will have to change with the times to stay relevant so the application will need to be updated and checked for any new bugs.
Different types of SDLC models
The waterfall model is a sequential model where the activities are divided into different phases which consist of series of task and has different objectives. It was the very first SDLC process to be widely used in the software industry. The model is split into phases where the output of the phases will be the input of the following phase so only one phase can be worked on at once, no overlapping.
The phases of it:
1. Requirement Analysis – Record all requirements, conduct the requirements feasibility test to ensure that the requirements are testable or not.
2. System Design – Create the design using the requirements, record the hardware and software requirements.
3. Implementation – Create the programs/code and unit testing of the code.
4. System Testing – Integrate the unit tested code to check its functions correctly work. Test all functional and non-functional requirements against the specifications.
5. System Deploy – Make sure that the environment is up (hosting, database, web service etc.) Test the application in a safe environment to ensure it doesn’t break on large scale deployment.
6. System maintenance – Ensure the application is up and running, fix any new defects or bugs found.
The advantages of the waterfall model:
· It’s easy to use and follow.
· Good for small projects.
· Easy to maintain as one phase is worked on at a time.
· The requirements are clear and easy to proceed systematically.
· Phases are well documented
· Cannot change the requirements as any progress made would be lost.
· Backtracking a phase is difficult as changing the phases are dependent on each other.
· Delivery of final product takes a long time as there is no prototype to demonstrate intermediately.
· For bigger and complex project, the model is not good as the risk factor is high since it is so linear.
· Doesn’t work with projects that have constantly changing requirements.
· Doesn’t work for long and ongoing projects.
· Identifying risks is much harder as you don’t test early on.
The waterfall model is a good model for small simple projects where the requirements are clear and won’t change. It makes clear documentation of progress however it can only go forward, backtracking doesn’t work. It makes large projects much harder and increases the risk of failure since you don’t conduct any tests early on, this is why I won’t be using it for my project.
The iterative model only starts with a small part of the application requirements and iteratively enhances the application until the full system is implemented. Design modifications are made and new functions are added each iteration. It works by application with some of the specifications and then adding more features at the beginning of each cycle until all have been met. The diagram below shows how the model works, it cycles repeatedly. Another feature of the iterative model is that you can work on different cycles at the same time (e.g. build 2 and 3 worked on at the same time in the diagram below).
The advantages of the Iterative model:
· You have a working model of the system at an early stage of the development helping you find flaws and bugs.
· You can develop in parallel saving time.
· You get regular results from each cycle so progress is easier to track and measure.
· Not as costly to change the requirements of the project compare to other models.
· You have a working product each increment.
· The riskiest part is done first making risk management easier.
· Better suited for large and mission-critical projects.
· Get feedback from each cycle.
· You need a lot of management which is complicated.
· More resources may be required.
· System architecture or design issues may arise because not all requirements are gathered in the beginning of the entire life cycle.
· Not suitable for smaller projects.
· You may not know when the project will end which is a risk.
Agile development model4
The Agile development model is a combination of iterative and incremental process models where the software is developed in incremental, rapid cycles. It focuses on process adaptability and customer satisfaction by delivering working products rapidly.
The agile model tailors to best suit the project requirements, in agile the tasks are split up into small time boxes to deliver specific features. Agile uses an adaptive approach where there is no detailed planning and there is clarity on future tasks only in respect of what features need to be developed. Customer Interaction is the backbone of this Agile methodology, and open communication with minimum documentation are the typical features of Agile development environment. The agile teams work in close collaboration with each other and are most often located in the same geographical location.
The advantages of the Agile model:
· Get customer satisfaction by rapid, continuous delivery of working software.
· Promotes teamwork.
· Functionality can be developed rapidly and demonstrated.
· Good for both fixed and changing requirements.
· Good model for environments that change steadily.
· Close, daily cooperation between business people and developers.
· Working software is delivered frequently (weeks rather than months).
· Even late changes in requirements are welcomed.
· It is difficult to assess the effort required at the beginning of development especially for large projects.
· The project can easily get taken off track if the customer isn’t clear on what they want.
· Not suitable for handling complex dependencies.
· There is a very high individual dependency, since there is minimum documentation generated.
· Not much documentation making is much harder to new members of the team.
Rapid Application development (RAD) model5
Rapid Application Development (RAD) is a development methodology that uses minimal planning in favour of rapid prototyping. In the RAD model the functional modules are developed in parallel as prototypes and are integrated to make the complete product for faster product delivery. Since there is no detailed preplanning, it makes it easier to incorporate the changes within the development process. RAD model distributes the analysis, design, build and test phases into a series of short, iterative development cycles.
Phases of RAD model:
· Business Modelling – The information flow is identified between various business functions.
· Data Modelling – Information gathered from business modelling is used to define data objects that are needed for the business.
· Process modelling – Data objects defined in data modelling are converted to achieve the business information flow to achieve some specific business objective. Description are identified and created for CRUD of data objects.
· Application generation – Automated tools are used to convert process models into code and the actual system.
· Testing and turnover – Test new components and all the interfaces.