What is Quality Assurance: a Must or a Waste of Time?

The giants of world production are considered to be the examples of success, stability, strong improvements and innovations. Google, Twitter, Facebook, Apple, Samsung, Toyota, Mercedes-Benz, BMW, Boeing, BP, J.P. Morgan… What makes them so strong, so powerful, so Best? What do they do and what don’t they do? Why? Why do other companies pattern themselves on these leaders and what exactly should others borrow from their business models? They do have a strong and well-arranged management, and all their employees are highly professional. No matter what positions they hold and what they are responsible for, each stage of production and development has very careful and precise processes all workers strictly follow.

What is QA?

So, what is quality assurance that has been described as the stage of successful development? QA aims at preventing defects with a focus on the process that is used to make the product. It is proactive quality management. The main purpose of QA is to keep an eye on production and development, test and improve them. This is done with the help of tests that check how good the processes are and prevent companies from producing defective products.

Let’s try to imagine the entire cycle of app development. First of all the development of any application starts from an idea — what we want to create. At this stage, the team decides what it should be, what features it will have, who will use this app, its terms and conditions, all essential activities, working schedule, requirements, etc. The next phase is design, where the application architecture and its user interface are created. A programming language, app logic, the number of modules, dependencies between them, database structure and so on should be discussed too.

The next phase is app development. This is the stage when all planned activities are carried out and application features are implemented. This is one of the most crucial phases of the construction of the entire product.

App development is followed by product testing and verification. This is the time when the quality assurance process is in its full force and effect. At this stage all QA activities take place — quality assurance tests are performed, test cases are designed, a test flow is created, reports are prepared, errors are entered into the bug tracking system, further tests of the process are planned, new requirements are analyzed, suggestions on product quality improvement are made, etc.

The next stage is app release and its further maintenance. This stage is different from all previous ones because we already have a live product that works. The main task here is to make it better by fixing some minor errors and implement new functionality.

Types of quality assurance tests

There are several types of Agile testing:

    It is the process of incremental and iterative product development. The whole team including QA engineers work by iterations.
  • RUP
    RUP stands for Rational Unified Process. This methodology divides all process activities into disciplines and testing is one of them. It should be done throughout the whole product development.
  • Kanban
    This methodology is characterized by shorter cycle times which contributes to the continuous delivery of results to the client. Quality is maintained daily as code base increases.
  • Extreme programming (XP)
    It presupposes continuous testing of a product. Developers should create tests for a feature prior to starting to work on it. All quality assurance tests are divided into two groups: unit tests and acceptance tests. The former check a function while it’s being developed. The latter test the entire system or a big scope of features in one go.

As quality assurance is a continuous process, the QA techniques always develop too. Nevertheless, there are “standard” quality assurance tests that are always used. They are the foundation of testing methodologies.

  • Black-box testing 
    App testing that is done as if the application is used by end-users.
  • White-box testing 
    Tests check the structure of the application and examine its logic and code. For example, unit testing belongs here.
  • Grey-box testing 
    The combination of the two previous techniques.
  • CRUD tests 
    CRUD is an abbreviation composed from the first letters of a testing technique that is based on 4 steps: Create — Read — Update — Delete. Let’s use an example to better understand it. Imagine that we need to test user registration and login. 
    - First of all, we Create a user from a desktop or web page. Then we have to ensure that the current user is on the database using special queries. 
    - Read: we log into the system as the user and check again if the current user session is displayed in the database with the help of relevant queries. 
    - Update: we go to the user profile page from the desktop or web and update information about them. Then we make sure that the update has been recorded in the database. 
    - And the last step — Delete. The user deletes their account from the profile page or application settings. We need to check whether the user has really been deleted from the database. At every step, information can be provided from the database side and checked on the desktop or web side.
  • Functional testing 
    The goal of functionality testing is to approve or disapprove that the application works as expected according to functional requirements, use cases, system requirements, etc.
  • Non-functional testing 
    These tests define cases needed to specify software details. These can be various entities like memory, video card, etc. In fact, such testing describes how the system works. There are the following types of non-functional tests:
    - Performance testing (load, stress, stability testing);
    - Volume testing;
    - Installation testing;
    - UI design testing;
    - Failover & recovery testing;
    - Configuration testing;
    - Localization testing;
    - Compatibility testing;
    - UX design testing.
  • Positive testing
    Tests are performed with the expectation that the system has no errors.
  • Negative testing 
    While testing the app it is expected that the system has normal behavior for incorrectly entered data.
  • Manual testing
    It is product testing done without any automation tools — hands on testing.
  • Automated testing 
    This kind of testing includes the use of automation tools or some functions of a computer (e.g. console, automatic switch off, restart) that can automate the current process.
  • Semi-automated testing
    It combines the two previous techniques. Some features of a product are tested manually, others undergo automated tests if possible.
  • Smoke testing 
    Testing of all basic cases and scenarios to check whether all previous critical bugs were fixed and make sure they aren’t reproduced any more and the tested modules/features work as they should.
  • New feature testing 
    Functionality testing focused on new features of an app. It is done to ensure that they work smoothly as it’s been planned.
  • Regression testing 
    It is performed after introduction of a new version, new build or a new module of an application. Regression tests have to ensure that old functionality works correctly and has no errors after the application update.
  • Acceptance testing 
    Product testing that is done according to the requirements/use cases/test scenarios of a customer.
  • Module testing 
    With the help of this technique QA engineers test one separate module of an application, for example, user registration.
  • Integration testing 
    This testing presupposes checking interaction of two modules. These can be user registration and adding a product to the cart, for example.
  • System (end-to-end) testing 
    In this case, interaction of three and more modules is tested. For instance, user registration, adding a product to the cart, adding a credit card, getting a confirmation email about a successful purchase).

Read the full article in our blog.