Software Development Plan#

Software Development Plan
status: valid
security: YES
safety: ASIL_B
tags: platform_management

Purpose#

The main purpose of the software development plan is to define several software development related conditions:

  • selection of design and programming language

  • design guideline

  • coding guideline (e.g. MISRA, can also include style guide or naming convention)

  • SW configuration guideline

  • development tools

Objectives and Scope#

Objective is to define the main SW development policies as defined in the “Purpose” in an ISO 26262 and ASPICE compliant manner. Scope is the complete SW platform and the development parts of the process.

Approach#

Design and programming language#

For specifying Detailed Design (like for the Architecture) a mixture of UML diagrams and natural language is used. Additionally for the Detailed Design linking to code, Doxygen style comments are used. This is described in doc_concept__imp_concept and guided by gd_temp__detailed_design

As required in Programming languages for a... (stkh_req__dev_experience__prog_languages), S-CORE allows the use of two programming languages:

C++ with the language set of C++17 - in case additional elements from C++20 are needed this will be considered by rl__safety_manager, rl__security_manager and rl__quality_manager and based on their analysis decided by the project lead circle (rl__project_lead).

Rust - in Edition 2021 - selection of language edition has still to be done in the S-CORE project. For the Rust code of ASIL rated units the “safe subset” shall be used (which is checked by the compiler by configuration of #![forbid(unsafe_code)] in lib.rs)

C language is allowed in incubation phase, as long it is compilable be the selected compiler, but not for a S-CORE release.

Design guideline#

The design guideline is defined in doc_concept__imp_concept and gd_guidl__implementation.

API guidelines#

To provide the user with a consistent approach on the use of APIs, there are guidelines documented in API Guidelines (doc__api_guidelines) and Rust API design guidelines (doc__rust_api_design), this defines for example the error handling concept or rules to improve user experience.

Coding guidelines#

C++ - see Coding Guidelines C++ (doc__cpp_coding_guidelines)

Rust - see Coding Guidelines Rust (doc__rust_coding_guidelines)

SW configuration guideline#

The configuration of the software is done by the code. Which means that there are no external configuration files.

SW development tools#

This list will evolve into the complete “Tool List” S-CORE Tools Overview for the S-CORE project used for tool evaluation and qualification. In the moment the Software Verification Plan (doc__verification_plan) contains additional tools used in verification.

Additional tools for static and dynamic analysis (in addition to compilers and Clang-Tidy) are currently evaluated: #244

GitHub

is used for hosting, versioning and contribution of the software. Within pull requests it’s possible to contribute. For contribution a separate process description is Contribution Guideline (doc__contr_guideline) available. In the discussion section the information regarding meeting minutes and Working Sections were stored. Within issues can bugfixes, improvements, blank issues set up. It’s also possible to report there Security vulnerabilities. GitHub Actions is used as a support for continuous integration.

Sphinx

is used for software documentation to generate html-sides from reStructuredText.

Sphinx-Needs

is used for docs-as-code Doc-as-Code (doc_tool__doc_as_code) based documentation that is created and managed by the sphinx documentation generator. With “needs” objects, created in rst-files, requirements, static architecture views and other Sw development documentation is generated. Sphinx-Needs is 100% compliant to Sphinx and reStructuredText.

PlantUML

this UML drawing tool is used for dynamic and static diagrams for unit interaction. Also for dynamic architecture views.

Draw.io

this drawing tool is used to create flowcharts and diagrams for all uses where PlantUML is not suited e.g. in process or concept descriptions

Host Compiler C++

GCC is used as host C++ compiler with its associated linker. It’s used as a development (compilation and linking) and verification tool as it generates compiler warnings and builds unit tests and binaries for SW integration testing.

Target Compiler C++

QCC the qualify-able compiler/linker from Blackberry offered together with its Posix conform Operating System QNX is planned to be used for target compilation.

Clang-tidy

is used in conjunction with the Clang compiler to perform static analysis.

Host Compiler Rust

There is currently no selection of a Rust compiler for S-CORE. Pick your own favorite.

Target Compiler Rust

The qualified Ferrocene compiler is planned to be used.

Bazel

The main build environment of the project is based on Bazel. It it used to build software components, documentation, and automated tests.