Functional testing: what is it, stages, types and tools of use


Software testing

is the process of testing a software product in order to check the conformity between the actual and expected behavior of the program. There are several types of testing. As a rule, it can be distinguished either functional or non-functional testing.

In the article, we figured out the difference between these types of testing, what stages and types of functional testing exist, what tools are useful, and how testing can be automated. We also shared some tips for newbies in QA.

Functional testing

is a type of testing where we check WHAT the software product does, for example, checking the API, database, user interface, functionality of the product under test, etc. It is checked for compliance with specifications and business requirements and is based on customer requirements.

Non-functional testing

is a type of testing that checks HOW a software product works: performance, scalability, load, UX, etc. It is based on customer expectations. Example: authorization occurred in 2 seconds.

Differences between functional and non-functional testing

In functional testing:

  • We check that the system performs the tasks that have been stated in the requirements for the application;
  • Usually performed using test cases that describe the steps to test the functionality of the product;
  • Easier to test without resorting to additional tools.

In non-functional testing:

  • It is checked how the system behaves when performing the stated tasks;
  • Writing test cases is much more difficult, as there are often no clear requirements for it;
  • You have to turn to the help of special programs, so it is more difficult than functional.

Stages of functional testing

  1. Determine and analyze what functionality requires to be tested. Before starting, you need to study the tested functionality: what are its requirements, how it should work, how the user will use it.
  2. Write test cases. In them, the tester describes the scenario for testing certain functionality step by step.
  3. Preparation of test data. For testing, data is used that is as close as possible to what users can use. Test data collection is based on requirements.
  4. Testing. There is a comparison between the actual result and the expected one.
  5. Drawing up a report on the results of testing. Upon completion of testing, it is necessary to collect a report with the results of testing, a list of bugs and recommendations for improving the product.

Types of testing used in functional testing

  • unit testing – performed by developers at the stage of application development. The purpose of unit testing is to test the operation of a particular functionality
  • integration testing – checking that the modules work correctly as a group. Integration testing is a very important step since modules can be created by different developers
  • system testing – conducted on a complete and fully integrated system to confirm that the system performs according to the original requirements
  • regression testing – carried out after any changes made to the application. This type of testing is important because any changes can affect or break existing functionality
  • sanity testin – very similar to regression. It is done when the tester receives a new build with minor changes. The difference between these two types is that while during regression we conduct full application testing, during sanity testing we test one particular functionality
  • Smoke-testing – carried out in order to make sure that the most critical functionality of the application works as it should.

Tools for manual functional testing

Test management systems:

  • TestIT is a test management system that was created by testers for testers. With its help, it is convenient to store test cases, create test plans, create runs and manage them
  • TestRail – it is convenient to create checklists, test cases and runs, upload the results of runs, test reports and test cases themselves in CSV format. Also compare the results of multiple runs. It supports integration with various bug tracking systems (Jira, YouTrack, etc.)
  • Allure – with its help it is convenient to manage manual and automated testing. It is easy to develop test cases and checklists, create test runs and collect statistics on test results.

Database tools:

  • DBeaver is a versatile database management tool with a user-friendly interface. With it, you can work with various DBMS: MySQL, PostgreSQL, SQLite, Oracle and others
  • SQL Developer – a graphical interface for working with the database and executing SQL queries. It can be used to create and execute queries, explore databases, and track down errors
  • HeidiSQL is a graphical shell for working with MySQL, PostgreSQL and Microsoft SQL Server. It can be used to create, modify, and delete tables, insert and delete data, create SQL queries, and many more.

API testing tools:

  • Postman – with it, you can make and send requests, collect collections and share them with colleagues. You can also write automated tests in Postman to test the API
  • SoapUI – Using this tool, you can easily and conveniently test both SOAP and REST services. You can check the health of web services, set the availability, the operation of various requests, and monitor the receipt of responses
  • Swagger UI is a tool for describing and testing API methods. Each request has an example of a response and a description of the parameters that come with them. It does not require installation on the user’s device.

Logging systems:

  • Kibana is a tool for visualizing and analyzing data in real time, tracking trends and predicting future events
  • Graylog is a system for collecting, storing, monitoring and analyzing logs from various sources in real time. Allows you to save large volumes of logs and analyze them using search queries and filters
  • Android Studio and Xcode – you can collect logs from mobile devices – Android and Xcode, respectively – in real time. It is convenient to collect, read and analyze logs.

Device farms:

  • Android Studio – Using the Android Virtual Device Manager tool, you can create and manage virtual Android devices. When emulating devices, it is possible to test the application in various states (slow Internet connection, interruptions, low device memory, etc.).
  • Xcode – this tool has the ability to simulate various Apple devices from iPod to Apple TV. Unlike emulation using Android Studio, Apple Simulator only simulates a subset of the functionality of a physical device.
  • BrowserStack is a service for testing websites and mobile applications on various devices and browsers without having to install them on your local computer. It provides an extensive collection of real devices, operating systems and browsers that can be used to test websites and mobile applications on real devices online.

Is it possible to automate functional testing and what is it for?

Over time, the functionality of the application grows, respectively, the number of functional tests increases. This is where automated testing comes in handy.

Automation helps speed up the testing process, provide more consistent results, reduce human error, and shift the workload of multiple manual testers to a single tester.

There are many tools for automating functional testing. We will talk about the most popular below:

  • Selenium is one of the most popular web application testing automation tools. Selenium allows you to work on various operating systems (Windows, Mac, Linux) and browsers (Chrome, Firefox, etc.), besides it supports various scripting languages
  • Appium is a cross-platform test automation tool for mobile applications (native, hybrid and web). Allows you to create and run tests on real devices and emulators, use various programming languages to write tests
  • Katalon Studio – a tool for automating API, web, desktop and mobile applications. To write test scripts, the Java or Groovy programming language is used. The advantage of this tool is that it is enough to have basic knowledge of programming languages to work with it that makes it great for beginners.
  • Ranorex Studio is another versatile test automation tool. This tool, like the previous one, is well suited for beginners, as it supports the ability to create tests without writing code.

In conclusion

Functional testing is necessary to verify that the product meets the stated requirements. It ensures that the user can use the product for its intended purpose, and errors will be found before the application gets to the client.

Beginners should familiarize themselves with the basic principles of functional testing, learn the tools, try to create test cases and conduct practical testing. To do this, you can use any site or application. We recommend that you familiarize yourself with ready-made checklists on the Internet, use them for practice and gain experience in conducting functional tests.

Build your skills, learn and try new approaches and technologies. Put them into practice to gain new experience and expand your knowledge in testing. Good luck!