Is software testing necessary? During implementations, we often hear this question. Customers ask this both before starting a project as well as at subsequent stages of working on an application or system. And each time, the answer is yes.

If we care about users’ satisfaction – and no doubt that we do – testing is necessary. Tests allow catching errors that can be made at each stage of app creation. Thanks to tests, the final product’s quality increases; if they are performed correctly, testing reduces the risk that the end-user encounters fatal errors.

Along with questions about testing usefulness, customers also ask which testing type is better – manual or automated? It depends, and because we do not want to leave anyone with such an enigmatic answer, we have decided to prepare a series of publications to discuss software testing in theory and practice. We will introduce the pros and cons of both types, differences between them, and situations in which they work best.

Let’s start with manual testing, that is, software tests that are executed by hand. Basically, it means that a manual tester gets into the character of an end-user and gets through a given app executing subsequent steps manually.


Types of manual testing

Manual testing is most frequently divided into:

  • functional – also called black-box testing. This type of test focuses not on the technical details but on WHAT the system does. Such tests concern the visible behavior of apps or functionalities with which the end-user will deal with. The product performance is verified based on the pre-defined requirements, which should be met, provided documentation, and business logic. Also, the suggestions of a manual tester who checks the system and tries to guess the recipient’s expectations are essential. Functional tests can be executed at each stage (phase).
  • non-functional – can be defined as parameters determining. This type of test concentrates on HOW the system operates. It means measuring these features of a given product that can be assessed on a scale (such as loading time of a page, a record creation time in an app, and so on). It is important to remember that, usually, parameters are not clearly defined in the documentation. Even if an app turns out to be perfect regarding its functionality, the end-user will not be satisfied with its use when the app is not user-friendly or not operating smoothly. Non-functional tests can be executed at each stage (phase).


Types of functional testing

There are various functional testing classifications, including:

  • tests related to changes (confirmation and regression tests)

After removing an earlier discovered error (a bug, defect), an app should be tested to ensure that fixing has been successful. The manual tester verifies the results of testing based on the description of the reported error, without extending the verification scope. These are confirmation tests, otherwise called retesting.

Regression tests are done after the app is modified. Their goal is to check whether, after fixing an error, there are no other new ones in those app areas that worked properly before. Sets of regression tests are repeated multiple times, and, therefore, they are suitable for automation. Regression testing can be executed at each stage.

  • specification-based testing and writing test cases – can be defined as testing based on requirements. Each functionality delivered within an app should have a description of requirements. Only after they are met, the app can be considered as product working properly. These test types are based upon the scope in which a given functionality should operate. To execute them, test cases should be created – to cover both positive and negative areas of application functionality.
  • exploratory testing – also called ad hoc testing or improvisational testing. These are based on the experience, knowledge, and intuition of the manual tester. Usually, that type of test is used when there is no documentation or sufficient resources, so it is impossible to run a different type of testing.

Exploratory tests, if an app is not that complex, can be done pretty quickly (in the case of a simple app – even in one hour). Thanks to this, we do not have to spend time preparing the documentation. Also, we get to know these areas for which no test cases were written. It is an excellent method to learn about the app’s operation. The exploratory testing can be executed both at an initial and final stage of the product creation.


Types of non-functional testing

Non-functional tests include:

  • performance testing – to verify the product’s efficiency. To execute this type of testing effectively, the manual tester should perform in an app many actions to verify the reliability, stability, and availability of the specific areas. Such testing allows finding weak spots of the product and elements that have lower performance compared to others (so-called bottlenecks). The results of these tests are expressed in numbers, for example, how many seconds it takes to log in to an app, or what is the capacity of the system with an increased workload, and so forth.
  • integration testing – with these tests, the manual tester checks the connection between the app’s modules. This way, interface errors and interactions between integrated modules are detected. The integration testing covers many areas, including the integration of modules created within the product and integration with external systems. It is worth remembering – the wider range of integration, the more difficult it is to indicate where the errors are. Integration tests allow testing of the final product.



Testing is an essential process of product creation. It allows improvement of quality thanks to which end customer gets what is expected. All tests play a significant role in a way to deliver the final product. I will discuss a more detailed description of particular test types in the upcoming articles.


  • Mateusz Wydmański
  • Senior Software Tester
  • A tester who has been associated with the Quality Assurance (QA) industry for 7 years; has worked for small companies and big corporations in such sectors as healthcare, pharma, telecom, and logistics. At work, he is opened to new challenges that he undertakes with full commitment to achieve the best results, as well as to improve processes. Privately, he likes to work out at the gym and take walks in the open air.

Editorial study
Anna Sawicka
Text revision
Aleksandra Pasek
Text proofreading
Sylwia Soćko
Text translation
Did you like my article?
If you cannot see the form, consider turning off adblock.

If so, I invite you to the group of the best-informed blog readers. Join our newsletter and you will not miss any news.