From 9f0016cc612246bcd73d2ba43e8255eb0c2bdd03 Mon Sep 17 00:00:00 2001 From: "jhr2hi@bosch.com" Date: Wed, 1 Apr 2026 10:05:56 +0200 Subject: [PATCH 1/2] Start to move exmples to template module repository --- .../feature_name/architecture/index.rst | 124 ++++---- .../feature_name/requirements/index.rst | 42 +-- .../docs/architecture/index.rst | 104 +++--- .../docs/requirements/index.rst | 56 ++-- .../requirements/stakeholder/index.rst | 38 ++- .../architecture_concept.rst | 159 ++-------- .../guidance/architecture_guideline.rst | 8 +- .../architecture_modeling_example.rst | 297 ------------------ .../component_architecture_template.rst | 11 +- .../architecture_design/index.rst | 1 - .../_assets/dd_example_ex_dyn.puml | 30 -- .../_assets/dd_example_ex_sta.puml | 37 --- .../_assets/detailed_design_example.rst | 98 ------ .../guidance/implementation_guideline.rst | 3 +- .../process_areas/implementation/index.rst | 1 - .../guidance/requirements_templates.rst | 12 +- 16 files changed, 253 insertions(+), 768 deletions(-) delete mode 100644 process/process_areas/architecture_design/guidance/architecture_modeling_example.rst delete mode 100644 process/process_areas/implementation/_assets/dd_example_ex_dyn.puml delete mode 100644 process/process_areas/implementation/_assets/dd_example_ex_sta.puml delete mode 100644 process/process_areas/implementation/_assets/detailed_design_example.rst diff --git a/process/folder_templates/features/feature_name/architecture/index.rst b/process/folder_templates/features/feature_name/architecture/index.rst index 2f03ccf002..18797c22f2 100644 --- a/process/folder_templates/features/feature_name/architecture/index.rst +++ b/process/folder_templates/features/feature_name/architecture/index.rst @@ -75,69 +75,78 @@ Mandatory: A motivation for the decomposition Static Architecture ------------------- -.. feat:: Feature Name - :id: feat__feature_name - :security: YES - :safety: ASIL_B - :status: invalid - :includes: logic_arc_int__feature_name__interface_name1 +The live feature architecture template snippets are maintained in the +`module template documentation `__. - General Feature Description +.. code-block:: rst -.. feat_arc_sta:: Feature Static View - :id: feat_arc_sta__feature_name__static_view - :security: YES - :safety: ASIL_B - :status: invalid - :fulfils: feat_req__feature_name__some_title - :includes: logic_arc_int__feature_name__interface_name1 - :belongs_to: feat__feature_name + .. feat:: Feature Name + :id: feat__feature_name + :security: YES + :safety: ASIL_B + :status: invalid + :includes: logic_arc_int__feature_name__interface_name1 - .. needarch:: - :scale: 50 - :align: center + General Feature Description - {{ draw_feature(need(), needs) }} + .. feat_arc_sta:: Feature Static View + :id: feat_arc_sta__feature_name__static_view + :security: YES + :safety: ASIL_B + :status: invalid + :fulfils: feat_req__feature_name__some_title + :includes: logic_arc_int__feature_name__interface_name1 + :belongs_to: feat__feature_name + + .. needarch:: + :scale: 50 + :align: center + + {{ draw_feature(need(), needs) }} Dynamic Architecture -------------------- -.. feat_arc_dyn:: Dynamic View - :id: feat_arc_dyn__feature_name__dynamic_view - :security: YES - :safety: ASIL_B - :status: invalid - :fulfils: feat_req__feature_name__some_title - :belongs_to: feat__feature_name +.. code-block:: rst + + .. feat_arc_dyn:: Dynamic View + :id: feat_arc_dyn__feature_name__dynamic_view + :security: YES + :safety: ASIL_B + :status: invalid + :fulfils: feat_req__feature_name__some_title + :belongs_to: feat__feature_name - Put here a sequence diagram + Put here a sequence diagram Logical Interfaces ------------------ -.. logic_arc_int:: Interface Name - :id: logic_arc_int__feature_name__interface_name1 - :security: YES - :safety: ASIL_B - :status: invalid - :fulfils: feat_req__feature_name__some_title +.. code-block:: rst - General Interface Description + .. logic_arc_int:: Interface Name + :id: logic_arc_int__feature_name__interface_name1 + :security: YES + :safety: ASIL_B + :status: invalid + :fulfils: feat_req__feature_name__some_title - .. needarch:: - :scale: 50 - :align: center + General Interface Description - {{ draw_interface(need(), needs) }} + .. needarch:: + :scale: 50 + :align: center -.. logic_arc_int_op:: Operation - :id: logic_arc_int_op__feature_name__operation - :security: YES - :safety: ASIL_B - :status: invalid - :included_by: logic_arc_int__feature_name__interface_name1 + {{ draw_interface(need(), needs) }} - General Operation Description + .. logic_arc_int_op:: Operation + :id: logic_arc_int_op__feature_name__operation + :security: YES + :safety: ASIL_B + :status: invalid + :included_by: logic_arc_int__feature_name__interface_name1 + + General Operation Description Module Viewpoint ---------------- @@ -145,20 +154,25 @@ Module Viewpoint The following modules are needed to be defined to be able to draw the static feature view. They will be replaced by linking the proper module definitions in the used module's repositories as soon as those exist. -.. mod:: Module Name - :id: mod__module_name - :includes: comp__component_name_template +The rendered module and used-component examples are maintained in the +`module template documentation `_. + +.. code-block:: rst + + .. mod:: Module Name + :id: mod__module_name + :includes: comp__component_name_template -.. mod_view_sta:: Module Name Static View - :id: mod_view_sta__feature_name__module_name - :includes: comp__component_name_template + .. mod_view_sta:: Module Name Static View + :id: mod_view_sta__feature_name__module_name + :includes: comp__component_name_template - .. needarch:: - :scale: 50 - :align: center + .. needarch:: + :scale: 50 + :align: center - {{ draw_module(need(), needs) }} + {{ draw_module(need(), needs) }} Used Components --------------- diff --git a/process/folder_templates/features/feature_name/requirements/index.rst b/process/folder_templates/features/feature_name/requirements/index.rst index fe8b5f6bc6..0e98c7d280 100644 --- a/process/folder_templates/features/feature_name/requirements/index.rst +++ b/process/folder_templates/features/feature_name/requirements/index.rst @@ -34,29 +34,33 @@ Feature Requirements =================================================================== -.. feat_req:: Some Title - :id: feat_req__feature_name__some_title - :reqtype: Process - :security: NO - :safety: ASIL_B - :satisfies: stkh_req__requirements__template - :valid_from: v0.0.1 - :valid_until: v1.0.1 - :status: invalid - :belongs_to: feat__feature_name +.. code-block:: rst - The Feature shall do xyz to the user to bring him to this condition at this time. + .. feat_req:: Some Title + :id: feat_req__feature_name__some_title + :reqtype: Process + :security: NO + :safety: ASIL_B + :satisfies: stkh_req__requirements__template + :valid_from: v0.0.1 + :valid_until: v1.0.1 + :status: invalid + :belongs_to: feat__feature_name - Note: (optional, not to be verified) + The Feature shall do xyz to the user to bring him to this condition at this time. -.. aou_req:: Some Other Title - :id: aou_req__feature_name__some_other_title - :reqtype: Process - :security: NO - :safety: ASIL_B - :status: invalid + Note: (optional, not to be verified) + +.. code-block:: rst + + .. aou_req:: Some Other Title + :id: aou_req__feature_name__some_other_title + :reqtype: Process + :security: NO + :safety: ASIL_B + :status: invalid - The Feature User shall do xyz to use the feature safely. + The Feature User shall do xyz to use the feature safely. .. attention:: The above directives must be updated according to your feature requirements. diff --git a/process/folder_templates/modules/module_name/component_name/docs/architecture/index.rst b/process/folder_templates/modules/module_name/component_name/docs/architecture/index.rst index 285065d609..4a660a35d3 100644 --- a/process/folder_templates/modules/module_name/component_name/docs/architecture/index.rst +++ b/process/folder_templates/modules/module_name/component_name/docs/architecture/index.rst @@ -72,42 +72,49 @@ The components are designed to cover the expectations from the feature architect A component can optional also consist of subcomponents to further structure the architecture. The component and its static views can also optionally use interfaces provided by other components. -.. comp:: Component Name - :id: comp__component_name_template - :security: YES - :safety: ASIL_B - :status: invalid - :implements: logic_arc_int__feature_name__interface_name1 - :consists_of: comp__archex_sub_component_1, comp__archex_sub_component_2, comp__archex_sub_component_3 - :belongs_to: feat__feature_name - -.. comp_arc_sta:: Component Name (Static View) - :id: comp_arc_sta__component_name__static_view - :security: YES - :safety: ASIL_B - :status: invalid - :belongs_to: comp__component_name_template - :uses: logic_arc_int__feature_name__interface_name1 - :fulfils: comp_req__component_name__some_title +The live component architecture template is maintained in the +`module template documentation `_. - .. needarch:: - :scale: 50 - :align: center +.. code-block:: rst - {{ draw_component(need(), needs) }} + .. comp:: Component Name + :id: comp__component_name_template + :security: YES + :safety: ASIL_B + :status: invalid + :implements: logic_arc_int__feature_name__interface_name1 + :consists_of: comp__component_name_internal_1, comp__component_name_internal_2, comp__component_name_internal_3 + :belongs_to: feat__feature_name + + .. comp_arc_sta:: Component Name (Static View) + :id: comp_arc_sta__component_name__static_view + :security: YES + :safety: ASIL_B + :status: invalid + :belongs_to: comp__component_name_template + :uses: logic_arc_int__feature_name__interface_name1 + :fulfils: comp_req__component_name__some_title + + .. needarch:: + :scale: 50 + :align: center + + {{ draw_component(need(), needs) }} Dynamic Architecture -------------------- -.. comp_arc_dyn:: Dynamic View - :id: comp_arc_dyn__component_name__dynamic_view - :security: YES - :safety: ASIL_B - :status: invalid - :belongs_to: comp__component_name_template - :fulfils: comp_req__component_name__some_title +.. code-block:: rst + + .. comp_arc_dyn:: Dynamic View + :id: comp_arc_dyn__component_name__dynamic_view + :security: YES + :safety: ASIL_B + :status: invalid + :belongs_to: comp__component_name_template + :fulfils: comp_req__component_name__some_title - Put here a sequence diagram + Put here a sequence diagram Interfaces @@ -125,15 +132,38 @@ Interfaces Internal Components ------------------- -.. comp_arc_sta:: Component Name Static View - :id: comp_arc_sta__component_name__2 - :status: invalid - :safety: ASIL_B - :security: YES - :fulfils: comp_req__component_name__some_title - :belongs_to: comp__component_example_2 +.. code-block:: rst - No architecture but detailed design + .. comp_arc_sta:: Component Name Static View + :id: comp_arc_sta__component_name__2 + :status: invalid + :safety: ASIL_B + :security: YES + :fulfils: comp_req__component_name__some_title + :belongs_to: comp__component_name_template + + No architecture but detailed design + + .. comp:: Internal Component 1 + :id: comp__component_name_internal_1 + :status: invalid + :safety: ASIL_B + :security: YES + :belongs_to: feat__feature_name + + .. comp:: Internal Component 2 + :id: comp__component_name_internal_2 + :status: invalid + :safety: ASIL_B + :security: YES + :belongs_to: feat__feature_name + + .. comp:: Internal Component 3 + :id: comp__component_name_internal_3 + :status: invalid + :safety: ASIL_B + :security: YES + :belongs_to: feat__feature_name .. note:: Architecture can be split into multiple files. At component level the public interfaces to be used by the user and tester to be shown. diff --git a/process/folder_templates/modules/module_name/component_name/docs/requirements/index.rst b/process/folder_templates/modules/module_name/component_name/docs/requirements/index.rst index 26a26c4eac..d705cf1b44 100644 --- a/process/folder_templates/modules/module_name/component_name/docs/requirements/index.rst +++ b/process/folder_templates/modules/module_name/component_name/docs/requirements/index.rst @@ -37,18 +37,20 @@ Requirements Component Requirements ---------------------- -.. comp_req:: Some Title - :id: comp_req__component_name__some_title - :reqtype: Process - :security: YES - :safety: ASIL_B - :satisfies: feat_req__feature_name__some_title - :status: invalid - :belongs_to: comp__component_name_template +.. code-block:: rst + + .. comp_req:: Some Title + :id: comp_req__component_name__some_title + :reqtype: Process + :security: YES + :safety: ASIL_B + :satisfies: feat_req__feature_name__some_title + :status: invalid + :belongs_to: comp__component_name_template - The Component shall do xyz to another component to bring it to this condition at this time + The Component shall do xyz to another component to bring it to this condition at this time - Note: (optional, not to be verified) + Note: (optional, not to be verified) .. attention:: The above directive must be updated according to your component requirements. @@ -63,27 +65,31 @@ Component Requirements Assumption of Use Requirements ------------------------------ -.. aou_req:: Next Title - :id: aou_req__component_name__next_title - :reqtype: Process - :security: YES - :safety: ASIL_B - :status: invalid +.. code-block:: rst - The Component User shall do xyz to use the component safely/securely + .. aou_req:: Next Title + :id: aou_req__component_name__next_title + :reqtype: Process + :security: YES + :safety: ASIL_B + :status: invalid + + The Component User shall do xyz to use the component safely/securely Environmental Requirements -------------------------- -.. aou_req:: Another Title - :id: aou_req__component_name__another_title - :reqtype: Process - :security: YES - :safety: ASIL_B - :status: invalid - :tags: environment +.. code-block:: rst + + .. aou_req:: Another Title + :id: aou_req__component_name__another_title + :reqtype: Process + :security: YES + :safety: ASIL_B + :status: invalid + :tags: environment - The Component shall only be used in a xyz environment to ensure its proper functioning. + The Component shall only be used in a xyz environment to ensure its proper functioning. Hints ----- diff --git a/process/folder_templates/platform/requirements/stakeholder/index.rst b/process/folder_templates/platform/requirements/stakeholder/index.rst index 0215408c98..7cc0cb85f7 100644 --- a/process/folder_templates/platform/requirements/stakeholder/index.rst +++ b/process/folder_templates/platform/requirements/stakeholder/index.rst @@ -32,26 +32,30 @@ Stakeholder Requirements =================================================================== -.. stkh_req:: Template - :id: stkh_req__requirements__template - :reqtype: Functional - :safety: ASIL_B - :security: YES - :rationale: - :valid_from: v0.0.1 - :valid_until: v1.0.1 - :status: invalid +.. code-block:: rst - The platform shall ... + .. stkh_req:: Template + :id: stkh_req__requirements__template + :reqtype: Functional + :safety: ASIL_B + :security: YES + :rationale: + :valid_from: v0.0.1 + :valid_until: v1.0.1 + :status: invalid -.. aou_req:: Some Other Title - :id: aou_req__platform__some_other_title - :reqtype: Interface - :security: YES - :safety: ASIL_B - :status: invalid + The platform shall ... + +.. code-block:: rst + + .. aou_req:: Some Other Title + :id: aou_req__platform__some_other_title + :reqtype: Interface + :security: YES + :safety: ASIL_B + :status: invalid - The Platform User shall do xyz to use the platform safely. + The Platform User shall do xyz to use the platform safely. .. attention:: The above directives must be updated according to platform requirements. diff --git a/process/process_areas/architecture_design/architecture_concept.rst b/process/process_areas/architecture_design/architecture_concept.rst index de0488d19e..6aeb77ed26 100644 --- a/process/process_areas/architecture_design/architecture_concept.rst +++ b/process/process_areas/architecture_design/architecture_concept.rst @@ -123,22 +123,8 @@ The feature architecture contain the following views: Static View ----------- -The first viewpoint is named as *feature architecture*. It displays the SW Components within the SW modules (= dependable elements) which are required to realize the feature including their interactions. Also the *logical interfaces* and the interaction between the feature and the user are included in this view. On this architectural level the feature requirements shall be allocated. An example for the static architecture is shown here: - -.. feat_arc_sta:: Feature 1 Architecture - :id: feat_arc_sta__example_feature__feature_1 - :security: YES - :safety: QM - :status: valid - :includes: logic_arc_int__example_feature__archex_logical_interface_1, logic_arc_int__example_feature__archex_logical_interface_2 - :fulfils: feat_req__example_feature__archdes_example_req - :belongs_to: feat__example_feature - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_feature(need(), needs) }} +The first viewpoint is named as *feature architecture*. It displays the SW Components within the SW modules (= dependable elements) which are required to realize the feature including their interactions. Also the *logical interfaces* and the interaction between the feature and the user are included in this view. On this architectural level the feature requirements shall be allocated. A full rendered example for the static architecture is maintained in the +`module template documentation `__. In all views, the components which are marked as ASIL_B related are drawn with red borders. @@ -164,38 +150,16 @@ See :ref:`uml_diagram_selection` in guideline for further information about the Interface View -------------- -On the feature level only *logical interfaces* shall be displayed. This means that only logical names shall be provided for both the interface and the operations within. Those *logical interfaces* shall be connected to component interfaces on the module view. - -.. logic_arc_int:: Logical Interface 1 - :id: logic_arc_int__example_feature__archcon_logical_interface_1 - :security: YES - :safety: ASIL_B - :status: valid - :fulfils: feat_req__example_feature__archdes_example_req - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_interface(need(), needs) }} +On the feature level only *logical interfaces* shall be displayed. This means that only logical names shall be provided for both the interface and the operations within. Those *logical interfaces* shall be connected to component interfaces on the module view. A rendered logical-interface example is maintained in the +`module template documentation `__. SW Module View ============== A SW Module (=dependable element) is packaging a component or a set of components which is developed, documented and released together. It is not meant to be an architectural element which means that no requirements can be allocated to it. -On this level also a view shall be defined which is called *Module View*. It represents the allocation of components into modules and displays the dependencies between the single modules. In this view also cyclic dependencies between modules can be identified. - -.. mod_view_sta:: Module 1 Static View concept - :id: mod_view_sta__example_feature__archcon_1 - :includes: comp__component_example_1 - - .. needarch:: - :scale: 50 - :align: center - - - {{ draw_module(need(), needs) }} +On this level also a view shall be defined which is called *Module View*. It represents the allocation of components into modules and displays the dependencies between the single modules. In this view also cyclic dependencies between modules can be identified. A rendered module-view example is maintained in the +`module template documentation `__. Component View ============== @@ -207,19 +171,8 @@ Static View The *component architecture* describes the implementation of the functionalities in a white-box view. It describes the internal structure of SW components and their decomposition. It provides a more detailed information concerning the respective interfaces of a component. If a SW component interacts with a different component it is also included via a *use* relationship in the diagram. An example of the *component architecture* is displayed here: -.. comp_arc_sta:: Component 1 Static View - :id: comp_arc_sta__example_feature__archdes_component_concept_1 - :status: valid - :safety: ASIL_B - :security: NO - :fulfils: comp_req__example_feature__archex_example_req - :belongs_to: comp__component_example_1 - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_component(need(), needs) }} +A full rendered component-architecture example is maintained in the +`module template documentation `__. The decomposition is optional and relies on the complexity of the component. Thus there is no graphic representation required for it. In all views the components which are marked as ASIL_B related are drawn in red color. @@ -244,21 +197,8 @@ Following scenarios should be included: Interface View -------------- -The component interface view shows the actual interfaces of the component. Also links to their corresponding logical interfaces are displayed in this view: - -.. real_arc_int:: Component Interface 1 - :id: real_arc_int__example_feature__archdes_component_interface_1 - :status: valid - :safety: ASIL_B - :security: NO - :fulfils: comp_req__example_feature__archex_example_req - :language: cpp - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_interface(need(), needs)}} +The component interface view shows the actual interfaces of the component. Also links to their corresponding logical interfaces are displayed in this view. A rendered component-interface example is maintained in the +`module template documentation `__. Platform View ============= @@ -481,29 +421,8 @@ Here are some excerpts of UML diagrams made from the requirements of that file. Feature Architecture ^^^^^^^^^^^^^^^^^^^^ -The following section is an example, how an `Feature `_ looks like and how the architecture of an Feature is described. Please note that components with an "ASIL_B" safety rating are highlighted with red borders in the diagram (e.g., "Component 1"). - -.. feat:: Feature Name - :id: feat__feature_name_example - :security: YES - :safety: ASIL_B - :status: invalid - :includes: logic_arc_int__example_feature__archex_logical_interface_1 - -.. feat_arc_sta:: Feature Static Architecture View - Rendered Example - :id: feat_arc_sta__example_feature__archdes_getstrt - :security: YES - :safety: QM - :status: valid - :includes: logic_arc_int__example_feature__archex_logical_interface_1, logic_arc_int__example_feature__archex_logical_interface_2 - :fulfils: feat_req__example_feature__archdes_example_req - :belongs_to: feat__example_feature - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_feature(need(), needs) }} +The following section links to the rendered feature example that is now maintained in the +`module template documentation `__. .. code-block:: rst @@ -535,19 +454,8 @@ Component Architecture The following section is an example, how an component looks like and how the detail design of an component is described. Please note that components with an "ASIL_B" safety rating are highlighted with red borders in the diagram (e.g., "Component 1"). -.. comp_arc_sta:: Component Static View - Rendered Example - :id: comp_arc_sta__example_feature__component_getstrt - :status: valid - :safety: ASIL_B - :security: NO - :fulfils: comp_req__example_feature__archex_example_req - :belongs_to: comp__component_example_1 - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_component( need(), needs ) }} +The rendered component examples are maintained in the +`module template documentation `__. .. code-block:: rst @@ -598,20 +506,8 @@ Besides storing the output it is also possible to display the generated PlantUML Debug example for component architecture: -.. comp_arc_sta:: Component Static View - Rendered Debug Example - :id: comp_arc_sta__example_feature__component_getstrt_debug - :status: valid - :safety: ASIL_B - :security: NO - :fulfils: comp_req__example_feature__archex_example_req - :belongs_to: comp__component_example_1 - - .. needarch:: - :scale: 50 - :align: center - :debug: - - {{ draw_component( need(), needs ) }} +See the rendered debug example in the +`module template documentation `__. .. _manual_addition_uml: @@ -629,33 +525,18 @@ To make *needuml* work we have to replace the *need()* call with a different fun :status: valid :safety: ASIL_B :security: NO - :uses: logic_arc_int__example_feature__archex_logical_interface_1 - :fulfils: comp_req__example_feature__archex_example_req + :uses: logic_arc_int__example_feature__archcon_logical_interface_1 :belongs_to: comp__component_component_manual_getstrt .. needuml:: - {{ draw_component( needs.get('comp__component_example_1'), needs ) }} + {{ draw_component( needs.get('comp__component_name_template'), needs ) }} component "Component Manual" as CM { } CM -> LI1: EXTRA_LINKAGE_MANUALLY_ADDED -.. comp_arc_sta:: Component Architecture Static View - Rendered Example Manually Edited - :id: comp_arc_sta__example_feature__component_manual_getstrt - :status: valid - :safety: ASIL_B - :security: NO - :uses: logic_arc_int__example_feature__archex_logical_interface_1 - :fulfils: comp_req__example_feature__archex_example_req - :belongs_to: comp__component_example_1 - - .. needarch:: - - {{ draw_component( needs.get('comp__component_example_1'), needs ) }} - - component "Component Manual" as CM { - } - CM -> logic_arc_int__example_feature__archex_logical_interface_1: EXTRA_LINKAGE_MANUALLY_ADDED +See the rendered manual-edit example in the +`module template documentation `__. You can add any layout or additional configuration you want before you call the *draw_xyz*. diff --git a/process/process_areas/architecture_design/guidance/architecture_guideline.rst b/process/process_areas/architecture_design/guidance/architecture_guideline.rst index c698da8b75..d1b75f7e70 100644 --- a/process/process_areas/architecture_design/guidance/architecture_guideline.rst +++ b/process/process_areas/architecture_design/guidance/architecture_guideline.rst @@ -130,7 +130,8 @@ The relations of the static elements are described in :ref:`metamodel_architectu .. note:: For the modelling of the architecture a sphinx extension is available: :ref:`arch_gen_sphinx` - An example of modelling the architecture can be found :ref:`here `. + An example of modelling the architecture can be found in the + `module template documentation `_. .. _allocate_feature_requirements: @@ -220,7 +221,10 @@ UML diagram selection Static architecture ------------------- -As can be seen from the examples presented in :need:`feat_arc_sta__example_feature__feature_1` and :need:`comp_arc_sta__example_feature__archdes_component_concept_1` +As can be seen from the rendered feature example in the +`module template documentation `__ +and the rendered component example in the +`module template documentation `__, for the static architecture a UML component diagram is expected (and supported by the tooling). Dynamic architecture diff --git a/process/process_areas/architecture_design/guidance/architecture_modeling_example.rst b/process/process_areas/architecture_design/guidance/architecture_modeling_example.rst deleted file mode 100644 index 1d03a8bc0d..0000000000 --- a/process/process_areas/architecture_design/guidance/architecture_modeling_example.rst +++ /dev/null @@ -1,297 +0,0 @@ -.. - # ******************************************************************************* - # Copyright (c) 2025 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 - # ******************************************************************************* - -.. _definition_architectural_design: - -Example model of architectural design -##################################### - -This chapter only serves as an example how an architecture could be modeled in *Sphinx Needs*. All the needs are required to print the views which are displayed in the Static- and Interface Views. In the actual process this files would be split into multiple different files: - -Feature Architecture File -========================= - -.. feat:: Feature 1 - :id: feat__example_feature - :security: YES - :safety: QM - :status: valid - :includes: logic_arc_int__example_feature__archex_logical_interface_1, logic_arc_int__example_feature__archex_logical_interface_2, logic_arc_int__example_feature__archex_logical_interface_3 - - This is the example feature. - -.. feat_arc_sta:: Feature 1 Static View - :id: feat_arc_sta__example_feature__archdes_static - :security: YES - :safety: QM - :status: valid - :includes: logic_arc_int__example_feature__archex_logical_interface_1, logic_arc_int__example_feature__archex_logical_interface_2, logic_arc_int__example_feature__archex_logical_interface_3 - :fulfils: feat_req__example_feature__archdes_example_req - :belongs_to: feat__example_feature - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_feature(need(), needs) }} - -.. Logical Interfaces - -.. logic_arc_int:: Logical Interface 1 - :id: logic_arc_int__example_feature__archex_logical_interface_1 - :security: YES - :safety: ASIL_B - :status: valid - :fulfils: feat_req__example_feature__archdes_example_req - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_interface(need(), needs) }} - - -.. logic_arc_int:: Logical Interface 2 - :id: logic_arc_int__example_feature__archex_logical_interface_2 - :security: YES - :safety: ASIL_B - :status: valid - :fulfils: feat_req__example_feature__archdes_example_req - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_interface(need(), needs) }} - - -.. logic_arc_int:: Logical Interface 3 - :id: logic_arc_int__example_feature__archex_logical_interface_3 - :security: YES - :safety: ASIL_B - :status: valid - :fulfils: feat_req__example_feature__archdes_example_req - - -.. Logical Interface Operation - -.. logic_arc_int_op:: Logical Operation 1 - :id: logic_arc_int_op__example_feature__archex_logical_operation_1 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_1 - -.. logic_arc_int_op:: Logical Operation 2 - :id: logic_arc_int_op__example_feature__archex_logical_operation_2 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_1 - -.. logic_arc_int_op:: Logical Operation 3 - :id: logic_arc_int_op__example_feature__archex_logical_operation_3 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_2 - -.. logic_arc_int_op:: Logical Operation 4 - :id: logic_arc_int_op__example_feature__archex_logical_operation_4 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_2 - -.. logic_arc_int_op:: Logical Operation 5 - :id: logic_arc_int_op__example_feature__archex_logical_operation_5 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_3 - -.. logic_arc_int_op:: Logical Operation 6 - :id: logic_arc_int_op__example_feature__archex_logical_operation_6 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_3 - -.. logic_arc_int_op:: Logical Operation 7 - :id: logic_arc_int_op__example_feature__archex_logical_operation_7 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_3 - -.. logic_arc_int_op:: Logical Operation 8 - :id: logic_arc_int_op__example_feature__archex_logical_operation_8 - :security: YES - :safety: ASIL_B - :status: valid - :included_by: logic_arc_int__example_feature__archex_logical_interface_3 - - -Module Viewpoint -================ - -.. mod:: Module 1 - :id: mod__example_feature_archex_module_1 - :security: YES - :safety: ASIL_B - :status: valid - :includes: comp__component_example_1, comp__component_example_2 - - This is Module 1. - -.. mod_view_sta:: Module 1 Static View - :id: mod_view_sta__example_feature__archex_1 - :includes: comp__component_example_1, comp__component_example_2 - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_module(need(), needs) }} - -.. mod:: Module 2 - :id: mod__example_feature_archex_module_2 - :security: YES - :safety: ASIL_B - :status: valid - :includes: comp__component_example_3 - - This is Module 2. - -.. mod_view_sta:: Module 2 Static View - :id: mod_view_sta__example_feature__archex_2 - :includes: comp__component_example_3 - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_module(need(), needs) }} - -Component Architecture File(s) -============================== - -.. comp:: Component 1 - :id: comp__component_example_1 - :security: YES - :safety: ASIL_B - :status: invalid - :implements: logic_arc_int__example_feature__archex_logical_interface_1 - :consists_of: comp__archex_sub_component_1, comp__archex_sub_component_2, comp__archex_sub_component_3 - :belongs_to: feat__example_feature - - Example Component 1 description. - -.. comp:: Component 2 - :id: comp__component_example_2 - :security: YES - :safety: ASIL_B - :status: invalid - :implements: logic_arc_int__example_feature__archex_logical_interface_2 - :belongs_to: feat__example_feature - - Example Component 2 description. - -.. comp:: Component 3 - :id: comp__component_example_3 - :security: YES - :safety: QM - :status: invalid - :implements: logic_arc_int__example_feature__archex_logical_interface_3 - :belongs_to: feat__example_feature - - Example Component 3 description. - -.. comp_arc_sta:: Component 1 Static View - :id: comp_arc_sta__example_feature__archdes_component_1 - :status: valid - :safety: ASIL_B - :security: NO - :belongs_to: comp__component_example_1 - :fulfils: comp_req__example_feature__archex_example_req - - .. needarch:: - :scale: 50 - :align: center - - {{ draw_component(need(), needs) }} - -.. Subcomponents - -.. comp:: Component 1_1 - :id: comp__archex_sub_component_1 - :status: valid - :safety: ASIL_B - :security: NO - :uses: logic_arc_int__example_feature__archex_logical_interface_2 - :implements: logic_arc_int__example_feature__archex_logical_interface_1 - :belongs_to: feat__example_feature - -.. comp:: Component 1_2 - :id: comp__archex_sub_component_2 - :status: valid - :safety: ASIL_B - :security: NO - :uses: logic_arc_int__example_feature__archex_logical_interface_2 - :implements: logic_arc_int__example_feature__archex_logical_interface_2 - :belongs_to: feat__example_feature - -.. comp:: Component 1_3 - :id: comp__archex_sub_component_3 - :status: valid - :safety: ASIL_B - :security: NO - :belongs_to: feat__example_feature - -Requirements for the Example -============================= - -.. Requirements - -.. stkh_req:: Example Stkh Req - :id: stkh_req__example_feature__archdes_example_req - :reqtype: Functional - :safety: ASIL_B - :security: YES - :rationale: needed for archdes example - :status: valid - - The platform shall provide the feature .... - -.. feat_req:: Example Feature Req - :id: feat_req__example_feature__archdes_example_req - :reqtype: Functional - :security: YES - :safety: ASIL_B - :satisfies: stkh_req__example_feature__archdes_example_req - :status: valid - :belongs_to: feat__example_feature - - The feature shall provide the functionality to .... - -.. comp_req:: Example Component Req - :id: comp_req__example_feature__archex_example_req - :reqtype: Functional - :security: YES - :safety: ASIL_B - :satisfies: feat_req__example_feature__archdes_example_req - :status: valid - :belongs_to: comp__component_example_2 - - The component shall provide the Logical Operation 4 to get the .. diff --git a/process/process_areas/architecture_design/guidance/component_architecture_template.rst b/process/process_areas/architecture_design/guidance/component_architecture_template.rst index 4eb5f896de..2fb0b9efd1 100644 --- a/process/process_areas/architecture_design/guidance/component_architecture_template.rst +++ b/process/process_areas/architecture_design/guidance/component_architecture_template.rst @@ -16,9 +16,10 @@ Component Architecture Template ############################### .. gd_temp:: Component Architecture Templates - :id: gd_temp__arch_comp - :status: valid - :tags: architecture_design - :complies: std_req__iso26262__software_741, std_req__iso26262__software_742, std_req__iso26262__software_743, std_req__iso26262__software_744, std_req__aspice_40__iic-04-04 + :id: gd_temp__arch_comp + :status: valid + :tags: architecture_design + :complies: std_req__iso26262__software_741, std_req__iso26262__software_742, std_req__iso26262__software_743, std_req__iso26262__software_744, std_req__aspice_40__iic-04-04 - For the content see here: :ref:`component_architecture_template` + For the content see the + `module template documentation `__. diff --git a/process/process_areas/architecture_design/index.rst b/process/process_areas/architecture_design/index.rst index 6761a261c2..8eb215b0ce 100644 --- a/process/process_areas/architecture_design/index.rst +++ b/process/process_areas/architecture_design/index.rst @@ -27,7 +27,6 @@ Architecture Design architecture_roles architecture_workflow architecture_workproducts - guidance/architecture_modeling_example .. needextend:: docname is not None and "process_areas/architecture_design" in docname diff --git a/process/process_areas/implementation/_assets/dd_example_ex_dyn.puml b/process/process_areas/implementation/_assets/dd_example_ex_dyn.puml deleted file mode 100644 index 145506f1f7..0000000000 --- a/process/process_areas/implementation/_assets/dd_example_ex_dyn.puml +++ /dev/null @@ -1,30 +0,0 @@ -/' - # ******************************************************************************* - # Copyright (c) 2024 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 - # ******************************************************************************* -'/ -.. - -@startuml - -title Sequence Diagram - unit1 & unit2 - -participant "unit1" as unit1 -participant "unit2" as unit2 - -unit1 -> unit2 : api1 -unit2 --> unit1 : int - -unit1 -> unit2 : api3 -unit2 --> unit1 : int - -@enduml diff --git a/process/process_areas/implementation/_assets/dd_example_ex_sta.puml b/process/process_areas/implementation/_assets/dd_example_ex_sta.puml deleted file mode 100644 index aead29a316..0000000000 --- a/process/process_areas/implementation/_assets/dd_example_ex_sta.puml +++ /dev/null @@ -1,37 +0,0 @@ -/' - # ******************************************************************************* - # Copyright (c) 2024 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 - # ******************************************************************************* -'/ -.. - -@startuml - -title Static View - dd example - -skinparam component { - BackgroundColor<> white -} - -skinparam rectangle { - BackgroundColor<> green -} - -' Define Features -component "component1" <> { - rectangle "unit1" as unit1 <> - rectangle "unit2" as unit2 <> -} - -unit1 ..> unit2 : uses - -@enduml diff --git a/process/process_areas/implementation/_assets/detailed_design_example.rst b/process/process_areas/implementation/_assets/detailed_design_example.rst deleted file mode 100644 index 420fbc1078..0000000000 --- a/process/process_areas/implementation/_assets/detailed_design_example.rst +++ /dev/null @@ -1,98 +0,0 @@ -.. - # ******************************************************************************* - # Copyright (c) 2025 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 - # ******************************************************************************* - -Example: Detailed Design -======================== - -Description ------------ - - - component is split into two units unit1 and unit2 based on single responsibility principle. - - unit2 is injected to unit1 one via dependency injection for testability. - - -Static Diagrams for Unit Interactions -------------------------------------- - -.. dd_sta:: dd example static - :id: dd_sta__example_feature__doc_approver - :security: NO - :safety: ASIL_B - :status: valid - :implements: comp_req__example_feature__archex_example_req - :satisfies: comp_arc_sta__example_feature__archdes_component_1 - :includes: sw_unit__example_feature__unit1, sw_unit__example_feature__unit2 - -.. uml:: dd_example_ex_sta.puml - -Dynamic Diagrams for Unit Interactions --------------------------------------- - -.. dd_dyn:: dd example dynamic - :id: dd_dyn__example_feature__dd_example_dynamic - :security: NO - :safety: ASIL_B - :status: valid - :implements: comp_req__example_feature__archex_example_req - :satisfies: comp_arc_sta__example_feature__archdes_component_1 - -.. uml:: dd_example_ex_dyn.puml - -Units within the Component --------------------------- -From here onwards the needs are defined in the source code and will be automatically generated and linked via doxygen. - -SW Unit -******* - -.. sw_unit:: unit1 - :id: sw_unit__example_feature__unit1 - :security: NO - :safety: ASIL_B - :status: valid - - Placeholder for the description that will be generated from doxygen - -Interface -********* - -.. sw_unit_int:: int1 - :id: sw_unit_int__example_feature__unit1_int1 - :security: NO - :safety: ASIL_B - :status: valid - - Placeholder for the description that will be generated from doxygen - -SW Unit -******* - -.. sw_unit:: unit2 - :id: sw_unit__example_feature__unit2 - :security: NO - :safety: ASIL_B - :status: valid - - Placeholder for the description that will be generated from doxygen - -Interface -********* - -.. sw_unit_int:: int2 - :id: sw_unit_int__example_feature__unit2_int2 - :security: NO - :safety: ASIL_B - :status: valid - - Placeholder for the description that will be generated from doxygen diff --git a/process/process_areas/implementation/guidance/implementation_guideline.rst b/process/process_areas/implementation/guidance/implementation_guideline.rst index 41a1dc54ee..008990c066 100644 --- a/process/process_areas/implementation/guidance/implementation_guideline.rst +++ b/process/process_areas/implementation/guidance/implementation_guideline.rst @@ -21,7 +21,8 @@ Guideline :complies: std_req__iso26262__software_744, std_req__iso26262__software_841, std_req__iso26262__software_842, std_req__aspice_40__iic-11-05 This document describes the general guidance for implementation based on the concept which is defined :need:`[[title]]`. -The concept includes an example of a Detailed Design. +An example of a Detailed Design is maintained in the +`module template documentation `_. Workflow for Implementation =========================== diff --git a/process/process_areas/implementation/index.rst b/process/process_areas/implementation/index.rst index be3d1aec34..d2c26a8473 100644 --- a/process/process_areas/implementation/index.rst +++ b/process/process_areas/implementation/index.rst @@ -26,7 +26,6 @@ Implementation implementation_roles implementation_workflow implementation_workproducts - _assets/detailed_design_example.rst .. needextend:: docname is not None and "process_areas/implementation" in docname :+tags: implementation diff --git a/process/process_areas/requirements_engineering/guidance/requirements_templates.rst b/process/process_areas/requirements_engineering/guidance/requirements_templates.rst index 624c3205dd..0ee95a34a8 100644 --- a/process/process_areas/requirements_engineering/guidance/requirements_templates.rst +++ b/process/process_areas/requirements_engineering/guidance/requirements_templates.rst @@ -22,28 +22,32 @@ Templates :status: valid :complies: std_req__iso26262__system_6411, std_req__iso26262__system_6413, std_req__iso26262__support_641, std_req__iso26262__support_6421, std_req__iso26262__support_6425, std_req__aspice_40__SWE-1-BP1 - See :need:`stkh_req__requirements__template` + See the stakeholder requirements template in the + `module template documentation `__. .. gd_temp:: Feature Requirements Template :id: gd_temp__req_feat_req :status: valid :complies: std_req__iso26262__support_641, std_req__iso26262__support_6421, std_req__iso26262__support_6425, std_req__aspice_40__SWE-1-BP1 - See :need:`feat_req__feature_name__some_title` + See the feature requirements template in + :doc:`../../../folder_templates/features/feature_name/requirements/index` .. gd_temp:: Component Requirements Template :id: gd_temp__req_comp_req :status: valid :complies: std_req__iso26262__support_641, std_req__iso26262__support_6421, std_req__iso26262__support_6425, std_req__iso26262__support_12425, std_req__aspice_40__SWE-1-BP1 - See :need:`comp_req__component_name__some_title` + See the component requirements template in + :doc:`../../../folder_templates/modules/module_name/component_name/docs/requirements/index` .. gd_temp:: AoU Requirement Template :id: gd_temp__req_aou_req :status: valid :complies: std_req__iso26262__support_641, std_req__iso26262__support_6421, std_req__iso26262__support_6425, std_req__aspice_40__SWE-1-BP1 - See :need:`aou_req__platform__some_other_title`, :need:`aou_req__feature_name__some_other_title`, :need:`aou_req__component_name__another_title` + See the Assumption of Use requirement snippets in the + `module template documentation `__. .. gd_temp:: Process Requirements Template :id: gd_temp__req_process_req From 88e3308f7ebf26db0343395e1b2bb1ad7d0f6f18 Mon Sep 17 00:00:00 2001 From: "jhr2hi@bosch.com" Date: Thu, 2 Apr 2026 08:51:24 +0200 Subject: [PATCH 2/2] change link path --- .../feature_name/architecture/index.rst | 4 ++-- .../architecture_concept.rst | 18 +++++++++--------- .../guidance/architecture_guideline.rst | 10 ++++------ 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/process/folder_templates/features/feature_name/architecture/index.rst b/process/folder_templates/features/feature_name/architecture/index.rst index 18797c22f2..85aeed5e32 100644 --- a/process/folder_templates/features/feature_name/architecture/index.rst +++ b/process/folder_templates/features/feature_name/architecture/index.rst @@ -76,7 +76,7 @@ Static Architecture ------------------- The live feature architecture template snippets are maintained in the -`module template documentation `__. +`module template documentation `__. .. code-block:: rst @@ -155,7 +155,7 @@ The following modules are needed to be defined to be able to draw the static fea They will be replaced by linking the proper module definitions in the used module's repositories as soon as those exist. The rendered module and used-component examples are maintained in the -`module template documentation `_. +`module template documentation `_. .. code-block:: rst diff --git a/process/process_areas/architecture_design/architecture_concept.rst b/process/process_areas/architecture_design/architecture_concept.rst index 6aeb77ed26..ae8b9ccb06 100644 --- a/process/process_areas/architecture_design/architecture_concept.rst +++ b/process/process_areas/architecture_design/architecture_concept.rst @@ -124,7 +124,7 @@ Static View ----------- The first viewpoint is named as *feature architecture*. It displays the SW Components within the SW modules (= dependable elements) which are required to realize the feature including their interactions. Also the *logical interfaces* and the interaction between the feature and the user are included in this view. On this architectural level the feature requirements shall be allocated. A full rendered example for the static architecture is maintained in the -`module template documentation `__. +`module template documentation `__. In all views, the components which are marked as ASIL_B related are drawn with red borders. @@ -151,7 +151,7 @@ Interface View -------------- On the feature level only *logical interfaces* shall be displayed. This means that only logical names shall be provided for both the interface and the operations within. Those *logical interfaces* shall be connected to component interfaces on the module view. A rendered logical-interface example is maintained in the -`module template documentation `__. +`module template documentation `__. SW Module View ============== @@ -159,7 +159,7 @@ SW Module View A SW Module (=dependable element) is packaging a component or a set of components which is developed, documented and released together. It is not meant to be an architectural element which means that no requirements can be allocated to it. On this level also a view shall be defined which is called *Module View*. It represents the allocation of components into modules and displays the dependencies between the single modules. In this view also cyclic dependencies between modules can be identified. A rendered module-view example is maintained in the -`module template documentation `__. +`module template documentation `__. Component View ============== @@ -172,7 +172,7 @@ Static View The *component architecture* describes the implementation of the functionalities in a white-box view. It describes the internal structure of SW components and their decomposition. It provides a more detailed information concerning the respective interfaces of a component. If a SW component interacts with a different component it is also included via a *use* relationship in the diagram. An example of the *component architecture* is displayed here: A full rendered component-architecture example is maintained in the -`module template documentation `__. +`module template documentation `__. The decomposition is optional and relies on the complexity of the component. Thus there is no graphic representation required for it. In all views the components which are marked as ASIL_B related are drawn in red color. @@ -198,7 +198,7 @@ Interface View -------------- The component interface view shows the actual interfaces of the component. Also links to their corresponding logical interfaces are displayed in this view. A rendered component-interface example is maintained in the -`module template documentation `__. +`module template documentation `__. Platform View ============= @@ -422,7 +422,7 @@ Feature Architecture ^^^^^^^^^^^^^^^^^^^^ The following section links to the rendered feature example that is now maintained in the -`module template documentation `__. +`module template documentation `__. .. code-block:: rst @@ -455,7 +455,7 @@ Component Architecture The following section is an example, how an component looks like and how the detail design of an component is described. Please note that components with an "ASIL_B" safety rating are highlighted with red borders in the diagram (e.g., "Component 1"). The rendered component examples are maintained in the -`module template documentation `__. +`module template documentation `__. .. code-block:: rst @@ -507,7 +507,7 @@ Besides storing the output it is also possible to display the generated PlantUML Debug example for component architecture: See the rendered debug example in the -`module template documentation `__. +`module template documentation `__. .. _manual_addition_uml: @@ -536,7 +536,7 @@ To make *needuml* work we have to replace the *need()* call with a different fun CM -> LI1: EXTRA_LINKAGE_MANUALLY_ADDED See the rendered manual-edit example in the -`module template documentation `__. +`module template documentation `__. You can add any layout or additional configuration you want before you call the *draw_xyz*. diff --git a/process/process_areas/architecture_design/guidance/architecture_guideline.rst b/process/process_areas/architecture_design/guidance/architecture_guideline.rst index d1b75f7e70..b6e0902ba4 100644 --- a/process/process_areas/architecture_design/guidance/architecture_guideline.rst +++ b/process/process_areas/architecture_design/guidance/architecture_guideline.rst @@ -131,7 +131,7 @@ The relations of the static elements are described in :ref:`metamodel_architectu For the modelling of the architecture a sphinx extension is available: :ref:`arch_gen_sphinx` An example of modelling the architecture can be found in the - `module template documentation `_. + `module template documentation `_. .. _allocate_feature_requirements: @@ -221,11 +221,9 @@ UML diagram selection Static architecture ------------------- -As can be seen from the rendered feature example in the -`module template documentation `__ -and the rendered component example in the -`module template documentation `__, -for the static architecture a UML component diagram is expected (and supported by the tooling). +As can be seen from the rendered feature and the component example in the +`module template documentation `__, +for the static architecture a UML component diagram is expected (and supported by the tooling). Dynamic architecture --------------------