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

MirekZielinski

Par Miroslaw Zielinski

10 février 2022

8  min lire

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

AUTOSAR adaptatif

Les directives AUTOSAR C ++ 14 sont une mise à jour pour MISRA C ++ 2008, fournissant des directives de codage pour le C ++ moderne tel que défini par ISO / CEI 14882: 2014.

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 le premier choix dans le passé pour les développeurs automobiles, est devenu un bloqueur, ou du moins le ralentissement.

La complexité des systèmes a forcé un passage du langage C au C++, qui offre un meilleur support pour structurer les grands systèmes distribués, et fournit de meilleurs mécanismes pour l'encapsulation des données.

AUTOSAR adaptatif s'appuie sur la norme de langage C++14. Le choix de la version linguistique standard était une sélection 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 obsolètes et ne correspondent pas aux modèles de développement modernes. D'autre part, lorsque la norme C++17 a été publiée, elle était fraîche et il y avait des arguments pour laisser derrière C++98 et 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 dans le développement de directives de codage sûres et sécurisées pour l'utilisation de C++17 avec des plans pour continuer en C++20. Pour de nombreuses organisations, cela est très important car les fonctionnalités C++ modernes offrent de nouvelles innovations qui sont importantes dans le développement de systèmes. L'utilisation de l'IA, par exemple, repose sur des architectures modernes, des plates-formes modernes 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.

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

2022 – MISRA & AUTOSAR C++17 (à déterminer)

2022 – MISRA & AUTOSAR C++20 (à déterminer)

Directives de codage AUTOSAR C ++ 14

Le document de directives AUTOSAR C ++ 14 est censé être une mise à jour pour MISRA C ++ 2008 et fournit des directives de codage pour le C ++ moderne tel que défini par ISO / CEI 14882: 2014. La principale application de cette norme de codage est l'industrie automobile, mais elle peut être utilisée dans d'autres industries 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.

Et enfin, les règles sont classées par objectif d'allocation: implémentation, vérification, toolchain et infrastructure. Les règles de la norme AUTOSAR C ++ 14 sont balisé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

C'est une pièce importante du puzzle. Cela empêche d'abuser du concept de déviation par les développeurs qui s'en écartent à volonté. En effet, nous aurons besoin d'une sorte de tickets formels stockés dans notre système qui documentent chaque écart dans le code source. Il en va de même pour la matrice de conformité et toutes les configurations et descriptions de processus supplémentaires créées pour faire respecter la conformité. MISRA C++ 2008 est très clair ici 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 « Conformité MISRA : 2020 » doit désormais être utilisé avec toutes les futures versions des directives MISRA lors d'une déclaration de conformité MISRA. "MISRA Compliance:2020" met à jour les instructions données dans MISRA C++ 2008 pour établir le processus de conformité. 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++ mieux que tout autre outil de qualité de code.

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é.

Demander une 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 pour la sécurité, avec plus de prise en charge des normes de codage automobile (AUTOSAR C ++, CERT C / C ++, MISRA) que tout autre fournisseur d'outils, et un système de reporting dynamique, flexible et utile qui permet toute votre équipe pour réussir dans la 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.

MirekZielinski

Par Miroslaw Zielinski

Chef de produit pour les solutions de test embarquées de Parasoft, les spécialités de Miroslaw comprennent le C / C ++, les RTOS, l'analyse de code statique, les tests unitaires, la gestion de la qualité des logiciels pour les applications critiques pour la sécurité et la conformité des logiciels aux normes de sécurité.

Recevez les dernières nouvelles et ressources sur les tests de logiciels dans votre boîte de réception.