Skip to content

Human factors

The question this discipline answers

Where can use go wrong?

Human factors follows IEC 62366-1 and the FDA's human factors guidance. A user performs tasks. Some tasks are critical, and while performing one a user can commit a use error. A use error can lead to a hazard. A risk control addresses the hazard, and usability validation shows, with representative users, that the design works.

Most of that chain belongs to other parts of MEMO: the user and the task are operational, the hazard and the control are safety, and the validation case is verification and validation. Human factors owns the use error, and the relationships that tie the usability argument together.

Namespace: memo::assurance::human_factors ยท Source: src/assurance/human_factors/

Key elements

Use errors. A UseError records a use error in the sense of IEC 62366-1. Its errorCategory classifies it as a perception, cognition, action, or memory and recall error. It also records its severity and the type of its root cause.

What it builds on. The rest of the chain uses elements from elsewhere:

How it connects

  • A task is where an error is committed. CommitsUseError links an operative action to a use error.
  • An error happens at an element. ErrorAtElement links a use error to the design element it occurs at, such as a UI element. It is declared in the UI package.
  • An error can lead to a hazard. Causes, with causeKind = useErrorLeadsToHazard.
  • Usability evidence evaluates a task. EvaluatesTask links evidence to the task it evaluates.
  • A UI element or task is tested for usability. TestedByUsability links it to the usability test, which is a validation case, not the evidence it produces. ProducesEvidence links the two.
  • A task is validated. Validates links a task to the validation case that checks it.

In the running example

The use error is silencing the alarm without assessing it, a memory and recall error with serious severity. It is committed during the acknowledgement task, and it leads to the hazard of an undetected deviation.

part ueSilenceAndForget : UseError {
    @MemoIdentity { :>> providedId = "TA-UE-001"; :>> label = "SilenceWithoutAssessment"; }
    attribute :>> errorCategory = UseErrorCategoryKind::memoryRecall;
    attribute :>> severity = SeverityKind::serious;
}
item hzUndetectedDeviation : Hazard {
    @MemoIdentity { :>> providedId = "TA-HZ-001"; :>> label = "UndetectedTemperatureDeviation"; }
    attribute :>> hazardType = HazardTypeKind::informationError;
    attribute :>> severity = SeverityKind::serious;
    attribute :>> foreseeable = true;
}
part rcReAnnunciate : RiskControlMeasure {
    @MemoIdentity { :>> providedId = "TA-RC-001"; :>> label = "AutoReAnnunciationAfterSilence"; }
    attribute :>> controlKind = RiskControlKind::alarm;
    attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
}
connection : CommitsUseError connect task ::> actAcknowledgeAlarm.taskAckAlarm to useError ::> ueSilenceAndForget;

The full inventory

Generated from src/assurance/human_factors/.

Elements

Core concepts

Element SysML kind What it is
UseError part def Use error definition specializing MemoPart.

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
  OperativeAction["OperativeAction"]:::other
  UseError["UseError"]
  MemoEvidence["MemoEvidence"]:::other
  anyElement["any element"]:::other
  MemoVerificationCase["MemoVerificationCase"]:::other
  MemoPart["MemoPart"]:::other
  OperativeAction -->|CommitsUseError| UseError
  MemoEvidence -->|EvaluatesTask| OperativeAction
  anyElement -->|TestedByUsability| MemoVerificationCase
  UseError -->|ErrorAtElement| MemoPart
  classDef other fill:#eef1f4,stroke:#9aa7b2,color:#4a5a66

Relationships declared here

Relationship From To What it says
CommitsUseError OperativeAction UseError Typed relationship from OperativeAction to UseError.
EvaluatesTask MemoEvidence OperativeAction Typed relationship from MemoEvidence to OperativeAction.
TestedByUsability any element MemoVerificationCase Typed relationship from any element to MemoVerificationCase.

Relationships from elsewhere that reach this layer

Relationship Declared in From To What it says
ErrorAtElement implementation UseError MemoPart Typed relationship from UseError to MemoPart.

Go deeper