This document is a declaration of software quality for the tracetools
package, based on the guidelines in REP-2004.
The tracetools
package claims to be in the Quality Level 1 category.
Below are the rationales, notes, and caveats for this claim, organized by each requirement listed in the Package Requirements for Quality Level 1 in REP-2004.
tracetools
uses semver
according to the recommendation for ROS Core packages in the ROS 2 Developer Guide.
tracetools
is at or above a stable version, i.e. >= 1.0.0
.
All symbols in the installed headers that are not part of a ::detail
namespace and that do not have a leading underscore are considered part of the public API.
All installed headers are in the include
directory of the package, headers in any other folders are not installed and considered private.
tracetools
will not break public API within a released ROS distribution, i.e. no major releases once the ROS distribution is released.
tracetools
will maintain ABI stability within a ROS distribution.
tracetools
follows the recommended guidelines for ROS Core packages in the ROS 2 Developer Guide.
All changes occur through a pull request.
tracetools
uses DCO as its confirmation of contributor origin policy. More information can be found in CONTRIBUTING.
There is an automated DCO check for change requests.
All pull requests must have at least one peer review.
All pull requests must pass CI on Ubuntu amd64.
Nightly results for all tier 1 platforms as defined in REP-2000 can be found here (note that only the tagged release used in the ros2.repos
file is tested nightly):
All pull requests must resolve related documentation changes before merging.
tracetools
has documentation for all of its features, and new features require documentation before being added.
It does not currently have a features list with links to the corresponding feature documentation.
tracetools
has embedded API documentation which can be generated using doxygen. The latest version can be viewed here.
New additions to the public API require documentation before being added.
The license for tracetools
is Apache 2.0, and a summary is in each source file, the type is declared in the package.xml
manifest file, and a full copy of the license is in the LICENSE
file.
There is an automated test which runs a linter that ensures each file has a license statement.
The copyright holders each provide a statement of copyright in each source code file in tracetools
.
There is an automated test which runs a linter that ensures each file has at least one copyright statement.
Each feature in tracetools
has corresponding system tests which simulate typical usage, and they are located in the test_tracetools
package.
New features are required to have tests before being added.
Each part of the public API has tests, and new additions or changes to the public API require tests before being added. The tests aim to cover both typical usage and corner cases, but are quantified by contributing to code coverage.
tracetools
follows the recommendations for ROS Core packages in the ROS 2 Developer Guide.
This includes:
- tracking and reporting line coverage statistics
- achieving and maintaining a good branch line coverage (95%)
- no lines are manually skipped in coverage calculations
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.
Current coverage statistics can be viewed on codecov.io or in the results of the latest coverage
CI job.
tracetools
might not reach the 95% goal because it uses #ifdef
in case LTTng is not installed, but, when using and enabling LTTng, the line coverage is above 95%.
tracetools
does not currently have any performance tests.
However, since it is simply an interface and does not contain much logic (or actual code), it does not arguably require performance tests.
tracetools
uses and passes all the standard linters and static analysis tools as described in the ROS 2 Developer Guide.
tracetools
has a few "buildtool" dependencies, which do not affect the resulting quality of the package, because they do not contribute to the public library API.
It also has a few test dependencies, which do not affect the resulting quality of the package, because they are only used to build and run the test code.
This package does not have any runtime ROS dependencies.
This package does not have any optional runtime ROS dependencies.
tracetools
has a run-time dependency on LTTng.
LTTng provides tracing capabilities.
It is Quality Level 1, see its Quality Declaration document.
tracetools
supports all of the tier 1 platforms as described in REP-2000, and tests each change against all of them.
However, due to the nature of its features, they only work on Linux-based systems.
Nightly results can be found here:
tracetools
conforms to the Vulnerability Disclosure Policy in REP-2006.
The table below compares the requirements in REP-2004 with the current state of the tracetools
package.
Number | Requirement | Current state |
---|---|---|
1 | Version policy | |
1.i | Version policy | ✓ |
1.ii | Stable version | ✓ |
1.iii | Strictly declared public API | ✓ |
1.iv | API stability policy | ✓ |
1.v | ABI stability policy | ✓ |
1.vi | API/ABI stablility policy within ROS distribution | ✓ |
2 | Change control process | |
2.i | All changes occur through change request | ✓ |
2.ii | Confirmation of contributor origin | ✓ * |
2.iii | Peer review policy | ✓ * |
2.iv | CI policy for change requests | ✓ |
2.v | Documentation policy for change requests | ✓ |
3 | Documentation | |
3.i | Per feature documentation | ✓ |
3.ii | Public API documentation | ✓ |
3.iii | Declared license(s) | ✓ |
3.iv | Copyright in source files | ✓ |
3.v.a | Quality declaration linked to from README | ✓ |
3.v.b | Centralized declaration available for peer review | |
3.v.c | References any Level N lists the package belongs to | ✓ |
4 | Testing | |
4.i | Feature items tests | ✓ |
4.ii | Public API tests | ✓ |
4.iii.a | Using coverage | ✓ |
4.iii.b | Coverage policy | ✓ |
4.iv.a | Performance tests | x |
4.iv.b | Performance tests policy | ✓ |
4.v.a | Code style enforcement (linters) | ✓ |
4.v.b | Use of static analysis tools | ✓ |
5 | Dependencies | |
5.i | Must not have lower level ROS dependencies | ✓ |
5.ii | Optional ROS lower level dependencies | ✓ |
5.iii | Justifies quality use of non-ROS dependencies | ✓ |
6 | Platform Support | |
6.i | Support targets tier 1 ROS platforms | ✓ |
7 | Security | |
7.i | Vulnerability Disclosure Policy | ✓ |
* : going forward
Comparing this table to the Quality Level Comparison Chart of REP-2004 led us to conclude that this package qualifies for Quality Level 1.