Testing through SDLC

Software Development life cycle is a process used by software industry to design, develop and test software’s

P-People

P-Process

P-Product

Big Bang Model

Prototype Model

RAD Model

Iterative Model

Incremental Model

Waterfall Model

Spiral Model

V Model

Agile 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 is a blueprint ( dummy product ) of the Software.

Initial requirements from the customer -> Design -> Prototype -> Customer Evaluation -> Refined Prototype -> Final Product

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

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.

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.

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.

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.

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

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 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

Sr NoPointsWaterfallSpiralAgile
1MethodSequential methodEvolutionary methodIncremental and Iterative
2CustomerEasy to understandTough to understandEasy
3Used for Type of projectSmallLargeLarge
4Risk identificationLater stageEarlier stageEvery stage
5FlexibilityDifficult to adopt changesEasy to change requirementChanges accepted at any stage
6Risk of useHigherLowerLower
7SimplicitySimpleComplexEasy
8Customer involvementLessLessMore
9DeadlinesLargeLargeShort
10Clarity in requirementBeginningBeginningRequirement Dynamic
11CostFixedMay change with processFlexible
12TaskPhasesIterationsSprints
13FocusProject deliveryProject deliveryCustomer satisfaction
14TestingAfter development stageIn each iterationIn each iteration
15DependencyProject ManagerProject ManagerScrum Master
16Team SizeLargeMediumSmall
17DocumentationMoreMoreLess

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

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

Unit Testing
Integration Testing
System Testing
User Acceptance Testing (UAT)

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

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.

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, 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.

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

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).            

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: 

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.

Types of Software Testing