We thus require a computer program that models the software design dynamics, including interactions among developers in the face of requirements and design changes. In the simulation a software system is represented as:
Functional requirements in the simulation correspond to the functional requirements for a real software system. Design parameters in the simulation correspond to design decisions made in the implementing the software. Connections among functional requirements and design parameters in the simulation correspond to change dependencies within the software. Connections from functional requirements to the design parameters in the simulation correspond to "traceability" connections in the software, which show which design parameters are involved in satisfying each functional requirement. Modules in the simulated system correspond to modules in the software, where a module aggregates a set of design decisions. Each simulated module system is assigned to a simulated developer. A connection has a probability distribution. A functional requirement or design parameter is in one of two states: stable or unstable. Stable states model to situations in a real system where there are no demands to change the element; unstable states, situations in which there are demands for change. The probability distribution is sampled within the "inner loop" of a simulation to determine the likelihood that an element that is unstable in one iteration of the loop results in the connected element being in an unstable state in the next iteration.
A simulation is set up by establishing a set of functional requirements, of design parameters, connections within and between these sets, a set of modules and associate developers, and by selecting an initial configuration of stable and unstable elements. The simulation system has to have a mechanism whereby a simulation is set up. An execution of a simulation progresses in an iterative manner. In each iteration, instabilities are propagated across dependencies according to specified probability distributions. A simulation run ends when all elements are in stable states. It should be possible to run a given simulation multiple times, e.g., for purposes of Monte-Carlo simulation. A simulation runs in a distributed fashion, with each "module" assigned to a separate workstation computer. All workstations are synchronized, in that each displays the state of the simulated system and assigned module at the beginning of each iteration. Various relevant data should be collected and displayed during and at the end of a simulation, including the number of instabilities that occurred in each module and in the system in each iteration and over the course of the simulation, and the number of instabilities that occurred in each design parameter and functional requirement over the course of the simulation.
Skill building: In your implementation, please use advanced Java support for distributed systems.
Cycle: A simulated time interval during which DPs and FRs can be changed, either due to changes input by a Developer, or changes caused by a Dependency on a Design Parameter, or Functional Requirement.
Dependency: A directed arc connecting two nodes, it represents the probability that a change in the source will result in a change in the destination.
Design Parameter (DP): Represents a design decision made in support of a Functional Requirement. It is represented as a node in a directed graph. The edges in the graph represent the coupling between a DP and other DPs with dependent aspects. Each DP is dependent on one or more Functional Requirements which are supported by the DP. Each DP may be dependent on one or more other DPs, and multiple DPs may be dependent on a common DP. There shall be at most 100 Design Parameters.
Functional Requirement (FR): Represents a functional requirement in the simulated software project. It is represented as a node in a directed graph. Each edge in this graph represents a Dependency that exists in the project. FRs can be connected to other FRs or to Design Parameters. One Functional Requirement may be dependent on one or more other FRs, and in turn multiple FR's may be dependent on a common FR. There will be at most 10 functional requirements.
Modification Phase: A period between the receipt of a graph by a Workstation, and the submission of changes to the Module to the Simulator. During this interval, the Developer can introduce changes to any Design Parameter in her Module.
Propagation: The process whereby a change in a node is transmitted to, and only to, adjacent nodes. The probability of propagation is calculated as the sum of all unstable nodes adjacent to a destination node. State of the destination node is Stable if a random number (0..1) is greater than Probability of Propagation, Unstable otherwise.
Simulation: A representation of the current state of the Functional Requirements, Design Parameters, and Dependencies, and Modules.
Stabilization Phase: The period between the submission of changes to the Simulator and the receipt of a stabilized graph from the Simulator. During this interval, the Simulator sends updated information to each Developer indicating the state of the project after each Cycle.
Workstation: A physical computer which is used to display data and accept input for a single Module (the entire set of FRs is considered to be another module - it needs to be displayable and editable).
Each workstation shall display a similar graphical representation of DPs and FRs and their dependencies.
Each workstation shall show stable DPs and FRs in Green, unstable DPs and FRs in Red.
To focus the Prototype on these critical issues several simplified assumptions were established:
This results in the following Prototype requirements:
Simulator Display |
Workstation Display Detail Mode | Workstation Display Aggregate Mode |
Simulator Display |
Workstation Display Detail Mode | Workstation Display Aggregate Mode |