The software testing, Summaries of Introduction to Software Engineering

Please read about software testing

Typology: Summaries

2014/2015

Uploaded on 10/03/2023

madhurima-bhattacherjee
madhurima-bhattacherjee 🇦🇺

1 document

1 / 38

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Software Testing
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:-
1. Unit Testing
2. Integration Testing
3. Regression Testing
4. Smoke Testing
5. System Testing
6. Alpha Testing
7. Beta Testing
8. Performance Testing
9. Security Testing
10.User Acceptance Testing
Advantages of Software Testing
Improved software quality and reliability.
Early identification and fixing of defects.
Improved customer satisfaction.
Increased stakeholder confidence.
Reduced maintenance costs.
Disadvantages of Software Testing
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.
Principles of software testing
There are seven principles in software testing:
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26

Partial preview of the text

Download The software testing and more Summaries Introduction to Software Engineering in PDF only on Docsity!

Software Testing

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

  1. Unit Testing
  2. Integration Testing
  3. Regression Testing
  4. Smoke Testing
  5. System Testing
  6. Alpha Testing
  7. Beta Testing
  8. Performance Testing
  9. Security Testing 10.User Acceptance Testing

Advantages of Software Testing

 Improved software quality and reliability.  Early identification and fixing of defects.  Improved customer satisfaction.  Increased stakeholder confidence.  Reduced maintenance costs.

Disadvantages of Software Testing

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

Principles of software testing

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.

Software Testing Types

1. Unit Testing

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

3. Regression Testing

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.

5. System Testing

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.

6. Stress Testing

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.

7. Object-Oriented Testing

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.

8. Acceptance 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.

Bug Life Cycle

What is a Bug/Defect?

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.

  1. The tester finds a defect.
  2. The defect status is changed to New.
  3. The development manager will then analyze the defect.
  4. The manager determines if the defect is valid or not.
  5. If the defect is not valid then the development manager assigns the status Rejected to defect.
  6. If the defect is valid then it is checked whether the defect is in scope or not. If no then the defect status is changed to Deferred.
  7. If the defect is in scope then the manager checks whether a similar defect was raised earlier. If yes then the defect is assigned a status duplicate.
  8. If the defect is not already raised then the manager starts fixing the code and the defect is assigned the status In-Progress.
  9. Once the defect is fixed the status is changed to fixed. 10.The tester retests the code if the test is passed then the defect status is changed to closed. 11.If the test fails again then the defect is assigned status reopened and assigned to the developer.

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:

  1. Test Management Tools: Test management tools are used to store information on how testing is to be done, help to plan test activities, and report the status of quality assurance activities. For example, JIRA, Redmine, Selenium, etc.
  2. Automated Testing Tools: Automated testing tools helps to conduct testing activities without human intervention with more accuracy and less time and effort. For example, Appium, Cucumber, Ranorex, etc.
  3. Performance Testing Tools: Performance testing tools helps to perform effectively and efficiently performance testing which is a type of non- functional testing that checks the application for parameters like stability,

scalability, performance, speed, etc. For example, WebLOAD, Apache JMeter, Neo Load, etc.

  1. Cross-browser Testing Tools: Cross-browser testing tools helps to perform cross-browser testing that lets the tester check whether the website works as intended when accessed through different browser-OS combinations. For example, Testsigma, Testim, Perfecto, etc.
  2. Integration Testing Tools: Integration testing tools are used to test the interface between the modules and detect the bugs. The main purpose here is to check whether the specific modules are working as per the client’s needs or not. For example, Citrus, FitNesse, TESSY, etc.
  3. Unit Testing Tools: Unit testing tools are used to check the functionality of individual modules and to make sure that all independent modules works as expected. For example, Jenkins, PHPUnit, JUnit, etc.
  4. Mobile Testing Tools: Mobile testing tools are used to test the application for compatibility on different mobile devices. For example, Appium, Robotium, Test IO, etc.
  5. GUI Testing Tools: GUI testing tools are used to test the graphical user interface of the software. For example, EggPlant, Squish, AutoIT, etc.
  6. Bug Tracking Tools: Bug tracking tool helps to keep track of various bugs that come up during the application lifecycle management. It helps to monitor and log all the bugs that are detected during software testing. For example, Trello, JIRA, GitHub, etc. 10.Security Testing Tools: Security testing is used to detect the vulnerabilities and safeguard the application against the malicious attacks. For example, NetSparker, Vega, ImmuniWeb, etc. TestComplete: TestComplete developed by SmartBear Software is a functional automated testing tool that ensures the quality of the application without sacrificing quality or agility. Features:  TestComplete has built-in keyword-driven test editor that consists of keyword operations that correspond to automated testing actions.  It records the key actions that are necessary to replay test and discard all unneeded actions.  It can run several automated tests across separate virtual machines.  It has built-in code editor that helps testers write scripts manually.  It automatically captures screenshots during test recording and playback. LambdaTest: LambdaTest is a cross-browser testing tool that helps to evaluate how web application responds when accessed through a variety of different browsers. Features:  It has Selenium scripts on 3000+ browsers and operating system environments, giving higher test coverage.

Integration Testing Tool

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

  1. Citrus
  2. VectorCAST/C++
  3. LDRA
  4. Rational Integration tester
  5. FitNesse
  6. TESSY

1. Citrus

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.

2. VectorCAST/C++

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.

  1. LDRA LDRA provides integration testing tools that are used to verify compliance standards for various organizations. LDRA is an open platform that allows integration tests to be built using the LDRA tool suite, as well as static and dynamic analysis across several platforms. LDRA’s integration tools include-  TBrun: TBrun allows you to perform automated unit and integration testing.  LDRAunit is a stand-alone tool that provides a fully integrated unit testing environment. Key Features:  Unit and integration tests may be simply created and conducted with the help of tools.  The tool aids in providing a variety of support so that unit and integration testing can take place in a common environment across a variety of projects.  The tool is both affordable and adaptable to the needs of a team.
  2. Rational Integration Tester It was once known as a Green hat, but IBM acquired it and renamed it a rational integration tester. It provides a script-free environment for building and testing business process integration projects and SOA messaging tests. It’s part of a logical test workbench. This solution provides clients with cost-effective test environments, allowing them to test applications early in the development process. One can avoid integration challenges by adopting an iterative and agile development process with the help of this technology. Key Features:  Users will be able to do integration, functional, and regression testing with it.

 It generates a test report based on the test execution results.

Cross-Browser Testing Tools

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

What is Cross-Browser Testing?

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

  1. Customer Support and Technical Support: The tool should have full technical support available for the users whether it’s a support team, documentation, or open-source resources.
  2. Cloud-Based: The tool should be cloud-based so that a wide range of browsers and devices are accessible.
  3. Simple User Interface: The tool should be easy to use and navigate and the test results should be easy to view and access.
  4. Test on Browsers: The tool should have the ability to run on a multitude of browsers without the need to install those browsers.

Why is Cross-Browser Testing Important?

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

  1. Browsershots
  2. Browsera
  3. Selenium Box
  4. LambdaTest
  5. CrossBrowserTesting
  6. Browsershots Browsershots let’s evaluate a website across multiple browsers and operating systems. Because of its functionality and customization options, this is a popular browser compatibility testing tool. Cross-browser compatibility tests can be done with a variety of customization options, including browser type, operating system, screen size, color depth, JavaScript status, and Flash enable/disable options. Simply enter the URL of your website, pick the compatibility test parameters, and submit the test request. These steps must be repeated for each exam. This free browser compatibility test program allows you to snap screenshots of websites in a variety of browsers and operating systems. It works with 200 different browsers. The