What is Software Quality Assurance

What is Software Quality Assurance

author

By Hardik Pansani Published in Quality Assurance

  • Software is a collection of computer programs that helps us to perform a task. • Types of Software:
  • System software Ex: Device drivers, OS, Servers, Utilities, etc.
  • Programming software Ex: compilers, debuggers, interpreters, etc.
  • Application software Ex: industrial automation, business software, games, telecoms, etc.

Product Vs Project

  • If a software application is developed for specific customer requirements then it is called Project.
  • If a software application is developed for multiple customer’s requirements then it is called a Product.

What is Software Quality Assurance?

  • Software Testing is an activity to detect and identify the defects in the software.
  • The objective of Software Quality Assurance is to release quality products to the client.

Why do we need Software Quality Assurance?

  • Ensure that the software is bug-free.
  • Ensure that the system meets customer requirements and software specifications.
  • Ensure that the system meets end-user expectations.
  • Fixing the bugs identified after release is expensive.

Software Quality

  • Quality: Quality is defined as the justification of all the requirements of a customer in a product.
  • Note: Quality is not defined in the product. It is defined in the customer`s mind.
  • Quality software is reasonably
  • Bug-free.
  • Delivered on time.
  • Within budget.
  • Meets requirements and/or expectations.
  • Maintainable

Error, bug & failure

  • Error: Any incorrect human action that produces a problem in the system is called an error.
  • Defect/Bug: Deviation from the expected behavior to the actual behavior of the system is called a defect.
  • Failure: The deviation identified by the end-user while using the system is called a failure.

Why there are bugs in the software?

  • Miscommunication or no communication
  • Software Complexity
  • Programming errors
  • Changing requirements
  • Lack of skilled testers Etc..

Software Development Life Cycle (SDLC)

  • SDLC, Software Development Life Cycle is a process used by the software industry to design, develop, and test high-quality software.
  • The SDLC aims to produce high-quality software that meets customer expectations.

SDLC Models

  • Waterfall Model
  • Incremental Model
  • Spiral Model
  • V-Model
  • Agile Model

Waterfall Model

Incremental Model

Spiral Model

V-Model

Agile Model

Verification V/S Validation

Verification checks whether we are building the right system.

  • Verification typically involves.
    • Reviews
    • Walkthroughs
    • Reviews
  • Validation checks whether we are building the system right.
  • This takes place after verifications are completed.
  • Validation typically involves actual testing.

Static V/S Dynamic Testing

  • Static testing is an approach to testing project documents in the form of Reviews, Walkthroughs and Inspections.
  • Dynamic testing is an approach to test the actual software by giving inputs and observing results.

Review, Walkthrough & Inspection

Reviews:

  • Conducts on documents to ensure correctness and completeness.
  • Example:
    • Requirement Reviews
    • Design Reviews
    • Code Reviews
    • Test plan reviews
    • Test cases review etc.

Walkthroughs:

It is a formal review and we can discuss/raise the issues at the peer level.

Also, the walkthrough does not have minutes of the meeting. It can happen at any time and conclude just like that no schedule as such.

Inspections:

  • It’s a formal approach to the requirements schedule.
    At least 3- 8 people will sit in the meeting 1- reader 2-writer 3- moderator plus concerned.
  • Inspection will have a proper schedule which will be intimated via email to the concerned developer/tester.

Levels of Software Testing

  • Unit Testing
  • Integration Testing
  • System Testing
  • User Acceptance Testing(UAT)

Unit Testing

  • A unit is the smallest testable part of software. It usually has one or a few inputs and usually a single output.
  • Unit testing is conducted on a single program or single module.
  • Unit Testing is a white-box testing technique.
  • Unit testing is conducted by the developers.
  • Unit testing techniques:
    • Basis path testing
    • Control structure testing
      • Conditional coverage
      • Loops Coverage
    • Mutation Testing

Integration Testing

  • In Integration Testing, individual software modules are integrated logically and tested as a group.
  • Integration testing focuses on checking data communication amongst these modules.
  • Integrated Testing is a white-box testing technique.
  • Integrated testing is conducted by the developers.
  • Approaches:
    • Top Down Approach
    • Bottom-Up Approach
    • Sandwich Approach(Hybrid)
  • Stub: This is called by the Module under Test.
  • Driver: Calls the Module to be tested.

Bottom-Up Integration

Top down Integration

System Testing

Testing overall functionality of the application with respective client requirements.

  • It is a black box testing technique.
  • This testing is conducted by the testing team.
  • Before conducting system testing we should know the requirements.
  • System Testing focuses on below aspects.
    • User Interface Testing (GUI)
    • Functional Testing
    • Non-Functional Testing
    • Usability Testing

User Acceptance Testing

  • After completion of system testing UAT team conducts acceptance testing in two levels.
    • Alpha testing
    • Beta testing

Testing Methodologies

  • White box Testing
  • Black box Testing
  • Grey box Testing

White Box Testing

  • White Box Testing is conducted on the internal logic of the programs.
  • Programming Skills are required.
    • Ex: Unit Testing & Integration Testing

Block Box Testing

  • Testing is conducted on the functionality of the application and whether it is working according to customer requirements or not.
  • Ex: System Testing & UAT Testing

Grey Box Testing

Another part of manual testing is Grey box testing. It is a collaboration of black-box and white-box testing.

Since the grey box testing includes access to internal coding for designing test cases. Grey box testing is performed by a person who knows coding as well as testing.

In other words, we can say that if a single-person team does both white-box and black-box testing, it is considered grey-box testing.

Automation Testing

The most significant part of Software testing is Automation testing. It uses specific tools to automate manual design test cases without any human interference.

Automation testing is the best way to enhance the efficiency, productivity, and coverage of Software testing.

It is used to re-run the test scenarios, which were executed manually, quickly, and repeatedly.

In other words, we can say that whenever we are testing an application by using some tools is known as automation testing.

We will go for automation testing when various releases or several regression cycles go on the application or software. We cannot write the test script or perform the automation testing without understanding the programming language.

Some other types of Software Testing

In software testing, we also have some other types of testing that are not part of any above-discussed testing, but those testing are required while testing any software or an application.

  • Smoke Testing
  • Sanity Testing
  • Regression Testing
  • User Acceptance Testing
  • Exploratory Testing
  • Adhoc Testing
  • Security Testing
  • Globalization Testing

Let’s understand those types of testing one by one:

In smoke testing, we will test an application’s basic and critical features before doing one round of deep and rigorous testing.

Or before checking all possible positive and negative values is known as smoke testing. Analyzing the workflow of the application’s core and main functions is the main objective of performing the smoke testing.

Sanity Testing

It is used to ensure that all the bugs have been fixed and no added issues come into existence due to these changes. Sanity testing is unscripted, which means we cannot document it. It checks the correctness of the newly added features and components.

Regression Testing

Regression testing is the most commonly used type of software testing. Here, the term regression implies that we have to re-test those parts of an unaffected application.

Regression testing is the most suitable testing for automation tools. As per the project type and accessibility of resources, regression testing can be similar to Retesting.

Whenever a bug is fixed by the developers and then testing the other features of the applications that might be simulated because of the bug fixing is known as regression testing.

In other words, we can say that whenever there is a new release for some project, then we can perform Regression Testing, and due to a new feature may affect the old features in the earlier releases.

User Acceptance Testing

The User acceptance testing (UAT) is done by the individual team known as domain expert/customer or the client. And knowing the application before accepting the final product is called as user acceptance testing.

In user acceptance testing, we analyze the business scenarios, and real-time scenarios on the distinct environment called the UAT environment. In this testing, we will test the application before UAI for customer approval.

Exploratory Testing

Whenever the requirement is missing, early iteration is required, and the testing team has experienced testers when we have a critical application. New test engineer entered into the team then we go for the exploratory testing.

To execute the exploratory testing, we will first go through the application in all possible ways, make a test document, understand the flow of the application, and then test the application.

Adhoc Testing

Testing the application randomly as soon as the build is in the checked sequence is known as Adhoc testing.

It is also called Monkey testing and Gorilla testing. In Adhoc testing, we will check the application in contradiction of the client’s requirements; that’s why it is also known as negative testing.

When the end-user using the application casually, and he/she may detect a bug. Still, the specialized test engineer uses the software thoroughly, so he/she may not identify a similar detection.

Security Testing

It is an essential part of software testing, used to determine the weakness, risks, or threats in the software application.

The execution of security testing will help us to avoid the nasty attacks from outsiders and ensure our software applications’ security.

In other words, we can say that security testing is mainly used to define that the data will be safe and endure the software’s working process.

System Testing

  • Testing the overall functionality of the application with respective client requirements.
  • It is a black box testing technique.
  • This testing is conducted by the testing team.
  • Before conducting system testing we should know the requirements.
  • System Testing focuses on the below aspects.
  • User Interface Testing (GUI)
  • Functional Testing
  • Non-Functional Testing
  • Usability Testing

User Acceptance Testing.

  • After completion of system testing UAT team conducts acceptance testing in two levels.
  • Alpha testing
  • Beta testing