{'fraction_non_alphanumeric': 0.02547169811320755, 'fraction_numerical': 0.0, 'mean_word_length': 5.204678362573099, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Testing: principles and practice

Testing is the process of determining whether a task has been correctly carried out. Testing should be performed throughout the software life cycle; it should not be restricted to verification (testing whether a phase has been carried out correctly) and validation (testing whether the completed product satisfies its specifications). The correction of a fault exposed by testing is termed debugging. The goal of testing is to reveal faults. There are two types of testing: execution-based testing and nonexecutionbased testing. It is impossible to execute a specification document; instead, it has to be reviewed carefully. Once executable code has been written it is possible to run test cases, that is, perform execution-based testing. Nevertheless, the existence of code does not preclude nonexecution-based testing because carefully reviewing code will uncover at least as many faults as running test cases. In this survey, the principles and practice of both execution-based and nonexecution-based testing are described.