{'fraction_non_alphanumeric': 0.03165829145728643, 'fraction_numerical': 0.008040201005025126, 'mean_word_length': 5.506535947712418, '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}}
Formal Modeling of Software Architectures at Multiple Levels of Abstraction

Software architectures are multi-dimensional entities that can be fully understood only when viewed and analyzed at four different levels of abstraction: (1) internal functionality of a component, (2) the interface(s) exported by the component to the rest of the system, (3) interconnection of architectural elements in an architecture, and (4) rules of the architectural style. This paper presents the characteristics of each of the four levels of architectural abstraction, outlines the kinds of analyses that need to be performed at each level, and discusses the kinds of formal notations that are suitable at each level. We use the pipe-and-filter and Chiron-2 (C2) architectural styles as illustrations. In particular, we present formal models of C2 at the last three levels of abstraction as a first step in enabling a C2 design environment to perform the necessary analyses of architectures. We discuss the benefits of the formal definitions and our experience to date. 1 INTRODUCTION Software architectural styles, such as Unix's pipe-and-filter style or AI's blackboard architectures, are key design idioms [9][23]. Software development based on common architectural idioms has its focus shifted from lines-of-code to coarser-grained architectural elements (software components, connectors, etc.) and their overall interconnection structure. Development tools that operate on architectural specifications are as important as tools that work on individual components. In particular, architectural design environments [5][7] can provide a platform on which designers can construct an architectural model of a software system, have that model checked for syntactic and semantic correctness, receive domain-specific feedback about various design qualities, keep track of unfinished steps in the design process, and generate running programs for that system, while preserving the properties of the model [20].