# Topic covered
* Software Testing
* Type of Software testing
  * Manual, Automation
* Software Testing types based on Levels
  * Unit, Integration, System, Regression
* Test Case design approach
  * AKA - Software Testing Techniques
  * White, Black, Gray box testing
* Test Driven Development (TDD)
  * Shift Left in Software Testing
  * Shift Right in Software Testing

2. Software Testing

Software testing is a process of identifying the correctness of software by finding the software bugs or errors or defects.

Software testing can be stated as the process of verifying and validating whether a software or application is bug-free, meets the technical requirements as guided by its design and development, and meets the user requirements effectively and efficiently.

The process of software testing aims not only at finding faults in the existing software but also at finding measures to improve the software in terms of efficiency, accuracy, and usability.

2.1 Type of Software testing

Manual Testing

Manual testing is the procedure that involves testing a software manually (i.e. without using any automation tool or any script) by Quality Analysts.

Automation Testing

Automation testing refers to the automatic testing of the software in which developer or tester write the test script once with the help of testing tools and framework and run it on the software.

The test script automatically test the software without human intervention and shows the result

2.2 Software Testing types based on Levels

  1. Unit testing
  2. Integration testing
  3. System testing
  4. Regression Testing

1. Unit testing

Software can be divided many standalone modules, For each module test-case is written known as Unit testing.

  • Tested during software development phase
  • Tested by development team.
  • Functional testing
  • Approach: White-box testing

2. Integration testing

While integrating different modules, test-case is written to check their compatibility known as Integration testing.

  • Tested during software development phase
  • Tested by development team.
  • Functional testing
  • Approach: White-box testing

3. System testing

After complete development of the software, the whole software is tested known as System testing.

  • Tested after development
  • Tested by testing team.
  • Functional and Non-functional testing
  • Approach: Black-box testing

Types based on who is doing testing

Alpha - By the developer
Beta - By friendly customers (Other developer)
Acceptance - By all customers (Client)

Types - Performance/Non-functional testing

Volume, Load, Stress
Security, Recovery

4. Regression Testing

  • This is done during product maintenance phase.
  • Test that old feature should not stop after na upgrade.

2.3 Test Case design approach (Software Testing Techniques)

Test case can be designed based on 3 approach

1. White box testing

The white box testing is done by Developer, where they check every line of a code before giving it to the Test Engineer.

Since the code is visible for the Developer during the testing, that’s why it is also known as White box testing.

2. Black box testing

The black box testing is done by Test Engineer, where they can check the functionality of an application or the software according to the customer /client’s needs.

In this, the code is not visible while performing the testing; that’s why it is known as black-box testing.

3. Gray box testing

Gray box testing is a combination of white box and Black box testing.

It can be performed by a person who knew both coding and testing. And if the single person performs white box, as well as black-box testing for the application, is known as Gray box testing.

2.4 Test Driven Development (TDD)

  • Test-Driven development is a process of developing and running automated test before actual development of the application.
  • TDD sometimes also called as Test First Development.
  • Instead of writing tests afterward (or, more typically, not ever writing those tests), you always begin with a unit test.
  • It is a process of modifying the code in order to pass a test designed previously.

TDD is software development approach in which test cases are developed to specify and validate what the code will do.

# Advantages of TDD
* Confidence to Refactor
* Early bug notification
* Good for teamwork, Developers

Shift Left in Software Testing

Shift left testing ensures you not only perform tests at the end of the testing cycle; you also execute them in the early stages of a software’s development.

It detects problems early and avoid problems before they happen

Eg: Unit testing and Integration testing can be term as Shift Left testing

Shift Right in Software Testing

It means performing software testing at the very end of the development cycle

Shift right testing is also known as testing in production, an approach that allows developers to discover new and unexpected scenarios that may have remained undetected in development environments

Eg: System testing can be term as Shift Right testing

Shift Left/Right in Software Testing