Skip to content

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 an action def. See Operational.
  • A case performs its steps. PerformsStep links a case to its test steps, in sequence.
  • Validation checks use. Validates links a use case, task, or claim to the validation case that checks it. It is a MEMO relationship because native verify requires a requirement on the verified end, and because validation is not verification.
  • A case produces evidence. ProducesEvidence links a case to the evidence it produced.
  • Usability is tested. TestedByUsability links a UI element or task to its usability test, and EvaluatesTask links 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