Version 1.22r16c du 07/12/2021
AdaControl est un outil libre (GMGPL) qui détecte la présence de toutes sortes de constructions dans les programmes Ada. Son but premier est de contrôler l'application de règles de style ou de programmation, mais il peut être aussi utilisé comme un puissant outil pour rechercher l'utilisation (ou la non-utilisation) de nombreuses formes ou modèles de programmation. Les éléments recherchés peuvent être très simples, comme l'occurrence de certaines entités, déclarations ou instructions, ou très sophistiqués, comme la vérification du respect de véritables "design patterns".
Les éléments à rechercher sont définis par des règles; le tableau ci-dessous résume brièvement les 73 règles actuellement vérifiées par AdaControl. Le chiffre entre parenthèses indique que cette règle comporte un certain nombre de sous-règles. Compte tenu de celles-ci, il y a en fait 591 tests qui peuvent être aujourd'hui réalisés par AdaControl!
Pour une utilisation professionnelle, nous recommandons notre contrat de support et de maintenance
Abnormal_Function_Return | Contôle un "design pattern" qui garantit qu'une fonction retourne toujours un résultat |
Actual_Parameters (x4) | Contrôle les propritétés des paramètres réels d'appels ou d'instantiations, comme l'utilisation (ou la non utilisation) des valeurs par défaut, ou l'utilisation de certaines entités. |
Allocators | Contrôle les occurrences d'allocateurs, soit tous, soit ceux portant sur les types spécifiés |
Array_Declarations (x6) | Contrôle plusieurs métriques dans les tableaux et les
types utilisés comme index |
Aspects (x3) | Contrôle les spécifications d'aspects (Ada 2012) |
Assignments (x6) | Contrôle différents points liés à l'affectation, comme les glissements de tableaux, les duplications de valeurs accès, les affectations multiples à une même variable, les affectations à des composants d'une structure qui pourraient être remplacées par une affectation d'agrégat, ou les opportunités d'utilisation du nouvel "@". |
Barrier_Expressions | Contrôle les éléments autorisés dans les barrières d'entrées protégées |
Case_Statement (x5) | Contrôle plusieurs métriques dans les instruction case. |
Characters (x4) | Contrôle l'occurrence de caractères de contrôles (comme les tabulations) dans le source. |
Comments (x5) | Contrôle le contenu ou le placement des commentaires. |
Declarations (x167) | Contrôle les occurrences de certaines déclarations Ada |
Dependencies (x7) | Contrôle les dépendences sémantiques selon un ensemble d'unités indiquées, ou d'après leur nombre. |
Derivations (x4) | Contrôle des propriétés des déclarations et des opérations primitives de types dérivés: type et nombre d'ancètres, présence d'indicateur de redéfinition. |
Directly_Accessed_Globals | Contrôle le respect d'un "design pattern" qui garantit que toute variable globale n'est accédée que par des sous-programmes dédiés. |
Duplicate_Initialization_Calls | Contrôle le respect de "design patterns" qui évitent la double initialisation de paquetages ou de variables. |
Entities | Contrôle les occurrences de n'importe quelle entité Ada. |
Entity_Inside_Exception | Contrôle les occurrences d'une entité à l'intérieur d'un traite-exception. |
Exception_Propagation (x5) | Contrôle que certaines sortes de sous-programmes (ou des tâches) ne peuvent pas propager d'exceptions, qu'aucune élaboration ne peut propager d'exception, ou qu'un exception ne peut se propager en dehors de sa portée de déclaration. |
Expressions (x60) | Contrôle l'utilisation de certaines formes d'expressions |
Generic_Aliasing (x5) |
Contrôle les instantiations
où un même élément correspond à plusieurs paramètres
formels |
Global_References (x5) |
Contrôle les accès non synchronisés à des variables globales. |
Header_Comments (x2) | Contrôle la présence de commentaires en tête de chaque module. |
Improper_Initialization (x3) | Contrôle un "design pattern" qui garantit que toute variable est initialisée avant d'être utilisée, et n'est pas initialisée à tort. |
Instantiations | Contrôle les instantiations de génériques, soit toutes, soit celles effectuées avec les entités donnée. |
Insufficient_Parameters | Contrôle la présence de paramètres en notation positionnelle dont les valeurs ne permettent pas de comprendre le rôle. |
Local_Access (x6) |
Contrôle l'utilisation de
valeurs accès désignant des entités non globales. |
Known_Exceptions (x6) | Contrôle les déréférences, les indexations et les accès aux composants qui sont statiquement connus comme levant une exception. |
Local_Hiding (x2) | Contrôle les déclarations d'identificateurs qui en cachent un identique plus externe. |
Max_Blank_Lines | Contrôle la présence de plus d'un nombre donné de lignes vides. |
Max_Call_Depth | Contrôle la profondeur d'appel de sous-programmes |
Max_Expression_Items | Contrôle la complexité maximale des expressions. |
Max_Line_Length | Contrôle la longueur de ligne maximale. |
Max_Primitives (x2) | Contrôle le nombre d'opérations primitives des types (étiquetés ou non). |
Max_Nesting (x4) | Contrôle les portées imbriquées au delà d'une limite donnée. |
Max_Size (x20) | Contrôles la taille maximale des instructions composées
et des unités de compilation |
Max_Statement_Nesting (x5) | Contrôles les instructions composées imbriquées au delà d'une limite donnée |
Movable_Accept_Statements | Contrôle la présence d'instructions qui pourraient être sorties d'une instruction accept. |
Naming_Convention | Contrôle la forme des noms autorisés (ou interdits) dans les déclarations. |
No_Operator_Usage |
Contrôle les types entiers dont aucun opérateur, ou seulement les opérateurs logiques, sont utilisés. |
Non_Static (x6) | Contrôle les expressions non statiques dans les contraintes d'index ou de discriminants, ou dans les instantiations. |
Not_Elaboration_Calls | Contrôle les appels de sous-programmes qui apparaîssent ailleurs que dans l'élaboration d'un paquetage de bibliothèque. |
Not_Selected_Name | Contrôle que certaines entités sont toujours utilisées sous forme préfixée. |
Object_Declarations (x5) | Contrôle certains paramètres des déclarations d'objets (constantes et variables). |
Parameter_Aliasing | Contrôle les appels de sous-programmes ou d'entrées où une même variable est fournie dans plus d'un paramètre [in] out. |
Parameter_Declarations (x9) | Contrôle les caractéristiques des paramètres des entités appelables (procédures, fonctions et entrées) |
Positional_Associations
(x4) |
Contrôle les associations positionnelles (par opposition aux associations nommées). |
Potentially_Blocking_Operations | Contrôle l'utilisation d'opérations potentiellement bloquantes dans les opérations protégées. |
Pragmas | Contrôle l'utilisation de pragmas spécifiques. |
Record_Declarations | Contrôle différents aspects des composants d'un type article. |
Reduceable_Scope (x11) | Contrôle les déclarations qui pourraient être faites dans des portées plus internes. |
Renaming_Declarations (x7) | Contrôle les occurrences des déclarations de surnommage. |
Representation_Clauses (x12) | Contrôle les occurrences des clauses de representation. |
Return_Statements (x3) | Contrôle diverses métriques portant sur les instructions return, comme le nombre d'instructions et la profondeur d'imbrication. |
Return_Type (x9) | Contrôle la présence de certaines formes de types comme types de retour de fonctions. |
Side_Effect_Parameters | Contrôle les appels de sous-programmes ou les instantiations de génériques qui appellent des fonctions à effet de bord, et dont l'effet peut dépendre de l'ordre d'évaluation. |
Silent_Exceptions | Contrôle lest traite-exceptions qui ne relèvent pas d'exception ni n'appellent de procédure de trace. |
Simplifiable_Expressions (x10) | Contrôle les occurrences de diverses formes d'expressions qui peuvent être simplifiées. |
Simplifiable_Statements (x16) | Contrôle les occurrences de diverses formes d'instructions qui peuvent être simplifiées. |
Statements (x80) | Contrôle les occurrences d'instructions Ada. |
Style (x17) | Contrôle diverses formes de constructions généralement recommandées dans les règles de style. |
Terminating_Tasks | Contrôle un "design pattern" qui garantit que les tâches ne se terminent jamais. |
Type_Initial_Values | Contrôle qu'une constant d'initialisation est déclarée avec chaque type. |
Type_Usage (x2) | Contrôle l'utilisation de types ou de catégories de types à divers endroits. |
Uncheckable (x3) | Contrôle les constructions qui ne sont pas vérifiables statiquement par les autres règles |
Unit_Pattern (x4) |
Contrôle des modèles d'usage des unités de programme et des éléments qui y sont déclarés . |
Units (x2) | Contrôle que toutes les unités nécessaires sont analysées, et seulement celles-là. |
Unnecessary_Use_Clause (x6) | Contrôle les clauses use de paquetages dont aucun élément n'est référencé dans la portée de la clause use. |
Unsafe_Elaboration | Contrôle les paquetages susceptibles d'être sujet de dépendence abusive à l'ordre d'élaboration. |
Unsafe_Paired_Calls | Contrôle un "design pattern" qui garantit que certains appels sont toujours appariés (comme des procédures P et V). |
Unsafe_Unchecked_Conversion | Contrôles les instantiations de Unchecked_Conversion entre types de tailles différentes ou non spécifiées. |
Usage (x14) | Contrôle l'usage d'objets dans certaines conditions (dans des spécifications de paquetages, lus, écrits, modifiés). |
Use_Clauses (x9) | Contrôle les occurrences de clauses use portant sur tout paquetage autre que ceux passés en paramètre. |
With_Clauses (x7) | Contrôle la bonne utilisation de clauses with. |
Pour plus de détails sur ces règles ou sur l'utilisation d'AdaControl, veuillez consulter le guide utilisateur (en anglais) ci-dessous.
AdaControl est un outil "ligne de commande", mais il a été totalement intégré dans l'environnement GPS d'AdaCore. Depuis GPS, vous pouvez lancer AdaControl, corriger les violations, ou éditer le fichier de règles avec juste quelques clics de souris.
NOUVEAU!
AdaControl peut maintenant vous aider à corriger les violations: sous GPS, il suffit de cliquer sur la petite clé à molette, comme pour les messages du compilateur.
On peut aussi corriger toutes les violations d'un coup depuis une entrée de menu. Et un nouvel utilitaire en ligne de commande est fourni pour corriger tout ce qui est corrigeable automatiquement !
Mais AdaControl est bien plus qu'un simple ensemble de règles de codage: c'est un environnement complet, prévu pour être facilement étendu. Si votre règle préférée n'est pas fournie, vous pouvez la rajouter vous-mêmes! Et bien sûr, nous continuerons à étendre le nombre de règles à l'avenir. Pour avoir une idée de comment cela se passe, consultez le manuel du programmeur AdaControl (en anglais).
Le développement initial d'AdaControl a été financé par Eurocontrol. Certaines règles ont été financées par BelgoControl, Alstom-Transport, Hitachi rail STS (ex Ansaldo) et SAGEM-DS. C'est un outil stable qui est utilisé pour vérifier notamment les codes Ada d'Eurocontrol (Bruxelles, plus de 2_000_000 LdC, Maastricht), BelgoControl, Alstom-Transport, Ansaldo-STS, Faiveley, SAGEM-DS (code DO178B/A), Thales... Il a également été testé contre tous les tests exécutables de l'ACATS.
AdaControl est un outil libre distribué sous licence GMGPL. Ceci ne l'empêche pas d'être un produit commercial d'Adalog, pour lequel nous offrons un contrat de maintenance. Nous pouvons aussi développer des règles spécifiques en fonction de vos besoins, ou plus généralement fournir une assistance pour la définition et la mise en œuvre de règles de programmation. Pour tout renseignement, merci de contacter info@adalog.fr.
Téléchargement
Lisez ceci même si vous faites une mise à jour depuis une version précédente d' AdaControl!
AdaControl est une application ASIS. AdaCore ne supporte plus ASIS au moyen du compilateur gcc standard; à la place, les applications ASIS doivent utiliser un générateur d'arbre (tree-generator, en fait, une version spéciale du compilateur), appelé "asis-gcc", fourni par le paquetage "ASIS Tools". Ce paquetage est distribué par AdaCore seulement aux utilisateurs "Pro", privant ainsi la communauté d'un standard très utile et éprouvé, dans le but de forcer les utilisateurs à utiliser leur propre technologie "maison".
Auparavant, la seule exigence avant d'installer AdaControl était d'avoir installé la version correspondante de Gnat. Maintenant, voilà ce que vous devrez faire:
- Si vous êtes un utilisateur "Pro":
Téléchargez et installez le paquetage des "ASIS tools" d'AdaCore. Notez que ce paquetage est bien caché; pour l'obtenir, allez sur la page "Download" d'AdaCore et cliquez sur le lien "Download archives (all versions)" en bas de la page, puis sélectionnez la version des "ASIS tools" pour votre système.
Téléchargez et installez la version "ASIS tools" d'AdaControl pour votre système. Lisez la section "Installation" dans le guide utilisateur d'AdaControl.
- Si vous êtes un utilisateur "Community", vous avez
plusieurs possibilités:
- Obtenez le paquetage "ASIS tools" par un utilisateur "Pro" de vos connaissances. Ce paquetage est un logiciel libre sous licence GPL, et la liberté de redistribuer est un droit fondamental garanti par la licence GPL. Vous pouvez alors procéder comme ci-dessus.
- Les utilisateurs Debian n'ont pas de
problème, ASIS est toujours supporté par
la version Debian de Gnat, et le paquetage AdaControl a
été mis à jour.
Nous étudions comment rendre AdaControl disponible avec les autres versions de Gnat-FSF, restez à l'écoute...
- Utilisez la dernière version de GnatCE qui
supporte ASIS, en l'occurrence GnatCE2019, comme
générateur d'arbre pour
AdaControl. Notez que ceci ne vous empêche pas
d'utiliser une version plus récente de Gnat
pour vos développements; le chemin vers le
répertoire d'installation de GnatCE2019 n'a pas
besoin de figurer dans la variable PATH de votre
système, pour éviter toute confusion.
Téléchargez et installez la version "GnatCE2019" d'AdaControl. Lisez la section "Installation" dans le guide utilisateur d'AdaControl.
- Vous pouvez également télécharger la version "source" d'AdaControl et le recompiler vous-mêmes avec GnatPRO21.2 ou GnatCE2019.
Nous sommes vraiment désolés des complications causées par cette décision regrettable d'AdaCore. Chez Adalog, nous avons toujours joué honnètement le jeu du logiciel libre, et nous n'abandonnons jamais nos utilisateurs, même ceux qui ne sont pas des clients payants. Si vous rencontrez des difficultés dans la mise en œuvre d'AdaControl, vous pouvez écrire à support@adacontrol.fr, et nous nous ferons un plaisir de vous aider.
Vous pouvez également écrire à AdaCore pour réclamer que le paquetage des "ASIS tools" soit distribué à la communauté.
Les versions ZIP vous permettent d'installer AdaControl à votre convenance; sous Windows, les installateurs installent tout automatiquement - à condition que le répertoire <GNAT>\bin se trouve sur votre chemin d'exécution.
Téléchargements | |||
Exécutable Windows |
Gnat Tools | ||
Gnat CE 2019 | |||
Exécutable Linux |
Gnat Tools | ||
Gnat CE 2019 | |||
Debian |
Installez avec "apt-get install adacontrol "
|
||
Téléchargez
depuis ce
lien Cette distribution étant maintenue par des volontaires, ce n'est pas nécessairement la dernière version. |
|||
Exécutable MacOS |
Cette distribution étant maintenue par des volontaires, ce n'est pas nécessairement la dernière version. | ||
Distribution source |
Intégration GnatHub
Le fichier ZIP téléchargeable ci-dessous contient les plug-ins permettant d'utiliser AdaControl comme outil de mesure pour GnatHub (AdaCore) et d'analyser les résultats avec GnatDashboard/SONARQube.
Les directives d'installation et d'utilisation font partie du "User Guide" d'AdaControl.
Intégration GnatHub | ZIP file (1.56Mo) |
Version en développement
La version en cours de développement (non stabilisée) est disponible (sous GIT) depuis SourceForge et GitHub. Vous y trouverez aussi des versions intermédiaires entre deux releases officielles adaptées à certaines versions de Gnat, et même de fournir votre propre évaluation d'AdaControl.
Vous pouvez soumettre des rapports d'anomalie, suggérer des améliorations, etc. en cliquant sur "Ticket" sur la page SourceForge ou en cliquant sur ce lien direct.
Contrat de maintenance
Si vous utilisez AdaControl dans un cadre professionnel, nous vous conseillons de souscrire le contrat de maintenance qui offre les prestations suivantes:
- Aide à l'installation et à la mise en œuvre;
- Explications quant à l'utilisation de l'outil et aide à la transformation de normes de codage en règles AdaControl;
- Traitement prioritaire des tickets soumis via notre système de suivi;
- Correction de problèmes rencontrés lors de l'utilisation d'AdaControl. Une version "bèta" est fournie pour chaque problème corrigé.
- Accès aux nouvelles versions en "bèta"
- Synchronisation des règles spécifiques de l'utilisateur avec la dernière version d'AdaControl;
- Réduction sur les tarifs de développement de règles spécifiques;
- Considération prioritaire des demandes d'amélioration. Les demandes d'amélioration ne sont pas couvertes par le contrat de maintenance; cependant Adalog fait progresser AdaControl en permanence, et les demandes provenant d'utilisateurs supportés bénéficient d'une haute priorité dans notre liste d'améliorations prévues.
Adalog ne peut corriger les problèmes dont l'origine est due à des fautes du compilateur ou de l'implémentation d'ASIS; veuilez contacter votre vendeur de compilateur pour un contrat de support lié à ces aspects. Cependant, en cas de tels problèmes, Adalog aidera autant que possible l'utilisateur à rapporter ces problèmes au vendeur de compilateur, et à trouver des contournements dans l'attente de la correction.
Pour un devis ou toute autre information complémentaire, merci d'écrire à: info@adalog.fr
Personnalisation d'AdaControl
Il est possible de personnaliser AdaControl avec des règles spécifiques pour des besoins particuliers de clients.Par exemple:
- Règles métier
- Règles nécessaires aux particularités du matériel
- Règles spéciales requises pour la certification
- ...
Adalog a développé des versions personnalisées d'AdaControl pour plusieurs clients. Si vous avez des besoins particuliers de contrôle de votre logiciel, merci de nous contacter en écrivant à info@adalog.fr.
Publications à propos d'AdaControl
Un certain nombre de papiers (en anglais) sont parus à propos d'AdaControl et de comment il peut être utilisé pour différentes tâches de vérification:
- Jean-Pierre Rosen: "On the benefits for industrials of sponsoring free software development", Ada User Journal, Volume 26, number 4, december 2005
- Jean-Pierre Rosen: "A Comparison of Industrial Coding Rules", Ada User Journal, Volume 29, number 4, december 2008
- Jean-Pierre Rosen: "A Methodology for Avoiding Known Compiler Problems Using Static Analysis", proceedings of the ACM SIGAda Annual International Conference (SIGAda 2010)
- Jean-Pierre Rosen et Jean-Christophe Van-Den-Hende: "Using Ada's Visibility Rules and Static Analysis to Enforce Segregation of Safety Critical Components", Ada User Journal Volume 37, n˚ 3, September 2016
- Jacob Sparre Andersen: "Introducing static analysis to a mature project", Proceedings of the 22nd Ada-Europe International Conference on Reliable Software Technologies - Ada-Europe 2017, Vienne, Autriche, 12-16 Juin 2017.