1. Introduction#

Reactis helps engineers build better software faster by automating many verification and validation tasks in a model-based design process.

Over the past decades, many engineering organizations have deployed model-based design to address the exploding complexity of embedded control software. In model-based design, executable visual models of embedded control software are developed in advance of system implementation. The models may be used to drive the development of control software, and may also serve as a basis for software and system testing. One benefit of model-based design is that it allows engineers to begin debugging and validation activities at design time, when the cost of detecting and dealing with design defects is much smaller than at the software and system implementation level. Another is that models may be used as a baseline for assessing implementation behavior during system testing and validation. For these reasons, judicious use of modeling can lead to quite dramatic over-all reductions in the cost of control-system development, especially when robust tool support is available.

The Reactis tool suite of Reactive Systems, Inc., substantially enhances the gains organizations realize from model-based design by automating many testing and validation activities. Reactis works with models implemented in the Simulink/Stateflow notation offered by MathWorks. Using Reactis, engineers may:

  • generate tests from a model that thoroughly exercise the model (structural testing);

  • find runtime errors (e.g. overflow errors, divide-by-zero errors) in a model;

  • execute the model and track coverage (e.g. MC/DC);

  • perform functional tests to check whether or not a model can violate its requirements;

  • use a Reactis test suite as an oracle to check whether code conforms to a model.

Reactis also includes an array of sophisticated model debug features (e.g. breakpoints, scopes, reverse execution). In this paper, we discuss how Reactis and model-based design may be used to automate different verification and validation activities in your software quality assurance process. In particular, we show how the tool may be used to develop more robust models, how it can streamline software and system testing, and how it may be used to support the reverse-engineering of models from legacy code.