Software Testing & Quality Assurance

Software is tested in various forms before getting released.

Based on the target to be tested, we can see the following different types:

  • Unit Testing – Developers do the unit testing. Once they write a piece of software they test that independent piece independently of other dependencies. In Object oriented world, a class is an independent piece of software that is tested, often called Software Under Test. Any dependencies with other classes are usually mocked
  • Component Testing – The software component that is going to be shipped is tested at the component level to make sure the component works per its responsibilities
  • Integration Testing – Multiple components of the software are integrated and tested together
  • System testing – The system or application or Product is tested for its responsibilities. Most often this is combined with Integration testing as the System or Application or Product is composed of multiple components integrated with each other.
  • End to End Testing – System or Application or Product is tested along with its upstream and downstream systems

Based on the aspect of software to be tested, we see the following types

  • Functional testing: Functional requirements are tested
  • Performance testing: Performance of software is tested. In case of Load testing, we test if the software scales well for increase in number of users.

Based on the purpose of testing, we can see the following types

  • Regression testing – Testing done to make sure the existing functionalities are not impacted by the new changes.
  • Smoke Testing – Testing done to make sure core functionalities of software are behaving as expected
  • Sanity testing – Testing done to make sure that the bugs identified previously have been fixed.
  • A/B Testing – Multiple versions of software are tested with different user base to find out how one performs compared to other.

Based on the type of software to be tested, we see the following types:

  • UI Testing – UI is tested from the perspective of end user
  • API Testing – Any service is tested for its responsibilities

Based on the methodology of testing, we see the following types:

  • Whitebox testing – Tester understands the innerworkings of the software and tests accordingly
  • Blackbox testing – Tester does not understand the innerworkings of the software but treats it as blackbox and tests accordingly

Automation of Testing

Its important that any type of testing is automated. We can automate testing at unit level or API level or at UI level

Mike cohn came up with an Automation Test pyramid on the different pieces of software that can be automated