Discussion on Transitive Testing by Titus Fortner | Testμ 2023

:mag::sparkles: Crack the Code with Transitive Testing!

In this session by Amuthan Sakthivel, explore atomic, autonomous tests and fast-forward in user flows for quicker, confident testing. :fast_forward:

Still not registered? Hurry up and grab your free tickets: Register Now!

If you have already registered and up for the session, feel free to post your questions in the thread below :point_down:

Here are some of the Q&As from the session!

Can you discuss the situation where your transitive testing approach enabled you to adapt swiftly to UI changes and maintain the stability of your test suite?

Titus: Certainly! The essence of transitive testing is to make your tests resilient to UI changes. When UI changes occur, only one of your tests should ideally fail while the rest continue to pass. This pinpointed failure allows you to quickly identify which part of your application was affected by the UI change. For instance, if there’s a problem with the login form, all tests requiring login might still pass, except for the one that fails, signaling the issue. This enables you to rapidly understand the problem, reproduce it, and take corrective action. In essence, transitive testing minimizes the impact of UI changes on your entire test suite, making it more adaptable and maintainable.

Can you share your journey of transitioning from UI-centric testing to more atomic and autonomous testing?

Titus: My transition from UI-centric testing to a more atomic and autonomous approach evolved gradually. It was shaped through discussions with colleagues and my realization that the more time we spent in the UI, the more we encountered its inherent complexities. Browsers can be unpredictable, and relying solely on UI tests became inefficient and less reliable. The key shift was to leverage APIs to perform as much testing as possible. By doing so, we could focus on testing specific features and their interactions, rather than being bogged down by UI intricacies. This transition allowed us to scale our testing efforts and execute tests more reliably in parallel.

What are some common misconceptions about transitive testing, and how do you address them?

Titus: Transitive testing is a term I’ve coined, so there might not be widespread misconceptions yet. However, one common misunderstanding in the testing community is the notion that UI tests are the most comprehensive and reliable way to validate an application. Some might believe that testing through the UI provides the most realistic representation of user interactions. To address this, it’s important to emphasize that the goal of transitive testing is not to replace UI testing but to complement it strategically. Transitive testing allows for faster and more reliable testing of core functionalities and state changes, while UI testing remains crucial for evaluating the overall user experience.

How does transitive testing contribute to ensuring software reliability and quality?

Titus: Transitive testing contributes to software reliability and quality by streamlining the testing process and ensuring that tests are more resilient to changes. By isolating specific functionalities and testing them independently, you reduce the chances of cascading failures due to UI changes. Moreover, transitive testing allows you to focus on the core contract between the API and the UI. When both the API and UI validations align, you can have greater confidence that your software functions correctly. This approach improves reliability because you’re validating essential functionalities more efficiently, and it enhances overall quality by catching issues early in the development process.

How do you identify and manage transitive dependencies in your testing process?

Titus: Identifying and managing transitive dependencies in testing can be context-dependent. It often involves evaluating which forms or functionalities in your application are heavily reliant on setting state and interacting with data.

One approach is to create data objects that represent the input data for various tests. These data objects can be used both in the UI and API testing layers. By ensuring that the data objects match the elements on the page and the fields in the API, you can streamline the testing process. This way, you manage dependencies by focusing on the shared data objects, making your tests more maintainable and less prone to failure.

How to limit transitive closure for static regression test selection approaches?

Limiting transitive closure in static regression test selection approaches involves determining which tests are essential for maintaining confidence in your software’s quality while optimizing resource usage. It’s about striking a balance between test coverage and resource efficiency.

In practical terms, consider evaluating your test suite regularly and identifying tests that may no longer provide substantial value or are too resource-intensive to maintain. Tests that consistently fail or aren’t aligned with critical functionalities may be candidates for removal or optimization. The goal is to ensure that your test suite focuses on the most critical scenarios and provides meaningful information while minimizing the burden on resources.

Can you provide examples or case studies where transitive testing has helped uncover critical issues or improve overall test coverage significantly?

Titus: While I don’t have specific case studies to share, I can attest to the positive impact of transitive testing based on my experience at multiple companies. Implementing transitive testing has consistently led to improved reliability, enhanced test coverage, and faster test execution. By isolating core functionalities and validating them through both the UI and API, teams have been able to catch critical issues early in the development process. This approach ensures that critical contracts between the UI and API are maintained, leading to fewer regressions and more confidence in the software’s quality.

Here are some of the unanswered questions:

How can we insure , while implementing transitive testing that test coverage is not compromised.

What are some examples of transitive testing scenarios?

Could you discuss the potential impact of transitive testing on detecting hidden defects and vulnerabilities that might not be evident through standard testing methods?

Hi there,

If you couldn’t catch the session live, don’t worry! You can watch the recording here:

Additionally, we’ve got you covered with a detailed session blog:

Hey,

To ensure test coverage isn’t compromised when implementing transitive testing, define clear objectives, maintain a comprehensive test suite covering critical functionality, establish traceability, perform impact analysis, update tests regularly, conduct integration testing, monitor in production, and focus on continuous improvement.

Hey there,

As being a part of this session, I would love to answer your query.

Transitive testing scenarios include validating API endpoints by testing the entire data flow from the user interface to the back-end database, ensuring third-party integrations work seamlessly, verifying that data transformations maintain integrity across systems, and confirming that security measures such as authentication and authorization are consistently applied throughout a software ecosystem.

Hey,

Being an active participant in this session, I would like to share my thoughts on this. Transitive testing is instrumental in revealing hidden defects and vulnerabilities that may elude standard testing methods. It impacts defect detection by:

  1. Holistic Assessment: Transitive testing evaluates a software system’s behavior across multiple components, exposing integration issues, data inconsistencies, and compatibility problems.

  2. Data Flow Validation: It tracks data as it moves through various stages, uncovering problems like data corruption, loss, or unexpected changes.

  3. Security Identification: Transitive testing identifies security vulnerabilities arising from component interactions, including data leaks, unauthorized access, and improper data handling.

  4. Third-Party Integration Validation: It ensures that integrations with third-party services or APIs function correctly and securely.

  5. Complex Logic Verification: It validates complex business logic across system components, ensuring consistency.

  6. Performance and Scalability Testing: Transitive testing highlights performance bottlenecks and scalability concerns under different loads.

In essence, transitive testing offers a comprehensive view, exposing issues that standard tests might miss, and enhancing software quality, integrity, and security.