{'fraction_non_alphanumeric': 0.016329704510108865, 'fraction_numerical': 0.0, 'mean_word_length': 5.668393782383419, '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}}
Embedded Software Modeling and Design

The development of correct complex software for reactive embedded systems requires automated support for the verification of functional and nonfunctional properties by formal analysis or by simulation and testing. Reduced time-to-market and increased complexity also demand the reuse of components, which also brings the issue of composability of software artifacts. Currently, a language (or a design methodology) that can provide all these desirable features without incurring excessive inefficiency is not available, and a strong semantic characterization of the modeling language or separation of the concerns between the functional and the architecture-level design is the solution advocated by many. This chapter provides an overview of existing models and tools for embedded software, starting from an introduction to the fundamental concepts and the basic theory of existing models of computation, both synchronous and asynchronous. The chapter also features an introduction to commercial languages and tools such as Unified Modeling Language (UML) and Specification and Description Language (SDL), and a quick peek at research work in software models and tools, to give a firm understanding of future trends and currently unsolved issues.