Skip to content

Commit 6767751

Browse files
committed
feat: add requirement reference-coverage pie charts and 'Referenced by' column
Add per-requirement reference-coverage pie charts to the platform verification report, showing how many requirements are referenced by at least one lower-hierarchy requirement (stakeholder <- feature requirement, feature requirement <- component requirement). Only references within the report version scope are counted. Component requirements have no lower level, so no chart is generated. The stakeholder and feature requirement tables gain a 'Referenced by' column (derived_from_back) listing referencing requirements.
1 parent 242625d commit 6767751

1 file changed

Lines changed: 57 additions & 4 deletions

File tree

‎src/needs_templates/platform_verification_report.need‎

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,23 @@
104104
Stakeholder Requirements
105105
------------------------
106106

107+
{#- Reference coverage: a stakeholder requirement is "referenced" when at least
108+
one in-scope feature requirement is ``derived_from`` it. Only references
109+
from requirements inside ``report_version`` scope are counted. -#}
110+
{% set ns_stkh_ref = namespace(referenced=[], missing=[]) %}
111+
{% for req_id in ns_stkh_reqs.list %}
112+
{% set ns_low = namespace(found=false) %}
113+
{% for low in linked_needs(req_id, "derived_from_back") %}
114+
{% if low["type"] == "feat_req" and req_in_report_version(low, report_version) %}
115+
{% set ns_low.found = true %}
116+
{% endif %}
117+
{% endfor %}
118+
{% if ns_low.found %}
119+
{% set ns_stkh_ref.referenced = ns_stkh_ref.referenced + [req_id] %}
120+
{% else %}
121+
{% set ns_stkh_ref.missing = ns_stkh_ref.missing + [req_id] %}
122+
{% endif %}
123+
{% endfor %}
107124
.. grid:: 1 2 2 2
108125
:gutter: 3
109126

@@ -128,14 +145,24 @@ Stakeholder Requirements
128145
type == "stkh_req" and partially_verifies_back and not fully_verifies_back and {{ stkh_req_filter }}
129146
type == "stkh_req" and not fully_verifies_back and not partially_verifies_back and {{ stkh_req_filter }}
130147

148+
.. grid-item::
149+
150+
.. needpie:: Stakeholder Requirements Reference Coverage
151+
:labels: referenced by lower, not referenced
152+
:colors: #37a12d, #ca2828
153+
:legend:
154+
155+
id in {{ id_filter_list(ns_stkh_ref.referenced) }}
156+
id in {{ id_filter_list(ns_stkh_ref.missing) }}
157+
131158
.. dropdown:: Show requirements table
132159
:animate: fade-in
133160

134161
.. needtable::
135162
:filter: type == "stkh_req" and {{ stkh_req_filter }}
136163
:style: table
137-
:columns: id;title;safety;status;testlink
138-
:colwidths: 13,22,8,10,47
164+
:columns: id;title;safety;status;testlink;derived_from_back as "Referenced by"
165+
:colwidths: 12,20,7,9,32,20
139166
:sort: id
140167

141168
{# ===================================================================== #}
@@ -181,6 +208,22 @@ Feature Overview
181208
{% endif %}
182209
{% endfor %}
183210
{% set feature_req_filter = 'id in ' ~ id_filter_list(ns.req_ids) %}
211+
{#- Reference coverage: a feature requirement is "referenced" when at least one
212+
in-scope component requirement is ``derived_from`` it. -#}
213+
{% set ns_feat_ref = namespace(referenced=[], missing=[]) %}
214+
{% for req_id in ns.req_ids %}
215+
{% set ns_low = namespace(found=false) %}
216+
{% for low in linked_needs(req_id, "derived_from_back") %}
217+
{% if low["type"] == "comp_req" and req_in_report_version(low, report_version) %}
218+
{% set ns_low.found = true %}
219+
{% endif %}
220+
{% endfor %}
221+
{% if ns_low.found %}
222+
{% set ns_feat_ref.referenced = ns_feat_ref.referenced + [req_id] %}
223+
{% else %}
224+
{% set ns_feat_ref.missing = ns_feat_ref.missing + [req_id] %}
225+
{% endif %}
226+
{% endfor %}
184227
Requirements Statistics
185228
^^^^^^^^^^^^^^^^^^^^^^^
186229

@@ -208,14 +251,24 @@ Requirements Statistics
208251
type == "feat_req" and "{{ feature_id }}" in satisfied_by and partially_verifies_back and not fully_verifies_back and {{ feature_req_filter }}
209252
type == "feat_req" and "{{ feature_id }}" in satisfied_by and not fully_verifies_back and not partially_verifies_back and {{ feature_req_filter }}
210253

254+
.. grid-item::
255+
256+
.. needpie:: {{ feature_title }} Requirements Reference Coverage
257+
:labels: referenced by lower, not referenced
258+
:colors: #37a12d, #ca2828
259+
:legend:
260+
261+
id in {{ id_filter_list(ns_feat_ref.referenced) }}
262+
id in {{ id_filter_list(ns_feat_ref.missing) }}
263+
211264
.. dropdown:: Show requirements table
212265
:animate: fade-in
213266

214267
.. needtable::
215268
:filter: type == "feat_req" and "{{ feature_id }}" in satisfied_by and {{ feature_req_filter }}
216269
:style: table
217-
:columns: id;title;safety;status;testlink
218-
:colwidths: 13,22,8,10,47
270+
:columns: id;title;safety;status;testlink;derived_from_back as "Referenced by"
271+
:colwidths: 12,20,7,9,32,20
219272
:sort: id
220273

221274
Architecture Statistics

0 commit comments

Comments
 (0)