Definition

A model is a representation, typically in a specified medium, that captures essential aspects of something found in the same or different medium. It simplifies or abstracts away less critical details while retaining the fundamental characteristics of the original entity or system.

In the context of software engineering and system design, models serve crucial roles by precisely defining requirements, reflecting domain knowledge, facilitating system design, offering a simplified perspective of complex systems, supporting evaluation and simulation, and enabling the generation of potential system configurations.

It's important to note that models are abstractions, meaning they may not fully encapsulate all constraints of the real system.

  • Reality : Refers to actual things, people, processes, and relationships in the real world.
  • Model : Represents abstractions derived from real entities, whether existing or conceptualized, along with relationships among these abstractions.
  • Interpretation : The mapping of real-world entities from to abstractions in ; this process is integral to modeling.
  • Relationships: Valid relationships existing in reality are mirrored in the model , denoted by and respectively.

During the definition of the model, two common issues could arise:

  1. Coherence: Different perspectives or views of a system within the model must be consistent and logically coherent.
  2. Variations in Interpretation and Ambiguity: It’s essential to define acceptable boundaries for different interpretations of the model.

In requirements engineering (RE), the focus is on modeling objects, people, phenomena, goals, requirements, and domain assumptions relevant to the problem at hand. For instance, in designing an aircraft braking system, one would model components like sensors, actuators, and relevant operational scenarios.

When selecting modeling tools, consider their technical capabilities and suitability for handling the complexity of system design and analysis tasks. Tools should:

  • Support: Provide adequate support for various modeling techniques (e.g., UML, SysML) used in software engineering.
  • Complexity Management: Manage the complexity inherent in large-scale systems, ensuring models remain comprehensible and usable.
  • Simulation and Validation: Offer features for simulation and validation to verify model correctness and performance predictions.
  • Integration: Facilitate integration with other tools and frameworks used across the software development lifecycle.
ToolProsCons
Natural language (e.g., Italian, English, …)Simplicity of useHigh level of ambiguity, it is easy to forget to include relevant information
Formal language (e.g., first order logic, Alloy, Z, …)Possibility to use some tool to support analysis and validation. The approach forces the user in specifying all relevant detailsYou need to be expert in the use of the language
Semi-formal language like UMLSimpler than a formal language, imposes some kind of structure in the modelsNot amenable for automated analysis, some level of ambiguity
Mixed approachUse a semi-formal language for the basics, comment and complement the semi-formal models with explanatory informal text, use a formal language for the most critical parts