AdaControl

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.

Debian Usuarios de Debian:AdaControl está empaquetado para Debian. Para instalarlo:
apt-get install adacontrol

FreeBSD Usuarios de FreeBSD: aquí puedes encontrar un puerto de AdaControl para FreeBSD.

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

Leave a Reply

Your email address will not be published. Required fields are marked *