{'fraction_non_alphanumeric': 0.018433179723502304, 'fraction_numerical': 0.0, 'mean_word_length': 5.830188679245283, '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}}
Recovery of communications protocol design from protocol execution traces

Reverse engineering and design recovery are two important concepts for the evolutionary design of systems software. In particular, the reverse engineering of distributed software, such as communications systems, is a very challenging, practical problem. Most communications software is written without the use of formal methods and is often poorly documented. Consequently, to maintain or modify such software, relevant details of the original design need to be recovered from the executable software itself. This design recovery process, called reverse engineering, involves either static analysis of the code or dynamic analysis of the software behaviour based on selected execution traces. In this paper, we use the dynamic trace analysis approach. Specifically, based on execution traces as represented at selected points of observation, we generate a higher level design representation consisting of communicating finite state machines (CFSMs) corresponding to the protocol design and service constraints.