Modeling and simulation based system development requires a series of steps of transformation. In each step a model is transformed into another one. The new model is usually in another formalism at a lower level of abstraction. This takes the original design along the way from a very abstract model (derived from user requirements) to the simulation model and eventually, application code.
Figure 1.2 illustrates the system development process and the different transformations involved in it. Usually, a user (the designer of a system) starts from an existing formalism, and defines his/her own model based on the syntax and semantics of that formalism. However, in case no existing formalism is suitable to specify the system, the user may define a meta-model with a meta-modeling tool, such as AToM, and further design the model with the formalism defined by that meta-model.
After the ``model design'' phase, which requires manual work of the designer, automatic transformations can be done to obtain different models for various purposes. Tools can be used to check the correctness of the model. Those tools actually generate checking models, which give the designer such information as reachable states, deadlocks and reactiveness to every possible event in every state. The designer has to modify the model if potential errors are found in the checking. This is much easier than the debugging in the traditional development process, where code is written and debugged manually.
Tools that generate simulation models enable simulation of the model. Simulating a model requires detailed information about the model execution. If this information is not given in the original model, it must be added at the time when the simulation models are generated. Executable formalisms, such as statecharts and DEVS, allow to fully specify this information in the models. Interpreters of such formalisms are thus able to simulate the original designs. Simulation can be used to increase confidence in the correctness of the model. Commonly, simulation is used to calculate performance metrics. These can be used to tune model parameters to satisfy system performance requirements.
Another kind of tools take the original models as input and generate executable code. The code is optimized and efficient, but usually platform-dependent. Its execution does not require the support from an underlying environment, as simulation does. The purpose of this code generation is to maximize performance and to release the well-developed system to the end-users, who are not interested in the model design.