SDLC ( Software Development Life Cycle )
Software Development life cycle is a process used by software industry to design, develop and test software’s
P-People
P-Process
P-Product
SDLC Models –
Big Bang Model
Prototype Model
RAD Model
Iterative Model
Incremental Model
Waterfall Model
Spiral Model
V Model
Agile Model
Big Bang Model
The Big Bang model is an SDLC model where we do not follow any specific process.
The development process simply begins with the necessary funds and labor, and the finished product is the software, which may or may not meet customer requirements.
The Big Bang Model requires very little planning and does not adhere to any set process or procedure.
The requirements are implemented without much thought and even the customer is unsure of exactly what he wants.
Typically, small projects with tiny development teams employ this methodology.
Prototype Model
Prototype is a blueprint ( dummy product ) of the Software.
Initial requirements from the customer -> Design -> Prototype -> Customer Evaluation -> Refined Prototype -> Final Product
RAD Model ( Rapid Application Development )
Emphasizes on extremely short development cycle
Requirements are well understood
Create a fully functional system in very short time period
Achieved by component-based construction
Since well tested components are used, they will be only integration tested when they are used
The total planned testing effort will be reduced as compared that to other models
Iterative Model
According to the iterative model, the process begins with the straightforward implementation of a limited number of software requirements and continues iteratively, improving the evolving versions until the system is fully built and prepared for deployment.
A complete set of criteria is not the starting point for an iterative life cycle model. Rather, only a portion of the program is specified and implemented at first, and it is then reviewed to determine what more is needed. At the conclusion of each model iteration, this procedure is then repeated, creating a new version of the software.
The iterative approach begins with a basic implementation of a portion of the software specifications and progresses by improving the evolving versions until the system is developed in its entirety. New functional capabilities and design adjustments are implemented at every iteration. This method’s main principle is to construct a system incrementally, working on smaller parts at a time, and through repeated cycles.
The Iterative and Incremental model is depicted in the above figure.
Iterative Model – Advantages
It is possible to rapidly and early in the life cycle build some functionalities.
Early and regular results are attained.
Development in parallel might be scheduled.
One can quantify progress.
It is less expensive to alter the criteria or scope.
In lesser iterations, testing and troubleshooting are simple.
Each iteration is a manageable milestone that involves the identification and resolution of risks.
Lower risk: High risk work is completed first.
Delivered with each increment is operational product.•
The dangers, problems, and issues found in each increment can be carried over or applied to the following one.
Better is risk analysis.
It accommodates evolving specifications.
There is reduced initial operating time.
More appropriate for significant and mission-critical tasks.
Early software development in the life cycle allows for user assessment and feedback.
Iterative Model – Disadvantages
We may need to use more resources.
Changes in requirements are not well suited for it, despite the lower cost of modification.
There is a need for more managerial focus.
Because not every need is obtained at the start of the full life cycle, problems with system architecture or design may occur.
System-wide specification may be necessary before defining increments.
Smaller projects shouldn’t use this.
Complicated management is greater.
Risk: It’s possible that the project’s end is unknown.
Risk analysis requires the use of highly skilled personnel.
The risk analysis phase has a major impact on how a project proceeds.
Incremental Model
The incremental model is a software development process in which requirements are divided into several independent software development cycle modules. The incremental development phases are analysis, design, implementation, testing, and maintenance.
The requirements, analysis, design, coding, and testing phases are completed in each iteration. And until all planned functionality is implemented, each new release of the system builds on the previous functionality.
As soon as the first increment is given, the system is put into production. The initial iteration usually consists of a basic product that meets basic requirements. Additional features are added in subsequent iterations. The next increment is planned after the client evaluates the base product.
An iterative incremental model builds a system from the ground up, starting with partial implementations that will be deliverable. Additional functionality is included. A functional product is delivered after any defects from previous deliveries have been rectified. The process is repeated until the entire product development process is completed. Iterations are repeated executions of these procedures. Each iteration ends with the addition of new products.
When to Use It?
You can use the Iterative Incremental model when −
Although the majority of the requirements are known in advance, they should change over time.
There is a hierarchy of requirements.
Quick delivery of the essential features is required.
A project’s development timeline is quite long.
There’s new technology in a project.
The group is new to the domain.
Incremental Model Advantages –
First, you can create a prioritized list of requirements.
Delivery of the initial product is quicker.
Customers receive critical functionality ahead of time.
cuts the price of delivery at first.•
Every release is a step forward in the product’s development, ensuring that the user always has a functional version of the product.
Consumer input is welcome for every iteration of the product, preventing surprises at the conclusion of development.
Changes in requirements are easily accommodated.
Incremental Model Disadvantages –
Requires effective planning of iterations.
Requires efficient design to ensure inclusion of the required functionality and provision for changes later.
Requires early definition of a complete and fully functional system to allow the definition of increments.
Well-defined module interfaces are required, as some are developed long before others are developed.
Total cost of the complete system is not lower.
Waterfall Model
It is a sequential development process that flows like a waterfall through all phases of a project.
It is also called as linear sequential model.
Requirements can not be changed during development process.
Once we moved forward from one stage to next stage, we can’t back to previous stage.
So, this model is suitable for smaller projects.
In this model documentation will play very important role.
Waterfall Model Advantages –
Quality of the product will be good.
Since requirement changes are not allowed, chances of finding bugs will be less.
Initial investment is less since the testers are hired at the later stages.
Preferred for small projects where requirements are feezed.
Waterfall Model Disadvantages –
Requirement changes are not allowed.
If there is defect in requirement that will be continued in later phases.
Total investment is more, because time taking for rework on defect is time consuming which leads to high investment.
Testing will start only after coding.
Spiral Model
One of the most significant models of the software development life cycle that supports risk management is the spiral model. When shown diagrammatically, it resembles a spiral with several loops. It offers an organized, iterative method for developing software.
It is a risk-driven approach, which means that throughout the software development process’s many iterations, risk management is the main focus.
We adhere to the SDLC procedure in every cycle.
Spiral Model Advantages
Testing is done in every cycle, before going to the next cycle.
Customer will get to use the software for every module.
Requirement changes are allowed after every cycle before going to the next cycle.
Spiral Model Disadvantages
Requirement changes are NOT allowed in between the cycle.
Every cycle of spiral model looks like waterfall model
There is no testing in requirement and design phase
V Model or VV Model or Verification and Validation Model
This is also one of the software development process model.
It is also called and VV (verification and validation) model because it is look like in v shape.
In every phase we conduct the testing, and it is specialty of this model.
It is a modified version of the Waterfall modal. It emphasizes on performance and correctness. It is well suited to a project that has low risk in the areas of user interface and routine requirements, but high risk in budget.
Static Testing – Testing the project related documents is call as static testing
Review
Walkthrough
Inspection
Dynamic Testing – Testing the actual software
Unit testing
Integration
System testing
UAT
Some Definitions –
BRS/BRD – Business Requirement Specification / Business Requirement Document
CRS/CRD – Client Requirement Specification / Client Requirement Document
URS/URD – User Requirement Specification / User Requirement Document
FRS/FRD – Functional Requirement Specification / Functional Requirement Document
SRS/SRD – System Requirement Specification / System Requirement Document
HLD – High Level Design
LLD – Low Level Design
Verification and Validation–
Verification –
It is process to check whether software meet with its specification.
Verification checks whether we are building the right product.
Focus on documentation
Verification typically involves into Review, Walkthroughs and Inspections
Validation –
It is process to check whether software meet with its requirement.
Validation checks whether we are building the product right.
Takes place after verification are completed.
Focus on Software
Validation typically involves into actual testing like Unit testing, Integration testing, System testing and UAT
V Model ( VV Model ) Advantages –
Testing is involved in each and every phase
V Model ( VV Model ) Disadvantages –
Documentation is more
Initial investment is more
Agile Model
Agile Model / Agile Methodology / Agile Process
It is an iterative and incremental approach.
It is an iterative and incremental process.
Agile principles –
Customer no need to wait for long time.
We develop, test and release piece of software to the customer with few number of features.
We can accept/accommodate requirement changes.
There will be good communication between Customer, Business Analyst, Developer and Testers.
Agile Model Advantages –
Releases will be very fast (weekly)
Customer no need to wait for long time.
Good communication between team.
It is very easy model to adopt.
Agile Model Disadvantages –
Less focus on design and documentation since we deliver software very faster
Difference Between Waterfall, Spiral and Agile Models
Sr No | Points | Waterfall | Spiral | Agile |
1 | Method | Sequential method | Evolutionary method | Incremental and Iterative |
2 | Customer | Easy to understand | Tough to understand | Easy |
3 | Used for Type of project | Small | Large | Large |
4 | Risk identification | Later stage | Earlier stage | Every stage |
5 | Flexibility | Difficult to adopt changes | Easy to change requirement | Changes accepted at any stage |
6 | Risk of use | Higher | Lower | Lower |
7 | Simplicity | Simple | Complex | Easy |
8 | Customer involvement | Less | Less | More |
9 | Deadlines | Large | Large | Short |
10 | Clarity in requirement | Beginning | Beginning | Requirement Dynamic |
11 | Cost | Fixed | May change with process | Flexible |
12 | Task | Phases | Iterations | Sprints |
13 | Focus | Project delivery | Project delivery | Customer satisfaction |
14 | Testing | After development stage | In each iteration | In each iteration |
15 | Dependency | Project Manager | Project Manager | Scrum Master |
16 | Team Size | Large | Medium | Small |
17 | Documentation | More | More | Less |
Difference between QA, QC and QE
QA –
QA is process related
QA focused on building in quality
QA is preventing defects
QA is process oriented
QA is for entire life cycle
QC –
QC is the actual testing of the software
QC focused on testing for quality
QC is detecting defects
QC is product oriented
QC is for testing part in SDLC
QE –
QE is advance term of QC
QE is quality engineering
Software engineer / SE
Quality engineer / QE
Write the code and testing the software
It’s an automation testing engineers
Static Testing and Dynamic Testing
Review–
Conducts on documents to ensure correctness and completeness.
Requirement Reviews
Design Revies
Code Reviews
Test Plan Reviews
Test cases reviews etc
Walkthrough–
It is a informal review.
Author reads the documents or code and discuss with peers.
It’s not pre-planned and can be done whenever required.
Also, walkthrough does not have minutes of the meet.
Inspection–
It’s a most formal review type.
In which at least 3-8 people will sit in the meeting 1-reader 2-writer 3-moderator plus concerned.
Inspection will have a proper schedule which will be intimated via email to the concerned developer /tester
Test Levels of Software Testing
Unit Testing
Integration Testing
System Testing
User Acceptance Testing (UAT)
Unit Testing
A unit is a single component or module of a software
Unit testing conducts on a single program or single module
Unit testing is white box testing technique
Unit testing is conducted by the developers
What is Module ?
Every functionality is a module. Every application and features divided into different part and those part are basically called as module.
Below all are example of modules.
Gmail – Login, Inbox, Compose, Sent, Receive email, etc..
Banking – Login, Check balance, Fund transfer, Req statement, Add payee, etc..
Unit / Component / Module / Program Testing
Component is defined as “ A minimal software item for which a separate specification is available”
Searches for defects in software that is separately testable ( e.g., Objects, modules, etc.)
Done in isolation from the rest of the system
Test cases are derived from work products such as a specification of the component the software design or the data model
Uses both white box and black box testing techniques
Stubs, drivers and simulators may be used
Includes testing of functionality and specific non-functional requirements
Also done by developer using a debugging tool and defects are fixed without recording
Cost effective if programmer does it himself as the defects are tracked and fixed immediately
Approach is to prepare and automate test cases before coding called a test-first approach or test driven development
Also known as unit / module / program testing
Integration testing
Types of Integration testing –
Non-Incremental Integration Testing ( Big Bang )
Incremental Integration Testing
Non-Incremental Integration Testing ( Big Bang )
Adding all the modules in a single shot and test the data flow between the modules.
Put all components together at once.
Assume that since all components have already been tested at the unit level and they have no defects, they can now be put together at once.
Can same time, but if there is a defect then there is a risk of late defect discovery.
Ultimately, one spends more time.
Incremental Integration Testing
Small number of components are combined together.
Components are added one by one.
Easier to locate, fix defects and recover by reverting to the last known good baseline.
Incrementally adding the modules and testing the data flow between the modules.
Integration testing performed between 2 or more modules.
Integration testing focused on checking data communication between multiple modules.
Integrated testing is white box testing technique
2 incremental integration strategies to determine the order to combine the components :
Top Down
Bottom Up
Top Down = Incremental Integration Testing :
Incrementally adding the modules and testing the data flow between the modules. And ensure the module added is the child of previous module.
Bottom Up = Incremental Integration Testing :
Incrementally adding the modules and testing the data flow between the modules. And ensure the module added is the parent of the previous module
Top-down integration
Combine components starting with the lowest level in the hierarchy.
Since all components that will be called are not available, use Drivers.
What is Driver?
Driver is a temporary program used for integration level testing when the calling program is not ready for testing.
Also known as a Test harness or Scaffolding
Bottom-up integration
Combine components starting with the highest level in the hierarchy.
All components at a level integrated and tested before moving to the next level.
Since all components that will be called are not available, use Stubs.
What is Stub ?
Stub is a temporary program used for integration level testing when the called program is not ready for testing.
System Testing
Testing over all functionality of the application with respective client requirements.
It is a black box testing technique.
This testing is conducted by testing team.
After completion of component and integration level testing’s we start System testing.
Before conducting system testing, we should know the customer requirements.
System Testing Types –
Graphical User Interface Testing ( GUI )
Usability Testing
Functional Testing
Non-Functional Testing
Graphical User Interface Testing ( GUI )
Graphical User-interface testing, or GUI testing is a process of testing the user interface of an application
A graphical user interface includes all the elements such as menus, checkbox, buttons, colors, fonts, sizes, icons, content, and images.
Checklist –
Testing the size, position, width, height of the elements.
Testing of the error messages that are getting displayed.
Testing the different sections of the screen,
Testing of the font whether it is readable or not.
Testing of the screen in different resolutions with the help of zooming in and zooming out.
Testing the alignment of the texts and other elements like icon, buttons, etc. are in proper place or not.
Testing the colors of the fonts.
Testing whether the image has good clarity or not.
Testing the alignment of the images.
Testing of the spelling.
The user must not get frustrated while using the system interface.
Testing whether the interface is attractive or not.
Testing of the scrollbars according to the size of the page if any.
Testing of the disabled fields if any.
Testing of the size of the images.
Testing of the heading whether it is properly alignment or not.
Testing of the color of the hyperlink.
Testing Ui elements like button, textbox, text area, check box, radio buttons, drop downs, links etc.
Usability Testing
During this testing validates application provided context sensitive help or not to the user.
Check how easily the end users can understand and operate the application is called usability testing
Functional Testing
Based on “What” the system does.
Functional is nothing but behavior of application.
Functional testing talks about how your feature should work.
Types of Functional Testing
1. Object properties testing –
Check the properties of objects present on the application.
Ex. Enable, disable, visible, Focus, dropdown list, combo box, etc.
2. Database Testing –
Checking database operations w.r.t user operations.
DML Operations ( Data Manipulation Language )
SQL statements –
Insert
Update
Delete
Select
It is also called as Grey box testing
Table & Column validations ( Column type, column length, number of columns..)
Relation between the tables ( Normalization )
Functions, Procedures, Triggers, Indexes, Views
3. Error Handling
Tester verify the error messages while performing incorrect actions on the applications.
Error messages should be readable.
Use understandable /simple language. Ex . Incorrect data, Invalid user
4. Calculations/Manipulations Testing
Tester should verify the calculations
5. Links Existence & Links Execution ( for Web app only )
Where exactly the links are placed – > Links existence
Links are navigating to proper page or not -> Links execution
Internal links – Navigating to same page after clicking on link
External links – Navigating to different page after clicking on link
Broken links – Not navigating to any page after clicking on link
6. Cookies ( for Web app only )
Temporary files created by browser while browsing the pages through internet.
Sessions are time slots created by the server. Session will be expired after some time ( If you are idle for some time).
Non-Functional Testing
Based on “How” the system does.
Once the application functionality is stable then we do Non-Functional testing.
Focus on performance, load it can take and security etc.
Types of Non-Functional Testing
1. Performance Testing
Performance testing is to check whether the system is working proper against a different loads.
Performance testing is to test speed of the application.
Performance Testing Types –
Load Testing –
Gradually increasing the load on the application then check the speed of the application.
Load testing is to test whether system works on the required load given by client
Stress Testing –
Suddenly increase /decrease the load on the application and check speed of the application.
Scalability Testing –
Scalability testing is to test the application above the given load condition to check at which point does the application break, fail or crash.
Volume Testing –
Check how much data is able to handle by the application.
Volume testing is to test how much bulk of data does the system process at a time on the application.
2. Security Testing
Security testing is how secure our application.
Testing how well the system protects against unauthorized internal or external access, willful damage, etc.
Authentication à Users are valid or not.
Authorization/Access Control à Permission of the valid user.
3. Recovery Testing
Testing how well a system recovery from crashes, hardware failures or other catastrophic problems.
To Check the system, change to abnormal to normal.
To Check whether the application is recovering data or not if you have lost your data.
4. Compatibility Testing
To check or test how well software performs in a particular hardware or software operations system, network or environment.
Forward compatibility
Backward compatibility
Hardware compatibility
5. Configuration Testing
Verifies the performance of the system under development against various combinations of software and hardware to find out the best configuration under which the system can work without any flaws or issues while matching its functional requirements.
6. Installation Testing
Screen navigation
Simple or not
Un-installation
7. Sanitation / Garbage Testing
If any application provides extra features/functionality, then we consider them a bug.
Functional Testing Vs Non-Functional Testing
Functional Testing:
Software is evaluated against functional requirements and specifications in a process known as functional testing. Functional testing verifies that the application correctly meets the requirements or specifications. This type of evaluation focuses specifically on the results of processing. It doesn’t assume anything about how the system is put together. Instead, it focuses on simulating the actual use of the system. It is basically defined as a type of testing that verifies that each feature of a software program operates as per specification and requirement. The source code of the application is irrelevant to this testing. The capability of each software application is tested by giving the appropriate test input, evaluating the result, and contrasting the actual output with the expected output.
Non-Functional Testing:
The non-functional requirements of the application are verified through a type of software testing called non-functional testing. It verifies whether the system is working as per requirements or not. Functional testing doesn’t test every aspect, so it tests every aspect. Software that is used to test non-functional parts of an application is called non-functional testing. Functional testing never addresses the passive parameters, which are used to test system readiness in this design. Functional and non-functional testing are equally important. Functional and non-functional testing differ in the following ways:
Functional Testing | Non-Functional Testing |
Validates functionality of software. | Verify the perfromance, security, reliability of the software. |
Functionality describes what software does. | Non-Functionality describes how software works. |
Concentrates on user requirement. | Concentrates on user expectation. |
Functional testing takes place before Non-functional testing. | Non-Functional testing performed after finishing Functional testing. |