Skip to content

memo_viewpoints_stakeholders_concerns

SysML API

Public namespace memo::viewpoints::stakeholders_concerns
Declared package memo_viewpoints_stakeholders_concerns
Source src/viewpoints/stakeholders_concerns/memo_stakeholders_concerns.sysml

Namespace hierarchy

memo → memo::viewpoints → memo::viewpoints::stakeholders_concerns

Packages

Package
memo_viewpoints_stakeholders_concerns

Imports

Visibility Target
private ScalarValues::*
private memo_core_common::*

Declarations

Name SysML kind Description Specializes
MemoConcern concern def A concern is an interest in the system held by one or more stakeholders. concern def is the native SysML construct for it; a viewpoint frames the concerns it addresses.… —
SafetyConcern concern def Safety concern definition specializing MemoConcern. MemoConcern
UsabilityConcern concern def Usability concern definition specializing MemoConcern. MemoConcern
CybersecurityConcern concern def Cybersecurity concern definition specializing MemoConcern. MemoConcern
PerformanceConcern concern def Performance concern definition specializing MemoConcern. MemoConcern
InteroperabilityConcern concern def Interoperability concern definition specializing MemoConcern. MemoConcern
ReliabilityConcern concern def Reliability concern definition specializing MemoConcern. MemoConcern
PrivacyConcern concern def Privacy concern definition specializing MemoConcern. MemoConcern
RegulatoryConcern concern def Regulatory concern definition specializing MemoConcern. MemoConcern
ClinicalConcern concern def Clinical concern definition specializing MemoConcern. MemoConcern
MemoQualityAttribute part def Memo quality attribute definition specializing MemoPart. MemoPart
Availability part def Availability definition specializing MemoQualityAttribute. MemoQualityAttribute
Performance part def Performance definition specializing MemoQualityAttribute. MemoQualityAttribute
Security part def Security definition specializing MemoQualityAttribute. MemoQualityAttribute
Modifiability part def Modifiability definition specializing MemoQualityAttribute. MemoQualityAttribute
Testability part def Testability definition specializing MemoQualityAttribute. MemoQualityAttribute
Usability part def Usability definition specializing MemoQualityAttribute. MemoQualityAttribute
Interoperability part def Interoperability definition specializing MemoQualityAttribute. MemoQualityAttribute
MemoStakeholder part def A stakeholder holds concerns. These are the engineering and regulatory roles a viewpoint is written FOR; the clinical actors who operate the device are OperationalParticipants and are a different population.… Parts::Part
SystemArchitect part def System architect definition specializing MemoStakeholder. MemoStakeholder
SoftwareArchitect part def Software architect definition specializing MemoStakeholder. MemoStakeholder
HardwareEngineer part def Hardware engineer definition specializing MemoStakeholder. MemoStakeholder
SafetyEngineer part def Safety engineer definition specializing MemoStakeholder. MemoStakeholder
VerificationEngineer part def Verification engineer definition specializing MemoStakeholder. MemoStakeholder
RegulatoryEngineer part def Regulatory engineer definition specializing MemoStakeholder. MemoStakeholder
ProjectLead part def Project lead definition specializing MemoStakeholder. MemoStakeholder
SecurityEngineer part def Security engineer definition specializing MemoStakeholder. MemoStakeholder
PrivacyEngineer part def Privacy engineer definition specializing MemoStakeholder. MemoStakeholder
ClinicalEngineer part def Clinical engineer definition specializing MemoStakeholder. MemoStakeholder
UsabilityEngineer part def Usability engineer definition specializing MemoStakeholder. MemoStakeholder

MemoConcern

abstract concern def MemoConcern
Property Value
Description A concern is an interest in the system held by one or more stakeholders. concern def is the native SysML construct for it; a viewpoint frames the concerns it addresses.…
Kind concern def
Abstract Yes
Specializes —
Owning package memo_viewpoints_stakeholders_concerns

SafetyConcern

concern def SafetyConcern :> MemoConcern
Property Value
Description Safety concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

UsabilityConcern

concern def UsabilityConcern :> MemoConcern
Property Value
Description Usability concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

CybersecurityConcern

concern def CybersecurityConcern :> MemoConcern
Property Value
Description Cybersecurity concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

PerformanceConcern

concern def PerformanceConcern :> MemoConcern
Property Value
Description Performance concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

InteroperabilityConcern

concern def InteroperabilityConcern :> MemoConcern
Property Value
Description Interoperability concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

ReliabilityConcern

concern def ReliabilityConcern :> MemoConcern
Property Value
Description Reliability concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

PrivacyConcern

concern def PrivacyConcern :> MemoConcern
Property Value
Description Privacy concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

RegulatoryConcern

concern def RegulatoryConcern :> MemoConcern
Property Value
Description Regulatory concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

ClinicalConcern

concern def ClinicalConcern :> MemoConcern
Property Value
Description Clinical concern definition specializing MemoConcern.
Kind concern def
Abstract No
Specializes MemoConcern
Owning package memo_viewpoints_stakeholders_concerns

MemoQualityAttribute

abstract part def MemoQualityAttribute :> MemoPart
Property Value
Description Memo quality attribute definition specializing MemoPart.
Kind part def
Abstract Yes
Specializes MemoPart
Owning package memo_viewpoints_stakeholders_concerns

Availability

part def Availability :> MemoQualityAttribute
Property Value
Description Availability definition specializing MemoQualityAttribute.
Kind part def
Abstract No
Specializes MemoQualityAttribute
Owning package memo_viewpoints_stakeholders_concerns

Performance

part def Performance :> MemoQualityAttribute
Property Value
Description Performance definition specializing MemoQualityAttribute.
Kind part def
Abstract No
Specializes MemoQualityAttribute
Owning package memo_viewpoints_stakeholders_concerns

Security

part def Security :> MemoQualityAttribute
Property Value
Description Security definition specializing MemoQualityAttribute.
Kind part def
Abstract No
Specializes MemoQualityAttribute
Owning package memo_viewpoints_stakeholders_concerns

Modifiability

part def Modifiability :> MemoQualityAttribute
Property Value
Description Modifiability definition specializing MemoQualityAttribute.
Kind part def
Abstract No
Specializes MemoQualityAttribute
Owning package memo_viewpoints_stakeholders_concerns

Testability

part def Testability :> MemoQualityAttribute
Property Value
Description Testability definition specializing MemoQualityAttribute.
Kind part def
Abstract No
Specializes MemoQualityAttribute
Owning package memo_viewpoints_stakeholders_concerns

Usability

part def Usability :> MemoQualityAttribute
Property Value
Description Usability definition specializing MemoQualityAttribute.
Kind part def
Abstract No
Specializes MemoQualityAttribute
Owning package memo_viewpoints_stakeholders_concerns

Interoperability

part def Interoperability :> MemoQualityAttribute
Property Value
Description Interoperability definition specializing MemoQualityAttribute.
Kind part def
Abstract No
Specializes MemoQualityAttribute
Owning package memo_viewpoints_stakeholders_concerns

MemoStakeholder

abstract part def MemoStakeholder :> Parts::Part
Property Value
Description A stakeholder holds concerns. These are the engineering and regulatory roles a viewpoint is written FOR; the clinical actors who operate the device are OperationalParticipants and are a different population.…
Kind part def
Abstract Yes
Specializes Parts::Part
Owning package memo_viewpoints_stakeholders_concerns

SystemArchitect

part def SystemArchitect :> MemoStakeholder
Property Value
Description System architect definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

SoftwareArchitect

part def SoftwareArchitect :> MemoStakeholder
Property Value
Description Software architect definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

HardwareEngineer

part def HardwareEngineer :> MemoStakeholder
Property Value
Description Hardware engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

SafetyEngineer

part def SafetyEngineer :> MemoStakeholder
Property Value
Description Safety engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

VerificationEngineer

part def VerificationEngineer :> MemoStakeholder
Property Value
Description Verification engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

RegulatoryEngineer

part def RegulatoryEngineer :> MemoStakeholder
Property Value
Description Regulatory engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

ProjectLead

part def ProjectLead :> MemoStakeholder
Property Value
Description Project lead definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

SecurityEngineer

part def SecurityEngineer :> MemoStakeholder
Property Value
Description Security engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

PrivacyEngineer

part def PrivacyEngineer :> MemoStakeholder
Property Value
Description Privacy engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

ClinicalEngineer

part def ClinicalEngineer :> MemoStakeholder
Property Value
Description Clinical engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

UsabilityEngineer

part def UsabilityEngineer :> MemoStakeholder
Property Value
Description Usability engineer definition specializing MemoStakeholder.
Kind part def
Abstract No
Specializes MemoStakeholder
Owning package memo_viewpoints_stakeholders_concerns

Source

viewpoints/stakeholders_concerns/memo_stakeholders_concerns.sysml
// Stakeholders and concerns, as elements.
//
// ISO/IEC/IEEE 42010 gives a viewpoint three jobs: name the stakeholders,
// frame their concerns, and be what a view conforms to. MEMO used to do the
// first two with enumerations — `AudienceKind` and `ConcernKind` — which meant
// a stakeholder was a literal from a closed list of eleven and a concern was a
// literal from nine. You could tag a viewpoint with one; you could not declare
// a concern, give it an id, say who holds it, trace a requirement to it, or
// add one without editing the ontology.
//
// They are elements now. SysML v2 already models both — `ConcernDefinition`
// and `StakeholderMembership` are in the metamodel, and MEMO's grammar has
// carried `concern def`, `concern`, `frame` and `stakeholder` all along — so
// nothing new is invented here. Each carries `@MemoIdentity`, which is what
// makes it citable in a review the way every other MEMO element is.
//
// The literals they replace are kept verbatim as names, so a project reading
// `AudienceKind::safetyEngineer` finds `SafetyEngineer` and nothing is lost in
// the move.
package memo_viewpoints_stakeholders_concerns {
    private import ScalarValues::*;
    private import memo_core_common::*;

    // ─── Concerns ────────────────────────────────────────────────────────
    //
    // A concern is an interest in the system held by one or more stakeholders.
    // `concern def` is the native SysML construct for it; a viewpoint frames
    // the concerns it addresses.
    //
    // It extends the standard concern's `stakeholders` (the Parts interested in
    // it) to the MEMO stakeholder catalog, as a viewpoint does for its own.
    abstract concern def MemoConcern {
        ref memoStakeholders :>> stakeholders : MemoStakeholder[0..*];
    }

    concern def SafetyConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-1"; }
        attribute name = "Safety";
        attribute description = "Freedom from unacceptable risk of harm to the patient, the operator or a bystander.";
    }
    concern def UsabilityConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-2"; }
        attribute name = "Usability";
        attribute description = "Whether the intended user can operate the device correctly under use conditions.";
    }
    concern def CybersecurityConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-3"; }
        attribute name = "Cybersecurity";
        attribute description = "Resistance to compromise of the device, its data, or the network it participates in.";
    }
    concern def PerformanceConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-4"; }
        attribute name = "Performance";
        attribute description = "Timing, throughput and capacity against what the clinical procedure demands.";
    }
    concern def InteroperabilityConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-5"; }
        attribute name = "Interoperability";
        attribute description = "Correct exchange with the equipment and systems the device is used alongside.";
    }
    concern def ReliabilityConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-6"; }
        attribute name = "Reliability";
        attribute description = "Continuity of correct service, and behaviour on failure.";
    }
    concern def PrivacyConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-7"; }
        attribute name = "Privacy";
        attribute description = "Protection of patient and operator data through its lifecycle.";
    }
    concern def RegulatoryConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-8"; }
        attribute name = "Regulatory";
        attribute description = "Evidence a submission requires, and conformance to the standards claimed.";
    }
    concern def ClinicalConcern :> MemoConcern {
        @MemoIdentity { :>> providedId = "CNC-9"; }
        attribute name = "Clinical";
        attribute description = "Whether the device serves the clinical procedure and its intended use.";
    }

    // ─── Quality attributes ──────────────────────────────────────────────
    //
    // A concern is what a stakeholder cares about; a quality attribute is the
    // measurable property of the system through which that care is answered.
    // The SEI's separation (Bass, Clements & Kazman): "performance" as a
    // concern is a worry, and only becomes designable once it is stated as a
    // property with a stimulus, a response and a measure.
    //
    // `addressesConcerns` is the mapping, and it is many-to-many on purpose.
    // Availability answers safety AND clinical continuity; security answers
    // cybersecurity AND privacy. A quality attribute that addresses no concern
    // is one nobody asked for, and a concern with no quality attribute behind
    // it is a worry the architecture has not yet answered — both are findings
    // this mapping makes visible.
    abstract part def MemoQualityAttribute :> MemoPart {
        ref addressesConcerns : MemoConcern[*];
        /** How the property is measured — the response measure of a quality
         *  attribute scenario, stated once for the attribute. */
        attribute measure : String;
    }

    part def Availability :> MemoQualityAttribute {
        @MemoIdentity { :>> providedId = "QA-1"; }
        ref :>> addressesConcerns = (safetyConcern, reliabilityConcern, clinicalConcern);
        attribute :>> measure = "Proportion of scheduled procedure time the function is delivered, and time to recover after a fault.";
    }
    part def Performance :> MemoQualityAttribute {
        @MemoIdentity { :>> providedId = "QA-2"; }
        ref :>> addressesConcerns = (performanceConcern, clinicalConcern);
        attribute :>> measure = "Latency and throughput under the arrival pattern the procedure produces.";
    }
    part def Security :> MemoQualityAttribute {
        @MemoIdentity { :>> providedId = "QA-3"; }
        ref :>> addressesConcerns = (cybersecurityConcern, privacyConcern, safetyConcern);
        attribute :>> measure = "Resistance to a stated threat, and time to detect and recover from a compromise.";
    }
    part def Modifiability :> MemoQualityAttribute {
        @MemoIdentity { :>> providedId = "QA-4"; }
        ref :>> addressesConcerns = (regulatoryConcern);
        attribute :>> measure = "Cost and blast radius of a stated change, including the re-verification it forces.";
    }
    part def Testability :> MemoQualityAttribute {
        @MemoIdentity { :>> providedId = "QA-5"; }
        ref :>> addressesConcerns = (regulatoryConcern, safetyConcern);
        attribute :>> measure = "Probability that a fault present is revealed by the next test, and the effort to observe it.";
    }
    part def Usability :> MemoQualityAttribute {
        @MemoIdentity { :>> providedId = "QA-6"; }
        ref :>> addressesConcerns = (usabilityConcern, safetyConcern, clinicalConcern);
        attribute :>> measure = "Task success and use-error rate for the intended user under use conditions (IEC 62366-1).";
    }
    part def Interoperability :> MemoQualityAttribute {
        @MemoIdentity { :>> providedId = "QA-7"; }
        ref :>> addressesConcerns = (interoperabilityConcern, clinicalConcern);
        attribute :>> measure = "Proportion of exchanges with a named partner system that are correctly understood.";
    }

    // ─── Stakeholders ────────────────────────────────────────────────────
    //
    // A stakeholder holds concerns. These are the engineering and regulatory
    // roles a viewpoint is written FOR; the clinical actors who operate the
    // device are OperationalParticipants and are a different population.
    //
    // SysML v2 has no stakeholder definition to specialize: a stakeholder is a
    // `Part` that a concern or viewpoint lists in `RequirementCheck::stakeholders`
    // (declared with a `stakeholder` member). So the catalog is standard parts,
    // not `MemoPart`s — MemoPart's lifecycle and dimension attributes describe
    // model elements, not the people a viewpoint is written for.
    abstract part def MemoStakeholder :> Parts::Part;

    part def SystemArchitect :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-1"; :>> label = "System Architect"; }
    }
    part def SoftwareArchitect :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-2"; :>> label = "Software Architect"; }
    }
    part def HardwareEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-3"; :>> label = "Hardware Engineer"; }
    }
    part def SafetyEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-4"; :>> label = "Safety Engineer"; }
    }
    part def VerificationEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-5"; :>> label = "Verification Engineer"; }
    }
    part def RegulatoryEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-6"; :>> label = "Regulatory Engineer"; }
    }
    part def ProjectLead :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-7"; :>> label = "Project Lead"; }
    }
    part def SecurityEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-8"; :>> label = "Security Engineer"; }
    }
    part def PrivacyEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-9"; :>> label = "Privacy Engineer"; }
    }
    part def ClinicalEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-10"; :>> label = "Clinical Engineer"; }
    }
    part def UsabilityEngineer :> MemoStakeholder {
        @MemoIdentity { :>> providedId = "STK-11"; :>> label = "Usability Engineer"; }
    }

    // ─── The catalog, as usages ─────────────────────────────────────────
    //
    // A viewpoint's `memoStakeholders` and `framedConcerns`, and a quality
    // attribute's `addressesConcerns`, are features. What a feature is bound to
    // has to be a feature as well, not a definition, so each concern and each
    // stakeholder above has exactly one usage for those bindings to name.
    concern safetyConcern : SafetyConcern;
    concern usabilityConcern : UsabilityConcern;
    concern cybersecurityConcern : CybersecurityConcern;
    concern performanceConcern : PerformanceConcern;
    concern interoperabilityConcern : InteroperabilityConcern;
    concern reliabilityConcern : ReliabilityConcern;
    concern privacyConcern : PrivacyConcern;
    concern regulatoryConcern : RegulatoryConcern;
    concern clinicalConcern : ClinicalConcern;
    part systemArchitect : SystemArchitect;
    part softwareArchitect : SoftwareArchitect;
    part hardwareEngineer : HardwareEngineer;
    part safetyEngineer : SafetyEngineer;
    part verificationEngineer : VerificationEngineer;
    part regulatoryEngineer : RegulatoryEngineer;
    part projectLead : ProjectLead;
    part securityEngineer : SecurityEngineer;
    part privacyEngineer : PrivacyEngineer;
    part clinicalEngineer : ClinicalEngineer;
    part usabilityEngineer : UsabilityEngineer;
}