A DASA (Dimensional Analysis for Software Architecture) evaluation of the Self-Adaptive Service Register Platform for Urban Environments (SASR Platform), the federated peer-to-peer service register for smart-city IoT infrastructure introduced by Cabrera and Clarke. Each gateway runs its own MAPE-K autonomic manager over a local register, and the federation exposes a unified discovery surface with no central directory. This repository reads that architecture through three perspectives (Components, Deployment, Network), solves each one three independent ways (analytical, computational, dimensional), and asks whether a dimensionless reading can detect the need to adapt and name the part of the architecture under stress.
Read in this order:
- docs/case-study.md - what the system is: architecture, the three perspectives, the scenarios, the parameters.
- docs/procedure.md - how the study runs: the DASA method, the coefficients and their bounds, and what each notebook does.
- docs/report.md - what it found: the modelling derivation, the detection verdicts, the cross-validation, and the threats to validity.
Python 3.12 or newer.
The queueing solvers are not pure Python:
- A Java runtime, 17 or newer. The LINE solver runs on the JVM.
- LQN Solvers v5.32 or newer, with
lqnsandlqsimonPATH. These are needed for the layered queueing network in the Deployment perspective, used by notebooks 01 to 04. They are distributed as binaries, not as a Python package.
PyDASA is not on public PyPI. Install it from source first:
pip install "git+https://github.com/DASA-Design/PyDASA.git@v0.7.1"pip install -r requirements.txtRun the notebooks in numerical order:
jupyter labOr headless:
jupyter nbconvert --to notebook --execute --inplace 01-analytic.ipynbEach method also has a command-line entry point:
python -m src.methods.analytic --all
python -m src.methods.stochastic --all --confidence
python -m src.methods.dimensional --allThe notebooks ship with their outputs, so every figure and number can be read without
running anything. data/results/ is regenerated rather than tracked; run the notebooks to
produce it.
Note that 02-stochastic.ipynb is the slow one, since it runs three scenarios plus a
ten-replication confidence analysis through the simulation engines.
pytest tests/249 tests, no skips.
├── 01-analytic.ipynb closed-form solve of the three perspectives
├── 02-stochastic.ipynb simulation, plus confidence bands
├── 03-dimensional.ipynb the DASA coefficient overlay
├── 04-yoly.ipynb design-space coefficient clouds
├── 05-search.ipynb proactive early-warning detection search
├── 06-comparison.ipynb cross-validation across methods
├── docs/ case study, procedure, report, figures
├── src/
│ ├── methods/ per-method orchestrators with CLI entry points
│ ├── perspectives/ Components, Deployment, Network
│ ├── analytic/ closed-form queueing solvers
│ ├── stochastic/ simulation helpers and confidence intervals
│ ├── dimensional/ PyDASA schema, coefficients, detection search
│ ├── line/ LINE solver adapters (flat and layered)
│ ├── view/ plotting
│ ├── io/ configuration and result loaders
│ └── utils/ shared helpers
├── data/
│ ├── config/ the single source of truth for every parameter
│ ├── reference/ ground-truth anchors and thresholds
│ ├── results/ regenerated by the notebooks (not tracked)
│ └── img/ generated figures, png and svg
└── tests/ mirrors src/
GPL-3.0. See LICENSE.