Essential Principles of Software Quality Engineering

Maria Golubeva
JAGAAD Digital Solutions
8 min readJul 24, 2023

--

My TUI product team is in discussion

In the 6 years I have been working as a QA Engineer, I have gained experience building quality assurance processes both in tiny teams as a single QA and on large-scale projects with a dedicated testing team. I have taken part in nascent projects and projects that lived for several years without testing at all. In my varied experience, I have learned many lessons which allowed me to now establish processes that work on the project. I acknowledge that most of the content in the article covers basic and fundamental aspects, which may appear obvious as readers go through it. Nevertheless, my perspective is this: although we comprehend these fundamental concepts, their practical application only comes with experience. It is during work when we encounter various situations and devise effective solutions based on that experience.

1. Keep not blaming, but collaborating concept in communication with teammates

Looking at the role of both developers and QA Engineers in the software development process, it’s essential to underline the importance of communication in the collaboration between the two. QAs need to communicate information about defects objectively and constructively, without blaming teammates, while developers need to be open to constructive criticism and not take anything personally or as an attack on them or their hard work.

Here are some fundamentals for good communication between developers and QA:

  • Think of your colleagues as teammates, not as opponents.
  • Emphasize the value of testing.
  • Understand, that you are a part of a team, where everyone has the same goal — to ensure that users receive a high-quality product that delivers value.

The sooner everyone realizes that the contribution of others to his/her work is an asset and not a liability, the better. Development and QA processes will be more streamlined, the project will run smoother, and the overall product quality will improve.

My TUI project teammates

2. Educate the team about the principles of quality assurance

The relationship between developers and QA Engineers in IT teams is among the most challenging. This is usually due to them not being able to work together, be it because they don’t understand each other’s work procedures.

If you are joining a team that has not previously set up quality assurance processes, hold a meeting to familiarize the team with your planned activities. Then, during the development of the project, everyone will have an idea at what stages and for what the QA Engineer will be responsible and how it will be possible to collaborate with you.

Tell team members how each of them can affect the quality of the product during task analysis, development process, and code review. Be observant, pay attention to current product development principles, make suggestions for improvement, and focus on the scenarios described in the acceptance criteria, which, in addition to the code itself, must be tested by developers during code review in a running application and work flawlessly.

3. Focus on prevention rather than detection issues

Many Junior QA Engineers aim to find as many bugs as possible in an already developed application, while one of the main tasks of a QA Engineer is to prevent these errors from appearing in the developed code.

What activities can help prevent bugs?

  • Participation in planning and drawing up acceptance criteria.
  • Requirements testing.
  • Design testing.
  • Writing checklists and sharing them with team members so developers can test their code before submitting it to a QA Engineer for review.

4. Always test requirements and design

I touched on this principle earlier, but now I want to talk about why it is so important. Steve McConnell, in his book “How Much Does a Software Project Cost”, writes that about 30% of errors are introduced into the product when developing requirements.

“Where are the most mistakes made” chart diagram

Looking at the diagram, most of the errors are drawn precisely from the software requirements, so you need to deal with this somehow, i.e. make sure that the following problems do not occur:

  • The incomprehensibility of requirements.
  • Frequent change.
  • Last-minute changes.
  • Incorrect interpretation of the requirements.

All of the above can cause the following:

  • Failure of the project deadline.
  • Will do the wrong thing and not the right way.
  • Changes are not controlled and the team does not know what to do.

Testing requirements and design is a necessary and very important procedure that will further help optimize the work of the team and avoid misunderstandings and also allows you to understand whether these requirements can be met in principle — in terms of time, resources, and budget.

By preventing errors in the code through requirements analysis and design, the team saves resources on the implementation of incorrect scenarios.

5. Review the task both from the technical and the end-user sides

One of the important principles of product testing is “think like a user”. This will help to achieve maximum coverage with test scenarios and prevent errors from getting into production, which the user himself will already encounter directly.

A QA specialist is the connection between the business and the development team who has the technical expertise and can foresee implementation difficulties, possible limitations, and risks.

Meeting with end user of developed by my team application in Tenerife

6. Plan test cases and data in advance

As I wrote earlier, one of the best tips for a QA Engineer is to be involved in the software development process from the planning stage. Further, when the specialist knows the context of the task, it’s time to start caring about test scenarios or checklists, according to which the developed code will be validated.

What are the benefits?

  • When coding/reviewing the code, developers can refer to your test scenarios so as not to miss important user scripts.
  • Immediately after task planning and design reviews, you are at your most excited and filled with ideas, while over time you can forget the discussed details and lose sight of the cases.
  • When you receive a validation task, you can, by opening a pre-prepared checklist, instantly start testing, without spending time re-checking the requirements.

7. Extend the checklist during testing

It often happens that during the testing process, new scenarios are discovered that were not taken into account when compiling test cases. Most often this happens with unpredicted scenarios in which you encounter bugs. Do not be shy and add to the list of checks right during testing. Because after some time they will be forgotten and during regression testing (if necessary), cases will be missed, which can lead to missed bugs.

8. Accept your own and other people’s mistakes

When we make an error, we immediately feel embarrassed, frustrated, or scared of the repercussions. But in the big picture, barring those times when mistakes can have a significant impact, they are not the end of the world. When acknowledged, analyzed, and corrected, mistakes can generate key benefits.

My product team on the retrospective meeting to improve procedures

9. When you report a bug, take the time to research and describe it in detail

Documentation should be created in a way that is easy to use and understandable to other team members.

A well-written bug report guarantees effective collaboration between the development and test teams. Therefore, the ability to write bug reports is one of the most important skills of a tester. A detailed examination of the defect will help the QA Engineer determine the team member to assign the bug, and a good description will help the developer easily reproduce it and debug the script to find the cause of the defect.

10. Improve the testing process if you see that something is not working

If suspicions creep in that the current testing process is not coping with the main tasks, then immediately take action. Is there an inefficient distribution of resources, a large amount of time is spent, but the result does not improve, and does the time for delivering features to the end user increase? Don’t be afraid or shy to make changes: try new methodologies, implement new activities and tools, or optimize existing processes. Communicate with other QA Engineers who can bring ideas to enhance processes.

It is important to improve the testing process day by day. And keep in use only the best practices that are specific to your unique project and team.

11. Provide clear reports to ensure the testing process is transparent

To keep team members updated on task statuses and testing progress, it is necessary to agree on the format and frequency of test reports from the start. These can be both intermediate reports on large tasks, and test results for an agreed period of time (for example, 1 sprint, 1 month).

To whom and for what purpose can a test result report be provided?

  • Project and Product Manager — as a source of information about the current situation and the basis for making management decisions.
  • The Development Team Lead — as an additional objective view of what is happening on the project.
  • The Testing Team Lead — as a way to structure your thoughts and collect the necessary material to contact the project manager on pressing issues, if necessary.
  • The Customer — the most objective source of information about what is happening on the project for which he pays his money.
Testmo test run report example

12. Make suggestions to improve the product

One of the key tasks of a QA Engineer is to understand the business idea of a product, to see it from the perspective of the end user, and to study the market and current needs. Being proactive and interested in delivering the best customer experience, a QA Engineer can work closely with Product Designer and Product Manager and make constructive suggestions for product improvements.

13. Do the networking with other QA Engineers

According to statistics, there are a majority of small projects on the market, so often a QA Engineer works alone in a team, which does not allow them to exchange ideas and professional experience with colleagues daily. Therefore, it is quite important to have networking to be able to:

  • Share your experience, and present your thoughts.
  • Get new ideas to help you with your daily work activities.
  • Get inspired and start the implementation of new plans.
  • Analyze pressing problems and, during the discussion, find solutions.
  • Ask a question and hear the opinions of those whose experience is relevant.
  • Ask for help in solving various types of work problems.
My QA “tribe” in TUI

In all my experience, I have never stopped growing and improving work processes. I wish you never stop there, be inspired, and inspire others! I will be glad to see you on my LinkedIn profile.

--

--

Maria Golubeva
JAGAAD Digital Solutions

Belarusian | QA Engineer in Italian company | Mentor in Tech | Web Automation | Improving English and Italian levels | Travel lover