Software Testing Tutorial
- Introduction to Software Testing
- Principles of Software Testing
- Software Development Life Cycle (SDLC)
- Software Testing Life Cycle (STLC)
- Levels of Testing
- Database Testing
- Ad-hoc Testing
- Testing Types
- Test Closure Report Preparation
- Test Report Preparation
- ISTQB Organization and Certification Overviews
3.1 Overview of SDLC
For the development of quality software, the software industry uses the Software Development Life Cycle or SDLC. The SDLC is a framework comprising of iterative stages that define the tasks to be carried out in the software development process. It is a conceptual model that serves as a blueprint of detailed plans that explain how specific software will be developed, maintained, modified and upgraded. In fact, the SDLC explains the overall software development process.
3.2 Phases of SDLC
The SDLC process consists of seven phases—Planning, Requirements Analysis, Design, Coding, Testing, Implementation, and Support and Maintenance.
Let’s look at each of the phases in greater detail:
The software development process begins with this phase. It is in this phase that the project is envisioned. The objective or purpose of the software is clearly defined and the objective statement is set for the project. Several parameters such as cost, timeframe, tasks and resources are also considered in this phase.
This is the second step in the SDLC lifecycle. In this phase the needs of the end users are analyzed and the product constraints identified. The business needs for the system are determined and possible solutions are evaluated to find the best solution that fulfils the project goals.
The next stage is the Design phase. The technical architecture or the high-level design of the system is developed at this phase. Project risks are identified and the technologies that will be used for the project are determined.
System design comprises of the External design and the Internal design of the product.
- External Design
In the external design the system is described from the end-user’s perspective wherein the user interface is described in detail.
- Internal Design
In the internal design the internal working of the system is discussed.
Internal design can be further classified into Structural design, Data design and Logic design. The Structural design describes the code and its sub-divisions in detail. The Data design discusses the type of data used in the code and the Logic design defines the logical steps in various tasks.
The actual development of the system begins in this phase. Programmers write code to develop the system based on the requirements and specifications defined in the earlier phases.
In this phase, the system developed is executed with the intent of finding errors. This process is known as testing. Testing is a method to find defects, errors or gaps in a process, program or even a product. In other words, testing determines that the overall process is functioning based on the actual requirements.
In the Implementation phase the system is moved into production. It involves the on-sitel installation of the new system which includes training support during the roll-out period.
Support and Maintenance
After the system is implemented at the client side, the system is continually monitored and support is provided for any system modifications as and when required. Testing during the maintenance will determine whether the system meets its specified objectives for maintainability.
3.3 Models of SDLC
There are various models that can be followed during the lifecycle process. Each of these models has its own set of typical steps that are unique to it and which ensure that the software development lifecycle is carried out successfully.
Let’s take a look at some of the popular models that are in use in the software industry.
3.3.1 Waterfall Model
The waterfall model is a linear, sequential model that segregates the development cycle of the software into different phases. Each phase is designed to accomplish a specific activity. Another interesting feature of this model is that each phase is executed sequentially and can start only after the previous phase has executed completely.
This model is mostly used when the application to be developed is not very complex and the requirements are clear and not prone to change frequently.
|Simple and easy to use||Less flexibility to adjust to changing requirements and scope|
|Suitable for smaller projects||Not suitable for complex projects|
|Changes in the software is made during the development process||Changes or errors requested/detected in the completed software is difficult to implement|
|Documentation is required to be done at every phase of the software’s development cycle||Developers and testers use up a lot of time in documentation activities|
The shortcomings of the traditional waterfall model created a demand for new methods of developing systems which ensures faster results entails less up-front information, and offer greater flexibility. In response, various new Iterative Development approaches came to fore where projects can be subdivided into small parts.
To overcome the limitations of the traditional waterfall model, there was a demand for models that offer greater flexibility. Various iterative development models came to the fore and addressed the shortcomings with newer approaches where projects can be subdivided into small parts.
Let’s take a look at a few of the iterative models.
3.3.2 Prototype Model
The Prototype model is a cyclic version of the linear model. In this model, after the requirements of a system are determined and the design is finalized, the prototype is developed. After the prototype is created, it is rolled out to the customer for evaluation. The customer tests the package, and the product is refined and changes are incorporated till it meets the customer’s
exact expectation. After a finite number of iterations, the final software package is given to the customer.
There are two prototyping approaches that are used in the software development lifecycle.
In this model, the prototype of the system is developed in parts or increments. This method enables the system to be quickly modified in response to the customer’s feedback. Here, development usually starts with those requirements which are best understood.
In throwaway prototyping, a small part of the system is developed and rolled out for customer evaluation. The customer feedback is then incorporated into the main system and the prototype is discarded or thrown away. Here, development starts with those requirements which are poorly understood.
|The model is flexible as it can modify the system early in its development eliminating rework later in the lifecycle.||The nature of the model is rapid and iterative therefore it becomes difficult to manage the system.|
|Here there is always an opportunity to stop development on an unworkable system.||There is a risk that incomplete prototypes are regarded as complete systems.|
|In is easier to trace problems early in the lifecycle.||There is an absence of end phase reviews.|
|The possibility of developing a system that closely focuses on end-users’ needs and expectations is high.||Here, system documentation usually takes a backseat, since the prime focus is on developing a prototype.|
3.3.3 Spiral Model
This model is a combination of the iterative model and the waterfall model with an emphasis on risk analysis. The spiral model comprises of four phases—Planning, Risk Analysis, Engineering and Evaluation. In the development lifecycle, the system passes through each of these phases in iterations (called spirals) repeatedly. The first prototype of the new system is developed from the preliminary design. Successive prototypes are evolved by testing the preceding ones.
Incremental releases of the system are made to the customer with refinement at each spiral or iteration.
The Spiral Model is widely used in the software industry as it is in sync with the natural development process of any product, i.e. learning with maturity which involves minimum risk for the customer as well as the development firms.
This model is suitable for large projects. The minimum risk associated with the approach makes it a popular choice in the software industry.
|The model accommodates the changing requirements of customers.||Due to its iterative nature, management of the different phases in the model is difficult.|
|The development is divided into smaller increments. Therefore the parts of the process that are risky can be developed earlier in the lifecycle. This helps in better risk management.||If a risk is not discovered early, there is always the possibility of it occurring later.|
|It is a suitable approach for large and complex projects.||It is not recommended for smaller projects.|
3.3.4 Incremental Model
The incremental lifecycle model is similar to the spiral model and is also an evolutionary model. It is ideal for complex projects having large business components and interfaces with third party business applications.
The incremental model divides the product into iterations which are developed and tested in parallel. Each iteration has its own requirements, design, implementation and testing phase. A working version of the software is produced during the first iteration. Subsequent iterations are created on the basis of the initial software produced during the first iteration.
|It is ideal for large and complex projects having several components.||The process is time-consuming.|
|It facilitates modifications in the user requirements.||The amount of user interaction in this model is huge.|
|It is a flexible model and less costly in terms of change in scope and requirements.||No visible end to the finished product.|
3.3.5 Agile Methodologies and Concept
The Agile concept is built on the premise that every project is unique and needs to be handled differently. It believes that the existing methods need to be tailored to suit each project requirement. This methodology is gaining wide popularity due to its adaptability and flexibility.
The methodology has an incremental and iterative approach to the software development process. The end user has various opportunities to see the product and validate it for changes in scope and requirements. Using this concept, smaller projects can be developed very easily, although the iterative approach can impact the development times of larger projects.
Let’s now take a look at the Scrum method which follows the agile concept.
3.3.6 Scrum Model
The Scrum model empowers the development team and advocates working in small teams ideally with seven to nine members. This model is an agile development method that emphasizes on how to manage tasks within a team-based development environment.
The Scrum model consists of three roles:
The Scrum Master is responsible for setting up the team, the sprint meetings and removing obstacles in the process.
The Product Owner creates the product backlog, prioritizes the backlog and is responsible for the delivery of the functionality in each iteration.
The Team manages and organizes the development work to complete the sprint or cycle.
- Daily Scrum Meet
In Scrum, the development team holds a daily scrum meeting of 15 minutes to discuss the plan of work for the next 24 hours. To avoid confusion, the meetings are held at the same time and at the same place and kept to the relevant points of discussion. These meetings help in optimizing the team performance while maximizing team collaboration.
- Online Story Board and Kanban Board
One of the important features of the Scrum methodology is the Scrum board. It is used to track the system development workflow and progress from the start to the end. It enables the development team to manage their work effectively. The board can be drawn on the wall or a whiteboard.
Online Scrum boards are also becoming popular especially if the development team is spread across different locations. Kanban tool is an example of an online Scrum board.
- Sprint/Burndown Chart
The Scrum Master estimates the work remaining in the sprint every day and records the details in a chart. This is called the Burndown chart.
3.3.7 V Model
The V model is an extension of the Waterfall model. In this model, at the end of each development phase there is a testing cycle. Testing is done in parallel in each phase in this model. Every phase of the testing in this model corresponds to some activity in the software development phase.
In the V model diagram, the left side represents the SDLC, the right side represents the STLC or the Software Testing Lifecycle.
|It works well with small projects where the requirements are clearly understood.||The model doesn’t provide a clear path for problems found during testing phases.|
|It is simple and easy to use with higher chances of success over the Waterfall model due to the testing cycles.||Little flexibility and expensive approach.|
3.3.8 Rapid Application Development (RAD) Model
Rapid application development (RAD) is an object-oriented approach to systems development that includes a method of development as well as software tools. It follows the linear sequential software development process model that emphasizes on an extremely short development cycle. RAD and prototyping are conceptually very close.
An important feature of this model is to reuse the existing program components (wherever possible) or create reusable components (when necessary). In most instances, automated tools are used to facilitate construction of the software.
|It aims at shortening the time in design and implementation phases.||It is not suitable for large projects.|
|It is capable of dealing with the rapidly changing requirements.||Knowledge of RAD tools is a must to use this methodology|
3.3.9 Fish Model
The Fish model is similar to the V model. In this model validation and verification are done in parallel by multiple verification teams. This is however an expensive and time-consuming approach.
DevOps is a cultural philosophy that aims to combine software development (Dev) with operations (Ops). It aims at delivering products at shorter timeframes in shorter development cycles. This approach emphasizes on automation and monitoring.
3.4 Capability Maturity Model Integration (CMMI) and SDLC
The Capability Maturity Model Integrated (CMMI) is a process improvement approach developed specially for the software process improvement. It is based on the process maturity framework and used as general aid in business processes in Software Industry. This model is highly regarded and widely used in software development organizations.
An organization is certified at CMMI level 1 to 5 based on the maturity of their Quality Assurance Mechanisms.
|Level 1||Initial: This is the initial stage and at this level the quality environment is usually unstable. There are no processes that has been followed or documented.|
|Level 2||Repeatable: In the second level, some processes are followed which are repeatable. This level ensures processes are followed at the project level.|
|Level 3||Defined: Here a set of processes are defined and documented at the organizational level. However, these defined processes are subject to some degree of improvement.|
|Level 4||Managed: This level uses process metrics and effectively controls the processes that are followed.|
|Level 5||Optimizing: This level focuses on the continuous improvements of the processes through learning and innovation.|
- The SDLC is a framework comprising of iterative stages that define the tasks to be carried out in the software development process.
- The SDLC process consists of seven phases: Planning, Requirements Analysis, Design, Coding
- Models of SDLC has its own set of typical steps that are unique to it and which ensure that the software development lifecycle is carried out successfully. Following are the different types of models:
- Waterfall Model
- Prototype Model
- Spiral Model
- Incremental Model
- Agile Methodologies and Concept
- V Model
- RAD Model
- Fish Model