![]() |
AdaControlversion 1.12r4 du 03/08/2010 |
Téléchargement |
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 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 388 tests qui peuvent être aujourd'hui réalisés par AdaControl!
| Abnormal_Function_Return | Contôle un "design pattern" qui garantit qu'une fonction retourne toujours un résultat |
| Allocators | Contrôle les occurrences d'allocateurs, soit tous, soit ceux portant sur les types spécifiés |
| Array_Declarations (x5) | Contrôle plusieurs métriques dans les tableaux |
| Barrier_Expressions | Contrôle les éléments autorisés dans les barrières d'entrées protégées |
| Case_Statement (x4) | 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 (x4) | Contrôle le contenu ou le placement des commentaires. |
| Declarations (x128) | Contrôle les occurrences de certaines déclarations Ada |
| Default_Parameter | Contrôle les appels de sous-programmes et les instantiations de génériques qui utilisent (ou non) la valeur par défaut pour un paramètre donné |
| Dependencies (x4) | Contrôle les dépendences sémantiques selon un ensemble d'unités indiquées, ou d'après leur nombre. |
| 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 (x25) | Contrôle l'utilisation de certaines formes d'expressions |
| Global_References | 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_Hiding (x3) | 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_Line_Length | Contrôle la longueur de ligne maximale. |
| Max_Nesting | Contrôle les portées imbriquées au delà d'une limite donnée. |
| Max_Size (x10) | Contrôles la taille maximale des instructions composées |
| 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. |
| Multiple_Assignments (x2) | Contrôle les affectations multiples à une même variable, et aux composants d'une variable structurée susceptibles d'être remplacées par une affectation d'agrégat.. |
| Naming_Convention | Contrôle la forme des noms autorisés (ou interdits) dans les déclarations. |
| No_Operator_Usage (x2) | 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 (x3) | 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 (x4) | Contrôle les caractéristiques des paramètres des entités appelables (procédures, fonctions et entré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 (x9) | Contrôle les déclarations qui pourraient être faites dans des portées plus internes. |
| Representation_Clauses (x10) | Contrôle les occurrences des clauses de representation. |
| Return_Type (x6) | 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 (x7) | Contrôle les occurrences de diverses formes d'expressions qui peuvent être simplifiées. |
| Simplifiable_Statements (x10) | Contrôle les occurrences de diverses formes d'instructions qui peuvent être simplifiées. |
| Statements (x57) | Contrôle les occurrences d'instructions Ada. |
| Style (x15) | 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. |
| Uncheckable (x3) | Contrôle les constructions qui ne sont pas vérifiables statiquement par les autres règles |
| Units (x2) | Contrôle que toutes les unités nécessaires sont analysées, et seulement celles-là. |
| Unnecessary_Use_Clause (x5) | 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_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 (x11) | Contrôle l'usage d'objets dans certaines conditions (dans des spécifications de paquetages, lus, écrits, modifiés). |
| Use_Clauses (x2) | Contrôle les occurrences de clauses use portant sur tout paquetage autre que ceux passés en paramètre. |
| With_Clauses (x3) | 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 outils "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.
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, Ansaldo-STS (ex CSEE-Transport) et SAGEM-DS. C'est un outil stable qui a été utilisé pour vérifier notamment les codes Ada d'Eurocontrol (Bruxelles, plus de 1_100_000 LdC, Maastricht), BelgoControl, Ansaldo-STS, Faiveley, SAGEM-DS (code DO178B/A)... Il a également été testé contre tous les tests exécutables de l'ACATS.
AdaControl est une application ASIS.
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.
AdaControl, comme toute application ASIS, ne peut s'exécuter que s'il a été compilé avec exactement la même version du compilateur que celle qu'il utilise lui-même lorsqu'il s'exécute. Il n'est donc fourni sous forme exécutable que pour GNAT GPL/2010 (Windows et Linux). Pour toute autre version de GNAT, il faut télécharger la version source et recompiler (ce qui est très simple à faire, à condition d'avoir installé ASIS). Il n'a été testé qu'avec GNAT (GnatGPL-2010 et GnatPro-6.3.2), mais devrait pouvoir être porté facilement vers tout autre compilateur fournissant l'interface ASIS.
Les versions ZIP ou TGZ vous permettent d'installer AdaControl à votre goût; sous Windows, les installateurs permettent de tout installer automatiquement - à condition que le répertoire <GNAT>\bin soit sur votre chemin d'exécution.
| Mesure d'audience par WEBORAMA |