White box testing is done by the Developers. This requires knowledge of the internal coding of the software.
White box testing is concerned with testing the implementation of the program. The intent of this testing is not to exercise all the different input or output conditions, but to exercise different programming structures and data structures used in the program. It is commonly called structural testing.
White box testing mainly applicable to lower levels of testing: Unit testing and Integration Testing.
Implementation knowledge is required for white box testing.
Black box testing:
Black box testing is done by the professional testing team. This does not require knowledge of internal coding of the application. Testing the application against the functionality of the application without the knowledge of internal coding of the software.
In Black box testing the structure of the program is not considered. Test cases are decided solely on the basis of the requirements or specification of the program or module.
Black box testing mainly applicable to higher levels of testing: Acceptance Testing and System Testing.
Implementation knowledge is not required for black box testing.