{'fraction_non_alphanumeric': 0.021933387489845652, 'fraction_numerical': 0.0, 'mean_word_length': 5.88268156424581, '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': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Reverse Engineering Abstract Components for Model-Based Development and Verification of Embedded Software

Model-driven development (MDD) and verification approaches are highly desirable in the development of (safety-critical) embedded systems, since they help to identify functional or non-functional issues from the early development stage when verification complexity is relatively lower than that of the implemented systems. Nevertheless, MDD approaches have not been widely adopted in practice mainly due to the difficulty and high initial cost of switching the development paradigm from code-centric to model-driven. This work presents a systematic method for reverse engineering abstract models from embedded codes using the notion of abstract components which act as independent units of development, validation, and verification. The recursive reverse engineering process constructs high-level abstract components from low-level ones using synchronized abstraction and projection abstraction, defined w.r.t. the information on port dependency and port bindings. This approach is demonstrated with reverse-engineered TinyOS, where each abstract component is validated and verified using model simulation and model checking.