Table of Contents
The General Outline for the Software Development Life Cycle
SDLC, or Software Development Life Cycle, is the blueprint used to produce software in an organized, efficient manner. SDLC is composed of 6 main phases.
- Planning – Collecting Requirements for software
- Development – Developers start coding the software
- Testing – Making sure that software actually works
- Deployment – Release the software to the client. First as a beta, which is also a part of testing.
There are many models implemented for the development of Software. They include the:
The first main method used to develop software is the Waterfall method. It is a linear model where the order of stages must be kept, and there is no overlapping. The reason for no overlap is that the finished stage would provide input for the upcoming stage (ie. you cannot start the development phase of the software until the planning phase is finished). This method is called the Waterfall method because the stages cascade, with stages starting only after the previous one is finished.
When is Waterfall method used?
The Waterfall method has its unique perks that makes it still in use in this day and age. They include that the requirements are very well documented, the finished software is stable, the use of Technology has been given time to be well understood and implemented, and there are no ambiguous requirements.
What are the advantages of the Waterfall method?
The advantages of the Waterfall method include: 1. separating the team into groups that focus on one particular aspect of the software (ie. planners plan, developers code the software, testers test. And they solely focus on these roles) 2. Organization of the whole process that insures in-depth accurate documentation & precise-clean coding of the software. 3. The schedules and deadlines are all set during the planning phase, which allows the planners to give the client an accurate estimate for how long it will take to produce the software application.
What are disadvantages of the Waterfall method?
The disadvantages of the waterfall method include: 1. Lack of flexibility. Due to the rigid schedule & deadlines, the team is unable to effectively add new functionalities (if the client asks) not previously listed during the planning stages.
Iterative process starts with a small number of software requirements that are worked on again and again, evolving from one version to another until the software application is complete and ready to by sold to the client. In other words, iterative model starts small and keeps working on what was previously build. Like the Mac OS. The Mac OS is kept improved upon, instead of re-writing the whole software. In contrast, Microsoft Windows starts fresh every time by throwing out the old software right out the window.
In summery, the iterative model means that after every given release you have a full, viable product. Features may be added or improved upon in each release, but each version of the product is self-contained and usable.
Working on making the software application piece by piece. In contrast, iterative is re-working the software. Incremental finishes one function at a time, and glues it to the other functions that are already finished.
To re-iterate (no pun intended), Incremental is when you build one feature, and continue to next, and the next, and the next, until all requirements are fulfilled. You then send the work to your client and hope they like it. Whereas Iterative is when you build the whole software in one go.
The advantage of the Iterative model is that if your client doesn’t like your first prototype, you haven’t wasted a lot of time developing it, so there’s little overhead to just scrap the project and start fresh.
[unorganized extra reading]: So incremental means that the devs don’t build the software all at once. What they do is build a chunk of functionality, and then they test it. After testing if there are no problems, the devs put all of the modules together to finish the software. This is called Integration.
For example, Developers build a username box. Testers test it. Then the Developers Moves onto the next funtionality, the password box. Then that is also tested. this goes on until all the modules are finished. Then the developers integrate all the functionalities/modules.
Spiral model is a type of iterative model. Spiral model has 4 phases:
- Set Objectives
- Risk Analysis
- Evaluation (feedback/review is collected from client) a.k.a. Validation
These 4 steps are then repeated, thus the ‘spiral’
In very broad terms, “spiral model” is usually taken to mean: start with a general idea and continuously figure out what’s different from what’s really wanted, and correct it, preferably correcting the most important difference at any given time. So, you sort of “spiral in” on the right solution.
The benefit of the spiral model is that the cycle or “Spiraling” of the 4 steps (Setting Objectives, Analyzing the Risk, Developing the Software, and Validation the Software) are repeated again and again from the beginning to the final form of the software. This “Spiraling” insures that major risks inherent in software development is addressed. Examples of risks that are addressed include the risk of making an unneeded product, the risk of including unnecessary features, and the risk of making a confusing interface. The reason these risks get addressed is because each Objective is closely scrutinized through Risk Analysis before moving to the development phase.
Essentially, the Spiral model emphasizes continual assessment and adjustment of goals.
V-model is an extension of waterfall mode. In contrast to moving down linearly in Waterfall, the V-model the process steps are bent upward after the coding phase, forming a v shape.
But similar to waterfall, in V-model each phase must be completed before the next phase begins. Testing is performed in parallel to the development. Thus the “V”. Imagine the left part “\” being the development. Imagine the right part “/” being testing (verification). So as each part of the software development occurs, testing for it also occurs.
There are verification phases for the V-model.
- Requirement Analysis (checking the Requirements; if that is what the client actually wants)
- System Design (→ System testing) (system test plan is made based on system design)
- Architectural Design
- Module Design
There are validation phases for the V-model.
- Unit Testing – Testing at the code level (testing code directly)
- Integration Testing – Testing if the pieces, or modules, fit. Ie. The devs develop/code pieces of functionalities for the software separately. Later, they have to put all the pieces together. Making sure that the software works as a whole after putting all the pieces together is called integration testing.
- System Testing – Testing the system. Seeing if the software works with the hardware.
- Acceptance Testing – Seeing if the users of the software like it, if they can use it. Also if the loading & performance of the software is at an acceptable level for the user.
► Big Bang:
The Big Bang model does not follow any specific process or procedure. There is very little planning, mostly because the client himself does not know what he exactly wants. This is a popular model for very small projects (since small projects require less planning) with very small development teams.
The reason there is little to no planning is because the time, money, and effort is totally devoted to developing the software and writing the code.
Note that the model can also be considered very risky without planning.
This method is ideal for small projects with 1-2 devs, working on academic or practice projects.
The Agile method is popular now-a-days because it addresses the need for developing software quickly.
Characteristics that defines the Agile method includes:
- Heavy client involvement in all phases of the Software Development Life Cycle. The Agile approach encourages heavy communication between the development team and the client such that the client basically becomes a part of the development team. This is done in order to avoid any miscommunication that is demonstrated by the picture below:
- Incremental delivery of the product. So instead of delivering the final product as one package to the client, the Agile method delivers & develops small incremental pieces of the software one at a time. This insures that if a module or piece of software is not to the client’s expectation, changes can be easily made in the Software Development Life Cycle.
- Leeway for changes to the specifications of the Software. No matter how carefully requirements are specified for the software (I’m looking at you, Waterfall method), those requirements tend to need change as the project unfolds. However, the Agile method embraces flexibility for change, prioritizing client satisfaction as the primary goal.
- Utilizing Pair Programming. Pair programming is a coding technique where two programmers sit next to each other at a workstation, taking turns designing, coding and checking the other’s code for mistakes. Pair Programming usually results in fewer defects compared to programmers working all by themselves. Two Brains are Better than One, as they say.
SCRUM is an extension of the Agile method. SCRUM is a project management framework that is applicable to any project with aggressive deadlines. In SCRUM, projects move forward via a series of iterations called Sprints. Each sprint is typically 2-4 weeks long.
A SCRUM is a short, linear burst. There is no integration during the sprint. Only 1 function is built at a time per each team. The group divide into teams, and teams are made of 5-10 people. i.e. 3 devs, 1 tester or 6 devs, 3 testers, 1 head lead. So they would work together for only 1 functionality at a time.
Integration in SCRUM happens a lot later than usual. As opposed to regular Agile, SCRUM focuses on getting 1 thing done at a time than several at once. If you ask me, this is smart because the SCRUM model matches human capabilities. As humans, we don’t multitask well, but we are very good at focusing on one thing at a time.
► RAD aka Rapid Application Development:
RAD is a software development methodology that uses minimal planning in favor of rapid prototyping. A prototype is like demo or model version of the actual software that is used to help in planning. Too see the bigger picture, to make sure that building this product is doable, and get more ideas for the product should be constructed… RAD is most common for Hardware development, but can also be implemented for software development.
Before doing any actual development or gathering any extensive number of requirements, a prototype is built to understand the requirements. This prototype is developed based on the current minimum requirements. By building a prototype, the client can get an “actual” feel for the product, and enables the client to understand the requirements of the desired system. Prototypes are usually good for complex systems. Again, prototyping give the client the opportunity to add, subtract, or change any of the requirements before the actual product is built.
Questions: what is the difference between RAD and Prototyping? Seems pretty much the same to me.