Skip to content

Commit e050ee3

Browse files
authored
Merge pull request #64 from micro-ROS/feature/quality-level-rep-2004
Introduce quality level according to ROS REP 2004
2 parents 3dbc56e + a51dd4c commit e050ee3

File tree

2 files changed

+143
-0
lines changed

2 files changed

+143
-0
lines changed
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
This document is a declaration of software quality for the `system_modes` package, based on the guidelines in [REP-2004](https://www.ros.org/reps/rep-2004.html).
2+
3+
# System Modes Quality Declaration
4+
5+
The package `system_modes` claims to be in the **Quality Level 3** category.
6+
7+
Below are the rationales, notes, and caveats for this claim, organized by each requirement listed in the [Package Quality Categories in REP-2004](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#package-quality-categories) of the ROS 2 developer guide.
8+
9+
## Version Policy [1]
10+
11+
### Version Scheme [1.i]
12+
13+
`system_modes` uses `semver` according to the recommendation for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#versioning).
14+
15+
### Version Stability [1.ii]
16+
17+
`system_modes` is at a stable version, i.e. `>= 1.0.0`.
18+
The current version can be found in its [package.xml](package.xml), and its change history can be found in its [CHANGELOG](CHANGELOG.rst).
19+
20+
### Public API Declaration [1.iii]
21+
22+
All symbols in the installed headers are considered part of the public API.
23+
24+
Except for the exclusions listed below, all installed headers are in the `include` directory of the package, headers in any other folders are not installed and considered private.
25+
26+
### API Stability Policy [1.iv]
27+
28+
`system_modes` will not break public API within a released ROS distribution, i.e. no major releases once the ROS distribution is released.
29+
30+
### ABI Stability Policy [1.v]
31+
32+
`system_modes` contains C++ code and therefore must be concerned with ABI stability, and will maintain ABI stability within a ROS distribution.
33+
34+
### ABI and ABI Stability Within a Released ROS Distribution [1.vi]
35+
36+
`system_modes` will not break API nor ABI within a released ROS distribution, i.e. no major releases once the ROS distribution is released.
37+
38+
## Change Control Process [2]
39+
40+
`system_modes` follows the recommended guidelines for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#change-control-process).
41+
42+
### Change Requests [2.i]
43+
44+
All changes will occur through a pull request, check [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#change-control-process) for additional information.
45+
46+
### Contributor Origin [2.ii]
47+
48+
This package uses DCO as its confirmation of contributor origin policy. More information can be found in [CONTRIBUTING](../CONTRIBUTING.md).
49+
50+
### Continuous Integration [2.iv]
51+
52+
All pull requests must pass CI on all [tier 1 platforms](https://www.ros.org/reps/rep-2000.html#support-tiers) (currently not true for tier 1 platform _Windows_).
53+
Latest build results can be seen [here](https://github.com/micro-ROS/system_modes/actions).
54+
55+
### Documentation Policy [2.v]
56+
57+
All pull requests must resolve related documentation changes before merging.
58+
59+
## Documentation [3]
60+
61+
### Feature Documentation [3.i]
62+
63+
`system_modes` has a [feature list](http://docs.ros2.org/latest/api/system_modes/) and each item in the list links to the corresponding feature documentation. There is documentation for all of the features, and new features require documentation before being added.
64+
65+
### License [3.iii]
66+
67+
The license for `system_modes` is Apache 2.0, and a summary is in each source file, the type is declared in the [`package.xml`](./package.xml) manifest file, and a full copy of the license is in the [`LICENSE`](../LICENSE) file.
68+
69+
There is an automated test which runs a linter that ensures each file has a license statement. [Here](http://build.ros2.org/view/Rpr/job/Rpr__system_modes__ubuntu_focal_amd64/lastCompletedBuild/testReport/system_modes/)**TODO** can be found a list with the latest results of the various linters being run on the package.
70+
71+
### Copyright Statements [3.iv]
72+
73+
The copyright holders each provide a statement of copyright in each source code file in `system_modes`.
74+
75+
There is an automated test which runs a linter that ensures each file has at least one copyright statement. Latest linter result report can be seen [here](http://build.ros2.org/view/Rpr/job/Rpr__system_modes__ubuntu_focal_amd64/lastCompletedBuild/testReport/system_modes/copyright/). **TODO**
76+
77+
## Testing [4]
78+
79+
### Feature Testing [4.i]
80+
81+
Each feature in `system_modes` has corresponding tests which simulate typical usage, located in the [`test`](https://github.com/micro-ROS/system_modes/tree/master/system_modes/test) directory.
82+
New features are required to have tests before being added.
83+
Latest test results can be seen [here](https://github.com/micro-ROS/system_modes/actions).
84+
85+
### Coverage [4.iii]
86+
87+
`system_modes` follows the recommendations for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#code-coverage), and opts to use line coverage instead of branch coverage.
88+
89+
This includes:
90+
91+
- tracking and reporting line coverage statistics
92+
- achieving and maintaining a reasonable branch line coverage (90-100%)
93+
- no lines are manually skipped in coverage calculations
94+
95+
Changes are required to make a best effort to keep or increase coverage before being accepted, but decreases are allowed if properly justified and accepted by reviewers.
96+
97+
Current coverage statistics can be viewed [here](https://codecov.io/gh/micro-ROS/system_modes).
98+
99+
`system_modes` has a line coverage `>= 20%`, which is calculated over all directories within `system_modes`.
100+
101+
### Linters and Static Analysis [4.v]
102+
103+
`system_modes` uses and passes all the ROS2 standard linters and static analysis tools for a C++ package as described in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#linters-and-static-analysis). Passing implies there are no linter/static errors when testing against CI of supported platforms.
104+
105+
Latest linting results can be seen [here](https://github.com/micro-ROS/system_modes/actions).
106+
107+
## Dependencies [5]
108+
109+
Below are evaluations of each of `system_modes`'s run-time and build-time dependencies that have been determined to influence the quality.
110+
111+
It has several "buildtool" dependencies, which do not affect the resulting quality of the package, because they do not contribute to the public library API.
112+
113+
It also has several test dependencies, which do not affect the resulting quality of the package, because they are only used to build and run the test code.
114+
115+
### Direct and Optional Runtime ROS Dependencies [5.i]/[5.ii]
116+
117+
`system_modes` has the following runtime ROS dependencies:
118+
119+
#### `rclcpp_lifecycle`
120+
121+
The `rclcpp` package provides theROS client library in C++. It is **Quality Level 1**, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp/QUALITY_DECLARATION.md). The same is true for its transient dependencies, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp/QUALITY_DECLARATION.md).
122+
123+
#### `rclcpp_lifecycle`
124+
125+
The `rclcpp_lifecycle` package provides the ROS 2 standard lifecycle in C++. It is **Quality Level 1**, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp_lifecycle/QUALITY_DECLARATION.md). The same is true for its transient dependencies, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp_lifecycle/QUALITY_DECLARATION.md).
126+
127+
### Direct Runtime non-ROS Dependency [5.iii]
128+
129+
`system_modes` has no run-time or build-time dependencies that need to be considered for this declaration.
130+
131+
## Platform Support [6]
132+
133+
`system_modes` supports all of the tier 1 platforms as described in [REP-2000](https://www.ros.org/reps/rep-2000.html#support-tiers) (currently not true for tier 1 platform _Windows_), and tests each change against all of them.
134+
135+
## Security
136+
137+
### Vulnerability Disclosure Policy [7.i]
138+
139+
This package conforms to the Vulnerability Disclosure Policy in [REP-2006](https://www.ros.org/reps/rep-2006.html).

system_modes/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,7 @@ When designing the hierarchy of your system, try to group parts semantically, e.
148148
When designing system modes for your system, try to focus on platform-specific aspects (so those that are generally present) rather than aspects specific to a certain application. Good examples are *degraded* and *performance* modes of the platform, bad examples are system modes to encode the current number of (grasping) re-tries.
149149

150150
Also, do not model any "read-only" system modes, e.g., modes that discretize/encode a read-only internal state. An example for such a mode specification to avoid is *low energy* and *full*, discretizing the charging level of a battery component. The System Modes concept assumes that the activatability of a system mode of a given node or subsystem should depend only on the states and modes of the other nodes and subsystems (and on the higher-level task executed by some deliberation layer). Note that the same applies to the ROS 2 node lifecycle states (*Unconfigured*, *Inactive*, etc.). The only exception is the *ErrorProcessing* state, which can be entered autonomously by the node itself. Within the mode inference, if a node performs a transition to *ErrorProcessing*, this is automatically propagated upwards as inferred state along the hierarchy. It is up to the deliberation layer to handle the failure of this node or subsystem.
151+
152+
## Quality Declaration
153+
154+
This package claims to be in the Quality Level 3 category, see the [Quality Declaration](QUALITY_DECLARATION.md) for more details.

0 commit comments

Comments
 (0)