Ilona Kusztykiewicz | Quality Assurance | 05.05.2022
What is software testing? How does testing help prevent software products from malfunctioning? What qualities should you have to become a software tester and how can you get started? What types of testing do you need to know? What is the software testing process? If you are striving to find the answers to the above questions and want to join the IT world as a tester, you need to familiarize yourself with the basics of software testing.
Nowadays, software systems and applications are an integral part of our lives in every area – from medical and banking systems to products such as smartphones or cars. For each user, it is crucial that the software they utilize works properly, quickly and intuitively.
Malfunctioning software not only causes the user stress, but also generates many problems for the provider, such as additional costs or damage to their reputation. To prevent such a scenario, software developers are increasingly often deciding to implement testing during the process of its creation. Some industries even require software testing when, for example, human life depends on the correct functioning of the program.
Testing means putting something to the test while expecting a specific result. Tests at school check whether the student has specific knowledge of a given subject. Vehicle tests can check, for example, the performance of a vehicle or verify safety levels for drivers and passengers during a collision. Conducting software tests allows us to check if the software works properly and is implemented in compliance with the assumed requirements. Tests will also determine to what extent the application is comprehensible and useful for its future users. How many times have you encountered a bug on WWW pages? Something went wrong, or maybe it wasn’t possible to make a medical appointment due to an error at the very end of the booking process? Or perhaps you were upset when a page on your smartphone screen failed to load properly, which made it difficult, or even impossible, to see all of the content? Software testing is to ensure the highest quality of the product and prevent malfunctions. Quality Control activities allow you to assess the quality of the software, but most importantly it reduces the risk of failure.
“Testing is the process consisting of all lifecycle activities, both static and dynamic, concerned with planning, preparation and evaluation of software products and related work products to determine that they satisfy specified requirements, to demonstrate that they are fit for purpose and to detect defects.”ISTQB syllabus software testing definition
The size and complexity of software development is growing rapidly. According to the definition in the ISTQB syllabus, software testing is a rather complex process that goes with the creation of a product as well as its development. Apart from searching for bugs in the software, the tester helps to prevent them from occurring, reports the results of work and assesses the quality of the tested solution.
Searching for defects, as mentioned above, includes dynamic testing which requires the commissioning of the tested system or system components.
There is also a static testing technique to help detect defects and increase the consistency and internal quality of software – for example: reviewing documentation or system code without running it.
At various stages of software development, the scope and number of tests are determined by a test pyramid model.
This model is based on quick tests that are performed at minimal cost, allowing you to detect defects in the initial phase of the project.
At the top of the pyramid, in turn, are tests checking the entire functionality of the software. They are time-consuming and therefore expensive, and are performed during the final phase of the project.
Unit tests are performed by developers. Unit testing consists of testing individual pieces of software (e.g. a single class, method or function in the code). These tests focus on verifying whether the unit requirements are met, as well as checking all paths in the code and boundary values. Such tests detect logical errors in the implementation phase and do not take much time. What is more, starting the entire system is not required – running a small, isolated fragment is sufficient. As a result, unit testing is really effective, which is why the detection and repair of a bug doesn’t take much time.
Integration tests are also the realm of developers. Tests at this level are performed after unit tests and are aimed at checking the integration between given components. Integration tests detect communication errors between cooperating system components (given that the individual components work properly on their own). Integration tests between individual modules are more advanced than unit tests; they are also more time-consuming, and any detected defects may pertain to a bigger area of the system. An example of such tests may be cooperation between the web application and the database, as well as communication between two classes inside the code.
End-to-End testing (system testing) is carried out by testers in the final phase of the project in an integrated system. They check the functioning of the software product as a whole. E2E tests are performed slowly, it is difficult to fully automate them, and they require frequent modification, which makes them expensive and difficult to maintain. However, system tests are necessary as they check the overall behavior of an application.
Beyond the testing pyramid, there is also the level of acceptance testing. These tests are performed to ensure that the application meets the expectations of the customer and users – and they are responsible for performing them. Examples of acceptance testing are User Acceptance Tests (UATs), which allow you to detect any inconsistencies with the business specification, and Operational Acceptance Tests (OAT), which check e.g. system behavior during a failure.
We can test applications in many ways, and the tests performed may have different purposes. These purposes define the types of tests – e.g. we can check the functionality, the performance of the system, or make sure that the system works properly after implementing improvements.
We can distinguish four basic types of tests, which are further divided into many kinds.
Functional testing is also called black box testing. These tests define the activities performed by software. Functional tests do not require knowledge of what is inside the system and are typically described in the specification of requirements in the form of use cases, which are defined as the external behavior of the system and treated as a “black box”. The tester is able to test the application in the context of functional requirements, usually without requiring complex theoretical knowledge.
Non-functional tests are also referred to as qualitative tests. Put simply, they check “how the system works”.
Some non-functional tests include:
That is, how useful and intuitive the application is (or in other words: “Will the user be satisfied?”). They also relate to aspects such as aesthetics and User Experience when using the application, and often also check if the application is adapted to the needs of people with disabilities.
These tests help us to ensure that the system data is safe and to what extent it is protected against third-party attacks. This type of test includes, for example, penetration tests, which simulate a real attack, as well as allowing for risk assessment – the major security threats are analyzed and identified.
Checks whether the system can work properly for a specified time and under specified conditions. The software is also checked for tolerance – we check the ability of the system to continue operation during a failure and its capability to restore (recover data after a failure measured in time and losses).
Checking the endurance of the system. Will it be stable under different load conditions? How fast will it respond to commands? How fast will the calculations be performed and how quickly can it communicate with other systems? Performance tests are usually based on the determination of production profiles based on predictions or experience with similar systems.
It measures the extent to which the system can be modified in the future, in order to minimize the necessary downtime for maintenance, as well as reducing maintenance-related costs. For this reason, it is important to maintain the transparency of the code and keep records.
Determines how complex moving applications between different environments is. It examines the adaptability of the app – for example, whether it is possible to install it on all target systems.
Checks if the program can coexist with other programs in the same environment and if it is possible for it to operate with different parameters – for example, whether the software works the same on different devices, systems or web browsers.
Awareness of non-functional tests is growing, as they check very important system functions. Reality has repeatedly verified how significant they are. A lack of non-functional testing in the process can pose threats such as confidential customer data leaks, blocked ransom pages, nonfunctioning payments in online stores, or simply the non-intuitiveness of the application or design which discourages users from using it.
These tests can be run at all levels. Simply put, they consist of code testing. These tests are performed as a double check for the accuracy of code coverage assessment, which is measured by code execution through a series of tests, presented in percentage terms for the elements covered.
These are divided into regression tests and confirmation tests. Both types can be performed at all test levels.
In addition to the specified types of tests, let me also mention those that allow you to avoid wasting time when changing or repairing software, namely smoke tests and sanity tests. Smoke tests check whether the application can be started and whether its basic functions work, while sanity tests check the new functionality without checking the rest.
The profession of a tester includes various specializations. You can test manually or write automatic tests. This first path does not require advanced technical knowledge, which is why many people choose it at the beginning of their careers. An automation tester, in turn, should fulfil a higher level of requirements, as discussed below.
The tester manually checks all software features which are relevant in the context of quality and specification, performs test cases and creates test reports. An example of manual tests are exploratory tests. Exploratory testing is carried out without knowing the application beforehand, and the tester learns it while verifying its functioning based on a specification, whereas test cases are created on the basis of functional requirements.
Manual testing does not require programming skills, but you need intuition, inquisitiveness and a willingness to learn. However, keep in mind that working in IT means the need for continuous progress due to the rapid development of technology.
Automation testing allows you to perform repetitive tasks and regression tests in a short time, with an option to repeat them multiple times. Of course, first you have to prepare such tests.
The automation tester already faces somewhat higher requirements. In this case, you need to know the programming language for creating tests. Test cases in test automation are performed using automation tools, libraries and scripts prepared by the tester for a given scenario, which allows them to automate some of the test scenarios. The test script returns a comparison of the actual result with the expected one, so that you can quickly and unmistakably determine whether the software is working as intended.
Shift-left testing in practice. All you need to know!Read the article!
The profession of a tester requires basic soft skills and technical skills at the start. Whether we are talking about manual or automatic tests, the tester should be watchful, inquisitive, communicative, assertive, a patient team player, and not afraid to report errors.
The profession of software tester is currently one of the “top of the pops” in the IT industry; thanks to this, those who are interested have much greater access to various types of training, courses or even free webinars than was the case several years ago. Reading a book about testing or taking an interest in the ISTQB Syllabus will also be a good way to start. Some companies also offer training with an option of paid internships – check out our JTester JCommerce Academy!
Acquiring knowledge of testing is just the beginning. As a tester, you need to be strongly focused on continuous learning – this applies not only to a beginner tester, but even to those who have years of experience in the industry. The technologies and software which the tester works with are constantly evolving. The person responsible for software testing is therefore also responsible for continuous learning (including how and from what the application is built and what problems may result from it, and what technologies and tools may be used to track and eliminate them).
Knowledge of foreign languages (English, German, French) is also very important in the IT industry. Many testers do well without this skill, but sooner or later, especially as tech skills develop, the market demands that a tester has language skills. Testers who communicate in English at B2-C1 level are more successful in international projects and have greater opportunities to find solutions to problems, e.g. in English knowledge bases or on testers’ community forums. Knowledge of this language also translates into greater prospects on the labor market.
What are BDD tests?Read the article!
Software testing is a complex process and is not – as commonly believed – only about checking that the program is working properly and identifying software bugs. Testing software also means preventing future defects, looking for the unwanted effects of changes, reporting the results of your work and assessing the quality of the tested software.
Tests increase the consistency, internal quality and intuitiveness of the software. They also help to maintain the aesthetic interface of the application. Different levels and types of tests performed at individual stages – and sometimes at all stages – of system development help to ensure the highest quality of applications. And because more and more software is developed, such an interest in tests is not surprising. Today, it is hard to imagine the software development cycle without an inquisitive, patient, communicative, assertive and thorough software tester who is keen on picking holes in the process.