# Especificación de la interfaz semántica de Ada

La especificación de interfaz semántica de Ada (en inglés: Ada Semantic Interface Specification: ASIS) es una arquitectura abierta en capas la cual proporciona acceso independiente al proveedor para el Entorno de Librerías de Ada. Permite el análisis estático de programas y librerías de Ada. Es una interfaz de librerías abierta que consiste en el entorno Ada y sus herramientas y aplicaciones.
Como explica el Grupo de Trabajo de ASIS:
“ASIS es una interfaz que se encuentra situada entre un entorno Ada, como lo define ISO/IEC 8652:1995 (el Manual de Referencia de Ada), y cualquier herramienta que requiera información de este entorno” (SIGAda, 2020)
Se utiliza de forma exclusiva para aplicaciones de lenguajes de programación y análisis estático en programas de Ada, por lo que proporciona información relevante y acceso a la ingeniería de software asistida por ordenador (CASE) y a desarrolladores aplicables. ASIS también tiene la capacidad de hacer uso de las herramientas de ingeniería de software relevantes, al mismo tiempo que incorpora una fácil comprensión de las complejidades de la visualización del entorno de Ada. Además, proporciona procedimientos, funciones e información relevante que se puede usar de modo significativo para acceder a la información exclusiva que se encuentra en los manuales de referencias y en el Árbol de Sintaxis Abstracta (AST). Esto hará que a cambio pueda avanzar ASIS a que pueda ser accesible para transportar y retener tanto información como terminología de las herramientas de Ada.
“ASIS está formado por 21 paquetes, 2 son opcionales y dentro de estos paquetes se definen 349 consultas”. ASIS también consistirá en un paquete en el cual se incluye paquetes secundarios que incluyen "unidades de compilación de errores, entornos de Ada, implementaciones, excepciones, elementos, iteradores, declaraciones, expresiones, cláusulas, definiciones, declaraciones, textos e Ids".
En general, ASIS es simplemente una forma sencilla de recopilar datos de un programa ADA e incrementar la portabilidad de cualquier herramienta de Ada.

## Características de ASIS

La especificación de la interfaz semántica de Ada, según el Manual de Referencia ISO/IEC 8652 Ada 95 (Ada Language Referencing Manual, 1994), se define como una interfaz situada entre un entorno de Aria y otras herramientas las cuales requieren información del entorno de Aria.
Las características de las herramientas que se basan en ASIS pueden incluir:
* análisis de código de alta calidad
* monitores de código automatizados
* navegadores
* herramientas de árbol de llamadas
* reformadores de código
* herramientas de cumplimiento de estándares de codificación
* verificadores de corrección
* depuradores
* herramientas de análisis de árboles de dependencia
* herramientas de diseño
* generadores de documentos
* herramientas de métricas
* herramientas de ingeniería inversa
* herramientas de re-ingeniería
* correctores de estilo
* herramientas de pruebas
* estimadores de tiempo
* traductores
ASIS también proporciona enfoques que se limitan a la información semántica y estructural que hay en las librerías de Ada, y su objetivo es proporcionar y producir información que sea similar, si no del mismo nivel semántico, que la definición de Ada. Esto será muy útil para proporcionar exactamente las mismas definiciones e información que se encuentran en el Manual de Referencia para el Lenguaje de Programación Ada (LRM) a las personas y los clientes interesados (Ehrenfried).

### Abstracciones principales

En ASIS, hay 3 abstracciones principales que se encuentran en los tipos 'privados' de Ada. Estos son Context, Compilation_Unit y Element. Y aunque también hay otros tipos de abstracciones involucradas, las 3 mencionadas son las fundamentales.
La abstracción de Contexto de ASIS consiste en las definiciones, términos y condiciones que están disponibles en las consultas de ASIS. Además son utilizados como un método y un identificador lógico para el entorno de Ada.
La Unidad de Compilación también consiste en un identificador lógico para el entorno de Ada. Además, esta abstracción define las propiedades y características que se verán más adelante en el Manual de referencia de Ada. Hace uso la implementación del lenguaje de programación de Ada para transmitir unidades de compilación a través de ASIS. Como dijo Adacore:
"Una Compilation_Unit de ASIS proporciona la vista de 'caja negra' de una Unidad de Compilación, considerandose la unidad como el todo. Puede descomponerse en Element de ASIS para analizarse como una 'caja blanca' ".
Los ejemplos de estas propiedades dadas pueden incluir:
* Hora de la última actualización
* Nombre del objeto que contiene el texto fuente de la unidad
De forma similar, la abstracción de Elementos también es un identificador lógico para la unidad de compilación mencionada anteriormente, esto puede ser explícito o implícito.

## Estructura de ASIS

La estructura de la aplicación de ASIS se puede clasificar en 3 categorías; Configuración del análisis de ASIS, las Unidades de Compilación de los Procesos y el Análisis Completo de ASIS. Esta estructura está para ayudar a dar soporte a varios programas de análisis de código que aparecen en el lenguaje de programación Ada.

### Configuración del análisis de ASIS

El primer paso para la estructura del análisis de ASIS es poder configurarlos de forma. Durante este paso, se inicializan y establecen varias tareas y programas. Por ejemplo, como lo identificó William Colket (1999), este paso ocurre cuando el programa de ASIS inicializa ASIS, estableciendo el contexto de ASIS y el objeto de estado, asociando el contexto de ASIS con el análisis, abre el contexto de ASIS y realizando cualquier preprocesamiento necesario para el soporte del análisis de ASIS. El primer paso generalmente es poner en marcha el análisis de ASIS y estar listo para el uso eficiente y efectivo.

### Unidades de compilación de procesos

Luego, a la configuración le sucede "unidades de compilación de procesamiento", y durante este tiempo los elementos se muestrean y analizan para encajar en el contexto de ASIS, el cual que fue abierto y asociado al comienzo de la estructura de ASIS. A lo largo de este paso, se procesa principalmente la mayoría de los elementos de la aplicación de ASIS en correlación con el contexto de ASIS, también tiene la capacidad adicional de realizar unidades de compilación antes y después de que se haya realizado el procesamiento.

### Análisis completo de ASIS

La última fase de la estructura de ASIS es la finalización del análisis de ASIS. Aquí es donde todo se finaliza y revisa para realizar cualquier post-procesamiento del análisis de ASIS. El contexto de ASIS también se cierra y se desasocia y ASIS finalmente se finaliza.

### Criterio de diseño

A medida que ASIS continúa evolucionando, también lo hacen sus criterios de diseño. Los criterios sobre cómo se puede diseñar ASIS se pueden clasificar en 9 categorías diferentes; amplia aceptación, transportabilidad, uniformidad y cohesión, implementabilidad, estado de la tecnología, extensibilidad, terminología y estilo de ADA, rendimiento y conjunto mínimo de interfaces.

#### 1. Amplia aceptación

Debe estar diseñado de acuerdo con este criterio para que se pueda utilizar una amplia variedad de herramientas para ASIS. Diseñarlo de este modo permite que las librerías de interfaces sean más flexibles y estén disponibles para herramientas en otras plataformas, implementaciones de proveedores de Ada. También permite reducir el tiempo de formación de los usuarios y desarrolladores de la herramienta.

#### 2. Transportabilidad

ASIS también debe estar diseñado para que sea capaz de transferirse de una computadora a otra computadora o de un entorno a otro.

#### 3. Uniformidad y cohesión

ASIS también debe ser consistente en sus propiedades, sus conceptos, tipos y operaciones, pero también debe poder mantenerse como una operación simple y coherente.

#### 4. Implementabilidad

ASIS también es conocido por ser "implementable por cualquier Proveedor de Compiladores de Ada con un esfuerzo razonable". Además de ser capaz de mantener la coherencia a lo largo de todo el programa.

#### 5. Estado de la tecnología

El estado de la tecnología siempre debe estar actualizado y avanzado para asegurar que no haya ningún problema. Además, se debe asegurar que todas las variaciones y versiones posibles de ASIS sean coherentes y eficientes.

#### 6. Extensibilidad

"No se deberían impedir las extensiones que hagan uso del modelo de diseño y las abstracciones de ASIS".

#### 7. Terminología y estilo de Ada

ASIS también tiene que adaptarse a los términos y condiciones de estilo y definiciones del Manual de Referencia de Ada.

#### 8. Rendimiento

"El diseño de ASIS debe permitir la eficiencia tanto desde el punto de vista del cliente como desde el punto de vista de la implementación"

#### 9. Conjunto mínimo de interfaces

"Debería permitirse a los clientes implementar interfaces en capas adicionales haciendo uso de las operaciones primitivas proporcionadas".

## Usos de ASIS
### ASIS para GNAT

ASIS fue usado por Adacore para la implementación de un estándar de ASIS para el uso de aplicaciones de ASIS para GNAT. ASIS se puede utilizar para GNAT mediante aplicaciones típicas como: "Análisis estático (verificación de propiedad), Instrumentación de código, Herramientas de diseño y generación de documentos, Herramientas de prueba de métricas o de tiempo, Herramientas de análisis de Árbol de Dependencia, Generadores de diccionarios de tipos, Herramientas de aplicación de estándares de codificación, Traductores de lenguajes, Herramientas de evaluación de calidad, Navegadores de código fuente y Formateadores y Rditores dirigidos por la sintaxis” (ASIS para GNAT).
Esta metodología también se ha utilizado para desarrollar numerosas herramientas con la ayuda de ASIS, en las que se incluye:
* gnatelim
* gnatstub
* gnatcheck
* gnatpp
* gnatmetric

### ASIS como aislante

Pace Drury (1999) hizo uso de ASIS para crear un código para su proyecto llamado 'SIDPERS-3' en el cual el código se usa para identificar detalles y variaciones vistas en el Commercial Off the Shelf (COTS) generados mediante la interacción de la base de datos. Drury también hizo uso de ASIS para su propio proyecto en el que ASIS creó una nueva capa de código de Ada que pudo aislar con éxito al desarrollador de software de las mismas especificaciones del código generado de Ada.
Tras haber escrito un código tan complicado denominado 'generate_db_support_code', el cual consistía principalmente en código de Ada, su objetivo fue abrir 2 ficheros, examinar sus contenidos y crear dos ficheros nuevos basados en los 2 anteriores. ASIS fue usado para examinar la estructura del código de forma eficiente, facilitando así el almacenamiento y el enlace a una lista que contenga el lenguaje de Ada. ASIS completa de forma coherente lo que se le pide y obtiene con éxito un acceso constante y seguro a la información de la base de datos que satisface las necesidades del proyecto.

### AdaControl

AdaControl es una herramienta gratuita (GMGPL) que detecta el uso de varios tipos de construcciones en los programas de Ada. Sus usos incluyen la comprobación de los estándares de codificación, la exploración del uso de las funciones de Ada, la creación de estadísticas y más. Aprovecha todo el poder de ASIS y se puede considerar como la aplicación de ASIS más típica.