Historically speaking, there used to be two distinct jobs titles: Software Quality Control and Software Quality Assurance. The former meant testing software in order to detect the already existing errors, while the latter referred mainly to preventing the errors by means of testing and improving the very process of software creation.
Nowadays, these concepts are merging and Software Quality Assurance means a widely understood process of providing software quality. A person responsible for this process is called in short QA or Software QA.
Who is a QA Engineer?
A QA Engineer can be defined as a person who assures quality through applying technical knowledge to the process. Manual software testing is usually inefficient, both in terms of time and cost – unless it concerns small and simple projects. A QA Engineer automates some recurring, repeating actions.
Why is it a good idea to automate tests?
One of the most frequently automated tests is the regression test. Its goal is, above all, to ensure that the existing functionalities work correctly and no errors occur during work on other, seemingly independent functionalities. Thanks to the automation of functional tests of websites or applications, regression testing can take for example less than twenty minutes – instead of manual testing lasting even days.
Automated tests – BDD layer
When using the Continuous Integration server, they make it possible to find defects in no time, reducing both the cost and the fixing time in comparison with the later detection in the development process. If you need less time for regression testing, you need less time for testing after code freeze, and eventually – you get more time for the development itself.
However, test automation is not limited to tests’ performance. Automating the process of creating testing data makes it much quicker and generates it in greater amounts. Scripting the most often performed system tasks makes work more comfortable and effective.
An engineer or a developer?
A QA Engineer responsible primarily for automation is sometimes called QA Automation Engineer. Both Engineers and Developers do programming. So what is the difference between a QA Automation Engineer and a Software Developer? A Software Developer is usually oriented towards one particular technology, like JS, Java, or Python, and must know this technology very well. A QA Engineer, on the other hand, has a specific task to execute, using the technology, which is most suitable for a given project.
Similarly to Developers, QA Engineers specialize in particular technologies, but they need to know several programming languages at least at an elementary level, and to be able to quickly adapt to new ones.
More importantly, a QAE should possess a typical testing knowledge, and – first of all, perhaps – experience in test automation. Even a skilled Developer might not be able to write proper automation tests, as they derive from a completely distinct approach to programming. Developers look at programming from the perspective of developing applications and implementing specific functionalities. Meanwhile, QAs must guarantee that the requirements are met and the functionalities work as they should.
Besides, they need a totally different scope of expertise. It’s not the language itself that they need to know, but the test architecture, because this is what ensures test legibility and enhances maintainability. It’s crucial to write the tests in a way that provide their stability. Random test failures causing frequent CI red builds may result in loss of trust in their reliability.
Like a kid with a screwdriver?
Why would anyone want to be a QA Engineer? Why would anyone want to write automated tests for apps instead of writing the app as such? It’s just… some of us like to “break” things, they enjoy finding edge cases that sometimes cannot be predicted even by the best Developers. People will always make mistakes and it’s impossible to discover them all. A QA takes care of the app’s quality and makes sure that there are as few undetected faults as possible in the functionalities, which are most important from the user’s point of view.
Test automation may be a bit more repetitive than writing an application, but due to the variety of technologies employed in the process, there is always something going on. Just like in the case of the tasks as such, which can be more DevOps-oriented, e.g. preparing and managing the CI server or developing test environments.
The most important goal of is to carry out specific tasks as a team – so, all the members must cooperate and help each other to solve problems and share knowledge. However, informal groups emerge naturally, consisting of people who are joined by particular technologies. In organization with a healthy attitude to work, it’s normally reflected in innocent jokes. The testers’ advantage is that whereas Backend Developers joke about Frontend Developers and the other way round, QAs can joke about both.