Imagine working on an application or custom software for many months. Your project is nearing the end and when you try to implement it, something unexpected happens. The reason might be lack of software testing during its development. What to do when such problem occurs?
Testing is the process of software evaluation during which we verify the compliance of the program operation with the requirements of its functionalities to ensure that the program works properly. Tests are carried out on the entire software or on some elements. Irrespective of the scope of the tests carried out, it is always checked whether the software does not contain errors and whether it is compliant with its specification. The software must meet users expectations. Testing is carried out by the software testers whose job is to for defects (bugs) in the applications. Testing should take place during software development, and preferably already at the early stage. The sooner errors are detected, the sooner they can be repaired. What is more, you can immediately find architectural defects, faulty functions or security shortcomings.
Software testing is a complex process consisting of various stages. Its phases include:
Planning, i.e. collecting all functional and non-functional requirements that are necessary for a given product. Tasks should be arranged in a form of a list, according to priorities.
Preparation, which includes creating an appropriate environment for testing, collecting test cases and examining them, as well as checking the product features. At this stage, you need to prepare all the tools necessary for testing and adjust the types and techniques of testing.
Execution is the testing phase. The testing results are compared with the initial assumptions and expectations. At this stage, testers should picked up all shortcomings.
Reporting consists in documenting analyses, results and diagnoses in the simplest possible way so that they are understandable for the recipient.
During the testing of the software, the following is checked:
proper functioning of a software,
errors and their influence of software performance,
intuitiveness of the interface,
implementation of the all functions in the software,
if the software is safe,
discrepancies between the real functions and requirements specified in the requirements.
When creating software, we want our product to be the best, and in particular that the users like it and decided to purchase it. A reputable manufacturer cannot afford to release software that contains bugs. Such situations are related not only to financial damage, but also loss of prestige, image and customer trust. It is better to prevent than to treat so, the best solution is to test the software before it goes on sale. Then the costs related to the repair of the product are much greater than testing it throughout the development process.
During testing it is important to establish if each function works correctly and if all assumptions were met. The application that has undergone appropriate tests provides:
saved time, work and money;
good quality and reliability;
We divide software testing into static and dynamic.
Static tests - it is a way of testing software before it is launched. The purpose of it is to detect errors in code, algorithms and documents. These tests can be carried out by a tester, but also by the programmer or the author. The test consists of browsing and checking code reviews. Alternatively, visual inspections can be carried out.
Dynamic tests - are performed after compiling and loading the software into the system. In this type of tests, the compliance of the input and output parameters is checked. During the test a part of the software is analyzed to find errors. Moreover, codes are checked in accordance with the initially defined standards and the outcome correctness is evaluated.
Dynamic and static tests also include many types of software testing. Some of them are described below.
They are used at the very end of the testing process, when the software is to be handed over the client. With their help, we confirm that the application complies with the requirements. We also check whether all functions work properly and that nothing is missing. Such tests should take into account system requirements, business processes and user expectations.
Examples of acceptance tests:
- Acceptance by the customer
- Acceptance by the user
- Compliance with the documentation
- Compliance with the law
They enable checking compatibility, effectiveness and connection of specific modules. his purpose is to capture shortcomings in interfaces and interactions between systems or modules. During integration tests, it happens that missing parts of the code are discovered. They are then replaced with plugs and drivers. It is good to plan integration testing before we start programming because it has a substantial influence on the effectiveness of the tests.
Unit testing (White box testing)
They consist in verifying the created software in terms of correct operation of the single fragments of the program. The checked item is subjected to the test, and the result is compared with the expectations of the program. Unit tests are usually performed by programmers during coding. Unit testing is carried out when a software developer creates new functions in the code. It enables the immediate assessment whether each element reacts appropriately for specific data.
Functional testing (Black box testing)
This type of testing allows us to check whether all functions of the program work in accordance with the specification and with the initial requirements. This way, it is verified whether the functional assumptions have been met and the product works as it was intended to. Functional tests do not apply to the source code and do not examine the back end of the program, therefore, they can be performed by people who have no knowledge of programming. Such testing can detect a large number of errors, but does not indicate their source. Functional testing are also known as black box testing because the tester does not know the program that is to be tested.
It is a part of non-functional testing during which the software tester loads the server, databases and applications. Software is tested under various types of loads in accordance with previously developed scenarios, e.g. setting up an account or using specific functions. Such tests are taking place when using the application on mobile or stationary platforms. These tests show what affects the performance of the product. They are to determine acceptable quality levels.
This is a type of test aimed to find whether there were new errors while the changes were applied. Thanks to them, you can control the quality of your product. Such tests are carried out in case of software or environment shift. Regression tests are very important process because it must be assumed that each progress in programming can cause new errors, i.e. everything that was already checked and worked well could break down.
Its purpose is to check whether under extreme conditions, for example heavy load, the program can operate and whether it could possibly regain efficiency when it returns to the standard state. These are tests, thanks to which you can verify what is the highest limit of the program with a huge load.
In short, these are attempts to evaluate the product. They are carried out by testers, but also by future users. The aim of this kind of testing is to determine how the software is functional for the end user. These types of tests are focused on verifying the assumed goals and whether the application meets all the requirements.
Testing can be divided into manual and automatic.
Manual testing is a type of software testing in which testers do not use tools for automation. Test cases are entered manually and then analyzed by the tester. This type of testing is based on human work that is performed according to the established rules and checklists. This is a classic testing method. For manual testing and checking various functions it is sometimes necessary to use the appropriate tools. These are simple, usually widely available programs. For example, special plugins which work well for screenshots, for example Green Shot. Tester's everyday work includes data generation and the tool generatedata.com can be used for this purpose. Manual testers are also supported by a program called Jira, which is suitable for test management. To streamline the work, testers often search for tools supporting and simplifying their activities.
Automated tests are carried out using appropriate automation tools. It this kind of test a tester creates a test script which conduct tests automatically. The main advantage of automation testing is speed and greater range. One of the most popular automated tests are e.g.:
Selenium - it is a framework for automated tests that allows you to create codes in several programming languages. It allows automatic tests of web applications using the ingredient you are looking for.
Test Craft - this is probably the most versatile tool for test automation. IT supports test scripts, recording and playback. One of its best functions is generating test scenarios.
A good tester, before they go to work, should get acquainted with the client's industry and get to know their product. Such an approach will facilitate everyday work and help in particular when problems occur.
Very important in the tester's work is proper communication, i.e. good contact with a group of testers and programmers. In the event of errors, focusing on them without putting a blame on teammates.
A good practice is to implement an appropriate testing system adequate to the product specificity. Additionally, offering test frameworks and their implementation, as well as care for the environment test. Regularly creating current documentation and introducing changes in accordance with them mileage. It is also important to always have a database and its copies.
Being a tester, it is useful to assume different user roles with various permissions to be able to check how each function works.
One of the tips for testers is to check your own testing. In order to do so, you must put in a deliberate mistake and check whether the test is successful or not. If an error is caught, then it is the best proof that testing works.