ASSL Autonomic System Specification Language

ASSL Intro
ASSL Tiers
   » AS
   » ASIP
   » AE
ASSL Tools
Contact Info


ASSL Tools

click image to enlarge The ASSL framework provides a toolset allowing ASSL specifications to be edited and validated and Java code to be generated. The data flow diagram shows how the ASSL toolset processes specifications of autonomic systems. The following elements describe the steps of the ASSL code generation process:

  1. At system load time, the ASSL framework toolset loads into memory the BNF(1) parsing table for the ASSL grammar. Alternatively, we can use at runtime the ASSL Grammar Compiler to build that parsing table.
  2. The user uses the toolset GUI to enter the ASSL specification in question and to start the compilation-generation process.
  3. The ASSL scanner gets the ASSL specification text and translates the latter into a stream of tokens.
  4. The ASSL pre-parser gets the stream of tokens from the scanner and performs special pre-parsing token-consolidation operations on these tokens. In addition, the pre-parser works on the token stream to perform a declarative evaluation of the ASSL specification and construct the initial declarative specification tree.
  5. The ASSL parser uses the consolidated tokens outputted from the pre-parser together with the SLR(1) parsing table structures (DFAs, First and Follow sets) to parse the ASSL specification. While parsing, the parser prompts on every shift and reduce parsing operation the code generator to generate intermediate code. The parser adds the latter to the nodes of the declarative specification tree (generated by the pre-parser).
  6. The ASSL consistency checker uses the declarative specification tree with embedded intermediate code to check the consistency of the ASSL specification against the semantic definitions for consistency checking.
  7. The ASSL Java code generator uses the declarative specification tree (already validated by the consistency checker) with embedded intermediate code to apply the code generation rules and generate the Java classes of the Java application skeleton for the ASSL specification under consideration.


ASSL is a software engineering approach helping to create reliable software that maximizes the probability of satisfying user expectations. This is possible because the framework toolset provides verification mechanisms for automatic reasoning about a specified AS. The base validation approach in ASSL comes in the form of consistency checking. The latter is a mechanism for verifying ASSL specifications by performing exhaustive traversal to check for both syntax and consistency errors (type consistency, ambiguous definitions, etc.). In addition this mechanism checks whether a specification conforms to special correctness properties, defined as ASSL semantic definitions. Although considered efficient, the ASSL consistency checking mechanism cannot handle logical errors (specification flaws) and thus, it is not able to assert safety (e.g., freedom from deadlock) or liveness properties. Thus, a model checking validation mechanism able to handle such errors is under development. The following approaches are currently in consideration:

  • ASSL generates operational Java code, which is used to perform a sort of post-implementation model checking by employing the Java PathFinder tool, developed at NASA Ames.
  • ASSL specifications are translated to another formal notation that supports model checking.
  • ASSL specifications are translated into special state-transition systems where a built-in model checking mechanism checks whether a specific property in question is satisfied if and only if the original ASSL specification satisfies that property.
To allow post-implementation software verification with the ASSL framework, we are currently developing a novel test-generator tool based on change-impact analysis that will help the ASSL framework automatically generate high-quality test suites for self-managing policies.

Code Generation

An ASSL specification only describes an AS solving a particular problem, i.e., it is not itself an implementation. However, from any valid specification, ASSL can generate an operational Java application skeleton. Code generation is the most complex activity taking place in the ASSL framework. In general, it is about mapping validated ASSL specifications to Java classes. Note that ASSL generates fully-operational multithreaded event-driven applications with embedded messaging. Due to the synthesis approach of automatic code generation, ASSL guarantees consistency between a specification and the corresponding implementation. Moreover, it helps software engineers to make a smooth leap from an AS specification to a particular implementation and saves time when reimplementation is needed due to changes in the specification.


Website Curator - Emil Vassev
Last modified on March 26, 2010