The Untold Secret of End-to-End Testing and Test Case Design
Houston, we have a problem. This popular phrase vividly illustrates thoughts, if not the entire swirl of emotions, rising when a misunderstanding between the client and contractor working on a project appears. Let’s take the specific case to illustrate how the situation looks at practice and what impact, most likely negative, it may have on the whole software development process.
Everyone speaks about the quality these days and how important it is to test any product before the release or after some updates. Various types of testing can be introduced at different stages of the software development life-cycle, and we’ve dedicated one of the previous articles to this topic.
But what if the product owner recognizes the importance of a software or application testing in a broader perspective and considers the option of introducing end-to-end testing on a project?
One of the first tasks to be fulfilled before starting testing activities is end-to-end test case writing. You may say that a developer working on a project can easily get the job done. But think twice before jumping to hasty conclusions and assigning the task to a non-core specialist. This is the most frequent mistake we have faced in our work and, as the practice showed, the most typical reason for missed deadlines and additional expenses. The QA specialist, in most cases, will have to improve or completely rewrite test cases prepared by the developer.
The described situation is rather common. This is the reason why we decided to dot all i’s in the topic what is end-to-end testing and who should design test cases.
What is end-to-end (E2E) testing?
End-to-end (E2E) testing allows checking the application flow from start to finish under real-world scenarios to validate system components and data integrity and ensure that a user can complete the workflow.
A point to keep in mind is that E2E testing should not take over or extensively duplicate the efforts of the unit and API testing, aimed to check business logic.
How to act in such a situation? One of the approaches is to test every possible way a user can interact with the application. This will certainly represent 100% functionality coverage. Unfortunately, it will yield the testing codebase even larger than the product one, not to mention the time necessary for test execution and the fact the team will be solely focused on checking user interaction with the application. The way out is to split test cases into two groups:
- Core test cases used to reflect core features (what people are doing regularly).
- Edge cases cover the unexpected or rare ways of using the solution that still impact or may even disrupt/break its work.
Having the precise list and following predefined business values, the team will only have to select which of these cases must be included in the testing process.
E2E testing must incorporate 3 categories of activity:
- Building user functions.
- Building conditions based on user functions.
- Building test cases.
User Functions
The following actions should be performed:
- Enumerate system features and their affiliated components.
- Specify the input, action, and output data for each function.
- Pinpoint the dependencies between the functions.
Conditions
Here we refer:
- Establishing a set of conditions for each defined user function.
- Conditions should contain parameters like timing, data conditions, and sequence.
Test Cases
Before focusing on test cases, examine these factors.
- Design multiple test cases to analyze every functionality of user functions.
- Assign at least a single, separate test case to every condition.
- Get down to the test cases writing and let the magic of software testing happen.
Test case design tips and who should take responsibility?
For a start, let’s consider some of the key facets for a test designer to keep in mind.
Every test case, whether it is core or edge, should meet the full and substantial user experience. At the end of a passing test, there should be no doubt a user can complete the given action.
Moreover, each test represents a sequence of activities with an element on a page, whether it’s a link, a button, a form, etc. The test should validate that every single element actually exists and can be interacted with. Between interactions, the test designer should search for meaningful changes in the application on the DOM indicating the correctness of the application response.
Finally, the data in a test (some string or variable entered into the test) should be used to confirm that the test transforms or returns that data in the way it’s expected to.
This is a good bunch of aspects to consider, isn’t it? Putting aside the statement that developers can’t test their own work, is there a 100% guarantee that being entrusted with the task of test case design your developer will find all his faults or look at the system from another angle and try to break it in a new, unexpected way?
Bear in mind that the essence of quality assurance on a project is not in code and test case writing.
THE QA ENGINEER, not a developer, is the person who sees the full picture, strives to look at the task from a broader perspective, and works to build proper QA process on your project. So, if your goal is not just to run a standard check to exclude the most common bugs but to accelerate the release cycle and bring a product to market faster, more accurately, and with less risk, the answer is obvious.
What’s next
The next step is actually the simplest one of all actions described above. It results in choosing the QA services provider and entrusting him with the task of end-to-end testing.
Most of the software systems released nowadays are very complex. Even if a single subsystem of the software fails, the stability and operation of the entire solution are in danger. We bet you do not want to risk your reputation and the loyalty of your customers, let alone the budget overruns on additional bug fixing and system enhancement.
The more all-inclusive the testing is, the lesser are the chances of dealing with defects.
The more professional services you get, starting from test case design and till actual testing activities, the more quality product you’ll be able to release to the end-users enhancing the opportunity to conquer the selected niche.
Now imagine the results if you partner with a QA company keen to set up and guide QA processes on your project with reduced delivery risk and faster time-to-market… But this is the beginning of another story which we’re going to share in one of the next posts. Follow the updates.