4. Black Box testing
software testing technique in which the internal workings or code
implementation of the software being tested are not known to the tester.
Instead, the tester focuses entirely on the external inputs provided to the
software and the corresponding outputs it produces. The name "Black
Box" comes from the idea that the software is treated as a black box,
where only its inputs and outputs are visible, and its internal structure
remains hidden.
In Black Box testing, the tester's primary goal is to assess the correctness
of the software's functionality, as seen from the user's perspective. It is
typically carried out by testers who may not have access to the source
code or may not be developers themselves. The purpose of this testing
approach is to validate that the software meets the specified
requirements and performs as expected.
5. Key characteristics of Black Box Testing:
Independence of Internal Structure: The tester does not have any
knowledge of the internal code, design, or implementation details of
the software under test. This ensures that the testing is unbiased
and resembles the experience of an end-user.
Focus on Requirements and Specifications: The testing is conducted
based on the software's functional and non-functional requirements
and specifications provided during the software development
process.
8. Functional Testing is a type of software testing that focuses on verifying the functionality of a software application or system. It aims to ensure that the software performs its intended tasks and functions
correctly according to the specified requirements and design. In functional testing, the software is tested based on the functional specifications, and the primary goal is to validate that it meets the expected
behavior and produces the correct outputs for given inputs.
Unit Testing:
Unit testing is the smallest and most basic level of functional testing. It involves testing individual units or components of the software in isolation to ensure they work correctly. Developers typically perform
unit testing to validate that each unit of code behaves as expected, according to the design and requirements.
Integration Testing:
Integration testing is conducted to verify the interaction and integration between different units or modules of the software. The goal is to identify any issues that might arise when these components are
combined. Integration testing ensures that the units work together smoothly and produce the expected results.
System Testing:
System testing evaluates the entire software system as a whole to verify that it meets the specified requirements and works as intended. It involves testing the integrated system against the defined
functional and non-functional requirements. System testing is usually performed by QA teams.
9. Acceptance Testing:
Acceptance testing is the final phase of functional testing and is performed to determine whether the software meets the user's acceptance criteria and
business requirements. It is typically carried out by end-users or stakeholders to ensure that the software is ready for production deployment.
a. User Acceptance Testing (UAT): Involves end-users testing the software in a real-world scenario to validate its usability and functionality based on their
needs.
b. Alpha Testing: Performed by the internal team within the organization before releasing the software to external users.
c. Beta Testing: Involves releasing the software to a select group of external users to gather feedback and identify potential issues before the official launch.
Regression Testing:
Regression testing is executed to ensure that new code changes or modifications to the software do not negatively impact existing functionalities. It involves
retesting the application to validate that the changes introduced have not caused any unintended side effects or regressions.
10. Smoke Testing:
Smoke testing is a preliminary test performed to check the most critical functionalities
of the software to determine if it is stable enough for further testing. If the smoke test
passes, the testing team proceeds with more in-depth testing. It helps identify critical
defects early in the testing process.
Sanity Testing:
Sanity testing is a subset of regression testing and is conducted to quickly verify
specific areas or functionalities of the software after making minor changes or bug
fixes. The goal is to ensure that the changes have not adversely affected the overall
system behavior.
These different types of functional testing help ensure the quality and reliability of the
software by verifying its functional aspects at various levels of development and
deployment.
11.
12.
13. Non-functional Testing
software testing that focuses on evaluating the attributes of a software application that are not related to its specific functionalities. Unlike
functional testing, which verifies whether the application works as intended, non-functional testing assesses how well the software performs under
various conditions and measures its quality based on different criteria. Non-functional testing helps ensure that the software meets specific
performance, security, usability, and other non-functional requirements. Here are some common types of non-functional testing:
Performance Testing:
Performance testing evaluates how well the software performs under different workload conditions. It aims to identify potential performance
bottlenecks, measure response times, and assess the scalability and stability of the application. Types of performance testing include:
Load Testing: Evaluates performance under expected load levels.
Stress Testing: Tests the system's performance beyond its normal capacity.
Endurance Testing: Checks performance over an extended period to identify memory leaks or other issues.
Spike Testing: Measures the application's response to sudden spikes in user activity.
14. Security Testing:
Security testing assesses the software's ability to protect data and maintain the integrity of the system. It involves
identifying vulnerabilities and weaknesses that could lead to data breaches or unauthorized access. Security
testing includes:
Penetration Testing: Simulates real-world attacks to identify security flaws.
Usability Testing:
Usability testing evaluates the user-friendliness and ease of use of the software from an end-user's perspective.
Testers assess how intuitive the user interface is, how easily users can navigate through the application, and
whether it meets user expectations.
Compatibility Testing:
Compatibility testing ensures that the software works effectively across different platforms, devices, browsers, and
operating systems. It verifies that the application behaves consistently and delivers a seamless user experience in
various environments.
15. Scalability Testing:
Scalability testing assesses the software's ability to handle increased workload, data, or user demand. It helps
determine whether the application can scale up or down without compromising its performance.
Reliability Testing:
Reliability testing evaluates the software's stability and ability to perform consistently over time and under
different conditions. It aims to identify potential failures and measure the mean time between failures (MTBF).
Maintainability Testing:
Maintainability testing examines how easy it is to maintain and support the software over its lifecycle. It assesses
factors like code readability, modularity, and the ease of making changes without introducing defects.
Availability Testing:
Availability testing checks the application's ability to remain accessible and functional at all times, ensuring
minimal downtime or disruptions.
16. Testing Techniques: Various techniques are employed in Black Box testing, such as Equivalence Partitioning, Boundary Value Analysis,
Decision Table Testing, State Transition Testing, etc., to design test cases and scenarios.
Equivalence Partitioning:
Equivalence Partitioning is a testing technique that divides the input data into groups (partitions) to simplify the testing process. The idea
is that if a test case in one partition is valid, then all other test cases in the same partition should be valid as well. Likewise, if a test case in
one partition is invalid, then all other test cases in that partition should be invalid.
For example, if a software accepts numeric inputs between 1 and 100, you can divide this input range into three partitions:
Partition 1: Values less than 1 (Invalid data)
Partition 2: Values between 1 and 100 (Valid data)
Partition 3: Values greater than 100 (Invalid data)
Test cases are then derived from each partition to ensure the software handles inputs correctly and produces expected outputs.
17. Boundary Value Analysis:
Boundary Value Analysis (BVA) is an extension of Equivalence Partitioning and focuses specifically on testing the boundaries or edges of the input data. The rationale behind this technique is that defects are often concentrated near the boundaries of valid
input ranges.
Following the previous example, BVA would consider test cases at the boundaries of the input range:
Test with the value 1 (Boundary value - lower limit)
Test with the value 100 (Boundary value - upper limit)
Test with values just below 1 and just above 100 (Invalid data)
By testing these boundary values, testers can identify potential issues related to off-by-one errors, boundary checks, and other edge cases.
Decision Table Testing:
Decision Table Testing is a technique used when the behavior of the software depends on multiple combinations of inputs and conditions. It is particularly useful for testing business rules and logic.
A decision table consists of rows and columns, where each row represents a specific combination of inputs, and each column represents a condition or rule. The intersections between rows and columns indicate the corresponding actions or outcomes.
Test cases are derived from different combinations of inputs to validate the correct application of rules and ensure the software behaves as expected under various conditions
18. State Transition Testing:
State Transition Testing is employed when the software's behavior changes based on its
current state or previous inputs. This technique is commonly used to test systems with a finite
number of states, such as state machines or event-driven applications.
Test cases are designed to cover transitions between different states, including valid and
invalid state transitions. By testing various state transitions, testers can assess the software's
robustness and its ability to handle state changes correctly.
These Black Box testing techniques are valuable tools for designing comprehensive test cases
and scenarios without needing knowledge of the software's internal code. By using these
techniques, testers can efficiently cover different aspects of the software's functionality and
increase the likelihood of identifying defects or unexpected behavior.
19. Testing Levels: Black Box testing can be applied at all testing levels,
including unit testing, integration testing, system testing, and acceptance
testing.
Positive and Negative Testing: Testers validate both expected (positive)
and unexpected (negative) inputs to ensure the software handles
different scenarios correctly.
Test Coverage: Testers aim to achieve maximum test coverage to ensure
that all possible paths and functionalities are tested without knowledge
of the internal code.
20. Advantages: It allows for early testing in the software development life
cycle, promotes better separation of concerns between developers and
testers, and supports more thorough testing by covering different
scenarios that developers might overlook.
However, Black Box testing has its limitations as well. It may not explore
all possible code paths and might overlook certain issues that only
become apparent during White Box (structural) testing, where the tester
has access to the internal code. Therefore, it is often beneficial to use a
combination of both Black Box and White Box testing to achieve
comprehensive software testing.
21.
22. White-box testing
clear-box testing or structural testing, is a software testing technique in which the tester has access to the internal
structure and code of the software being tested. The primary objective of white-box testing is to evaluate the
correctness and quality of the internal logic, data flows, and control structures of the application. This testing
approach is usually performed by developers or specialized testers who are familiar with the programming
languages and the codebase of the software.
Key characteristics of white-box testing:
Access to Source Code: Testers can view and analyze the source code, including the application's algorithms, loops,
conditions, variables, and branches.
In-Depth Testing: White-box testing involves a detailed examination of the software's internal components, aiming
to test each statement, branch, and path in the code.
23. Verification of Code Logic: It focuses on validating the logical flow of the
code to ensure that the expected outputs are produced for various
inputs.
Coverage Metrics: White-box testing often uses coverage metrics like
statement coverage, branch coverage, and path coverage to measure how
much of the code has been exercised during testing.
24. White-box testing techniques:
Statement Coverage: This technique aims to execute all executable statements in the code at least once during testing.
Branch Coverage: It ensures that all possible branches (decision points) in the code are executed at least once during
testing.
Path Coverage: Path testing aims to execute all possible paths through the code, which includes different combinations of
branches and conditions.
Boundary Value Analysis (BVA): This technique involves testing the application using boundary values of input
parameters to check for errors at the edges of the input domain.
Cyclomatic Complexity Testing: This technique uses the Cyclomatic complexity metric to determine the number of
independent paths through the code and helps identify areas with a higher risk of defects.
25. Advantages of white-box Testing:
It provides thorough coverage of the codebase, helping to identify potential defects and logical errors.
It can be used early in the development process to catch bugs at an early stage.
It helps in improving code quality and maintainability by identifying poorly structured code.
The testing process can be automated using various testing tools, reducing manual effort.
Limitations of white-box testing:
Testers need to have programming skills and knowledge of the code, which may limit the testing team.
It may not cover all possible scenarios, as it focuses on the implementation details rather than the system's behavior as a whole.
Since it requires access to the source code, it may not be suitable for testing third-party or closed-source components.
In conclusion, white-box testing is a valuable testing technique that complements other testing methods like black-box testing. By delving into the
internal workings of the software, it helps ensure the correctness of the code and enhances the overall quality of the application.