blob: 3dedf00fdb6d3a5867cffd6f87bed5f78214c068 [file] [log] [blame]
Verification methodology
========================
This page discusses discusses verification tools and techniques used by the project.
Static Checks
-------------
This verification step checks quality by examining the source code. The project currently uses two tools which are
discussed in the chapters below.
Checkpatch
''''''''''
`Checkpatch`_ is a tool developed and maintained by the Linux Kernel community. It can look for errors related to:
- C and C++ coding style
- spelling mistakes
- git commit message formatting
Please find the configuration of this tool in the :download:`TS repository.<../../../.checkpatch>` but do not forget
to set ``CODESPELL_FILE`` variable in the environment to the local copy of the `codespell dictionary v2.3.0`_.
Cppcheck tool
'''''''''''''
`CppCheck`_ is a C/C++ static analysis tool. It can detect code depending on implementation defined behavior, and
dangerous coding constructs and thus it verifies coding guidelines.
Please find the configuration of this tool in the :download:`TS repository.<../../../.cppcheck>`
Build verification
------------------
The :ref:`Build test runner` captures reference build configurations for all TS build products and can be used to verify
these.
Runtime verification
--------------------
During the runtime versification step various test and demo executables are executed on the host PC and/or on target
platforms.
Tests are targeting three different environment types:
- ``arm-linux``: test executables to be run from Linux user-space on the target.
- ``pc-linux``: executables to run on the host PC. These tests have a lower verification level, as the binary is likely
not running on an arm target. Portability issues in the source may hide error or trigger false alarms. In turn
this type of test is cheap,
- ``sp`` and ``opteesp``: test executables targeting these environments run in the SWd and server as:
- test payloads to help exercise trusted services
- test payload to help platform porting
Each of these test applications manifest as a "deployment" in trusted services. For more details please see the
:ref:`Deployments` section.
Compliance testing
''''''''''''''''''
The project hosts deployment helping compliance testing. For more information please refer to
:ref:`Platform Certification`.
Measuring Quality of testing
''''''''''''''''''''''''''''
The primary metric to measure runtime testing quality is code coverage. The project uses two methods to measure code
coverage:
- "Host side" coverage measurement, where code coverage is measured using Unit Tests and Component Test executed on
the build host.
The measurement relies on GCCs `-ftest-coverage` compilation switch and the lcov tool. In order to include
coverage data of PSA client code and of service providers, `libpsats` and `libts` have to be built using
the `DebugCoverage` build type. If the build type override is not used, the build system will automatically build
and use the appropriate binaries.
- Coverage measurement on the target. This feature is only supported by the :ref:`AEM FVP` platform and uses
`qa-tools`_.
Coverage measurement is automated in the CI, which is not publicly accessible yet.
------------------
.. _`Checkpatch`: https://docs.kernel.org/dev-tools/checkpatch.html
.. _`CppCheck`: https://cppcheck.sourceforge.io/
.. _`codespell dictionary v2.3.0`: https://raw.githubusercontent.com/codespell-project/codespell/v2.3.0/codespell_lib/data/dictionary.txt
.. _`qa-tools`: https://gitlab.arm.com/tooling/qa-tools
*Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.*
SPDX-License-Identifier: BSD-3-Clause