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:
UserandOperativeActionfor the user and the task (see Operational);HazardandRiskControlMeasurefor the risk (see Safety and risk);ValidationCaseandMemoEvidencefor summative evaluation (see Verification and validation);UIElementfor where the error happens (see Implementation).
How it connects¶
- A task is where an error is committed.
CommitsUseErrorlinks an operative action to a use error. - An error happens at an element.
ErrorAtElementlinks 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, withcauseKind = useErrorLeadsToHazard. - Usability evidence evaluates a task.
EvaluatesTasklinks evidence to the task it evaluates. - A UI element or task is tested for usability.
TestedByUsabilitylinks it to the usability test, which is a validation case, not the evidence it produces.ProducesEvidencelinks the two. - A task is validated.
Validateslinks 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¶
- The GPCA infusion pump: risk, cybersecurity, and assurance.
- The human factors API.