Monday, November 26, 2018

Why Should You Automate Your Regression Testing Process As Soon As Possible?

What is regression testing?

Regression testing, which is also known as repeated testing, is the process to ensure all the old functionalities still correctly works with the new changes. In other words, handling regression testing is to test an already tested application to find defects as a result of the changes. This is a usual step of any software development process and done by testing specialists. Testers do regression testing by re-executing the tests against the modified application to evaluate whether the revised code breaks anything which was working earlier. The only reason regression testing might not work is that changing or adding new code to a program can easily introduce errors into code that is not intended to be changed.

Why should regression testing be automated?

Let’s consider an example and how to perform regression testing in that situation:
At the beginning of a project, assuming we have six developers and two testers. The Agile model is set up every two weeks for a Sprint. Everything started.

In the first Sprint, we start with the basic features (e.g., about ten functions), the testers begin designing testing scenarios for testing (e.g. about 100 scenarios). The very first Sprint receives a good rating from customers.

In the second sprint, the developers continue to create new features - about 10, and testers also do things like in the first Sprint - with 100 new scripts plus 100 old scenarios that need to be retested. Well, only 200 scripts, everything is still in control.

In the next Sprint, the developers need to make eight new features and update the two old features due to new customer requirements. At this point, the two testers not only have to design test scripts for the 8 new features but also have to test and update 200 old scenarios. The whole implementation is about 300 scenarios. Did you feel there is something wrong?

Over the next few Sprints, the three developers still meet the number of features and the changing requirements, but with two testers, the number of scripts to create and update are much more. Tiredness begins to spread. The lack of time and the risk of miss bug is higher and higher. Too many problems arise.
Therefore, when regression testing is automated, it enables testers to check into a variety of changes and unusual cases in the production environment. Not all regressions are caused by new features or the consequences of routine bug fixes; database updates or new browser versions can also cause them. Regression can also be an issue with efficiency and speed. Automating those cases which are stable and repeatable allows manual testers to spend more time testing various environments and for merging more complicated cases at a higher level.
And what's more, regression analysis is the key to success. It needs to deal with intelligence rather than hard work.
  1. Highest Return: Execute tests that contribute to high coverage of the requirements, then any others…
  2. Quickly Lower Risk: Execute tests for the most critical requirements, then any others…
  3. Practically Safe: Execute tests for all the critical requirements, then any others…
    Especially since often ~20% of the test cases are covering ~80% of the business value

-------------------------------------------------

    What is Exhaustive Testing? And Why It Is Impossible?

    What is Exhaustive Testing?

    Exhaustive testing, which is also known as complete testing, occurs when all the testers in your team are exhausted and when all the planned tests have been executed. It is a quality assurance testing technique in which all scenarios or data is tested for testing. In a more understandable way, exhaustive testing means ensuring there are no undiscovered faults at the end of the test phase. Testing everything (all combinations of inputs and preconditions) is not feasible except for trivial cases. As testers, we often say “well I just never have enough time for testing”. Even if you had all the time in this world, you still wouldn’t have enough time to test all the possible input combinations and output combinations.

    Why Exhaustive Testing is impractical and impossible?

    It is not possible to perform complete testing or exhaustive testing. For most of the systems, it is near impossible because of the following reasons:
    • The domain of possible inputs of a program is too large to be completely used in testing a system. There are both valid inputs and invalid inputs.
    • The program may have a large number of states. There may be timing constraints on the inputs, that is, an input may be valid at a certain time and invalid at other times. An input value which is valid but is not properly timed is called an inopportune input.
    • The input domain of a system can be very large to be completely used in testing a program.
    • The design issues may be too complex to completely test. The design may have included implicit design decisions and assumptions. For example, a programmer may use a global variable or a static variable to control program execution.
    • It may not be possible to create all possible execution environments of the system. This becomes more significant when the behavior of the software system depends on the real, outside world, such as weather, temperature, altitude, pressure, and so on.

    Exhaustive Testing Examples

    Example 1:

    exhaustive testing IE Options Example

    The IE Tools > Advanced Options window
    53 binary conditions
    1 condition with 3 options
    1 condition with 4 options
    2^53 = 9,007,199,254,740,992
           x                   12
           = 108,086,391,056,891,904 possible combinations of conditions
    At one second per test execution:
    108,086,391,056,891,904 / 360 = 300,239,975,158,033.067 hours (12,509,998,964,918.04 days or 34,273,969,766.9 years) to test all possible combinations.

    Example 2:

    Let's take an e-commerce site which has the following functionalities:
    • Login
    • Choose a product
      • Filter product with color
      • Filter a product with price.
    • Add to Cart
    • Buy the product (payment portal)
    On the basis of risk identifying parameters, users can create a matrix to include in the test plan. Each parameter can be given scores so that we can have a correct way to identify high-risk areas.
    • Impact on Business: 1-10
    • Probability of Failure: 1-10
    • Regression: 1-5
    • Recovery: 1-5
    Let’s create a matrix for the above example:
    FunctionalityImpact on BusinessProbability of FailureRegressionRecovery
    Login   10     311=15
    Choose a product with color filter5522=14
    Choose a product with price filter8522=17
    Add to Cart   10834=25
    Buy the product10722=21

    So as per the score we have “Add to cart” functionality as the foremost contender for the "highest risk area" so now we can prioritize the testing. We can also determine for which functionalities QA team needs to do a near-exhaustive testing.
    QA team can streamline the risk mitigation plan by looking at their scores
    • Scores 1-5:- Unit testing and reviews.
    • Scores 5-10:-Unit testing + black-box testing(regression and high business impact areas)
    • Scores 10-15:-Typical test types with limited depth.
    • Scores 15-25:-Typical test types with depth in certain test types.
    • Scores 25-30:- High-risk areas. Complete coverage and in-depth testing for all test types.
    As per the above-mentioned method areas with the score above 25 should be considered as an extremely high-risk area and a near-exhaustive testing needs to be done.So for the above example "Add to Cart" should implement in-depth testing for all test types and exhaustive testing should be done.


    Source: https://testautomationresources.com/software-testing-basics/exhaustive-testing-fundamentals/