Definition of a Metamodel

Here we define a sphinx-needs metamodel.

@startuml

' Nodes definition 

card "<size:12>SN_TYPEGROUP</size>\n**Requirements**\n<size:10>GROUP__requirements</size>" as GROUP__requirements [[../index.html#GROUP__requirements]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**sys requirement**\n<size:10>TYPE__sys_requirement</size>" as TYPE__sys_requirement [[../index.html#TYPE__sys_requirement]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**sw requirement**\n<size:10>TYPE__sw_requirement</size>" as TYPE__sw_requirement [[../index.html#TYPE__sw_requirement]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**assumed**\n**requirement**\n<size:10>TYPE__assumed_req</size>" as TYPE__assumed_req [[../index.html#TYPE__assumed_req]] #FFFFFF
card "<size:12>SN_TYPEGROUP</size>\n**Software**\n**Architecture**\n<size:10>GROUP__sw_arch</size>" as GROUP__sw_arch [[../index.html#GROUP__sw_arch]] #FFFFFF{
'child needs:
card "<size:12>SN_ASSOCIATION</size>\n**satisfies**\n<size:10>TYPE__sw_arch__satisfies__assumed_req</size>" as TYPE__sw_arch__satisfies__assumed_req [[../index.html#TYPE__sw_arch__satisfies__assumed_req]] #FFFFFF
card "<size:12>SN_ASSOCIATION</size>\n**covered by**\n<size:10>TYPE__sw_arch__covered_by__unit</size>" as TYPE__sw_arch__covered_by__unit [[../index.html#TYPE__sw_arch__covered_by__unit]] #FFFFFF
}
card "<size:12>SN_TYPE</size>\n**Software**\n**Architecture**\n**Diagram**\n<size:10>TYPE__sw_arch_diagram</size>" as TYPE__sw_arch_diagram [[../index.html#TYPE__sw_arch_diagram]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**Software**\n**Architecture**\n**Decision**\n<size:10>TYPE__sw_arch_decision</size>" as TYPE__sw_arch_decision [[../index.html#TYPE__sw_arch_decision]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**Assumption of**\n**Use**\n<size:10>TYPE__aou</size>" as TYPE__aou [[../index.html#TYPE__aou]] #FFFFFF{
'child needs:
card "<size:12>SN_ASSOCIATION</size>\n**satisfies**\n<size:10>TYPE__aou__satisfies__assumed_req</size>" as TYPE__aou__satisfies__assumed_req [[../index.html#TYPE__aou__satisfies__assumed_req]] #FFFFFF
card "<size:12>SN_ASSOCIATION</size>\n**satisfies**\n<size:10>TYPE__aou__satisfies__sw_arch</size>" as TYPE__aou__satisfies__sw_arch [[../index.html#TYPE__aou__satisfies__sw_arch]] #FFFFFF
}
card "<size:12>SN_TYPE</size>\n**test_specificat**\n**ion**\n<size:10>TYPE__test_specification</size>" as TYPE__test_specification [[../index.html#TYPE__test_specification]] #FFFFFF{
'child needs:
card "<size:12>SN_ASSOCIATION</size>\n**verifies**\n<size:10>TYPE__test_specification__verifies</size>" as TYPE__test_specification__verifies [[../index.html#TYPE__test_specification__verifies]] #FFFFFF
}
card "<size:12>SN_TYPEGROUP</size>\n**Software**\n**Architecture II**\n<size:10>GROUP__sw_arch2</size>" as GROUP__sw_arch2 [[../index.html#GROUP__sw_arch2]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**Unit**\n<size:10>TYPE__unit</size>" as TYPE__unit [[../index.html#TYPE__unit]] #FFFFFF{
'child needs:
card "<size:12>SN_ASSOCIATION</size>\n**provided**\n<size:10>TYPE__unit__provided</size>" as TYPE__unit__provided [[../index.html#TYPE__unit__provided]] #FFFFFF
card "<size:12>SN_ASSOCIATION</size>\n**required**\n<size:10>TYPE__unit__required</size>" as TYPE__unit__required [[../index.html#TYPE__unit__required]] #FFFFFF
}
card "<size:12>SN_TYPE</size>\n**Port**\n<size:10>TYPE__port</size>" as TYPE__port [[../index.html#TYPE__port]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**Parameter**\n<size:10>TYPE__parameter</size>" as TYPE__parameter [[../index.html#TYPE__parameter]] #FFFFFF
card "<size:12>SN_TYPE</size>\n**Datatype**\n<size:10>TYPE__datatype</size>" as TYPE__datatype [[../index.html#TYPE__datatype]] #FFFFFF

' Connection definition 

TYPE__sys_requirement --> GROUP__requirements
TYPE__sw_requirement --> GROUP__requirements
TYPE__assumed_req --> GROUP__requirements
TYPE__sw_arch__satisfies__assumed_req --> TYPE__assumed_req
TYPE__sw_arch__covered_by__unit --> TYPE__unit
TYPE__sw_arch_diagram --> GROUP__sw_arch
TYPE__sw_arch_decision --> GROUP__sw_arch
TYPE__aou__satisfies__assumed_req --> TYPE__assumed_req
TYPE__aou__satisfies__sw_arch --> GROUP__sw_arch
TYPE__test_specification__verifies --> GROUP__requirements
TYPE__unit --> GROUP__sw_arch2
TYPE__unit__provided --> TYPE__port
TYPE__unit__required --> TYPE__port
TYPE__port --> GROUP__sw_arch2
TYPE__parameter --> GROUP__sw_arch2
TYPE__datatype --> GROUP__sw_arch2

@enduml

Requirements

SN_TYPE: sys requirement TYPE__sys_requirement
style: node
directive: sysreq
prefix: SYSREQ__
color: #FFA500
SN_TYPE: sw requirement TYPE__sw_requirement
style: node
directive: swreq
prefix: SWREQ__
color: #FFA500
SN_TYPE: assumed requirement TYPE__assumed_req
style: node
directive: asreq
prefix: ASREQ__
color: #FFA500

Software Architecture

SN_TYPE: Software Architecture Diagram TYPE__sw_arch_diagram
style: node
directive: sw_arch_dia
prefix: ARCH_DIA__
color: #FFA500
mandatory: OPTION__safety
SN_TYPE: Software Architecture Decision TYPE__sw_arch_decision
style: node
directive: sw_arch_dec
prefix: ARCH_DEC__
color: #FFA500
mandatory: OPTION__safety

Safety

SN_TYPE: Assumption of Use TYPE__aou
style: node
directive: aou
prefix: AOU__
color: #FF0000
SN_OPTION: safety OPTION__safety
name: safety
description: safety level
schema: {"type": "string", "enum": ["QM", "ASIL-A", "ASIL-B", "ASIL-C", "ASIL-D"]}

The safety option indicates the safety level of a need.

Testing

SN_TYPE: test_specification TYPE__test_specification
style: node
directive: test_specification
prefix: TESTSPEC__
color: #00FF00

A test specification describes a need that defines tests for requirements.

SN_ASSOCIATION: verifies TYPE__test_specification__verifies

The test_specification verifies requirements.

Software Architecture II

SN_TYPEGROUP: Software Architecture II GROUP__sw_arch2
SN_TYPE: Unit TYPE__unit
style: node
directive: unit
prefix: UNIT__
color: #FFA500
SN_ASSOCIATION: provided TYPE__unit__provided
parent needs: TYPE__unit
targets: TYPE__port

The unit provided port.

SN_ASSOCIATION: required TYPE__unit__required
parent needs: TYPE__unit
targets: TYPE__port

The unit required port.

SN_TYPE: Port TYPE__port
style: node
directive: port
prefix: PORT__
color: #FFA500
SN_TYPE: Parameter TYPE__parameter
style: node
directive: parameter
prefix: PORT__
color: #FFA500
SN_TYPE: Datatype TYPE__datatype
style: node
directive: datatype
prefix: DATATYPE__
color: #FFA500

Options