From 5a5f349fac1560ed4e9e4433a632c65a63781a68 Mon Sep 17 00:00:00 2001 From: Valery Lavrov Date: Tue, 27 Oct 2026 11:52:38 +0100 Subject: [PATCH] fix(metamodel): correct QM architecture validation Require QM architecture elements to fulfil only QM requirements. The previous predicate rejected QM targets and accepted ASIL_B targets. Add production-backed regression coverage for all six requested cases, including mixed targets, exempt ASIL_B sources and empty target lists. Signed-off-by: Valery Lavrov --- src/extensions/score_metamodel/metamodel.yaml | 2 +- .../tests/rst/graph/test_arch_qm_fulfils.rst | 166 ++++++++++++++++++ 2 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 src/extensions/score_metamodel/tests/rst/graph/test_arch_qm_fulfils.rst diff --git a/src/extensions/score_metamodel/metamodel.yaml b/src/extensions/score_metamodel/metamodel.yaml index 12d39f51b..363237bf2 100644 --- a/src/extensions/score_metamodel/metamodel.yaml +++ b/src/extensions/score_metamodel/metamodel.yaml @@ -1241,7 +1241,7 @@ graph_checks: include: feat_arc_sta, logic_arc_int, logic_arc_int_op, comp_arc_sta, real_arc_int, real_arc_int_op condition: safety == QM check_all: - fulfils: safety != QM + fulfils: safety == QM explanation: An QM architecture element cannot implement ASIL requirements. # req-Id: tool_req__docs_arch_link_safety_to_req diff --git a/src/extensions/score_metamodel/tests/rst/graph/test_arch_qm_fulfils.rst b/src/extensions/score_metamodel/tests/rst/graph/test_arch_qm_fulfils.rst new file mode 100644 index 000000000..606bcec34 --- /dev/null +++ b/src/extensions/score_metamodel/tests/rst/graph/test_arch_qm_fulfils.rst @@ -0,0 +1,166 @@ +.. + # ******************************************************************************* + # Copyright (c) 2026 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +.. test_metadata:: + :id: test_metadata__arch_qm_fulfils + :partially_verifies_list: tool_req__docs_arch_link_qm_to_safety_req[version==2] + :test_type: requirements_based + :derivation_technique: requirements_based + + Checks QM logical interfaces against the architecture-to-requirement safety + rule. Single and multiple QM targets are accepted, while every ASIL_B target + is rejected, including in mixed lists. ASIL_B sources are exempt, and empty + fulfils lists remain accepted. + + +.. feat:: QM fulfilment validation feature + :id: feat__qm_fulfils + :security: NO + :safety: QM + :status: valid + :version: 1 + + Feature containing the logical interfaces and their requirement targets. + + +.. feat_req:: First QM requirement + :id: feat_req__qm_fulfils__qm_one + :reqtype: Functional + :security: NO + :safety: QM + :status: valid + :version: 1 + :valid_from: v1.0 + :satisfied_by: feat__qm_fulfils + + A QM requirement target for single and mixed fulfilment lists. + + +.. feat_req:: Second QM requirement + :id: feat_req__qm_fulfils__qm_two + :reqtype: Functional + :security: NO + :safety: QM + :status: valid + :version: 1 + :valid_from: v1.0 + :satisfied_by: feat__qm_fulfils + + A second QM requirement target for multiple-target fulfilment. + + +.. feat_req:: First ASIL_B requirement + :id: feat_req__qm_fulfils__asil_one + :reqtype: Functional + :security: NO + :safety: ASIL_B + :status: valid + :version: 1 + :valid_from: v1.0 + :satisfied_by: feat__qm_fulfils + + An ASIL_B requirement target for single and mixed fulfilment lists. + + +.. feat_req:: Second ASIL_B requirement + :id: feat_req__qm_fulfils__asil_two + :reqtype: Functional + :security: NO + :safety: ASIL_B + :status: valid + :version: 1 + :valid_from: v1.0 + :satisfied_by: feat__qm_fulfils + + A distinct ASIL_B requirement target for mixed fulfilment. + + +.. logic_arc_int:: QM interface fulfils one QM requirement + :id: logic_arc_int__qm_fulfils__one_qm + :security: NO + :safety: QM + :status: valid + :version: 1 + :included_by: feat__qm_fulfils + :fulfils: feat_req__qm_fulfils__qm_one + :expect_not: An QM architecture element cannot implement ASIL requirements. + + A QM source may fulfil a QM requirement. + + +.. logic_arc_int:: QM interface fulfils multiple QM requirements + :id: logic_arc_int__qm_fulfils__many_qm + :security: NO + :safety: QM + :status: valid + :version: 1 + :included_by: feat__qm_fulfils + :fulfils: feat_req__qm_fulfils__qm_one, feat_req__qm_fulfils__qm_two + :expect_not: An QM architecture element cannot implement ASIL requirements. + + Every target in this fulfilment list is QM. + + +.. logic_arc_int:: QM interface rejects an ASIL_B requirement + :id: logic_arc_int__qm_fulfils__one_asil + :security: NO + :safety: QM + :status: valid + :version: 1 + :included_by: feat__qm_fulfils + :fulfils: feat_req__qm_fulfils__asil_one + :expect: Parent need `feat_req__qm_fulfils__asil_one` does not fulfill condition `safety == QM`. Explanation: An QM architecture element cannot implement ASIL requirements. + + A QM source cannot fulfil an ASIL_B requirement. + + +.. logic_arc_int:: QM interface rejects every ASIL_B target in a mixed list + :id: logic_arc_int__qm_fulfils__mixed + :security: NO + :safety: QM + :status: valid + :version: 1 + :included_by: feat__qm_fulfils + :fulfils: feat_req__qm_fulfils__qm_one, feat_req__qm_fulfils__asil_one, feat_req__qm_fulfils__asil_two + :expect: + Parent need `feat_req__qm_fulfils__asil_one` does not fulfill condition `safety == QM`. Explanation: An QM architecture element cannot implement ASIL requirements., + Parent need `feat_req__qm_fulfils__asil_two` does not fulfill condition `safety == QM`. Explanation: An QM architecture element cannot implement ASIL requirements. + :expect_not: Parent need `feat_req__qm_fulfils__qm_one` + + Both ASIL_B targets are rejected without rejecting the QM target. + + +.. logic_arc_int:: ASIL_B interface is exempt from the QM source rule + :id: logic_arc_int__qm_fulfils__asil_source + :security: NO + :safety: ASIL_B + :status: valid + :version: 1 + :included_by: feat__qm_fulfils + :fulfils: feat_req__qm_fulfils__qm_one, feat_req__qm_fulfils__asil_one + :expect_not: An QM architecture element cannot implement ASIL requirements. + + An ASIL_B source with QM and ASIL_B targets is not selected by this rule. + + +.. logic_arc_int:: QM interface without fulfilment targets + :id: logic_arc_int__qm_fulfils__empty + :security: NO + :safety: QM + :status: valid + :version: 1 + :included_by: feat__qm_fulfils + :expect_not: An QM architecture element cannot implement ASIL requirements. + + An empty fulfilment list preserves the existing check_all behavior.