Verification and validation¶
The question this discipline answers
How do we know it works, and that it is the right device?
Verification asks whether the design meets its specification: was the system built right? Validation asks whether the device meets its users' needs in its intended use: was the right system built? IEC 62304 and the design-control regulations keep the two apart, and so does MEMO. Both end in evidence, the record a reviewer or an auditor reads.
Namespace: memo::assurance::verification_validation ยท Source: src/assurance/verification_validation/
Key elements¶
Verification. A VerificationCase is a standard SysML v2 verification case.
It names what it checks as its subject, records its methodKind, and states
its acceptanceCriteria. The methods are inspection, analysis, demonstration,
test, simulation, formal proof, and model checking.
Validation. A ValidationCase checks a use case or task with users in a
clinical context. It records its validationMethod: a clinical trial, a
summative usability test, a comparative study, a benchmark test, or simulated
use. It also records who took part and the acceptance criteria.
Procedures. A TestStep is a reusable step, with its action, expected result,
and the item it refers to. A verification or validation case performs its steps
in order.
Clinical evaluation. A ClinicalEvaluation records a clinical evaluation:
its stage, the source of its clinical data, and its conclusion.
Evidence comes from Core. MemoEvidence is the record a case produces. Its
evidenceKind says what kind of record it is: a test artifact, general
evidence, a formative evaluation, a usability validation, or a security claim.
How it connects¶
- A case checks its subject. A verification case names a function,
component, or requirement as its
subject, natively. See Functional and Requirements. - A case runs a scenario. A case
performs an operative scenario, which is anaction def. See Operational. - A case performs its steps.
PerformsSteplinks a case to its test steps, in sequence. - Validation checks use.
Validateslinks a use case, task, or claim to the validation case that checks it. It is a MEMO relationship because nativeverifyrequires a requirement on the verified end, and because validation is not verification. - A case produces evidence.
ProducesEvidencelinks a case to the evidence it produced. - Usability is tested.
TestedByUsabilitylinks a UI element or task to its usability test, andEvaluatesTasklinks evidence to a task. See Human factors.
In the running example¶
A verification case checks the detection function by running the alarm-latency scenario, against an acceptance criterion of annunciation within 2 s. A summative usability test with 15 ICU nurses validates the acknowledgement task. Each produces its evidence.
action vsAlarmLatency : OperativeScenario {
@MemoIdentity { :>> providedId = "TA-VS-001"; :>> label = "AlarmLatencyScenario"; }
attribute :>> pathSummary = "Induce out-of-range temperature; measure detection-to-annunciation latency.";
}
verification vcAlarmLatency : VerificationCase {
@MemoIdentity { :>> providedId = "TA-VC-001"; :>> label = "VerifyAlarmLatency"; }
attribute :>> methodKind = MemoVerificationMethodKind::test;
attribute :>> acceptanceCriteria = "annunciation within 2 s of sustained deviation";
subject verified : Base::Anything[*] = (fnDetectDeviation);
// Native `perform`: OperativeScenario is an action def, so executing a
// scenario is the language's own perform-action, not a MEMO relation.
perform vsAlarmLatency;
}
part uvAckTask : MemoEvidence {
attribute :>> evidenceKind = EvidenceKind::usabilityValidation;
@MemoIdentity { :>> providedId = "TA-UV-001"; :>> label = "SummativeAlarmAcknowledgement"; }
attribute :>> participantProfile = "15 ICU nurses, representative shift conditions";
attribute :>> participantCount = 15;
attribute :>> acceptanceCriteria = "no critical-task failures; all alarms assessed before silencing";
}
part evLatencyReport : MemoEvidence {
attribute :>> evidenceKind = EvidenceKind::evidence;
@MemoIdentity { :>> providedId = "TA-EV-001"; :>> label = "AlarmLatencyTestReport"; }
attribute :>> evidenceType = "test report";
}
// The summative test is the validation case; uvAckTask is the record it
// produced. Validates ends at a case, never at the evidence itself.
verification valAckTask : ValidationCase {
@MemoIdentity { :>> providedId = "TA-VAL-001"; :>> label = "SummativeAlarmAcknowledgementTest"; }
attribute :>> validationMethod = ValidationMethodKind::summativeUsabilityTest;
attribute :>> userParticipation = "15 ICU nurses, representative shift conditions";
attribute :>> acceptanceCriteria = "no critical-task failures; all alarms assessed before silencing";
}
connection : Validates connect validationTarget ::> actAcknowledgeAlarm.taskAckAlarm to validationCase ::> valAckTask;
connection : ProducesEvidence connect producer ::> valAckTask to producedEvidence ::> uvAckTask;
connection : ProducesEvidence connect producer ::> vcAlarmLatency to producedEvidence ::> evLatencyReport;The full inventory¶
Generated from src/assurance/verification_validation/.
Elements¶
Clinical evaluation
| Element | SysML kind | What it is |
|---|---|---|
ClinicalEvaluation |
part def |
Clinical evaluation definition specializing MemoPart. |
Core concepts
| Element | SysML kind | What it is |
|---|---|---|
TestStep |
action def |
Test step definition specializing MemoAction. |
VerificationCase |
verification def |
Verification case definition specializing MemoVerificationCase. |
ValidationCase |
verification def |
Validation case definition specializing MemoVerificationCase. |
Connections at a glance¶
Each arrow is one relationship, from its source end to its target end. A grey box belongs to another layer.
flowchart LR
MemoVerificationCase["MemoVerificationCase"]:::other
TestStep["TestStep"]
MemoVerificationCase -->|PerformsStep| TestStep
classDef other fill:#eef1f4,stroke:#9aa7b2,color:#4a5a66
Relationships declared here¶
| Relationship | From | To | What it says |
|---|---|---|---|
PerformsStep |
MemoVerificationCase |
TestStep |
Typed relationship from MemoVerificationCase to TestStep. |
Relationships from elsewhere that reach this layer¶
None with an end typed in this layer.
Go deeper¶
- The GPCA infusion pump: risk, cybersecurity, and assurance.
- The verification and validation API.