# A Methodology for the Design of Application-Specific Cyber-Physical Social Sensing Co-Simulators
## 2 State of the Art
### Previous Phase: Final Users' Requirements and Characteristics Capture  
Many works have studied the requirements that co-simulation tools should fulfill in order to operate correctly and efficiently [25; 30]. However, in application-specific tools, most of these generic requirements could be inapplicable and other needed characteristics may not be considered. Moreover, the interaction with final users may be complicated and very time consuming if an ordered process is not followed. Furthermore, not only traditional requirements (such as the tool's accuracy) should be considered. In particular, characteristics of the development team, final users' education and the type of simulations to be performed should be defined.  
In this previous phase, software designers and final users should meet and stablish the requirements the new simulation tool should fulfill, and other important characteristics. Four important thematic blocks must be addressed: technical requirements, application requirements and characteristics, development team characteristics and final user characteristics.  
In respect to technical requirements, all of them may be associated to one property among the following four [25]:  
* Flexibility. The adaptation level of the proposed solution to new usages, utilization modes, technological instruments, etc. must be determined. For example, if required, the simulator should be able to be applied to new scenarios.
* Modularity. Depending on the expected use for the co-simulator, the tool should include several modules independently handled. For example, if applying many changes in the simulator structure during its operation is desirable, modules and components should be easily added and removed without affecting any other part of the tool (total modularity).
* Scalability. The upper limit for the simulation scenario complexity should be defined. For example, the maximum admissible number of agents in a particular scenario, or the level of complexity of the agent's behavior should be determined.
* Accuracy. Users should be able to select the desired accuracy level. For example, users must indicate the maximum time without updating the simulation (which allows calculating the required time step at the implementation stage, see Section 3.4)  
Figure 2: Scheme of the proposed methodology.  
Requirements about flexibility and modularity refer to the programming structure of the co-simulator. In particular, they indicate the implemented level of openness with the co-simulator. Scalability implies that the resulting co-simulator should be able to simulate future scenarios. Finally, accuracy enables users to configure the simulations according to particular configuration parameters.  
In respect to application requirements, they also match the previously presented properties. Finally, characteristics related to the application scenario, the development team and final users should be considered. Relevant information about these topics should be discussed among designers and final users, in order to adapt the new simulation tool to the specific context. Table 5 presents some basic characteristics which should be considered, although others could be added.  
The first and third steps allow generating co-simulators which fulfil flexibility requirements. Co-simulation paradigms and coordination mechanisms are open solutions which allow easily modifying the programming of the co-simulator. Second step is designed to meet modularity and scalability requirements. The simulation model and the simulation lifecycle can be modified, extended or reduced in an independent way, and according to the users' needs. Finally, accuracy requirements are mainly supported by the fourth step. An appropriate graphic interface must enable users to configure the simulations. Relevant characteristic may affect all steps in the methodology.  
The next subsections describe deeply the four main steps of the proposed methodology.