Black box testing is a type of testing in which the functionality of the software is tested without any reference to the internal design, code, or algorithm used in the program.

The test cases are generally built around the requirements and specifications of the software application. Black box testing is sometimes also called "Opaque Testing", "Functional/Behavioral Testing" and "Closed Box Testing".

Here's more...
Black Box testing
The base of black box testing strategy lies in the selection of appropriate data as per the functionality of the system and testing it against the functional specifications in order to check for normal and abnormal behavior of the system. Nowadays, many companies outsource their testing work to third parties to obtain accurate results. This is because the developer of the system is well-aware of the internal logic and coding of the system, which makes it unsuitable for him to test the application.

In order to implement the black box testing strategy, the tester needs to have a thorough understanding about the requirement specifications of the system and how it should behave in response to a specific action.
Various testing types that fall under the black box testing strategy are: functional testing, stress testing, recovery testing, volume testing, user acceptance testing (also known as UAT), sanity testing, smoke testing, load testing, usability testing, exploratory testing, ad-hoc testing, alpha testing, beta testing, etc.

These testing types are again divided into two groups: a) Testing in which the user plays the role of a tester and b) User is not required.
Black Box Testing Strategies
Testing Methods where a User is not Required
Functional Testing: In this type of testing, the software is tested for the functional requirements i.e. what the system is supposed to do. The test cases are written to check if the application behaves/functions as expected.

Volume Testing: Here a large volume of data is processed through the application (which is being tested) to check the performance of the software, in situations where the system may be subjected to large streams of data.
Stress Testing: The application is tested beyond normal operational capacity such as complex numerical values, large number of inputs and queries, to check for the stress/load that the application can withstand.

Load Testing: The application is tested against heavy loads or inputs, such as testing the entire database, to find out the maximum operational capacity as well as the constrictions which degrades its performance.
Smoke Testing: Smoke testing is done to check if the most important functions of the application work without failing at the least expected level. It checks for the stability of the system and whether it is ready for further testing.

Sanity Testing: Also known as narrow regression test, the sanity test checks for the behavior of the application and determines if it is working fine after making minor changes in the code or functionality without introducing any new errors.
Recovery Testing: This is basically done to check how fast and well an application can recover against any type of crash or hardware failures. The type or extent of recovery is specified in the requirement specifications.

Ad hoc Testing: This type of testing is done without any formal test plan or test case. Ad hoc testing helps in deciding the scope and duration of the other testing methods and also helps testers in learning the application prior to starting any other testing.
Exploratory Testing: This is done in order to learn/explore the application, to determine how the software works, and how it will handle different test cases.

Usability Testing: This testing is also called 'Testing for User-Friendliness'. It is done to check if the intended user can meet his requirements using the system being tested.
Testing Methods where a User is Required
User Acceptance Testing (UAT): In this type of testing, the software is handed over to the users to determine if it meets their requirements and expectations and works as it is expected to be.
Alpha Testing: Alpha testing takes place at the development center, where the system is tested by the users or customers to check if all the requirements have been met. Any type of abnormal behavior in the system is noted by the developers and rectified accordingly.
Beta Testing: In this type of testing, the software is distributed as a beta version to the users. They test the software at their site and record any bugs or defects that they may encounter during the process. These are then reported to the developers at regular intervals.