Manual Testing

As we have discussed earlier, Manual testing is one of the types of software testing. It is the most important and oldest testing technique, which is used to test the software and application manually with the help of humans. All the test cases are executed manually by the testing team without using any automation scripts or tools. In manual testing, all the testing activities like test case generation, test execution, and defect reporting are performed manually to produce a 100% defect-free software or application. Testing is executed from the perspective of the client's requirements which are defined in the requirement specification document.

Using manual testing we can deliver a defect-free product that works as per the client or customer’s specifications. The tested software should meet the quality standard of the client. To create a high-quality product, we use manual testing, which helps us to identify all the hidden defects in the system by testing all the functional and non-functional requirements. If the testing team finds any defects, they will assign them to the developer's team for a fix. Once the defect is fixed, it will be moved back to the testing team for re-testing. After the completion of testing with no open defects, we can deliver the product to the production team or client.

Need for Manual testing

Manual testing is the critical element of the software testing process. Some of the critical points on why manual testing plays a crucial role in the software testing world are mentioned below:

  1. According to one software testing fundamentals, i.e., ‘100% automation is not possible,' every software should be manually tested before automation testing. Also, it doesn't require any specific tool knowledge to perform manual testing.
  2. Manually we can test the software from all aspects, starting from functional tests to non-functional tests. It is also helpful in testing the look and feel application and understanding the problem at a conceptual level. Testers can communicate and connect with the end-users to deliver a high-quality product.
  3. Manual testing is required for executing scenarios that cannot be automated using automation tools or which are not behaving correctly while automating. In such cases, we need manual testing to perform the testing process to identify the defects and bugs.
  4. Manual test execution is less expensive than automation test execution. In small-scale projects, cost-effective testing is required to reduce the cost of the overall project. Hence, in such cases, manual testing is recommended over automation testing.
  5. Some of the testing techniques can be only done manually, like Exploratory testing and Adhoc testing. This kind of testing provides an opportunity to expand the thinking capacity of the tester from the testing's perspective. Through manual testing, testers can expand the overall coverage for software validation, whereas automation testing restricts the test to certain boundaries.

In conclusion, every software or system must be manually tested to identify the maximum number of defects as early as possible.

Type of Manual testing

Manual testing is further categorized into three different categories, as mentioned below:

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

White Box testing

It is one of the manual testing types which focuses on the testing of code and the internal structure of the application. In white-box testing, each line of code is tested by developers to identify bugs and defects in it. Once the white box testing is completed, the application is handed over to QA (testing team). It is also called Glass box testing or transparent testing due to code visibility.

Black Box testing

Another type of manual testing is Black box testing. It focuses on the application’s behavior and functionality and verifies whether it works as per the client's expectations. It is opposite to white box testing as there is no visibility of code and internal structure. It is usually performed by testers.

Grey Box testing

Another type of manual testing is Grey box or Gray box testing, which combines both white box and black box testing. In grey box testing, we have partial visibility of the source code and internal structure of the software. Therefore, it is performed by a person who knows both programming language and testing.

Manual Testing Techniques

In software testing, we have some manual testing techniques used while performing the test execution. It also helps in the preparation and designing of the test cases. Mainly there are two techniques which are mentioned below:

  1. Static testing
  2. Dynamic testing
Manual Testing

Static testing

It is a manual testing technique used to test the static behavior of the software, excluding the source code execution. It helps the team to verify the application's requirements without implementing the code. Therefore, it is performed at the initial stage of development to analyze all the requirements and documents as per the client's expectations. It is also known as Verification testing or process.

Static testing is further divided into two parts that are: -

  1. Reviews – A technique used to identify errors and bugs in the software design and its requirement documents are known as reviews. In static testing, reviews are of four types which are peer review, walkthrough, informal review, and inspection.
    Peer review – A review done by a team member or colleague to identify and resolve the bugs present in each other’s documents.
    Walkthrough –A process of giving a walkthrough (demonstration) to an expert or a skilled person to ensure the documents are 100% error-free.
    Informal review – A technique in which the document creator will showcase all the documents to the audience or viewers to grab their views on it for error detection.
    Inspection – A process that conducts a strict review of the documents to discover hidden bugs.
  2. Static Analysis – A technique used to identify bugs in the source code of the application is known as static analysis. We use this technique to examine and evaluate the source code and internal structure of the software. Like reviews, static analysis is also divided into two categories that are data flow and control flow.
    Data Flow – A process of analyzing the data flow in a program. It checks how data is processed according to the program's instructions.
    Control Flow – A process of analyzing the execution of the flow of statements or instructions in a program.

Dynamic testing

It is a type of manual testing technique used to test the software's dynamic behavior, including source code. It is done to test the actions and performance of the software by executing the source code in the runtime environment. It validates the output of the code by providing some dynamic inputs and compares the actual output with the expected one. Therefore, it is also known as Validation testing.

Dynamic testing is further divided into three parts that are: -

  1.  Structure-based or White-box testing – It focuses on the testing of code and internal structure of the application. Each line of code is validated to identify bugs and defects in the system. In structure-based testing, we use three different techniques, which are decision coverage or branch coverage, statement coverage, and condition coverage.
    Decision coverage – It ensures that all possible decision points should be tested at least once by providing the applicable input.
    Statement coverage – It ensures that all the statements present in the code should be tested at least once by executing code with applicable input.
    Condition Coverage – It ensures that every logical condition of the code must provide its all-possible outcomes. In other words, it is used to validate the expressions with logical operands that are present in conditional statements like Boolean operations (AND, OR).
  2. Specification-based or Black box testing – It focuses on the behavior and functionality of the system and verifies whether it is working as per the requirements. It tests both functional and non-functional requirements by constructing and executing the test cases as per the requirements. Hence, we can say both functional and non-functional testing are types of Black box testing. In specification-based testing, we use various types of techniques, which are Equivalence Class Partitioning, Boundary Value Analysis, Decision Tables, State Transitioning, Use Case Testing, and Cause-Effective Graph Technique.
    Equivalence Class Partitioning – A technique that allows us to make equal partitions of input data or set of conditions to test the software is known as Equivalence class partitioning. In other words, it creates an equivalent partition of input values based on which test execution takes place. E.g., valid input range 10-20, so we will create equal partitions to test both valid and invalid data like -ve to 0, 1-10, 11-20, and so on.
    Boundary Value Analysis – A technique that allows us to test the boundaries of a particular partition is known ad Boundary value analysis. It tests the boundary conditions of a particular range which includes both valid and invalid values such as inside and outside the boundary, minimum and maximum boundary, and error values. E.g., a value ranges from 50-100, so the boundary values are 49, 50, 51, and 99, 100, and 101 from lower and upper boundaries, respectively.
    Decision Tables – A technique used to test certain cases that are more focused on the business requirements and require a combination of inputs is known as the Decision tables technique. This technique helps to create a decision table with all possible combinations of inputs and their respective outputs to test the functionality. It is also referred to as the Cause-Effect table.
    State Transitioning – A technique used to test the system’s behavior by providing all permutations and combinations of the input data is known as State transitioning. It evaluates the system with positive and negative data values to check how the system is behaving.
    Use Case testing – A technique used to test the entire system by drafting test cases required for the end-to-end testing process is known as Use Case testing. It is a very helpful functional testing technique that identifies all the test scenarios and cases which will be used for validating the whole system.
    Cause-Effective graph– A technique that uses a graphical representation of the cause and effects of a system is known as Cause-Effective Graph. As the name suggests, cause- effective graph is being prepared that represents the relationship between the input (Cause) and output (Effect) of the system.
  3. Experience-based testing – It focuses on the testing of the application with the help of the tester's experience. It utilizes the tester's experience and skills to perform testing activities to gain user confidence in the system. It is usually performed in case of unavailable or inadequate requirements. There are mainly two types of experience-based testing techniques, which are Error Guessing and Exploratory testing.
    Error Guessing – A technique used to guess the error-prone areas or possible hidden errors of the system with the help of the tester's experience gained over the years is known as Error guessing.
    Exploratory Testing – A technique used to evaluate or explore the entire application under test (AUT) to discover the possible number of hidden defects with the help of the tester's knowledge and skills is known as Exploratory testing.

How Manual testing is performed

Below is the entire process of performing manual testing: -

  1. Analyzing Requirements – This is the first step for performing manual testing. In this step, the testing team collects and examines all the requirements specified by the clients. They also understand the application under test (AUT) to choose the testing area.
  2. Preparing and reviewing test cases ­– In this step, testers begin with the preparation of test cases according to the requirements specified in the documents. After completing test cases, they will review drafted test cases.
  3. Executing test cases – In this step, test cases are executed manually with a human intervention using manual testing techniques.
  4. Reporting defects – In this step, defect reporting is performed. When they find any bug during execution, it will be reported to the developer's team for a fix.
  5. Retesting – In this step, retesting is performed. After fixing the defects, developers move the bug to QA (testing team), and QA performs the retesting of the previously failed test cases.

Tools used to perform Manual testing

In a software testing environment, we have multiple tools for performing manual testing. Testing tools are required for performing different types of testing with multiple levels and defect reporting. Some of the available tools in the market are JIRA, JMeter, LoadRunner, Citrus, ZAP, SonarQube, NUnit, BugZilla, etc.

Manual Testing

JIRA – It is the most popular manual testing tool, which is mainly used for project management and defect tracking. It is also recommended for agile projects as it is easy to use and operate. JIRA is an open-source testing tool that can be easily downloaded from the internet. It connects both developers and the tester to keep track of the logged defects.

JMeter – It is a performance and load testing tool which measures the application's performance and functional behavior. It tests both static and dynamic resources of the application. Like JIRA, it is also an open-source testing tool entirely based on Java programming language. JMeter is platform-independent and has a straightforward GUI, making it a good quality testing tool.

LoadRunner – Like JIRA, LoadRunner is also a widely used manual testing tool which supports performance testing. It measures the performance and behavior of the application when a particular load is applied. It is a licensed (not open source) tool developed by Micro Focus and compatible with several development tools and technologies.

Bugzilla – It is a manual testing tool mainly used for bug tracking. The primary purpose of using Bugzilla is that it keeps track for its users and clients of all the issues and defects reported on it. It maintains a link between Bugzilla and other test case management tools, also referred to as a project management tool. Bugzilla is an open-source testing tool that provides many functionalities like email notifications, time tracking, robust security, advanced search options, customization, and localization. It is developed in Perl language and uses the MySQL database.

Citrus – It is a manual testing tool that can also be used as an automation tool to automate manual test cases. Citrus is the most common testing framework primarily used for integration testing. The primary function of Citrus is to communicate with both client-side and server-side requests. It supports several messaging protocols such as HTTP, SOAP, and JMS and validates file formats like JSON, XML, and plain text. Like JMeter, Citrus is also developed in Java programming language. It is a tool available in the market as open-source and licensed.

SonarQube – It is a manual testing tool developed by SonarSource for analyzing the quality of code. It is also a Quality Assurance tool used to continuously examine the quality and security of code. It uses static and dynamic analysis tools for code inspection and provides a detailed quality report of code, including bugs and vulnerabilities. It supports various continuous integration technologies, such as Maven, Ant, MSBuild, Gradle, etc., for integration. SonarQube is developed in Java and supports multiple programming languages like C, C++, Java, Python, PHP, Cobol, etc. It is also an open-source tool like other tools.

ZAP – ZAP stands for Zed Attack Proxy. It is the most widely used application scanning tool, mainly used for scanning web applications. It is an open-source tool primarily operated by Open Web Application Security Projects [OWASP]. It also helps in performing dynamic application security testing (DAST). Like other testing tools (SonarQube, Citrus, and JMeter), ZAP is also developed in Java.

NUnit – It is a manual testing tool mainly used to perform Unit testing. It is a unit testing framework that is derived from the Junit framework. NUnit is more compatible with Net languages as it is developed in C# programming language. Like other testing tools, NUnit is also an open-source testing tool.

Mantis – It is a manual testing tool mainly used for defect reporting and tracking of the software. The primary function of Mantis is that it provides a mobile version (Android and iOS) for testing, along with its compatibility with various operating systems such as iOS and Windows. It is one of the most accessible tools available in the market as it provides a user-friendly GUI over a period. Mantis is an open-source testing tool like other tools. It is developed in PHP and operates or works with various databases such as MS SQL, MySQL, and PostgreSQL.

Advantages of Manual Testing

Following are the advantages of using manual testing: -

  • Manual testing helps to quickly identify all the hidden bugs in the early stage of the testing cycle.
  • It is easy to understand and learn for new testers.
  • It doesn't require knowledge of any specific programming language for test execution.
  • A tester can quickly identify bugs present in GUI and test the look and feel of the application.
  • The cost of manual testing is meager than automation testing, as we are not using any automation tool for testing.
  • It is more adaptable for performing Adhoc testing and agile-based projects.

Disadvantages of Manual Testing

Following are the disadvantages of using manual testing: -

  • Manual testing is a time-consuming activity as it will take plenty of time to execute many test cases.
  • Documenting all the reports, such as test execution and defect logging, will also consume time.
  • It is prone to human errors as all the testing activities are performed manually by humans. Therefore, it increases the possibility of human errors and faults.
  • More human resources are required to perform manual testing compared to automation testing.
  • We cannot perform all types of software testing with the help of manual testing. Some tests like performance and load testing require automation or testing-specific tools to operate.