Software Testing and Software Testing Life Cycle (STLC)
Software testing is the most crucial aspect of the Software Development Life Cycle (SDLC). It is crucial because it helps in finding out and fixing bugs or any major hidden issues that software might have.
For the systematic testing of a software product, it has to undergo sequences of activities which are performed during the testing process, called Software Testing Life Cycle (STLC). Testing helps improve the quality of the software product that is built with specific business requirements and goals that it is expected to perform. Nothing annoys customers more than a bug-filled user experience. Therefore, today testing is not only about reporting bugs to the developer. It has a wide role to play and is a mandatory phase to execute from the initial phases of a project. Software testing is done in phases.
There are 6 phases in STLC:
A) Requirement Analysis
Once the pre-defined set of features are incorporated within the software, it is the time to test these features on the basis of performance. Quality Assurance team or an Individual Tester performs requirement analysis with the client/stakeholders to understand the specific business requirements and expectations that these features are expected to perform.
B ) Test Planning
Second step of STLC is to plan the testing strategy and a scope document is prepared. In this document each and every aspect of testing is mentioned-right from members of the testing team, to equipment/testing tools and budget.
C) Developing Test Case
In the third phase of STLC, test cases are created. Every case defines testing inputs/data, process, conditions of performing test, and anticipated results. Team makes sure that the developed test cases are transparent, efficient, and adaptable.
D) Test Environment Setup
In this phase, testing is done to validate the product. Here the testing environments are configured, deployed and smoke test is performed to ensure that environments are working as expected with all intended functionalities.
E) Test Execution
At test execution phase, features of the software product are tested in the deployed environment, using the deployed test cases. Expected test results are compared and results are collected to report back to development teams.
F) Test Closure
After the real time validation of product features, finding and fixing bugs, it's time to document all the details- total cost, matrix, results and reports.
WBT (White Box Testing)
Entire WBT is done by Developers. It is the testing of each and every line of code in the program. Developers conduct WBT, and send the software application to the testing team. White box testing is a structural test of the software.
BBT (Black Box Testing)
Black box testing is done by Testers. The testing team conducts black box testing and checks the software against requirements and finds any defects and sends it to the developer. Black box testing is a functional test of the software.
Types of Black Box Testing are:
A) Functional Testing.
B) Non-Functional Testing.
C) Regression Testing.
A) Functional Testing
It is used to evaluate software based on functional requirements of the business to ensure that the software works as it was specified to do. The primary focus of functional testing is to ensure that the software components work as designed, and that the design sufficiently meets the business requirements.
Testing based on Requirements:
Testing based on Requirements:
The test is conducted on the basis of functional specifications that the software is required to perform.
Testing based on Business Goals:
The test is conducted on the basis of the information from business process perspective. It involves the goals that a business is planning to achieve.
Types of Functional Testing:
a) Unit Testing
Unit Testing of software application is carried out during the development of an application by developer to test individual units or components of the application.
The objective of Unit Testing is:
To isolate a section of code.
To verify the correctness of code.
To help for code reuse.
To test every function and procedure.
To fix bugs early in the development cycle and to save costs.
To help the developers to understand the code and make required changes.
b) Integration Testing
Testing the data flow between the two features is known as integration testing. The purpose of the integration testing is to find out faults in the interactions between integrated units. It is performed after unit testing and before validation testing. Here the software modules are integrated logically and tested as a group.
Integration test approaches:
Big-Bang Integration Testing.
Bottom-Up Integration Testing.
Top-Down Integration Testing.
Mixed Integration Testing.
c) System Testing
It is end-to-end testing wherein the testing environment is similar to the production environment. System testing is performed on a completely integrated system to evaluate the compliance of the system with the corresponding requirements.
End – to – end testing
Here, we navigate through all the features of the software and test if the end business / end feature works. We just test the end feature and don’t check for data flow or do functional testing and all.
System Testing Process:
Test Environment Setup
Create Test Case
Create Test Data
Execute Test Case
d) Sanity Testing
Sanity testing is usually conducted when a new build is received for testing which helps to identify the dependent missing functionalities. Sanity testing is conducted when:
a) when there is an improvement/change in the functionality of the specified software.
b) when a bug is fixed, or a new feature is added.
Here are the Attributes of Sanity Testing:
Arrow and Deep
A Subset of Regression Testing
Performed by testers
e) Smoke Testing
Testing the basic or critical features of an application before going thorough testing or rigorous testing is called smoke testing. It acts as a confirmation mechanism to verify whether the quality assurance team can proceed with further testing or not. It is also called Build Verification Testing – because we check whether the build is broken or not. Whenever a new build comes in, we always start with smoke testing, because for every new build – there might be some changes which might have broken a major feature ( fixing the bug or adding a new feature could have affected a major portion of the original software).
Important Points to Remember while conducting smoke testing:
When we are conducting smoke testing, we do only positive testing (only valid data is entered).
Here, we test only basic or critical features.
We take basic features and test them for important scenarios.
When the product is installed in production, we do quick smoke testing to ensure the product is installed properly.
Why do we perform Smoke testing ?
Just to ensure that product is testable.
Do smoke testing in the beginning – catch bugs in basic features – send it to the development team so that the development team will have sufficient time to fix it.
Ensure that the product is installed properly.
f) Ad-Hoc Testing
The process is usually performed to find loopholes in software. Ad-Hoc Testing is done randomly in between without following the pre-defined flow of the software. This is done considering that the customer never uses the application in a sequence/systematically. Adhoc testing is performed without any documentation because it does not have any test case created. Adhoc testing is an Unstructured form of testing:
g) Interface Testing
Interface Testing verifies the communication between two software applications or components Two important components of interface testing are:
Web Server and Application Server interface.
Database Server and Application Server interface.
Phases of Interface Testing are:
Configuration and Development
h) Acceptance Testing
Acceptance testing is formal testing conducted on the basis of user requirements and function processing. It verifies whether the software is adhering to specified requirements and user requirements.
Types of Acceptance Testing:
1. User Acceptance Testing (UAT):
User acceptance testing is conducted to make sure if the product is working for the user correctly. This is also termed as End-User Testing.
2. Business Acceptance Testing (BAT):
Business acceptance testing is done to determine if the end product meets the business goals. This test is done keeping in mind the business benefits that a software product is expected to bring.
3. Contract Acceptance Testing (CAT):
Contract acceptance testing is basically a contract signed legally between a development company and the client, which specifies that the acceptance test must be performed within the specified time period and it should pass all the acceptance use cases after the product goes live.
4. Regulations Acceptance Testing (RAT):
egulation acceptance test is done to verify if the product adheres or violates the rules and regulations that are defined by the government of the country where it is being released. This may be unintentional but will impact negatively on the business.
5. Operational Acceptance Testing (OAT):
Operational acceptance test is conducted to verify the operational readiness of the software product to ensure it’s stability. It includes testing of compatibility, maintainability, reliability etc.
6. Alpha Testing:
Alpha testing is done to identify bugs before releasing the software product to the client.
7. Beta Testing:
Beta testing is conducted by launching a beta version of the software product into the market to assess its performance with the real end-users. Feedback is collected from the users and the defects are fixed. Beta testing also helps in enhancing the product feature to give a rich user experience.
Types of Testing Criteria for Functional Requirements:
User acceptance testing is conducted to make sure if the product is working for the user correctly. This is also termed as End-User Testing.
Inspection is sometimes done with demonstration by the tester. The process requires visual examination of the code documentation, table dumps, scans, etc.
3. Analysis/Special Qualification
This testing usually affects critical parts of the software and/or it’s interfaces.
B) Non Functional Testing
Non-functional testing is a type of testing to check non-functional aspects (performance, usability, reliability, etc.) of a software application. It is basically performed to check how good a software functions. It is explicitly designed to test the readiness of a system as per nonfunctional parameters which are never addressed by functional testing.
Types of Non-Functional Testing are:
a) Automation Testing
Automation testing is performed by using automation testing tools/software or by writing test scripts to test and compare the actual outcome v/s the expected outcome. There are times when a test is to be performed on repetitive tasks that are difficult to test manually. As compared to manual testing, automation testing is more error proof and fast. It also helps increase Test Coverage. Software Test Automation demands considerable investments of money and resources.
Scenarios suitable for Automation Testing:
Business scenarios that are at higher risk.
Complex Software solution needs automation testing.
Test cases that needs to be repeatedly executed.
Test Cases that are repetitive in nature.
Test Cases that are very difficult to perform manually.
Test Cases which are time consuming.
Scenarios that are not suitable for Automation Testing:
Newly designed software.
Test case scenario where requirements are dynamic in nature.
Test cases which are executed on an ad-hoc basis.
Automation Testing Process:
1. Feasibility Analysis
Make sure if the application is suitable for automation testing or not. Not all applications can be automated due to the limitations of functionality.
2. Tool Selection
In this step, suitable tools are selected, depending upon the technology in which the application was built, the features involved and usability it provides.
3. Select the suitable Framework
This stage the suitable framework design and its features are selected.
4. Create Proof of Concept
POC is developed considering end-to-end scenarios to evaluate if the tool can support the automation of the application. It is performed with an end-to-end scenario, to ensure that the major functionalities can be automated.
5. Build Automation Framework
Framework is built after diligently analysing the technology used by the application and also its key features.
6. Develop Test Script, Execute, and Analyze
In this stage the Script is developed & executed, results are analyzed and defects are logged.
b) Mobile Testing
It is the process of testing various aspects of mobile functions like-usability, features, functionality, flow and consistency. Mobile testing can be done automatically and manually. The major purpose of conducting mobile testing is to make sure it suffices for the purpose it is built.
Types of Mobile Testing:
1. Mobile Functional Testing:
Functional Testing involves: Business flows, UI testing (landscape/portrait, languages etc.) and Cross-platform coverage.
2. Mobile Performance Testing
3. Mobile Security Testing
4. Mobile Usability Testing
5. Mobile Accessibility Testing
Our Mobile App Testing Capabilities:
We conduct test optimization on the basis of mobile device market penetration.
We own a set of trained mobile app testers with experience in functional, usability and security testing.
We provide mobile application testing services across a wide set of popular devices and mobile operating system.
Globalization testing is done to ensure that the software is up to the mark to global standards and is readily available in all the required languages. We own significant globalization testing experience in Agile development cycles.
d) Performance Testing
It is a process of testing the performance of the software application in terms of- speed, stability, response time, reliability and scalability. Performance test increases the performance and scalability levels of business’s mission critical applications.
Types of Performance Testing:
1. Load testing
Load testing is conducted to check the workload bearing capacity of the software. Workload here means concurrent users or transactions.
2. Stress testing
Stress testing is done to measure the performance of the software from a stress bearing capacity and stability point of view, where software is given more users or transactions that can be handled.
3. Endurance testing/soak testing
A non-functional testing method to check software problems like memory leaks, which can harm it’s performance. In endurance testing a significant load is extended over a significant or longer period of time, to discover how the software application behaves under sustained use.
4. Spike testing
Like stress testing, Spike Testing is done to test how a software application reacts when there is an unpredicted change in user load. It determines the behavior of a software application when it receives extreme variations in load traffic. An e-commerce site must be spike tested before an upcoming seasonal offers.
5. Volume testing/flood testing
In Volume testing software application is subjected to a huge volume of data to check the capacity of the database. This is suitable for applications that involve financial transactions on a day to day basis like banking and shopping apps.
6. Scalability testing
Scalability testing is a non-functional testing method in which the performance of a software application is measured by increasing or decreasing the load in particular scale by either scaling up or scale down the number of user requests or other such performance measure attributes. There are two types of scalability testing: Upwards scalability testing and Downward scalability testing.
e) Accessibility Testing
Web/App accessibility testing is done with a motive to make the particular website or application accessible to everyone who wants to use it.There are various laws that states that certain websites should made accessible to people with disabilities at workplace or public places (Americans with disabilities act, Rehabilitation Act, sections-504 & 508 and Web content accessibility guidelines: These guidelines suggest the ways that can help to improve the accessibility of a website).
f) Usability Testing
Usability testing is conducted to test the user experience that an application provides to the user. Any applications must be created with a mission that it must achieve along with ease of operation. The level of skill sets required to learn/use the software must maintain a balance for both a new user and an expert user.
g) Security Testing
Security testing is conducted to prevent a software application from malicious activities, vulnerabilities, threats, risks etc. It helps in protecting data, loss of information & revenue of the user company from being accessed and used by frauds.
Tips for Developers to Avoid Mobile Application Security Pitfalls:
Types of security testing:
C) REGRESSION TESTING
Testing the unchanged features to make sure that it is not broken because of the changes (changes means – addition, modification, deletion or defect fixing).
When the development team gives a build, chances are there that they might have done some changes. That change might affect unchanged features. So, Testing the unchanged features to make sure that it is not broken because of the changes is called Regression Testing.
Types of Regression Testing:
Unit Regression Testing
Regional Regression Testing
Full Regression Testing
A) Unit Regression Testing (URT)
Here, we are going to test only the changes.
In Build B01, a bug is found and a report is sent to the developer. The developer fixes the bug and also sends along some new features developed in the second build B02.
Testing only the modified features is called Unit Regression Testing.
B) Regional Regression Testing (RRT)
Testing the changes and impact regions is called Regional Regression Testing.
C) Full Regression Testing
After two releases of the product, during the third release – customers might ask for adding two new features, deleting one feature and modifying another feature. Also some bugs might need to be fixed. The testing team after doing impact analysis finds out that making all the above changes will lead to testing the entire product.
Thus, Testing the changes and all the remaining features is called Full Regression Testing.