






























Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Please read about software testing
Typology: Summaries
1 / 38
This page cannot be seen from the preview
Don't miss anything!































Software testing is the process of executing a program with the aim of finding the error. To make our software perform well it should be error-free. If testing is done successfully it will remove all the errors from the software. Software Testing is a process of evaluation of the software on the requirements gathered from system specifications and users. Software Testing is done at the every phase level in software development life cycle(SDLC). Can also be done at module level in the program code. Validation and Verification are two main things that are included in Software testing. also, Software Testing is very important else the software bugs can be dangerous. Types of Software Testing:-
Improved software quality and reliability. Early identification and fixing of defects. Improved customer satisfaction. Increased stakeholder confidence. Reduced maintenance costs.
Time-Consuming and adds to the project cost. This can slow down the development process. Not all defects can be found. Can be difficult to fully test complex systems. Potential for human error during the testing process.
There are seven principles in software testing:
Testing shows the presence of defects: The goal of software testing is to make the software fail. Software testing reduces the presence of defects. Software testing talks about the presence of defects and doesn’t talk about the absence of defects. Software testing can ensure that defects are present but it can not prove that software is defect-free. Even multiple testing can never ensure that software is 100% bug-free. Testing can reduce the number of defects but not remove all defects. Exhaustive testing is not possible: It is the process of testing the functionality of the software in all possible inputs (valid or invalid) and pre- conditions is known as exhaustive testing. Exhaustive testing is impossible means the software can never test at every test case. It can test only some test cases and assume that the software is correct and it will produce the correct output in every test case. If the software will test every test case then it will take more cost, effort, etc., which is impractical. Early Testing: To find the defect in the software, early test activity shall be started. The defect detected in the early phases of SDLC will be very less expensive. For better performance of software, software testing will start at the initial phase i.e. testing will perform at the requirement analysis phase. Defect clustering: In a project, a small number of modules can contain most of the defects. Pareto Principle to software testing state that 80% of software defect comes from 20% of modules. Pesticide paradox: Repeating the same test cases, again and again, will not find new bugs. So it is necessary to review the test cases and add or update test cases to find new bugs. Testing is context-dependent: The testing approach depends on the context of the software developed. Different types of software need to perform different types of testing. For example, The testing of the e- commerce site is different from the testing of the Android application. Absence of errors fallacy : If a built software is 99% bug-free but it does not follow the user requirement then it is unusable. It is not only necessary that software is 99% bug-free but it is also mandatory to fulfill all the customer requirements.
Unit tests are typically written by developers as they write the code for a given unit. They are usually written in the same programming language as the software and use a testing framework or library that provides the necessary tools for creating and running the tests. These frameworks often include assertion libraries, which allow developers to write test cases that check the output of a given unit against
frequently, as part of the software build process, to ensure that the software remains stable and free of defects over time. Integration testing is done to verify that different components or modules of the software work together as expected, and to identify and fix any issues that might arise due to interactions between the modules. These tests can include testing different combinations of inputs, testing how the software handles different types of data, and testing how the software handles different error conditions. Integration testing has several benefits, including: Detection of defects that may not be discovered during unit testing, as it examines the interactions between components Improved system design, as integration testing can help identify design weaknesses Improved software quality and reliability, as integration testing helps to ensure that the software as a whole functions correctly. Facilitation of continuous integration and delivery, as integration testing helps to ensure that changes to the software do not break existing functionality Overall, integration testing is an essential part of software development that helps to ensure the quality and reliability of the software by identifying defects in the interactions between the units and components of the software early on in the development process. Different Ways of Performing Integration Testing: There are different ways of Integration Testing that are discussed below. Top-down integration testing: It starts with the highest-level modules and differentiates them from lower-level modules. Bottom-up integration testing: It starts with the lowest-level modules and integrates them with higher-level modules. Big-Bang integration testing: It combines all the modules and integrates them all at once. Incremental integration testing: It integrates the modules in small groups, testing each group as it is added. Advantages of Integrating Testing It helps to identify and resolve issues that may arise when different units of the software are combined. It helps to ensure that the different units of the software work together as intended. It helps to improve the overall reliability and stability of the software. It’s important to keep in mind that Integration testing is essential for complex systems where different components are integrated together.
As with unit testing, integration testing is only one aspect of software testing and it should be used in combination with other types of testing such as unit testing, functional testing, and acceptance testing to ensure that the software meets the needs of its users. The objective is to take unit-tested components and build a program structure that has been dictated by design. Integration testing is testing in which a group of components is combined to produce output. Integration testing is of four types: (i) Top-down (ii) Bottom-up (iii) Sandwich (iv) Big-Bang
Regression testing is a software testing method in which previously developed and tested software is retested after it has been modified or changed. The goal of regression testing is to ensure that any changes to the software have not introduced new bugs or broken existing functionality. It is typically done to verify that changes such as bug fixes, new features, or updates to existing features have not affected the overall functionality of the software. Regression testing is typically performed after unit testing and integration testing. It is usually done by developers and test engineers and it is usually carried out by re- running a suite of previously passed test cases. The test cases are chosen to cover the areas of the software that were affected by the changes, and to ensure that the most critical functionality of the software is still working correctly. Regression testing is typically automated and run frequently, as part of the software build process, to ensure that the software remains stable and free of defects over time. Regression testing has several benefits, including: Early detection and isolation of defects, which can save time and money by allowing developers to fix errors before they become more costly to fix. Improved software quality and maintainability, as regression testing helps to ensure that code changes do not break existing functionality Increased developer and user confidence, as regression testing helps to ensure that the software is still working correctly after changes have been made Facilitation of continuous integration and delivery, as regression testing helps to ensure that changes to the software can be safely released. Overall, regression testing is an essential part of software development that helps to ensure Regression testing can be performed in different ways, such as: Retesting: This involves testing the entire application or specific functionality that was affected by the changes. Re–execution: This involves running a previously executed test suite to ensure that the changes did not break any existing functionality.
new build of the software is stable enough to proceed with further testing, providing increased confidence in the software to the development team and end-users. Alpha snd Beta Testing: Alpha testing is a type of validation testing. It is a type of acceptance testing that is done before the product is released to customers. It is typically done by QA people. Beta Testing - The beta test is conducted at one or more customer sites by the end-user of the software. This version is released for a limited number of users for testing in a real-time environment.
System testing is a software testing method in which an entire software system is tested as a whole, in order to ensure that it meets the requirements and specifications that it was designed for. The goal of system testing is to validate that the software system behaves as expected when it is used in its intended environment, and that it meets all the requirements for functionality, performance, security, and usability. System testing is typically performed after unit testing, integration testing, and regression testing. It is usually done by test engineers and it is usually carried out by running a set of test cases that cover all the functionality of the software. The test cases are chosen to cover the requirements and specifications of the software, and to ensure that the software behaves correctly under different conditions and scenarios. System testing is typically automated and run frequently, as part of the software build process, to ensure that the software remains stable and free of defects over time. System testing has several benefits, including: Early detection and isolation of defects, which can save time and money by allowing developers to fix errors before they become more costly to fix. Improved software quality and reliability, as system testing helps to ensure that the software meets all the requirements and specifications that it was designed for. Increased user confidence, as system testing helps to ensure that the software behaves correctly when it is used in its intended environment. Facilitation of acceptance testing, as system testing helps to ensure that the software is ready for release. Overall, system testing is an essential part of software development that helps to ensure the quality and reliability of the software by identifying defects early on in the development process. It helps to ensure that the software meets all the requirements and specifications that it was designed
for, providing increased confidence in the software to the development team and end-users.
In Stress Testing, we give unfavorable conditions to the system and check how they perform in those conditions. Example: Test cases that require maximum memory or other resources are executed. Test cases that may cause thrashing in a virtual operating system. Test cases that may cause excessive disk requirement Performance Testing. It is designed to test the run-time performance of software within the context of an integrated system. It is used to test the speed and effectiveness of the program. It is also called load testing. In it, we check, what is the performance of the system in the given load.
Object-Oriented Testing testing is a combination of various testing techniques that help to verify and validate object-oriented software. This testing is done in the following manner: Testing of Requirements, Design and Analysis of Testing, Testing of Code, Integration testing, System testing, User Testing.
Acceptance testing is done by the customers to check whether the delivered products perform the desired tasks or not, as stated in the requirements. We use Object-Oriented Testing for discussing test plans and for executing the projects.
A defect is an error or bug in an application that is created during the building or designing of software and due to which software starts to show abnormal behaviors during its use. So it is one of the important responsibilities of the tester to find as much as defect possible to ensure the quality of the product is not affected and the end product is fulfilling all requirements perfectly for which it has been designed and provide required services to the end-user. Because as much as
New: When any new defect is identified by the tester, it falls in the ‘New’ state. It is the first state of the Bug Life Cycle. The tester provides a proper Defect document to the Development team so that the development team can refer to Defect Document and can fix the bug accordingly. Assigned: Defects that are in the status of ‘New’ will be approved and that newly identified defect is assigned to the development team for working on the defect and to resolve that. When the defect is assigned to the developer team the status of the bug changes to the ‘Assigned’ state. Open: In this ‘Open’ state the defect is being addressed by the developer team and the developer team works on the defect for fixing the bug. Based on some specific reason if the developer team feels that the defect is not appropriate then it is transferred to either the ‘Rejected’ or ‘Deferred’ state. Fixed: After necessary changes of codes or after fixing identified bug developer team marks the state as ‘Fixed’. Pending Request: During the fixing of the defect is completed, the developer team passes the new code to the testing team for retesting. And the code/application is pending for retesting on the Tester side so the status is assigned as ‘Pending Retest’. Retest: At this stage, the tester starts work of retesting the defect to check whether the defect is fixed by the developer or not, and the status is marked as ‘Retesting’. Reopen: After ‘Retesting’ if the tester team found that the bug continues like previously even after the developer team has fixed the bug, then the status of the bug is again changed to ‘Reopened’. Once again bug goes to the ‘Open’ state and goes through the life cycle again. This means it goes for Re-fixing by the developer team. Verified: The tester re-tests the bug after it got fixed by the developer team and if the tester does not find any kind of defect/bug then the bug is fixed and the status assigned is ‘Verified’. Closed: It is the final state of the Defect Cycle, after fixing the defect by the developer team when testing found that the bug has been resolved and it does not persist then they mark the defect as a ‘Closed’ state. Few More States that also come under this Defect Life Cycle: Rejected: If the developer team rejects a defect if they feel that defect is not considered a genuine defect, and then they mark the status as ‘Rejected’. The cause of rejection may be any of these three i.e Duplicate Defect, NOT a Defect, Non-Reproducible. Deferred: All defects have a bad impact on developed software and also they have a level based on their impact on software. If the developer team feels that the defect that is identified is not a prime priority and it can get fixed in further updates or releases then the developer team can mark the status as ‘Deferred’. This means from the current defect life cycle it will be terminated.
Duplicate: Sometimes it may happen that the defect is repeated twice or the defect is the same as any other defect then it is marked as a ‘Duplicate’ state and then the defect is ‘Rejected’. Not a Defect: If the defect has no impact or effect on other functions of the software then it is marked as ‘NOT A DEFECT’ state and ‘Rejected’. Non-Reproducible: If the defect is not reproduced due to platform mismatch, data mismatch, build mismatch, or any other reason then the developer marks the defect as in a ‘Non-Reproducible’ state. Can’t be Fixed: If the developer team fails to fix the defect due to Technology support, the Cost of fixing a bug is more, lack of required skill, or due to any other reasons then the developer team marks the defect as in ‘Can’t be fixed’ state. Need more information: This state is very close to the ‘Non-reproducible’ state. But it is different from that. When the developer team fails to reproduce the defect due to the steps/document provided by the tester being insufficient or the Defect Document is not so clear to reproduce the defect then the developer team can change the status to “Need more information’. When the Tester team provides a good defect document the developer team proceeds to fix the bug. Defect Lifecycle Consider the flow chart below to understand the defect lifecycle.
Types of Testing Tools Software testing is of two types, static testing, and dynamic testing. Also, the tools used during these testing are named accordingly on these testings. Testing tools can be categorized into two types which are as follows: Static Test Tools: Static test tools are used to work on the static testing processes. In the testing through these tools, the typical approach is taken. These tools do not test the real execution of the software. Certain input and output are not required in these tools. Static test tools consist of the following: Flow analyzers: Flow analyzers provides flexibility in the data flow from input to output. Path Tests: It finds the not used code and code with inconsistency in the software. Coverage Analyzers: All rationale paths in the software are assured by the coverage analyzers. Interface Analyzers: They check out the consequences of passing variables and data in the modules. Dynamic Test Tools: Dynamic testing process is performed by the dynamic test tools. These tools test the software with existing or current data. Dynamic test tools comprise the following: Test driver: The test driver provides the input data to a module-under- test (MUT). Test Beds: It displays source code along with the program under execution at the same time. Emulators: Emulators provide the response facilities which are used to imitate parts of the system not yet developed. Mutation Analyzers: They are used for testing the fault tolerance of the system by knowingly providing the errors in the code of the software. There is one more categorization of software testing tools. According to this classification, software testing tools are of 10 types:
scalability, performance, speed, etc. For example, WebLOAD, Apache JMeter, Neo Load, etc.
Integration testing is the practice of checking the interface between two software components or modules. It focuses on determining the correctness of the interface. It is used to identify faults in the interaction of integrated units. Integration testing is the practice of checking the interface between two software components or modules. Below are some integration testing tools:
Citrus is a Java-based test framework for automated message-based application and data format integration testing. It checks request and response data for JSON, XML, and plain text. Consider the case when the test application is hosted on the application server. This application communicates with Citrus over SOAP, HTTP, and JMS, among other message transports. Citrus simulates the request and answers messages by acting as both a client and a server in this scenario. Key Features: It is free and open-source software released under the Apache License 2.0. Messages should be sent in a specific order. Makeup error messages. Validation of Message Headers Message sending and receiving Wait for a message and then send another. Supports message transport connectivity integration testing. The XML response is validated. Verify that the data exists.
VectorCAST is a popular unit and integration testing tool from Vector Software. Each unit or module is tested separately to ensure that individual components are performing as planned and are not dependent on one another. These components are later joined during Integration Testing to ensure that all integrated modules are working properly as a whole. Unit tests are conducted as discrete components, and
integration tests are a collection of unit tests that are combined into a logical module and then executed as a group, according to Vector’s tools. Key Features: Developers who use the C or C++ programming languages to create embedded software use the VectorCAST/C++ tool. It is used to automate unit and integration testing and to expedite the test workflow. VectorCAST/C++ is a powerful unit and integration testing solution. It certifies embedded systems that are both safe and commercial vital. VectorCAST/test C++’s solution is widely utilized in the financial industry, medical devices, industrial controllers, and railways.
It generates a test report based on the test execution results.
Cross-browser testing tools are required when there is a need to test an application on multiple browsers. These tools will assist in ensuring that the web application functions correctly across all browsers. When both the server and client sides of the web application are accessed through several web browsers, this tool will be used.
Cross-browser testing tools allow testing the applications and websites end-to-end on both web and mobile across a variety of browsers. These tools are mostly cloud- based and allow you to conduct tests on browsers without installing the tool. Cross-browser testing is an important part of software testing. It is a type of performance testing that allows the tester to check whether the website works as intended on all web browsers, mobile devices, and operating systems. It helps to deliver a consistent user experience across different devices, browsers, platforms, etc. Features of Cross-Browser Testing Tool
Erroneous display of website content: Different versions of operating systems interpret data in different ways thus some browsers may display the content of a website inappropriately, resulting in user disappointment. Ensure the best user experience: Non-functional variety of web application testing can ensure every user can have the best user experience. The website works properly: There should be no breaks in the layout and the website should work the same way in all browsers, OSes, or devices.
Speed: There is always an issue with the speed of execution when the website is tested locally across different browsers on a cloud-based testing platform. Scalability: Before launching and updating the mobile application or the website one wants to see how the website appears on real devices. With cross-browser testing, it is possible to test the website in the exact environments before being alive. Multiple testing options: Almost all cross-browser testing tools offer performance testing, responsive testing, localization testing, visualization testing, etc. Compatibility testing: Cross-browser testing tools that support code- less scripting make the testing process easier for non-programmers. Benefits of Cross-Browser Testing Tools Testing on multiple OS: Cross-browser testing tools help to test web applications on multiple operating systems such as Windows, macOS, and Linux. Testing on multiple browsers: Cross-browser testing tools enable testing web applications on multiple browsers. Saves time: It helps to save time as there is no need to reinstall the browser multiple times. Testing on varying screen resolutions: It enables testing web applications on varying screen resolutions, devices such as PCs, laptops, or mobile devices. 10 Cross-Browser Testing Tools will be discussed here: