Specification and Description Language
The Specification and Description Language (SDL) is a formal, object-oriented language standardized by the International Telecommunication Union (ITU-T) for the unambiguous specification and description of the behavior of complex, real-time, reactive, and distributed systems, with a primary focus on telecommunications but applicable to other domains.[1] It employs a graphical notation based on communicating extended finite state machines (EFSMs) to model system structure, data types, communication via signals and channels, and dynamic behavior through processes and procedures.[2] Developed to support the full lifecycle from requirements analysis to implementation and testing, SDL emphasizes precision, reusability, and verifiability in specifying concurrent, event-driven applications.[3] SDL's origins trace back to 1972 within the ITU-T's predecessor, the CCITT, where a working group began developing formal description techniques for telecommunication systems.[3] The first version was outlined in 1976 and formally defined in ITU-T Recommendation Z.100 in 1980, with subsequent revisions in 1984, 1988, 1992 (introducing object-oriented features like inheritance and encapsulation), 1996, and 1999 (SDL-2000, which enhanced the data model and agent concepts).[2] Further updates in 2010 (SDL-2010, removing exceptions and adding input mechanisms like "input via gate"), 2016, 2019, and the latest in June 2021 have refined its semantics, static structure, and integration with other standards.[1] The language is defined across the ITU-T Z.100–Z.109 series of recommendations, ensuring a consistent framework for formal description techniques (FDTs).[4] At its core, SDL organizes specifications hierarchically: a system comprises interconnected blocks, each containing processes (active agents modeling behavior) and procedures (reusable subroutines), with data defined using abstract data types (ADTs) or ASN.1.[3] Communication occurs asynchronously through signals sent over channels, supporting distributed architectures without shared memory.[2] Its strengths include formal semantics for simulation, verification, and code generation; graphical and textual representations for clarity; and scalability for large-scale systems, making it highly testable and portable across tools from vendors like Telelogic (now part of IBM) and others.[3] SDL integrates well with complementary ITU-T languages such as Message Sequence Charts (MSC) for scenario description, ASN.1 for data encoding, and TTCN-3 for testing.[2] SDL has been widely adopted in telecommunications for protocol design and system verification, underpinning standards like SS7 and GSM.[5] Beyond telecom, it applies to embedded systems in aviation (e.g., flight control), railway signaling, medical devices, and industrial automation, where reliability and real-time constraints are critical.[2] Its evolution continues through the SDL Forum Society, which promotes research, tool development, and conformance testing to maintain relevance in modern software engineering practices.[2]Introduction
Definition and Purpose
Specification and Description Language (SDL) is an object-oriented, formal language standardized by the International Telecommunication Union—Telecommunication Standardization Sector (ITU-T) in Recommendation Z.100, designed for specifying and describing complex, event-driven, real-time, and interactive systems, particularly in telecommunications.[6][3] It enables the unambiguous modeling of system behavior, architecture, and data through precise constructs that support reactive environments with asynchronous communication via discrete signals.[6] Initially developed in the 1970s by a CCITT study group comprising telecommunications experts from companies like Ericsson and Motorola, SDL addressed the need for reliable protocol design in increasingly complex networks.[3] The primary purposes of SDL include the specification of communication protocols and system architectures, validation of designs through simulation and formal verification, and the automatic generation of executable code from models.[6][3] By focusing on reactive systems—where components respond to external events rather than executing in a strictly sequential manner—SDL facilitates the description of distributed and concurrent processes, making it suitable for applications requiring high reliability and performance.[6] Key benefits of SDL stem from its formal semantics, which allow for rigorous verification to detect inconsistencies early in the design process, and its graphical notation, which enhances readability and communication among stakeholders without sacrificing precision.[3] Additionally, its inherent support for concurrency and distribution enables efficient modeling of parallel activities and inter-system interactions, reducing errors in large-scale implementations.[6][3]Historical Development
The Specification and Description Language (SDL) originated from research efforts initiated by the International Telegraph and Telephone Consultative Committee (CCITT, now known as ITU-T) in 1972, specifically aimed at providing a formal method for specifying telecommunications protocols and systems. This work addressed the need for unambiguous description of complex, event-driven systems in the telecommunications domain, building on earlier ITU studies from 1968 on stored program control switching systems. The first formal version of SDL was published in 1976 as part of the CCITT Recommendations in the Z.100 series, appearing in the so-called Orange Book edition and establishing a basic graphical notation for system behavior.[3][7][8] SDL underwent major revisions aligned with CCITT/ITU-T plenary assemblies, reflecting evolving needs in system specification. The 1980 Yellow Book edition introduced formal semantics for processes, enhancing the language's ability to model dynamic behavior. The 1984 Red Book further advanced SDL by incorporating abstract data types, allowing for more structured data handling and algebraic specifications. The 1988 Blue Book (SDL-88) focused on process-oriented enhancements, including improved support for concurrency, system composition, and remote procedures, which facilitated the development of effective simulation and validation tools. The 1992 revision (SDL-92) introduced object-oriented features such as inheritance and encapsulation. The 1996 revision expanded the language and simplified interfacing with other tools.[9][10][11][2] The late 1990s marked a pivotal shift in SDL's paradigm, with the 1999 edition (SDL-2000) further enhancing the object-oriented features with agents, polymorphism, and a more comprehensive object model, moving toward more modular and reusable designs; this version received minor updates in 2007 for compatibility. SDL-2010, approved in 2010 and last revised in 2021, refined these elements by removing exception handling, adding input mechanisms such as "input via gate," improving formal semantics, and enhancing integration with other ITU-T languages and support for distributed systems, without introducing major new constructs.[12][2][13] Key influential events in SDL's development include its widespread adoption in European Telecommunications Standards Institute (ETSI) specifications for protocol design and validation, starting in the 1980s and continuing through standards like the Intelligent Network Application Protocol. In the 1990s, SDL was integrated with Message Sequence Charts (MSC, standardized in ITU-T Z.120 in 1992 and revised in 1996), enabling complementary use for scenario-based and state-based modeling in telecommunications applications.[14][15] As of 2025, SDL-2010 remains the active ITU-T standard, with only minor errata issued since its 2021 revision and no major new version announced, sustaining its role in maintaining legacy telecommunications infrastructure while supporting modeling in modern distributed and reactive systems, such as embedded and high-performance computing environments.[12][2][16]Language Fundamentals
Graphical Notation
The graphical notation of the Specification and Description Language (SDL), also known as SDL/GR, provides a formal, visual representation for specifying the structure and behavior of complex, real-time systems, particularly in telecommunications. Standardized by the ITU-T, this notation uses distinct symbols to model system hierarchies, communication pathways, and dynamic processes, enabling unambiguous descriptions that complement the textual form.[1] Core graphical elements include block diagrams for capturing system structure, process graphs for depicting behavior, and symbols for signals and channels to illustrate communication. Block diagrams outline the static organization, showing how the system decomposes into subsystems, while process graphs represent extended finite state machines that define operational dynamics. State transition diagrams, embedded within process graphs, detail how processes respond to inputs and evolve through states. Additionally, data elements in diagrams reference Abstract Syntax Notation One (ASN.1) types to specify message contents precisely.[3] Specific symbols standardize the notation: rectangles denote blocks, representing modular components that encapsulate processes and channels; rounded rectangles indicate states within a process, marking points where the process awaits stimuli; dashed arrows symbolize signals, depicting asynchronous messages routed between processes; and solid lines represent channels, defining pathways for signal transmission across blocks. These symbols support hierarchical decomposition, where blocks can nest to form larger architectures, and integrate with ASN.1 notations for structured data visualization in signal definitions.[17] The graphical notation offers advantages such as intuitiveness for engineers familiar with diagrammatic modeling, facilitating quick comprehension of system overviews without delving into code. It enables hierarchical decomposition for managing complexity in large-scale designs and integrates seamlessly with computer-aided tools for editing, validation, and simulation, reducing errors in specification.[3] For example, a simple block-process hierarchy might depict a system block named "ControlUnit" as a rectangle containing two subprocess blocks—"InputHandler" and "OutputManager"—connected by a solid-line channel labeled "DataFlow." Within "InputHandler," a process graph shows a rounded rectangle for the initial "Idle" state, from which a dashed arrow labeled "ReceiveSignal" transitions to a "Processing" state upon signal input, illustrating basic structural and behavioral integration.Textual Notation
The textual notation of SDL provides a linear, programmatic representation of specifications as an alternative to its graphical form, enabling precise, machine-readable descriptions of system structures and behaviors. Defined in ITU-T Recommendation Z.100, this notation follows a formal concrete syntax expressed in extended Backus-Naur Form (EBNF), which outlines the grammar for elements such as agent types and diagrams.[1] Key keywords structure the language, including SYSTEM for top-level system types, BLOCK for modular subsystems, PROCESS for concurrent entities, STATE for behavioral states, INPUT and OUTPUT for signal handling, and SIGNAL for communication primitives.[1] For instance, a basic process declaration might appear as:This syntax ensures unambiguous parsing while mirroring the hierarchical organization of SDL models.[1] Central to the textual notation are syntactic elements for declarations, transitions, and procedures, all grounded in the formal grammar of Z.100. Data type declarations use keywords like SYNONYM to define aliases (e.g.,PROCESS example_process; DCL variable INTEGER; STATE initial_state; INPUT signal1; TASK variable := 1; ENDPROCESS;PROCESS example_process; DCL variable INTEGER; STATE initial_state; INPUT signal1; TASK variable := 1; ENDPROCESS;
SYNONYM mytype INTEGER;) and DCL for variables (e.g., DCL counter INTEGER;).[1] Transitions within states employ TASK for actions, such as assignments or informal text (e.g., TASK counter := counter + 1;), and DECISION for conditional branches (e.g., DECISION; IF condition THEN alternative1 ELSE alternative2 ENDIF;).[1] Procedures are specified with the PROCEDURE keyword, supporting parameters and remote calls (e.g., PROCEDURE compute (IN param INTEGER) RETURNS result INTEGER;), and integrate with the abstract syntax notation defined in Annex F of Z.100 for type expressions and specializations.[1] The notation also accommodates ASN.1 integration for advanced data types, using operators like mkstring for bitstrings.[1]
Conversion between graphical and textual notations is bidirectional, with rules in Appendix III of Z.100 facilitating transformations—such as replacing graphical references with textual definitions—primarily supported through SDL tools for programmatic generation and editing.[1] While the textual form excels in precision for formal verification and automated analysis due to its parseable structure, it can be less intuitive for visualizing complex hierarchies compared to diagrams.[1] Limitations include the absence of direct support for parallel transitions in processes and restrictions on instantiating abstract types, enforcing sequential semantics.[1] As of the latest ITU-T Recommendation Z.100 (06/2021), the textual notation aligns with SDL-2010 semantics, excluding deprecated features like exceptions.[1]