{'fraction_non_alphanumeric': 0.017045454545454544, 'fraction_numerical': 0.0, 'mean_word_length': 5.375565610859729, '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}}
Complete Functional Testing using Object Machines

Most software testing methods, even though they may detect some faults, can never finally assert whether the tested system is correct. This is due partly to the incompleteness of methods that merely aim to "exercise" the code; partly to the lack of a formal relationship between testing and a functional specification; and partly to the difficulty, especially in objectoriented systems, of testing systems built from many components that may together have millions of states. In this paper, we propose the Object Machine as a formal model of an object, which captures both the protocol of an object and the semantics of its methods in a way that bridges the gap between abstract mathematical specifications and the provision of tractable, concrete testing criteria. The Object Machine is an adaptation of earlier successful work on Stream X-Machines, that has been specifically developed to address formal issues unique to object-oriented systems, in particular the way in which one object depends partly upon others for its own behavioural properties, and the resulting indeterminacy of the next state decision function. Software systems conforming to Object Machine specifications may be fully functionally tested, using a hierarchical approach that guarantees the integration at each level, subject to a number of relatively non-restrictive requirements.