For a software product, testing plays a very important role in parallel with development, the factors affecting the quality of testing include many factors such as: domain, scope, large and complexity, technology and software error.
With 5+ years of experience in software testing, I would like to share a few tips to help you get a better test case writing.
1. Optimize your study requirement
Understanding the software requirements is the first step to testing activities. When you study, you should search and list all test objects on that requirement. There are many test objects, including: UI, functions, logic/business areas, performance, security, etc… By utilizing a mind map, requirements can be effectively managed:
This activity should be done as soon as possible, preferably before coding starts. It will help us have an overview of the requirement and the next steps will be easier. We can focus on the following points:
- List all scenarios, inputs, outputs, screens that are mentioned in requirements.
- Focus on true, authentic, clear confirmations that make high expectations.
- Try to find ambiguity, unclear points in the requirements.
- Be very careful with conditions, triggers, try to list as many as possible.
- Check carefully the relevant places but not mentioned in the requirements, the impacts to the current module/features.
2. Utilize pre-designed testcase templates
Testcase templates provide a standardized format for documenting test cases. You don’t have to start from scratch each time, allowing you to focus more on test design and execution rather than formatting. By using templates, you are less likely to miss important details or steps in your test cases, ensuring comprehensive testing coverage.
3. Divide test cases by modules/features:
There are many ways to divide test cases such as by sprint, build or epic/user stories. It has reason to divide test cases. In my perspective, you have to consider on the following points:
- You will always create new testcases.
- You cannot re-use the written test cases.
- Test cases for 1 module/feature are discrete.
- You hardly have a general view for the whole project.
- It is difficult for you to search, filter, and test case statistics.
I wrote and introduced you to write and divide test cases by module/feature, it will have advantages such as:
- You can re-use old test cases
- Gives you clarity and relevance between test cases
- You easily know what module/filter to test for
- Easier for you to search, filter and count test cases
You can name each test case titles with the following prefixes:
[Project Name][Testing Type][Module/Feature] Verify/Validation the [Testing Type] of [Module/Feature]…
[Project Name]: project that you are assigned
[Testing Type]: ex: GUI, Function, Logic, Performance, Security…
[Module/Feature]: ex: Login, Users, Products,…
For functional test cases, which are scattered across modules, you only need to re-use 1 test case for the main function, the rest you add to each file 1 case to verify this feature is the same as the main function.
And when you search, filter, test case statistics, you just need to find the correct module/feature name.
In each of those test case files, you can add to each test case prefixes on how to define the type.
- Positive cases (happy cases): [Positive/Happy/MainCase][Priority.: 1, 2, 3,…] Testcase’s title
- Negative cases: [Negative][Priority.: 1, 2, 3,…] Testcase’s title
- Combination: [Combination][Priority.: 1, 2, 3,…] Testcase’s title
- Impacts/Relations: [Impacts/Relations][Priority.: 1, 2, 3,…] Testcase’s title
Once you have defined the prefixes, you can order the test cases according to each prefix, to know which test case has the higher priority.
This will help you classify easily, search is also easy, support you to do automated testing a lot.
4. Apply the test case design techniques
In software testing, there are many testing techniques, we have to consider what technique is suitable in advance and apply it into your tasks strictly. To gain a deeper understanding of these techniques, you can refer to the ISTQB Syllabus, which provides comprehensive details about various testing methodologies.
Most functional cases are based on requirements and business areas. In addition to common design techniques, you identify areas to cover, find apps with similar functions, list the impacts of these modules/features on other modules/features.
To analyze functional cases more thoroughly and carefully about the impacts between modules/features, you can use dependency impact analysis based on specified requirements and business areas which are combined ad-hoc testing to explore more cases.
Here, categorize the features/sub-features that are changing or adding new ones, they are listed vertically. Other features/sub-features may be affected which is listed horizontally, then you list the requirements for the changes or questions that are still unclear, you can discuss again.
5. Utilize “Risk-based testing”
“Exhaustive testing is impossible” is one of the principles in software testing. “Risk-based testing” should be applied in testing design and execution to prioritize testing efforts. By focusing on high-risk areas, “Risk-based testing” helps ensure that the most critical and impactful aspects of the system are thoroughly tested within the available time and resources.
With the above suggestions are purely from experience and practical knowledge in real projects. Hope it helps to everyone, especially testers.