Chapter 1: Software Testing

What is Software Testing?

Software testing is a process of verifying and validating the functionality of an application to find whether it satisfies the specified requirements. In other words, testing is executing a system or application in order to find software bugs, defects or errors.

Let’s see standard definition, software testing types such as manual and automation testing, testing methods, testing approaches and types of testing.

Definition:

According to ANSI/IEEE 1059 standard – A process of analyzing a software item to detect the differences between existing and required conditions (i.e., defects) and to evaluate the features of the software item.

Software Testing Types:

Manual Testing: Manual Testing is a process in which you compare the behavior of a developed piece of code (software, module, API, feature, etc.) against the expected behavior (Requirements).

Automation Testing: It is the process of testing the software using an automation tool to find the defects. In this process, testers execute the test scripts and create the test results automatically by using automation tools. The automation testing tools for testing are QTP/UFT and selenium.

Testing Methods:

  1. Static Testing
  2. Dynamic Testing

Static Testing: It is also known as Verification in Software Testing. Verification is a static method of checking documents and files. Verification is the process, to ensure that whether we are creating the product right to verify whether we are developing the product according to customers requirement or not.Activities involved are Inspections, Reviews, Walkthroughs.

Dynamic Testing: It is also known as Validation in Software Testing. Validation is a dynamic process of testing the real product. Validation is the process, whether we are creating the right product i.e., to validate the product which we have developed is right or not.Activities involved in this is Testing the software application.

Methods of Testing :

There are three methods of software testing.

  1. White Box Testing
  2. Black Box Testing
  3. Grey Box Testing

White Box Testing: It is also called as Glass Box, Clear Box, Structural Testing. This Testing is based on applications internal code structure. In white-box testing, an internal perspective of the system, as well as programming skills, are used to design test cases. This testing is usually done at the unit level.

Black Box Testing: It is also called as Behavioral/Specification-Based/Input-Output Testing.in this type of  Testing method testers evaluate the functionality of the software under test without looking at the internal code structure.

Grey Box Testing: Grey box is the combination of both White Box and Black Box Testing. The tester who works on this type of testing needs to have access to design documents. This helps to create better test cases.

Testing Levels:

Testing levels are categorized as functional and nonfunctional testing

Functional Testing:

  1. Unit Testing
  2. Sanity and smoke Testing
  3.  Regression Testing
  4. System Testing
  5. Acceptance Testing
  6. Integration Testing
  7. UAT User Acceptance Testing

Nonfunctional Testing:

  1. Non functional Testing
  2. Performance Testing
  3. Security Testing
  4. Web application security Testing
  5. Usability Testing
  6. Compatibility Testing
  7. Documentation Testing   

We will study these all types of testing in upcoming chapters in detail.

Testing Artifacts: 

Test Artifacts are the deliverables which are given to the stakeholders of a software project. A software project which follows SDLC undergoes the different phases before delivering to the customer. In this process, there will be some deliverables in every phase. Some of the deliverables are provided before the testing phase commences and some are provided during the testing phase and rest after the testing phase is completed.

Some of the test deliverables are as follows:

  • Test plan
  • Traceability matrix
  • Test case
  • Test script
  • Test suite
  • Test data or Test Fixture
  • Test harness

Why do we need Software Testing

 Software Testing is an art to evaluate the functionality of a software application with an intent to find whether the developed software met the specified requirements or not and to identify the defects to ensure that the product is defect free in order to produce the quality product.

What if there is no Software Testing in the Software Development process.

As per the current trend, due to constant change and development in digitization, our lives are improving in all areas. The way we work is also changed. We access our bank online, we do shopping online, we order food online and many more. We rely on software’s and systems. What if these systems turnout to be defective. We all know that one small bug shows huge impact on business in terms of financial loss and goodwill. To deliver a quality product, we need to have Software Testing in the Software Development Process.

Some of the reasons why software testing becomes very significant and integral part in the field of information technology are as follows.

  1. Cost effectiveness
  2. Customer Satisfaction
  3. Security
  4. Product Quality

1. Cost effectiveness

As a matter of fact design defects can never be completely ruled out for any complex system. It is not because developers are careless but because the complexity of a system is intractable. If the design issues go undetected, then it will become more difficult to trace back defects and rectify it. It will become more expensive to fix it. Sometimes, while fixing one bug we may introduce another one in some other module unknowingly. If the bugs can be identified in early stages of development then it costs much less to fix them. That is why it is important to find defects in the early stages of the software development life cycle. It is better to start testing earlier and introduce it in every phase of software development life cycle and regular testing is needed to ensure that the application is developed as per the requirement.

2. Customer Satisfaction

In any business, the ultimate goal is to give the best customer satisfaction. Yes, customer satisfaction is very important. Software testing improves the user experience of an application and gives satisfaction to the customers. Happy customers means more revenue for a business. One of the reasons why software testing is necessary is to provide the best user experience.

3. Security

This is likely the most sensitive and undefended part of software testing. Testing helps in product security. Hackers gain unauthorized access to data. These hackers steal user information and use it for their benefit. If your product is not secured, users won’t prefer your product. Users always look for trusted products. Testing helps in removing vulnerabilities in the product.

4. Product Quality

Software Testing is an art which helps in strengthening the market reputation of a company by delivering the quality product to the client as mentioned in the requirement specification documents.Due to these reasons software testing becomes very significant and integral part of Software Development process.

Now let’s move ahead and have a look at some of the principles of Software Testing.

Principles of Software Testing: 

Testing of software consist of some principles that play a vital role while testing the project.

The Principles of Software Testing are as follows :

  1. Testing shows presence of defects
  2. Exhaustive testing is impossible
  3. Early testing
  4. Defect clustering
  5. Pesticide paradox
  6. Testing is context dependent
  7. Absence of error – fallacy