Algorithmic verification involves three different tasks:
( 1) requirements specification, ( 2) building executable system models, and ( 3) developing scalable algorithms both for
checking requirements and for providing diagnostics when
requirements are not met. The status for each of these tasks
is discussed below.
3. 1. 1. Requirements Specification. Requirements characterize the expected behavior of a system. They can be
expressed following two paradigms. State-based
requirements specify a system’s observable behavior by using
transition systems. Property-based requirements use a
declarative style. These requirements are expressed as sets
of formulas in a formalism such as a TL. A combination
of the two paradigms is necessary for enhanced expressiveness, such as in the PSL language. The state-based
paradigm is adequate for characterizing causal dependencies between events, e.g., sequences of actions. In contrast, the property-based paradigm is more appropriate
for global properties, e.g., liveness and mutual exclusion.
For concurrent systems, an important trend is toward
semantic variations of state-based formalisms such as Live
Sequence Charts.
17
Using TLs has certainly been a breakthrough in understanding and formalizing requirements for concurrent systems. Nonetheless, subtle differences in the formulation
of common concepts such as liveness and fairness, which
depend on the underlying time model (e.g., branching or
linear time), show that writing rigorous logic specifications
is not trivial.
Furthermore, the declarative and dense style in the
expression of property-based requirements is not always
easy to master and understand. Requirements must be
sound. That is, they must be satisfiable by some model.
In addition, they must be complete. That is, no important
information is omitted about the specified system. In contrast to soundness, which is a well-understood property
and can be checked automatically by using decision procedures, there is no consensus as to what precisely constitutes completeness in requirements specifications, nor
how to go about achieving it. Absolute completeness, which
means that specifications describe the system exactly, has
only a theoretical interest and is probably unattainable for
non-trivial systems.
Existing requirements specification formalisms are
mainly appropriate for expressing functional requirements. We lack rigorous formalisms for extra-functional
requirements for security properties (e.g., privacy), recon-figurability properties (e.g., noninterference of configurable
features), and quality of service (e.g., degree of jitter).
3. 1. 2. Building Executable Models. Successful application of verification methods requires techniques for building executable models that faithfully represent a system or
an abstraction of it. Faithfulness means that the system to
be verified and its model are related through a checkable
semantics–preserving relation. This will ensure soundness
of the model. In other words, any property that we can verify
for the model will hold for the real system. Furthermore, to
avoid errors in building models and to cope with their complexity, models should be generated automatically from system descriptions.
For hardware verification, it is relatively straightforward to generate exact logical finite-state models,
expressed as systems of boolean equations, e.g., from
RTL descriptions. This probably explains the strong and
immediate success of model checking in the area. For
software, the problem is more difficult. In contrast to
logical hardware models, we need to define formally the
semantics of the programming language. This may not be
an easy task for languages such as C or Java, as it requires
some clarification of concepts and additional assumptions about their semantics. Once the semantics is fixed,
tractable models can be extracted from real software
through abstraction. This allows us to cope with complexity of data and dynamic features. Currently, we do not
know how to build faithful models for systems consisting
of hardware and software, at the same level of detail as
for pure hardware or software. Ideally, for a system consisting of application software running on a platform, the
corresponding model could be obtained as the composition of models for the software and the platform. The
main difficulty is in understanding and formalizing the
interaction between these two types of models, in particular by taking into account timing aspects and resources
such as memory and energy. In addition, this should be
done at some adequate level of abstraction, allowing tractable models.
Today, we can specify and verify only high-level timed
models with tools such as Uppaal3 for schedulability analysis. These models take into account hardware timing
aspects and some abstraction of the application software.
The validation of even relatively simple systems such as a
node in a wireless sensor network is carried out by testing physical prototypes or by ad-hoc simulation. We need
theory, methods, and tools for modeling complex heterogeneous systems.
2 Weaknesses in the state of the art are
also seen in standards and languages for system modeling. Efforts for extending UML to cover scheduling and
resource management issues have failed to provide a
rigorous basis for this. At the same time, extensions of
hardware description languages to encompass more asynchronous execution models such as SystemC and TLM can
be used only for simulation, due to a lack of formal semantic foundations.
3. 1. 3. Scalable Verification Methods. Today we have fairly
efficient verification algorithms. However, all suffer from
well-known inherent complexity limitations when applied
to large systems. To cope with this complexity, I see two
main avenues.
The first avenue is to develop new abstraction techniques, in particular for specific semantic domains
depending on the data handled by the system and on
the properties to be verified. The convergence between
model checking and abstract interpretation16 could
lead to significant breakthroughs. These two main
algorithmic approaches, which have developed rather
independently for almost three decades, have a common foundation: solving fixpoint equations in specific
semantic domains.
Initially, model checking focused on the verification of finite state systems such as hardware or complex