Original Article: AdaControl
AdaControl es una herramienta gratuita (GMGPL) que detecta el uso de varios tipos de construcciones en los programas de Ada. Su primer objetivo es controlar el uso correcto del estilo o las reglas de programación, pero también se puede utilizar como una poderosa herramienta para buscar el uso (o no uso) de varias formas de estilos de programación o patrones de diseño. Los elementos buscados van desde muy simples, como la aparición de ciertas entidades, declaraciones o declaraciones, hasta muy sofisticados, como verificar que se están obedeciendo ciertos patrones de programación.
Qué elementos o construcciones se buscan se define mediante un conjunto de reglas; La siguiente tabla ofrece un breve resumen de las reglas actualmente controladas por AdaControl. El número entre paréntesis después del nombre de la regla proporciona el número de subreglas, si corresponde. Considerando todas las reglas y subreglas posibles, ¡esto hace que 539 pruebas puedan ser realizadas actualmente por AdaControl!
Abnormal_Function_Return | Controla un patrón de diseño que garantiza que una función siempre devuelve un resultado. |
Allocators | Controla las apariciones de asignadores, ya sea todos ellos, o aquellos que se dirigen a tipos específicos. |
Array_Declarations (x6) | Controla varias métricas en declaraciones de matriz y tipos utilizados como índices |
Aspects (x3) | Controla las especificaciones de aspecto (Ada 2012) |
Assignments (x4) | Controla problemas relacionados con las asignaciones, como deslizamiento de matriz, duplicación de valores de acceso, asignaciones múltiples a una misma variable o asignaciones a componentes de una variable estructurada que podría reemplazarse por una asignación agregada. |
Barrier_Expressions | Elementos de control permitidos en la expresión de barreras de entradas protegidas |
Case_Statement (x5) | Controla varias métricas en las declaraciones de casos. |
Characters (x4) | Controla las apariciones de caracteres de control (como pestañas) en la fuente. |
Comments (x4) | Controla el contenido o la ubicación de ciertos comentarios. |
Declarations (x164) | Controla las apariciones de ciertas declaraciones de Ada. |
Default_Parameter | Controla las llamadas al subprograma y las instancias genéricas que usan (o no) el valor predeterminado para un parámetro dado. |
Dependencies (x7) | Controla las dependencias de las unidades, ya sea según un conjunto de unidades permitidas o por recuento. |
Derivations (x2) | Controla las derivaciones de tipo según el tipo del antepasado o la categoría del antepasado. |
Directly_Accessed_Globals | Controla un patrón de diseño que garantiza que se acceda a todas las variables globales solo a través de subprogramas dedicados. |
Duplicate_Initialization_Calls | Controla patrones de diseño que evitan la doble inicialización de paquetes o variables. |
Entities | Controla las ocurrencias de cualquier entidad Ada. |
Entity_Inside_Exception | Controla las ocurrencias de las entidades dentro de los manejadores de excepciones. |
Exception_Propagation (x5) | Controla que ciertos subprogramas (o tareas) no pueden propagar excepciones, que ninguna elaboración puede propagar excepciones, o que una excepción no se puede propagar fuera de su alcance de declaración. |
Expressions (x58) | Controla el uso de ciertas formas de expresiones |
Generic_Aliasing (x5) | Controla instancias donde el mismo elemento corresponde a varios parámetros formales |
Global_References (x5) |
Controla accesos no sincronizados a variables globales. |
Header_Comments (x2) | Controla la presencia de comentarios al inicio de cada módulo. |
Improper_Initialization (x3) | Controla un patrón de diseño que asegura que cualquier variable se inicialice antes de ser utilizada, y no se inicializa de forma útil. |
Instantiations | Controla instancias genéricas, ya sea todas ellas, o aquellas que usan entidades específicas. |
Insufficient_Parameters | Controla el uso de parámetros posicionales en llamadas donde el valor dœs no proporciona información suficiente. |
Local_Access (x6) | Controla el uso de valores de acceso que designan entidades no globales. |
Local_Hiding (x2) | Controla las apariciones de identificadores locales que ocultan una identidad externa idéntica. |
Max_Blank_Lines | Controla la aparición de más de un número específico de líneas vacías consecutivas. |
Max_Call_Depth | Controla la profundidad máxima de las llamadas al subprograma. |
Max_Line_Length | Controla la longitud máxima de las líneas de origen. |
Max_Nesting (x4) |
Controles alcances anidados más profundamente que un límite dado. |
Max_Size (x20) | Controla la longitud máxima de los enunciados compuestos y las unidades de compilación. |
Max_Statement_Nesting (x5) | Controla las declaraciones compuestas anidadas más profundamente que un límite dado. |
Movable_Accept_Statements | Controla las declaraciones que se pueden mover fuera de una declaración de aceptación. |
Naming_Convention | Controla la forma de los nombres permitidos (o prohibidos) en las declaraciones. |
No_Operator_Usage | Controla los tipos enteros donde no se usa ningún operador, o solo operadores lógicos. |
Non_Static (x6) | Controla expresiones no estáticas en el índice o restricciones discriminantes, o en instancias. |
Not_Elaboration_Calls | Controla las llamadas de subprograma realizadas desde lugares fuera del código de elaboración del paquete. |
Not_Selected_Name | Controla que ciertas entidades siempre se nombren utilizando la notación seleccionada. |
Object_Declarations (x4) | Controla varios parámetros de declaraciones de objetos (constantes y variables). |
Parameter_Aliasing | Controla los subprogramas y las llamadas de entrada donde se proporciona una variable a más de un parámetro [in] out. |
Parameter_Declarations (x9) | Controla las características de los parámetros en entidades invocables (procedimientos, funciones y entradas) |
Positional_Associations (x3) |
Controla las asociaciones posicionales (a diferencia de las asociaciones nombradas). |
Potentially_Blocking_Operations | Controla el uso de operaciones de bloqueo potencial desde dentro de operaciones protegidas. |
Pragmas | Controla el uso de pragmas específicos. |
Record_Declarations | Controla varios aspectos de los componentes de un tipo de registro. |
Reduceable_Scope (x9) | Controla las declaraciones que se pueden mover a ámbitos anidados más profundamente. |
Representation_Clauses (x12) | Controla las apariciones de cláusulas de representación. |
Return_Type (x8) | Controla el uso de ciertos tipos de tipos como tipos de devolución de funciones. |
Side_Effect_Parameters | Controla las llamadas de subprogramas y las instancias genéricas que llaman funciones con efecto secundario, creando así una dependencia del orden de evaluación. |
Silent_Exceptions | Controla manejadores de excepciones que no resubstan excepciones ni llaman subprogramas indicados. |
Simplifiable_Expressions (x7) | Controla las ocurrencias de varias formas de expresiones que podrían simplificarse. |
Simplifiable_Statements (x10) | Controla las apariciones de varias formas de declaraciones que podrían simplificarse. |
Statements (x73) | Controla las ocurrencias de las declaraciones de Ada. |
Style (x17) | Controla varias formas de construcciones generalmente recomendadas en las reglas de estilo. |
Terminating_Tasks | Controla un patrón de diseño que garantiza que las tareas nunca finalicen. |
Type_Initial_Values | Controla que cada tipo declarado tenga una constante de inicialización asociada. |
Type_Usage (x2) |
Controla el uso de tipos o categorías de tipos en varios lugares. |
Uncheckable (x3) | Controla construcciones que no son verificables estáticamente por otras reglas |
Unit_Pattern (x4) |
Controla los patrones de uso de las unidades de programa y los elementos declarados en ellas. |
Units (x2) | Controles que analizan todas las unidades requeridas, y solo aquellas. |
Unnecessary_Use_Clause (x5) | Los controles usan cláusulas en paquetes, donde no se hace referencia a ningún elemento del paquete dentro del alcance de la cláusula de uso. |
Unsafe_Elaboration | Controla los paquetes que pueden estar sujetos a dependencias de orden de elaboración incorrectas. |
Unsafe_Paired_Calls | Controla un patrón de diseño que garantiza que ciertas llamadas estén siempre emparejadas (como los procedimientos de P / V). |
Unsafe_Unchecked_Conversion | Controla las instancias de Unchecked_Conversion entre tipos de tamaños diferentes o no especificados. |
Usage (x11) | Controla el uso de objetos bajo ciertas condiciones (en las especificaciones del paquete, leído, escrito modificado …). |
Use_Clauses (x6) | Controla las apariciones de cláusulas de uso, a excepción de los paquetes indicados. |
With_Clauses (x3) | Controla el uso correcto de las cláusulas con. |
Para obtener más detalles sobre estas reglas o sobre el uso de AdaControl en general, consulte la guía del usuario.
AdaControl es una herramienta de línea de comandos, pero se ha integrado completamente en el entorno de GPS de AdaCore. Desde el GPS, puede ejecutar AdaControl, arreglar las violaciones o editar el archivo de reglas con solo unos pocos clics.
NUEVO!
AdaControl ahora puede ayudarlo a solucionar las infracciones: en el GPS, simplemente haga clic en el ícono de llave inglesa, al igual que con los mensajes del compilador.
También puede corregir todas las violaciones a la vez desde un comando de menú. ¡Y se proporciona una nueva utilidad de línea de comandos para corregir todas las violaciones reparables de forma automática!
Pero AdaControl es más que un conjunto de reglas de codificación: es un entorno completo, diseñado para extenderse fácilmente. Si no se proporciona su regla favorita, ¡puede agregarla usted mismo! Y, por supuesto, continuaremos ampliando la cantidad de reglas en el futuro. Si desea ver cómo es posible, consulte la guía del programador AdaControl.
El desarrollo inicial de AdaControl fue patrocinado por Eurocontrol. Algunas reglas fueron patrocinadas por BelgoControl, Alstom-Transport, Ansaldo-STS (anterior CSEE-Transporte) y SAGEM-DS. Es una herramienta madura, utilizada rutinariamente para verificar los códigos Ada en Eurocontrol (Bruselas, más de 2_000_000 SLOC, Maastricht), BelgoControl, Alstom, Ansaldo-STS, Faiveley, SAGEM-DS (nivel DO178B / A) … También tiene se han ejecutado contra todas las pruebas ejecutables de ACATS.
AdaControl es una aplicación ASIS.
AdaControl es una herramienta gratuita bajo la licencia GMGPL. No obstante, es un producto comercial de Adalog, para el cual ofrecemos un contrato de soporte y mantenimiento. También ofrecemos servicios para el desarrollo de reglas para sus necesidades específicas o, más en general, asistencia para la definición y uso de reglas de programación. Para obtener información, póngase en contacto con info@adalog.fr.
Descargar
AdaControl, como cualquier aplicación ASIS, solo puede ejecutarse si se compila con la misma versión exacta del compilador que usa al ejecutar. Por lo tanto, se proporciona como ejecutable solo para GNAT GPL / 2017 (Windows y Linux); para usar con cualquier otra versión de GNAT, descargue la versión de origen y vuelva a compilar (lo cual es bastante fácil de hacer, siempre que se haya instalado ASIS). Se ha probado solo con GNAT, pero debe ser fácilmente portable a cualquier otro compilador que proporcione una interfaz ASIS.
Las versiones ZIP o TGZ le permiten instalar AdaControl a su gusto; en Windows, los instaladores instalan todo automáticamente, siempre que el directorio <GNAT> \ bin esté en su ruta de ejecución.
Source Distribution | ||
ZIP file (2.77Mo) |
TGZ file (2.35Mo) |
Windows installer (1.90Mo) |
Executable Distribution | |||
Windows Gnat GPL 2017 | Linux Gnat GPL 2017 | MacOS | |
ZIP file (19.37Mo) |
Installer (9.46Mo) |
ZIP file (19.81Mo) |
ZIP file (not yet available) |
ADVERTENCIA: Se introdujo una incompatibilidad en la interfaz de ASIS para Ada 2005/2012, que era necesaria para manejar adecuadamente algunas de las nuevas funciones. La distribución fuente de AdaControl requiere al menos GnatPro-7.2.0 o GnatGPL 2013. Si desea utilizar una versión anterior de Gnat, descargue una versión fuente de SourceForge (consulte a continuación), utilizando la rama “master-old_gnat” para las versiones hasta GnatPro-7.0.x y GnatGPL2011, y rama “GPL2012” para GnatPro-7.1.x y GnatGPL2012.

apt-get install adacontrol

Integración GnatHub
A continuación se muestra un archivo ZIP descargable que contiene complementos para usar AdaControl como herramienta de medición en GnatHub (AdaCore) y permite el análisis de resultados con GnatDashboard / SONARQube.
Las directivas de instalación y uso son parte de la Guía del usuario de AdaControl
Integración GnatHub |
ZIP file (1.23Mo) |
SourceForge
La versión de desarrollo actual (inestable) está disponible (bajo GIT) de SourceForge. También puede encontrar versiones intermedias entre versiones oficiales que pueden ser apropiadas para ciertas versiones de Gnat e incluso proporcionar su propia calificación de AdaControl. Puede enviar informes de errores, sugerir mejoras, etc. haciendo clic en “Ticket” en la página de SourceForge o haciendo clic en este enlace directo.
Contrato de soporte y mantenimiento
Adalog proporciona soporte comercial para AdaControl. El soporte incluye los siguientes servicios:
- Ayuda con los procedimientos de instalación.
- Explicaciones sobre el uso de la herramienta y ayuda para traducir estándares de codificación en las reglas de AdaControl.
- Manejo prioritario de tickets reportados a través de nuestro sistema BT.
- Corrección de problemas encontrados en el uso de AdaControl. Se proporcionan versiones preliminares de AdaControl para cada problema corregido.
- Acceda a las versiones beta antes de que se publiquen.
- Mantener sincronizadas las reglas personalizadas del cliente con la última versión de AdaControl.
- Tarifa reducida para el desarrollo bajo demanda de reglas personalizadas.
- Consideración prioritaria de las solicitudes de mejoras. Las solicitudes de mejoras satisfactorias no son parte del contrato de soporte; sin embargo, Adalog está mejorando constantemente AdaControl, y las sugerencias que se originan en clientes respaldados reciben una alta prioridad en nuestra lista de tareas pendientes.
Adalog no puede corregir problemas cuyo origen se deba a errores del compilador o defectos en la implementación de ASIS (póngase en contacto con su proveedor de compiladores para obtener asistencia sobre estos problemas). Sin embargo, Adalog hará su mejor esfuerzo para ayudar a informar tales problemas al proveedor del compilador, y para encontrar soluciones provisionales hasta que se resuelva el problema.
Publicaciones sobre AdaControl
Se han publicado varios artículos sobre AdaControl o su uso para diversas tareas de verificación:
- Jean-Pierre Rosen: “Sobre los beneficios para los industriales de patrocinar el desarrollo de software libre”, Ada User Journal, Volume 26, number 4, december 2005http://www.adalog.fr/publicat/Free-software.pdf
- Jean-Pierre Rosen: “Una comparación de las reglas de codificación industrial”, Ada User Journal, Volume 29, number 4, december 2008http://www.adalog.fr/publicat/coding-rules.pdf
- Jean-Pierre Rosen: “Una metodología para evitar problemas conocidos del compilador mediante el análisis estático”, proceedings of the ACM SIGAda Annual International Conference (SIGAda 2010)http://dl.acm.org/authorize?316395
- Jacob Sparre Andersen: “Presentando análisis estático a un proyecto maduro”, Proceedings of the 22nd Ada-Europe International Conference on Reliable Software Technologies – Ada-Europe 2017, Vienna, Austria, 12-16 June 2017. http://www.springer.com/us/book/9783319605876