Rejoignez-nous le 30 avril : dévoilement de Parasoft C/C++test CT pour l'excellence en matière de tests continus et de conformité | En savoir plus

Décomposer les directives de codage AUTOSAR C++14

Portrait de Miroslaw Zielinski, directeur de la gestion des produits chez Parasoft
13 décembre 2023
8 min lire

Quelles sont les directives de codage AUTOSAR C++ 14 ? Lisez pour savoir quelles sont les directives et comment elles ont fourni une mise à jour vers le C++ moderne.

AUTOSAR adaptatif

MISRA C++ 2008 a été intégré aux directives AUTOSAR C++14, qui fournissent des directives de codage pour C++14 telles que définies par la norme ISO/IEC 14882 :2014. MISRA C++ 2023 contient de nombreuses directives AUTOSAR C++14. Cependant, MISRA C++ 2023 se concentre strictement sur C++17, le langage d'implémentation, tandis qu'AUTOSAR se concentre fortement sur l'industrie automobile et inclut des lignes directrices sur les chaînes d'outils, la documentation et l'infrastructure.

L'industrie automobile a subi des changements radicaux au cours de la dernière décennie. Les nouvelles fonctionnalités introduites dans les voitures modernes les ont fondamentalement transformées en centres de calcul. Cela se reflète dans le développement des plates-formes utilisées pour créer des logiciels automobiles, en particulier AUTOSAR.

L'approche classique, qui supposait une configuration statique au moment de la compilation, aucune allocation dynamique de mémoire et la prédominance du langage C, n'est plus suffisante. De nouvelles fonctionnalités comme celles-ci nécessitent beaucoup de code avancé :

  • Aide au maintien de voie
  • Freinage d'urgence automatique
  • Surveillance des angles morts
  • Communication V2X (communication véhicule à véhicule et véhicule à infrastructure)
  • Mises à jour en continu en direct
  • Multimédia haute définition
  • Informatique IA, reconnaissance d'image

Ces nouvelles fonctionnalités nécessitent également des changements de paradigmes suffisants pour l'approche classique. Pour relever ces défis et améliorer le développement automobile, le consortium AUTOSAR, qui comprend la plupart des principaux constructeurs automobiles au monde, a publié la nouvelle édition de la norme AUTOSAR en mars 2017, appelée Adaptive AUTOSAR.

La publication de la nouvelle norme n'invalide pas la plate-forme classique, elle restera toujours le choix principal pour les unités de contrôle sans besoin de connectivité, avec des exigences matérielles limitées et des fonctionnalités en temps réel difficiles.

Adaptive AUTOSAR définit une plate-forme pour le développement d'unités de commande automobile qui fournissent des fonctions sophistiquées telles que des systèmes avancés d'aide à la conduite, le streaming multimédia ou des mises à jour logicielles via Internet. La plate-forme contient la spécification des interfaces qui définissent les services et les API. Certaines des nouveautés introduites dans Adaptive AUTOSAR incluent :

  • Approche orientée objet
  • Langage de programmation C ++
  • Architecture orientée services
  • Système d'exploitation POSIX
  • Modifications de la configuration de l'ECU pendant l'exécution du système
  • Déploiement et mises à jour en direct

C ne suffit pas

Adaptive AUTOSAR était une réponse à la complexité croissante des exigences des voitures modernes et aux nouveaux défis que le paradigme du monde connecté imposait aux systèmes automobiles. Le langage C, qui était autrefois le choix privilégié des développeurs automobiles, est devenu un bloqueur, ou du moins un ralentissement.

La complexité des systèmes a forcé le passage du langage C au C++, qui offre une meilleure prise en charge de la structuration de grands systèmes distribués et fournit de meilleurs mécanismes d'encapsulation des données.

Adaptive AUTOSAR s'appuie sur le standard de langage C++14. Le choix de la version linguistique standard était un choix entre « pas trop ancien » et « pas trop nouveau ». D'une part, nous avons C++98 et C++03, qui sont encore largement utilisés dans l'industrie automobile, mais sont obsolètes et ne correspondent pas aux modèles de développement modernes. D'un autre côté, lorsque le standard C++17 a été publié, il était nouveau et il y avait des arguments pour abandonner le C++98 et le C++03, notamment :

  • Évolution / améliorations substantielles du langage C ++
  • Disponibilité de meilleurs compilateurs
  • Disponibilité de meilleurs outils de test et d'analyse

L'une des principales raisons de ne pas opter pour C++17 était que les nouvelles fonctionnalités introduites dans la norme pouvaient entraîner des risques de sécurité pour les systèmes. La détection et la compréhension des vulnérabilités de sécurité nécessitent un certain temps. De plus, les compilateurs C++ conformes à la norme C++17 étaient encore nouveaux et nécessitaient davantage de tests et une meilleure prise en charge pour une utilisation dans le développement critique pour la sécurité. Ainsi, le choix a été fait de s'appuyer sur la norme C++14 comme option intermédiaire raisonnable.

Alors que le langage C++ continue d'évoluer, nous avons aujourd'hui C++20 (ISO/IEC 14882:2020) qui remplace C++17.

Pour soutenir C++17, AUTOSAR et MISRA ont uni leurs forces pour développer des directives de codage sûres et sécurisées pour l'utilisation de C++17 et prévoient de continuer avec C++20. Pour de nombreuses organisations, cela est très important car les fonctionnalités C++ modernes offrent des innovations importantes dans le développement de systèmes. L’utilisation de l’IA, par exemple, repose sur des architectures, des plateformes et des bibliothèques modernes développées dans les dernières éditions de C++.

Qu'en est-il des directives de codage AUTOSAR?

La sortie de la plate-forme adaptative AUTOSAR a augmenté l'adoption du C ++ moderne dans les projets automobiles. Cela a rendu un problème spécifique beaucoup plus visible: alors que l'évolution du langage C++ s'est accélérée ces dernières années, les standards de codage automobile semblent avoir pris du retard. MISRA C++ 2023 met l'industrie à jour.

Au moment où C++11 et C++14 ont été publiés, la norme de codage automobile la plus populaire pour C++, MISRA C++2008, était déjà sérieusement obsolète et ne concernait que la version C++03 du langage.

D'année en année, le problème grandissait et devenait de plus en plus lancinant. Les développeurs ont largement accepté les nouvelles fonctionnalités des dernières normes C++ et ont commencé à les utiliser sans conseils appropriés ni meilleures pratiques. Cette situation était particulièrement problématique pour les équipes développant des systèmes critiques pour la sécurité, qui sont requis par la norme ISO 26262 utiliser l'analyse statique avec un sous-ensemble approprié de directives de codage.

Pour résoudre ce problème, le consortium AUTOSAR a publié la documentation des directives dédiées dans le cadre de la plate-forme Adaptive AUTOSAR, qui est intitulée « Directives pour l'utilisation du langage C++14 dans les systèmes critiques et liés à la sécurité ». S'appuyer sur MISRA C++ 2008 non modifié serait tout simplement une infraction. La situation est illustrée par la chronologie ci-dessous.

1998 - La norme C ++ 98 est publiée

2003 - La norme C ++ 03 est publiée

2008 - MISRA C ++ 2008 (couvre C ++ 03)

2011 - La norme C ++ 11 est publiée

2014 - La norme C ++ 14 est publiée

2017 - AUTOSAR C ++ 14 (mars)

2017 - La norme C ++ 17 est publiée

2020 - La norme C ++ 20 est publiée

2023 - MISRA C ++ 2023 (couvre C ++ 17)

Directives de codage AUTOSAR C ++ 14

Le document de directives AUTOSAR C++14 est une mise à jour pour MISRA C++ 2008 et fournit des directives de codage pour le C++ moderne tel que défini par ISO/IEC 14882:2014. Ceux-ci sont intégrés dans MISRA C++ 2023. La principale application de cette norme de codage est l’industrie automobile, mais elle peut être utilisée dans d’autres secteurs où une programmation intégrée est requise.

La norme spécifie 342 règles:

  • 154 règles sont adoptées à partir de MISRA C ++ 2008 sans modifications (67%)
  • 131 règles sont basées sur les normes C ++ existantes
  • 57 règles sont basées sur la recherche ou d'autres documents ou ressources

La norme est bien documentée et offre une traçabilité aux autres normes C++ existantes, telles que HIC++ 4.0, JSF, SEI. CERT-C++, C++ Core Guidelines, et bien sûr à MISRA C++ 2008.

AUTOSAR C ++ 14 suit l'approche de classification des règles de MISRA C ++ 2008. Les règles sont classées selon le niveau d'obligation:

  • Règles requises: obligatoire pour revendiquer la conformité à la norme
  • Consultatif règles: recommandé mais sans statut obligatoire

De plus, les règles sont également classées si elles sont appliquées automatiquement par des outils d'analyse statique:

  • Automatisation: peut être entièrement pris en charge par des outils d'analyse statique
  • Partiellement automatisé: peut être pris en charge par des outils d'analyse statique mais peut nécessiter des pratiques supplémentaires telles que la révision du code
  • Non automatisé: ne peut pas être pris en charge avec les outils d'analyse statique.

Enfin, les règles sont classées en fonction des objectifs d'allocation : mise en œuvre, vérification, chaîne d'outils et infrastructure. Les règles de la norme AUTOSAR C++14 sont étiquetées avec les informations sur la classification, par exemple :

Comment sélectionner le bon outil pour la conformité AUTOSAR C ++ à la prise en charge de la norme ISO 26262

Comment devenir conforme?

En 2016, le consortium MISRA a publié un document intitulé "MISRA Compliance:2016 Achieving compliance with MISRA Coding Guidelines". Ce document a été mis à jour et remplacé par le document "MISRA Compliance:2020".

Les documents de conformité ont été très bien accueillis dans l'industrie, car ils répondaient à un besoin important de définir le processus de mise en conformité, en précisant ce que signifie exactement être conforme.

AUTOSAR C ++ 14 ne fournit aucune directive similaire sur le processus de mise en conformité, du moins pas directement. Mais étant donné que les directives AUTOSAR C ++ sont basées sur MISRA C ++ 2008, il est raisonnable de se référer à la norme MISRA pour rechercher des conseils sur le processus de mise en conformité.

  • Produisez une matrice de conformité indiquant comment chaque règle est appliquée.
  • Produire une procédure de déviation.
  • Formaliser les pratiques de travail au sein du système de management de la qualité.

Le respect de ces exigences implique des formalités administratives supplémentaires. La première chose à faire est une définition de la matrice de conformité, qui est en fait une déclaration sur la manière dont nous allons appliquer chaque directive. Voir l'exemple ci-dessous.

La situation souhaitée est d'avoir un outil d'analyse statique qui couvre autant de lignes directrices que possible. Les règles qui ne peuvent pas être appliquées avec l'analyse statique nécessiteront très probablement des révisions manuelles, qui sont coûteuses.

En plus de la matrice de conformité, une procédure de gestion des écarts doit être établie. La procédure de dérogation formalise les étapes à suivre lorsque le développement doit s'écarter d'une directive spécifique. Comme le prescrit MISRA, on s'attend à ce que

«… La procédure sera basée sur l'obtention d'une approbation pour chaque écart ou classe d'écart.»

—MISRA

Il s’agit d’une pièce importante du puzzle. Cela empêche les développeurs d'abuser du concept de déviation qui s'écartent à volonté. En fait, nous aurons besoin d'une sorte de ticket formel stocké dans notre système qui documente chaque écart dans le code source. Il en va de même pour la matrice de conformité et toutes les configurations supplémentaires et descriptions de processus créées pour assurer la conformité. MISRA C++ 2008 est ici très clair et nécessite une « formalisation au sein du système qualité ».

Enfin, si toutes les procédures décrites dans MISRA C ++ 2008 point 4.3 sont en place, nous pouvons revendiquer la conformité en démontrant ce qui suit:

  • Une matrice de conformité a été complétée qui montre comment la conformité a été appliquée.
  • Tout le code C++ du produit est conforme aux règles du document MISRA C++2008 ou sujet à des écarts documentés.
  • Une liste de tous les cas où les règles ne sont pas suivies est maintenue et pour chaque cas, il y a un écart dûment signé.

Le document « MISRA Compliance : 2020 » doit être utilisé avec toutes les versions futures des directives MISRA lors d'une déclaration de conformité MISRA. Certaines équipes peuvent préférer l'utiliser comme base pour le processus de conformité AUTOSAR C++14, car il est plus récent et plus détaillé.

Tout comme avec MISRA C++ 2008, « MISRA Compliance : 2020 » nécessite un processus formel de traitement des écarts et vous devez documenter les méthodes d'application pour chaque directive applicable. Ce document s'appelle le plan d'application des directives (GEP).

«MISRA Compliance: 2020» étend les exigences pour le processus de conformité et introduit de nouveaux concepts, comme le plan de recatégorisation des lignes directrices (GRP), qui documente de manière formelle toutes les modifications apportées aux catégories de règles, et le résumé de conformité aux lignes directrices (GCS ), qui est essentiellement un artefact final du processus de conformité qui présente le niveau de conformité atteint pour chaque ligne directrice.

"MISRA Compliance:2020" utilise également des catégorisations de règles qui ont été introduites dans le MISRA C 2012, et sont différentes de celles des normes MISRA C++ 2008 et AUTOSAR C++14.

Prise en charge d'AUTOSAR C ++ 14 dans le test Parasoft C / C ++

Le seul moyen pratique de faire respecter une norme de codage comme AUTOSAR C ++ 14 est d'utiliser un outil d'analyse statique, comme Parasoft C / C ++test , un outil de qualité de code prenant en charge plusieurs technologies de test. Parasoft C/C++test prend en charge AUTOSAR C++ 14 mieux que tout autre outil de qualité de code et offre une prise en charge complète de MISRA C++ 2023.

Les règles AUTOSAR C++14 font partie du pack de conformité automobile de Parasoft, qui étend les fonctionnalités du test Parasoft C/C++ spécifiquement pour les développeurs automobiles. En plus des règles d'analyse statique spécifiques à l'industrie telles que AUTOSAR C++14, HIC++ et MISRA, le pack de conformité automobile de Parasoft apporte un système de rapport interactif sophistiqué qui est personnalisé selon les exigences imposées par AUTOSAR, HIC++ et MISRA, et permet un flux de travail quotidien efficace pour l'équipe.

Le test Parasoft C / C ++ permet aux développeurs de vérifier la conformité de leur code sans quitter leurs IDE, et intègre le processus d'analyse dans le CI construit sur les serveurs. Avec le système de reporting spécifique à l'automobile de Parasoft, les membres de l'équipe peuvent surveiller en permanence leur processus de conformité en toute simplicité.

Lors du nettoyage des bases de code existantes, les équipes bénéficient de la possibilité de créer des politiques de conformité qui définissent ce qui garantit la cohérence de la pratique de test. Dans de tels cas, il est recommandé de commencer par le sous-ensemble des règles de la norme et d'augmenter progressivement le nombre de règles actives au fur et à mesure que le nettoyage du code progresse. Cette couche de rapport vous permet de surveiller en permanence la progression de votre base de code, de contrôler le processus de déviation et de prendre des décisions éclairées sur l'extension de l'ensemble de règles.

Essayez le test Parasoft C / C ++: une solution de test de développement unifiée C et C ++ pour les projets logiciels embarqués et critiques pour la sécurité.

Démo

Où allons-nous à partir d'ici?

L'industrie automobile évolue de manière dynamique. Parmi de nombreux autres changements, nous assistons à la transformation de la voiture en une expérience qui s'apparente davantage à l'utilisation d'un smartphone. Le concept d'achat d'une fonctionnalité spécifique d'une voiture sous la forme d'une application est une réalité. Longue route pour les vacances? Pourquoi ne pas acheter un régulateur de vitesse pendant 2 semaines?

Pour faire face à ces défis et potentiellement réduire le temps de développement, l'industrie automobile a besoin d'une innovation constante dans le domaine des plates-formes matérielles et logicielles utilisées dans les voitures modernes. Ces innovations doivent être soutenues par des normes appropriées, à différents niveaux, qui garantissent la sûreté, la qualité et la sécurité fonctionnelles. AUTOSAR C++14 contribue certainement à ce processus.

Mais les normes elles-mêmes ne sont qu'un morceau de papier (si nous les imprimons) et leur mise en œuvre n'est tout simplement pas possible sans des outils qui automatisent les pratiques et les processus et permettent aux équipes de développement de logiciels automobiles de se concentrer sur la fourniture de fonctionnalités meilleures et plus avancées. Parasoft C / C ++test est la solution la plus complète pour le développement C/C++ critique en matière de sécurité, avec plus de prise en charge des normes de codage automobile (AUTOSAR C++ 14, CERT C/C++, MISRA C/C++) que tout autre fournisseur d'outils, et une interface dynamique, flexible et utile. système de reporting qui permet à toute votre équipe de réussir en toute conformité.

Utilisez les directives de codage AUTOSAR C++ pour rationaliser la conformité ISO 26262

« MISRA », « MISRA C » et le logo triangulaire sont des marques déposées de The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Tous droits réservés.