{'fraction_non_alphanumeric': 0.018961253091508656, 'fraction_numerical': 0.0, 'mean_word_length': 5.1938775510204085, '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}}
Localizing Faults Using Verification Technique

In model-based fault diagnosis, it is assumed that a correct model of each program being diagnosed is available. That is, these models serve as the oracles of the corresponding programs. Differences between the behaviors of a model and the actual observed behaviors of the program are then used to find bugs in the program. However, these techniques normally require test cases and user-specified assertions to localize the fault. In this paper, we aim to localize faults in a faulty program without user-specified assertions and without executing the programs, and therefore, without using test cases. Instead, given the faulty and the correct versions of a program, a product code is automatically constructed and assertions are automatically generated. This is a fully automatic, model-based static approach to fault localization. The proposed method reduces the fault search space by removing equivalent regions from the product code using verification techniques. We demonstrate the effectiveness of the proposed method using the Siemens TCAS benchmark. We observe that the method can successfully localize the wrong safety check bug produced by LLVM compiler.