logo Adalog
code Ada logo AdaControl

AdaControl

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

Warning

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:
    1. 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.
    2. 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...

    3. 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 Debian Installez avec "apt-get install adacontrol"
FreeBSD 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: