Skip to content
Snippets Groups Projects
Commit b2d3775d authored by Kristina Mazur's avatar Kristina Mazur
Browse files

Adapted developer documention (added testing instruction and reordered paged);...

Adapted developer documention (added testing instruction and reordered paged); adapted module overview in library and sizing; fixed typos
parent 27ef96c4
No related branches found
No related tags found
2 merge requests!76Draft: Updated Python code example,!73Initial open source version
Pipeline #1415621 passed
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="64.558327mm"
height="57.463997mm"
viewBox="0 0 64.558327 57.463997"
version="1.1"
id="svg1"
inkscape:export-filename="Rastergrafik.svg"
inkscape:export-xdpi="97.675713"
inkscape:export-ydpi="97.675713"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm" />
<defs
id="defs1">
<linearGradient
id="linearGradient18"
inkscape:collect="always">
<stop
style="stop-color:#1a1a1a;stop-opacity:1;"
offset="0"
id="stop18" />
<stop
style="stop-color:#1a1a1a;stop-opacity:0;"
offset="1"
id="stop19" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="-39.183297 : 71.966521 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="130.75039 : 71.966521 : 1"
inkscape:persp3d-origin="45.783542 : 22.46652 : 1"
id="perspective6" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient18"
id="linearGradient19"
x1="44.099556"
y1="207.63306"
x2="128.20709"
y2="207.63306"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0.16076398,0.54606116)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient18"
id="linearGradient29"
gradientUnits="userSpaceOnUse"
x1="44.099556"
y1="207.63306"
x2="128.20709"
y2="207.63306"
gradientTransform="matrix(0.80920799,0,0,1,-38.820612,-162.45647)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient18"
id="linearGradient30"
gradientUnits="userSpaceOnUse"
x1="44.099556"
y1="207.63306"
x2="128.20709"
y2="207.63306"
gradientTransform="matrix(0.80920799,0,0,1,-38.820612,-162.45647)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient18"
id="linearGradient31"
gradientUnits="userSpaceOnUse"
x1="44.099556"
y1="207.63306"
x2="128.20709"
y2="207.63306"
gradientTransform="matrix(0.80920799,0,0,1,-38.820612,-162.45647)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient18"
id="linearGradient32"
gradientUnits="userSpaceOnUse"
x1="44.099556"
y1="207.63306"
x2="128.20709"
y2="207.63306"
gradientTransform="matrix(0.80920799,0,0,1,-38.820612,-162.45647)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient18"
id="linearGradient33"
gradientUnits="userSpaceOnUse"
x1="44.099556"
y1="207.63306"
x2="128.20709"
y2="207.63306"
gradientTransform="matrix(0.80920799,0,0,1,-38.820612,-162.45647)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient18"
id="linearGradient34"
gradientUnits="userSpaceOnUse"
x1="44.099556"
y1="207.63306"
x2="128.20709"
y2="207.63306"
gradientTransform="matrix(0.80920799,0,0,1,-38.820612,-162.45647)" />
</defs>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-1.2190973,-1.0752278)">
<g
sodipodi:type="inkscape:box3d"
id="g6"
style="fill:url(#linearGradient19);stroke:#b3b3b3;stroke-width:0;stroke-linecap:round;paint-order:fill markers stroke"
inkscape:perspectiveID="#perspective6"
inkscape:corner0="1.0773091 : 0.0043692419 : 0 : 1"
inkscape:corner7="0.30793536 : -0.045355937 : 0.72972311 : 1"
inkscape:export-filename="tesz.svg"
inkscape:export-xdpi="97.675713"
inkscape:export-ydpi="97.675713">
<path
sodipodi:type="inkscape:box3dside"
id="path11"
style="fill:url(#linearGradient29);fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="11"
d="m 36.481464,2.6504547 28.108998,6.070594 V 33.124146 L 36.481464,20.364957 Z"
points="64.590462,8.7210487 64.590462,33.124146 36.481464,20.364957 36.481464,2.6504547 " />
<path
sodipodi:type="inkscape:box3dside"
id="path6"
style="fill:url(#linearGradient30);fill-rule:evenodd;stroke:#b3b3b3;stroke-width:0.860698px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="6"
d="M 2.9381575,8.2982923 V 32.235595 L 36.481464,20.364957 V 2.6504547 Z"
points="2.9381575,32.235595 36.481464,20.364957 36.481464,2.6504547 2.9381575,8.2982923 " />
<path
sodipodi:type="inkscape:box3dside"
id="path10"
style="fill:url(#linearGradient31);fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="13"
d="M 2.9381575,32.235595 26.998367,59.096118 64.590462,33.124146 36.481464,20.364957 Z"
points="26.998367,59.096118 64.590462,33.124146 36.481464,20.364957 2.9381575,32.235595 " />
<path
sodipodi:type="inkscape:box3dside"
id="path7"
style="fill:url(#linearGradient32);fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="5"
d="M 2.9381575,8.2982923 26.998367,21.078049 64.590462,8.7210487 36.481464,2.6504547 Z"
points="26.998367,21.078049 64.590462,8.7210487 36.481464,2.6504547 2.9381575,8.2982923 " />
<path
sodipodi:type="inkscape:box3dside"
id="path9"
style="fill:url(#linearGradient33);fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.03676px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="14"
d="M 26.998367,21.078049 V 59.096118 L 64.590462,33.124146 V 8.7210487 Z"
points="26.998367,59.096118 64.590462,33.124146 64.590462,8.7210487 26.998367,21.078049 " />
<path
sodipodi:type="inkscape:box3dside"
id="path8"
style="fill:url(#linearGradient34);fill-rule:evenodd;stroke:#b3b3b3;stroke-width:0.860698px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:box3dsidetype="3"
d="M 2.9381575,8.2982923 26.998367,21.078049 V 59.096118 L 2.9381575,32.235595 Z"
points="26.998367,21.078049 26.998367,59.096118 2.9381575,32.235595 2.9381575,8.2982923 " />
</g>
</g>
</svg>
docs/assets/images/modules/engine-sizing.png

130 B

......@@ -5,7 +5,7 @@ authors:
- Sebastian Oberschwendtner
date: 2023-09-12
---
# UNCIADO C++ Style Guide
# UNICADO C++ Style Guide
!!! tip
Consistency in code style is the most important thing!
......
---
title: Testing Guidelines
summary: How to test in UNICADO
authors:
- Kristina Mazur
date: 2024-08-05
---
## Introduction
_"Software is well known for low reliability and lack of trustworthiness."_ As mentioned by Spillner and Linz, software is not reliable, because we are error-prone and so we need testing. Consider the V-model for software development, there are 4 important levels:
- **Unit testing**: It methodically examines the lowest-level architectural components of a system.
- **Module testing**: It involves testing individual modules of a software system in isolation to ensure the correct interaction of the units.
- **Integration testing**: This concerns verifying the interactions and interfaces between different modules to ensure they work together seamlessly and produce the expected results when integrated.
- **System testing**: This level checks if the complete, integrated system actually fulfills its specified requirements.
!!! note
For more background information, it is referred to the publications "UNICADO Software Maintenance, Revision, and Management in a Distributed Collaboration" and "Test Automation for Increased Robustness Within the Conceptual Aircraft Design with UNICADO" (will be linked as soon as they are public)
These testing guidelines gives an overview how we integrated that in UNICADO. Generally, it can be split into 2 aspects:
- [Manual testing](#manual) including the blackbox/module and unit tests
- [Automated testing](#automated) triggering the _testFramework_
### Manual testing {#manual}
As you might have seen in the [C++ build instructions](../developer/build/cpp.md), there exist 2 flags to configure and build tests, so we can do:
- module/blackbox tests or
- unit tests.
#### Blackbox tests
A blackbox test runs a complete module with different test cases and then checks whether a specific result is calculated or set compared to expected values defined in a `blackBoxTestCases.xml`. This is implemented in the library [blackboxTest description](../modules/libraries.md).
!!! attention
This will only work if the module has a only the test suite defined which corresponds to the `aircraft_exchange_file`
To run the test, you need to add the flag when configuring your module
=== "Windows"
``` { .sh .copy }
cmake --preset x64-windows-release -DBUILD_BLACKBOXTESTS=ON
```
=== "MinGW"
``` { .sh .copy }
cmake --preset x64-mingw-release -DBUILD_BLACKBOXTESTS=ON
```
=== "Linux"
``` { .sh .copy }
cmake --preset x64-linux-release -DBUILD_BLACKBOXTESTS=ON
```
Then you can execute the test
=== "Windows"
```sh
cmake --build --preset x64-windows-release --target blackbox_<target>
```
=== "MinGW"
```sh
cmake --build --preset x64-mingw-release --target blackbox_<target>
```
=== "Unix"
```sh
cmake --build --preset x64-linux-release --target blackbox_<target>
```
#### Unit tests
These tests involve systematically checking the lowest-level component, like a function, within a module.
!!! note
This is currently only implemented for the module/target **propulsionDesign**.
To run the test, you need to add the flag when configuring your module
=== "Windows"
``` { .sh .copy }
cmake --preset x64-windows-release -DBUILD_UNITTEST=ON
```
=== "MinGW"
``` { .sh .copy }
cmake --preset x64-mingw-release -DBUILD_UNITTEST=ON
```
=== "Linux"
``` { .sh .copy }
cmake --preset x64-linux-release -DBUILD_UNITTEST=ON
```
Then you can execute the test
=== "Windows"
```sh
cmake --build --preset x64-windows-release --target runtest_<target>
```
=== "MinGW"
```sh
cmake --build --preset x64-mingw-release --target runtest_<target>
```
=== "Unix"
```sh
cmake --build --preset x64-linux-release --target runtest_<target>
```
### Automated testing {#automated}
To reduce the workload of the developer, tests can be automated. For that, the additional software [testFramework](../modules/additional-software.md) can be used. It can be executed manually (see [python build instruction](../developer/build/python.md)) or be linked to the CI/CD pipeline. The latter one ensures that it is tested before every merge request.
!!! attention
The `testFramework` is currently under construction :construction: and still needs to be linked to the CI/CD pipeline
......@@ -84,7 +84,18 @@ You can set different atmospheric conditions (e.g. *ISA+25*) and calculate the p
|Module Version|Language|License|Documentation|Dependencies|
|:---:|:---:|:---:|---|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link]()|-|
|2.1.0|:simple-cplusplus: |GPLv3|[Link]()||
---
## blackboxTest
![Icon](../assets/images/modules/blackbox.svg){.overview-img align=left}
The **blackboxTest** library provides an interface to run a complete module with different test cases and then checks whether a specific result is calculated or set compared to expected values defined in a `blackBoxTestCases.xml`. The tests are realized with the help of the _googleTest_ framework .
{.overview-item}
|Module Version|Language|License|Documentation|Dependencies|
|:---:|:---:|:---:|---|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link]()|[googleTest](https://google.github.io/googletest/)|
---
......@@ -115,7 +126,7 @@ It has helper functions to extract and interpolate data of the results from the
## moduleBasics
![Icon](../assets/images/modules/module-basics.svg){.overview-img align=left}
This library provides the basis structure for the modular approach of the **UNCIADO** tools.
This library provides the basis structure for the modular approach of the **UNICADO** tools.
The tools are intended to follow the *Strategy Design Pattern* to execute at different fidelity levels.
The library gives a template how modules should be structured and gives helpers which can be used to select and implement the different fidelity methods.
{.overview-item}
......
......@@ -3,7 +3,8 @@ title: Sizing
summary: Overview of the sizing modules of aircraftDesign repository
authors:
- Sebastian Oberschwendtner
date: 2023-09-08
- Kristina Mazur
date: 2024-08-05
glightbox: false
---
# Sizing Tools
......@@ -39,23 +40,6 @@ It takes takes the controllability as wells as the static margin of the aircraft
---
## engineSizing
![Icon](../assets/images/modules/engine-sizing.png){.overview-img align=left}
Currently one engine performance deck is available (of the V2527-A5 engine).
This performance deck was created with an external calculation tool.
The engine performance deck containing serval parameters (like thrust, fuel-flow, ...) as a function of the flight Mach number and the altitude.
This deck is the basis for the UNICADO engineSizing module.
The engine will be scaled by the engineSizing module to match the specific thrust requirements.
Moreover, an engine bucket curve and several engine deck plots can be created.
Also, the engineSizing module set the required parameters of the engine performance for the aircraft design process in the central aircraft exchange file.
{.overview-item}
|Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link]()|
---
## fuselageDesign
![Icon](../assets/images/modules/fuselage-design.png){.overview-img align=left}
The **fuselageDesign** module calculates characteristic parameters and generates the passenger cabin and fuselage layout for the entire aircraft project.
......@@ -102,17 +86,20 @@ The **landingGearDesign** module calculates characteristic parameters for the la
---
## propulsionIntegration
![Icon](../assets/images/modules/propulsion-integration.svg){.overview-img align=left}
The **propulsionIntegration** module integrates the propulsion system to the aircraft.
This occurs in relation to the user settings (e.g. integration of the propulsion on the wing or fuselage, ...).
## propulsionDesign
![Icon](../assets/images/modules/propulsion-design.svg){.overview-img align=left}
The **propulsionDesign** module designs, integrates and analyzes the propulsion system to the aircraft.
It uses engine performance deck containing serval parameters (like thrust, fuel-flow, ...) as a function of the flight Mach number and the altitude.
The engine will be scaled by the module to match the specific thrust requirements.
Moreover, an engine bucket curve and several engine deck plots can be created.
Additionally, the propulsion is integrated in relation to the user settings (e.g. integration of the propulsion on the wing or fuselage, ...).
Depending on the location of the integration, the tool calculates the nacelle and pylon geometry.
If a geometry already exists, it is possible to scale it.
Also the mass properties are analyzed.
{.overview-item}
|Module Version|Language|License|Documentation|
|:---:|:---:|:---:|---|
|2.1.0|:simple-cplusplus: |GPLv3|[Link]()|
|3.0.0|:simple-cplusplus: |GPLv3|[Link]()|
---
......
......@@ -104,9 +104,10 @@ nav:
- 'Build':
- 'C++': 'developer/build/cpp.md'
- 'Python': 'developer/build/python.md'
- 'Release Package/Installer': 'developer/build/release-package.md'
- 'Libraries': 'developer/including-libraries.md'
- 'CMake Presets': 'developer/cmake-presets.md'
- 'Testing Guidelines': 'developer/testing.md'
- 'Release Package/Installer': 'developer/release-package.md'
- 'Style Guide':
- 'C++': 'developer/style/cpp.md'
- 'Python': 'developer/style/python.md'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment