Software Development Methodologies
A software development methodology is a process that helps to structure, plan, and control the developing system.
Is there one process, one framework, one road map that will take you through all the steps from start to finish? Answer is NO!
There are multiple processes or methodologies available in order to achieve different required objectives.
The models specify the various stages and the order in which they are carried out. The selection of model is based on various factors and impacts the type of testing that is carried out.
Choosing a model based on the requirement & need of the project is the key to the success of software development and delivery.
It will define the what, where and when of our planned testing and determines which test techniques to use.
Various Software Development Models are:
1. Traditional / Waterfall Model
[Figure: Waterfall Model]
It was the first development model to be introduced. In this model, each phase has strict tasks to be performed and it describes a development method that is linear and sequential. In this model, testing starts only after the development is complete.
Pros:
- Linear flow, simple and easy to use without overlapping of tasks.
- Each phase has specific deliverables and no ambiguity.
- It works well for small projects with clear and unambiguous requirements.
- Suitable for projects with static requirements.
Cons:
- Very rigid, since testing starts only after development is complete, once application is in testing stage, it is very difficult to incorporate any change.
- It takes a long time before working software is available.
- Not suitable for complex and long projects.
- Not suitable for projects where requirements are at a risk of changing.
2. V Model
[Figure: V-Model]
It is known as verification and validation model. It is considered as extension to Waterfall because in this model also control flows sequentially. It depicts the relationships between each phase of the development life cycle and its associated phase of testing.
Pros:
- Linear flow, simple and easy to use without overlapping of tasks.
- Test activities happen before coding. Hence higher chances of success over waterfall.
- Early bug detection which helps reducing bugs passing on to next stage. Saves Cost.
- Suitable for small projects with static requirements.
Cons:
- Very rigid and inflexible.
- It takes a long time before working software is available. No prototypes.
- If any changes are done midway, corresponding test documents are required to be updated.
- Not suitable for projects where requirements are at a risk of changing.
- V-model is suitable when ample technical resources are available.
Also Read: Types of Software Testing, Test LifeCycle, What is Software Testing?
3. Incremental Model
In incremental model the whole requirement is divided into various components and each component is built separately.
It uses elements of waterfall model, and multiple cycles of waterfall are used to build each component.
Idea is to get a working prototype early on, which is what we get at the end of first cycle.
Each subsequent cycle adds function to the previous release. The process is repeated until the product is completed.
Pros:
- Generates working prototype fairly quickly.
- Start working when major requirement are defined, however, some details can evolve with time
- Preferable when there is a need to get the product to the market early.
- New technology is being used, early prototyping gives confidence and highlights bottlenecks.
- Suitable for high risk projects and where resource with needed skill set are not available.
- Easier to test and debug in small iterations.
- Customer can respond to each build and we have time to adjust in next iteration.
Cons:
- It requires extensive planning and design.
- Needs crystal clear and complete definition of the whole system before it can be broken down and built incrementally.
- Since, it runs a waterfall cycle for every component/build, total cost is higher than waterfall.
4. Rapid Application Development (RAD) Model
In general, the principle of RAD approach is not to have perfect documentation but good enough to move to development.
In contrast to the waterfall model, which emphasizes rigorous specification and planning, it puts less emphasis on planning tasks and more emphasis on development. It is a type of incremental model.
In RAD model the components or functions are developed in parallel and in time boxed manner, delivered and then assembled into a working prototype. This helps in getting the feedback from the customer regarding the delivery and requirements.
Pros:
- Reduces the development time substantially.
- Light documentation, Quick initial reviews and fast development.
- Encourages customer feedback and incorporate changes in case of any discrepancy.
- Integration issues are identified very early because all modules are developed in parallel and integration is done before delivering prototype for customer feedback.
- It is suitable for projects, where we need to create a system that can be modularized very quickly.
- It can be used only where large number of designers and resources with good business knowledge are available and there are no budget constraints.
Cons:
- It can work only for systems that can be modularized.
- Needs crystal clear and complete definition of the whole system before it can be broken down and built incrementally.
- It cannot work with relatively inexperienced team as its success depends on team’s capability of identifying business requirements.
- Not suitable for low budget projects as cost rises because of involvement of higher number of experienced professionals.
5. Agile Model
[Figure: Agile Model]
Agile is also an incremental model. It endorses rapid delivery and continuous improvement and facilitates rapid quick response to change. Software is developed in short incremental cycles known as sprints.
This results in small incremental working releases with each release building on previous functionality. Each release is thoroughly tested to ensure software quality is maintained.
Testers are a part of the same team and long-term aim is to have a fully cross-functional team with all the team members having equal competencies.
Pros:
- Introducing dynamic functionalities is cheaper unlike models like waterfall because of frequency of new increments that are produced.
- Unlike Waterfall, Agile promotes not so extensive planning Light documentation and mistakes are expected it doesn’t need to perfect, just good enough to move forward. It is because of the assumption that users’ needs are ever changing.
- It gives flexibility and project is continuously moving. Planning is done at the start when every sprint cycle and adjustments are made so that work is done according to the needs and information available.
- It gives customer high degree of satisfaction and confidence because he gets to see the demo very early and can monitor progress very closely.
- It gives flexibility to use documentation, process and tools as per the needs of the project. It endorses collaborative environment and emphasizes more on frequent interaction between testers, developers and customers.
- More focus on face-to-face conversation rather than emails and short daily standup meetings to discuss progress and impediments encourages better information flow and team collaboration
- Continuous improvement of design.
Cons:
- It case of extremely large and complex projects in can sometimes become difficult to assess the effort required at the very beginning, but it can happen with any model.
- Lack of emphasis on documentation might sometimes cause trouble when someone wants to refer to history data to take some decision. It is therefore extremely important to maintain critical piece of information which has potential of reuse to be documented.
- Project may get haywire if Product Owner and Customer representative are not on the same page or not clear on the final outcome.
- Team of all beginners or inexperienced members won’t be able to run the project very well because it requires some experience right at the beginning. For every requirement, (known as user story in Agile),even software testers have to provide their input on the efforts required to test.
6. Iterative Model
In Iterative model, process starts with a simple implementation of a small set of the requirements and iteratively enhances the subsequent versions until it’s complete.
Iterative model differs from incremental modal as it uses a fixed no of steps and development is done sequentially. The iterative model however has no such set of steps, rather development is done in cycles.
Here, focus is mostly on creating a working prototype first and adding features in development cycles where the Increment Development steps are done for every cycle. Agile is specific iterative approach.
Pros:
- It is best suitable for a big project, when complete system requirements are defined and understood.
- Major requirement must be clear and defined, however, few improvisations are allowed over time.
- Documentation time spent is less and more time is given for designing.
- It helps getting reliable feedback from the users by asking them to imagine how it would work.
- Early start protects defect multiplication.
Cons:
- No flexibility within each phase of an iteration with no overlapping.
- Since not all requirements are gathered up front for the entire lifecycle, sometime serious design issues may crop up.
7. Spiral Model
The spiral model is a risk-driven process model generator that guides a team to adopt elements of one or more process models, such as waterfall or incremental. It has four phases Planning, Risk Analysis, Engineering and Evaluation.
Any project that follows spiral model, repeatedly passes through these phases in iteration.
Planning – Requirements gathering is done in the planning phase.
Risk Analysis – Risks are identified and prototype is produced. For any risks alternate solutions explored.
Engineering – development and testing is performed.
Evaluation – continuous customer feedback.
Pros:
- It is best suitable for a high risk projects, when cost and risks are of concern.
- Suitable for unclear and/or complex requirements and significant changes are expected by research and exploration.
- With focus on risk evaluation, it helps in risk avoidance.
- It has strong approval and documentation control.
- Flexible in a sense that additional functionality can be added later.
- Software is produced early.
Cons:
- It can be expensive.
- High level of specific knowledge and expertise required to perform risk analysis. Project success is dependent on risk analysis.
- Not a good choice for small projects.
There you go !! We have covered the Software development models which can chosen based on their merits.
Which one do you use ?
Please share your experiences with the model you have been following so that we can improve the pros and cons.