Black-box Testing is a method of software testing that inspects the functionality and the non-functionality of an application without having to peer into its internal structure. Every level of Black-box testing, regardless of whether it is based on units, integrity or acceptance, has innate high level testing tools. The purpose of the test is to not reveal the application's code, internal structure or programming language in general at any point. The tester although is licensed to be aware of the outcome of the software, is not given the access to know how it functions, retaining the confidentiality of the concerned application. For e.g., input A maybe the result of input B, but what causes the affect is concealed.
The testers view the software as a black-box with only inputs and outputs with no knowledge what so ever about the internal structure. Black-box testing are principally of two types: Functional Testing & Non-functional Testing. While the functional testing is more concerned with what the system does with its given features, the Non-functional Testing involves more of identifying how well it performs, mobilizes, maintains itself and holds a degree of visibility. In case of an occurrence of a specification, what's known as a Specification-based techniques kick in which takes care of equivalence partitioning, value analysis, decision tables, state transition testing and more.
Black-box Testing principally is enabled by what are known as Record and Playback Tools. These tools are employed for regression testing which checks whether any relatively newer bugs have surfaced in the previous working application to cause a pause to its functionality. These tools mainly create test-cases for Record and Playback in the form of scripts such as TSL, Java, Perl and more.
There are typically three methods that Black-box Testing follows, which are namely: Graph-based, Error Guessing and Boundary Value Analysis.
The Graph-based method tracks all the objects involved in the test, identifies them and puts them on a graph. From the object graph, each object relationship is identified, after which test-cases are written to discover the errors.
Error Guessing methodology is another method which is based purely on previous experience and judgment of the tester. It employs no specific tools to write test-cases to cover all the application paths.
Lastly, considering many systems are unsuccessful at the boundary level, testing boundary values of applications is considered important. Boundary Value Analysis (BVA) is a testing methodology where the extreme values such as maximum, minimum, just inside, just outside, error and typical values are chosen to identify what has been causing the non-functionalities.