Back
brett-jordan-ehKaEaZ5VuU-unsplash.jpg
Mar 26, 2025

Common Mistakes and Recommendations for Test Cases

In this article, I’d like to share common test case mistakes I’ve seen in my experience and suggestions on how to fix them. I will also share some practical recommendations that can help improve and optimize test cases.

Let’s start by reviewing the main elements of the test case structure:

image-20250228-044324.png

Common Mistakes

Title

Mistake 1: A generic title is used for multiple test cases for different features.

Example: Verify search

Improvement: The title of a test case should specify what (which functionality) and where (in which feature/place) this test case verifies. This will help to understand the context by the title without having to open the test body.

Example: Verify the member search on the home page

Pre-conditions

Mistake 2: Required test data is not specified in the pre-conditions.

Improvement: Test data should be specified to ensure that the test is run under the right circumstances, avoiding errors or redoing some actions caused by unprepared environments.

Mistake 3: Pre-conditions contain a list of actions on how to achieve the desired state/data.

1*HAHgIRoCzBmrTCADKeBw9g.png
Example

Improvement: Pre-conditions should describe the desired state and the data that already exists.

image-20250228-045042.png
Example

Steps

Mistake 4: The first step describes the predefined state of the system or test data.

image-20250228-045503.png
Example

Improvement: The predefined state or data should be described in the Pre-condition section.

image-20250228-045514.png
Example

Mistake 5: Steps include repeated verifications already covered in other test cases, which increases the number of steps and testing time.

image-20250228-045550.png
Example

Improvement: Combine multiple actions in one step to verify only functionality that relates to the current test case. Skip verifications that are already checked in other test cases.

image-20250228-045609.png
Example

Mistake 6: Steps are described by referring to another step number.

image-20250228-045629.png
Example

Improvement: Referencing other step numbers is unreliable because the test case may be updated in the future and the actual step number may change. It’s also inconvenient to go back and find the referenced step during test execution. Instead, briefly describe a step without repeating the same detailed actions.

image-20250228-045706.png
Example

Expected Result

Mistake 7: Expected result is described for each action in the step.

image-20250228-045732.png
Example

Improvement: Expected result should describe the final result of all actions in the step.

image-20250228-045802.png
Example

Mistake 8: Expected result contains very detailed descriptions of the design.

image-20250228-045828.png
Example

Improvement: Use links to designs instead, as the design may change.

The same applies to other UI elements. It’s better to use generic terms where possible, especially if requirements change frequently.

Example: “Click the submit button” instead of “Click the ‘Yes, I agree’ button”.

Mistake 9: Detailed verification is repeated for the same component that appears in different places in the system.

image-20250228-045855.png
Example

Improvement: A detailed description should be provided only for the first validation of the component and the next verifications should be described shortly.

image-20250228-045917.png
Example

Mistake 10: Expected result repeats the requirements.

image-20250228-045950.png
Example

Improvement: Test cases should verify the requirements.

image-20250228-050024.png
Example

So, we have reviewed common test case mistakes and how to fix them. Next, I will describe some approaches that have helped us to make our test cases more effective, reduce redundancy, and improve overall efficiency.

Recommendations

Discuss feature implementation with developers

Understanding how functionality is implemented can help ensure optimal coverage. Conversely, lacking this understanding can lead to redundant tests and increased testing time.

Example: 
We had a feature like adding a field, that was available in different parts of the system, and we had a separate test case for each option. In each test case, we performed the same list of verifications, like checking default settings, canceling, changing field type, etc.

After a discussion with the developers, we found out that the same component was used in all places. It was redundant to do all the verifications in each test case. We adjusted the test cases for this feature by keeping the full list of verifications in only one test case and adding a basic verification to other test cases.

When we applied this approach to other test cases, the results were impressive:

Total deleted test cases — 559.

Total test cases with reduced steps — 774.

Use shared steps

Some test case management tools have a feature such as shared steps, that allows you to create a single step that can be shared across multiple test cases. This eliminates the need to manually recreate the same step for each test case and ensures consistency across all test cases where the shared step is used.

As a result of using shared steps, we were able to:

Reduce the time to create or update test cases when requirements change.

Maintain a consistent style and structure of test cases.

Give examples for a better understanding

Including examples in test cases can significantly reduce the learning time of the functionality, as well as avoid misunderstandings.

Example: 
The following test case verifies that date and time values depend on the user’s timezone settings.

image-20250228-050710.png

Conclusion

Understanding and addressing test case mistakes is essential to improving the quality and reliability of the testing process. By continuously refining test case design, we can build a robust testing framework that supports high-quality software delivery.

More thoughts
Feb 3, 2025Technology
Figma for Developers: What Dev Mode Offers and How to Use It

This article explores Figma’s Dev Mode, a tool that streamlines design-to-code translation by enabling precise inspection, automated code generation, and seamless integration with design systems.

Anton Kozachok
Dec 22, 2024Technology
Python and the Point Rush in DeFi

This article demonstrates how to use Python to automate yield calculations in decentralized finance (DeFi), focusing on the Renzo and Pendle platforms. It guides readers through estimating potential rewards based on factors like token prices, liquidity, and reward distribution rules, emphasizing the importance of regular data updates and informed decision-making in DeFi investments.

Nov 27, 2024Technology
Stoicism At Work

This article explores how Stoic principles can be applied in the workplace to navigate stress, improve self-control, and focus on what truly matters, with practical examples from the author’s experience in software development.

Mykola Korovenko
Aug 27, 2024Technology
An Effective Preparation Algorithm for ISTQB Certification

This article offers key insights into the ISTQB certification and shares a proven preparation strategy to help candidates succeed.

Apr 15, 2024Technology
Lazy Promises in Node.js

Promise is a powerful tool in asynchronous programming that allows developers to call a time-consuming function and proceed with program execution without waiting for the function result.

Apr 11, 2024Technology
Test Analysis at the Feature Level

In the previous article, we learned about test analysis for a product in general, and now we are ready to go further and look at test analysis for specific features.