Articulo de referencia

Kit de herramientas de reingeniería de software DMS

El kit de herramientas de reingeniería de software DMS es un conjunto patentado de herramientas de transformación de programas disponibles para automatizar el análisis, la modif...

El kit de herramientas de reingeniería de software DMS es un conjunto patentado de herramientas de transformación de programas disponibles para automatizar el análisis, la modificación, la traducción o la generación de sistemas de software de programas fuente personalizados para mezclas arbitrarias de lenguajes fuente para sistemas de software a gran escala. [1] DMS se motivó originalmente por una teoría para mantener diseños de software llamada Design Maintenance Systems. [2] DMS y "Design Maintenance System" son marcas registradas de Semantic Designs.

Uso

DMS se ha utilizado para implementar lenguajes específicos de dominio (como generación de código para control de fábrica), cobertura de pruebas [3] y herramientas de creación de perfiles, detección de clones , [4] herramientas de migración de lenguaje, reingeniería de componentes de C++, [5] y para la investigación de temas difíciles como la refactorización confiable de C++. [6]

Características

El conjunto de herramientas proporciona medios para definir gramáticas de lenguaje y producirá analizadores que construyen automáticamente árboles de sintaxis abstracta (AST) y prettyprinters para convertir los AST originales o modificados en texto fuente compilable. Los árboles de análisis capturan, y los prettyprinters regeneran, detalles completos sobre el programa fuente original, incluyendo la posición de la fuente, comentarios, base y formato de números, etc., para asegurar que el texto fuente regenerado sea tan reconocible para un programador como el texto original módulo cualquier transformación aplicada.

DMS utiliza tecnología de análisis GLR con predicados semánticos. Esto le permite manejar todas las gramáticas libres de contexto, así como la mayoría de las sintaxis de lenguajes que no lo son, como Fortran , que requiere la coincidencia de múltiples bucles DO con instrucciones CONTINUE compartidas por etiqueta para producir AST para bucles correctamente anidados a medida que analiza. DMS tiene una variedad de interfaces de lenguaje predefinidas, que cubren la mayoría de los dialectos reales de C y C++, incluidos C++0x , C# , Java , Python , PHP , EGL , Fortran , COBOL , Visual Basic , Verilog , VHDL y unos 20 o más lenguajes más. DMS puede manejar ASCII , ISO-8859 , UTF-8 , UTF-16 , EBCDIC , Shift-JIS y una variedad de codificaciones de caracteres de Microsoft.

DMS proporciona evaluadores de gramática de atributos para calcular análisis personalizados sobre AST, como métricas, e incluye soporte para la construcción de tablas de símbolos . Se pueden extraer otros datos del programa mediante motores de análisis de flujo de datos y control integrados , análisis de punteros locales y globales , extracción de gráficos de llamadas de todo el programa y análisis de rango simbólico mediante interpretación abstracta .

DMS se implementa en un lenguaje de programación paralela , PARLANSE, que permite utilizar multiprocesamiento simétrico para acelerar grandes análisis y conversiones. [7]

Reescritura

Los cambios en los AST se pueden lograr mediante métodos procedimentales codificados en PARLANSE y transformaciones de árbol de origen a origen codificadas como reglas de reescritura utilizando una sintaxis de superficie condicionada por cualquier dato extraído del programa, utilizando el lenguaje de especificación de reglas (RSL) de DMS. El motor de reglas de reescritura que admite RSL maneja reglas asociativas y conmutativas. Una regla de reescritura para C que reemplace una condición compleja por el ?:operador se puede escribir como:

   regla simplificar_asignación_condicional(v:lado_izquierdo,e1:expresión,e2:expresión,e3:expresión)
        :declaración->declaración
   = " si (\e1) \v=\e2; de lo contrario \v=e3; "
   -> " \v=\e1?\e2:\e3; "
   si no hay efectos secundarios(v);

Las reglas de reescritura tienen nombres, por ejemplo simplify_conditional_assignment . Cada regla tiene un par de patrones "coincidir con esto" y "reemplazar con aquello" separados por -> , en nuestro ejemplo, en líneas separadas para facilitar la lectura. Los patrones deben corresponder a categorías de sintaxis del lenguaje; en este caso, ambos patrones deben ser de la categoría de sintaxis statement también separados en sintonía con los patrones por -> . La sintaxis de superficie del lenguaje de destino (por ejemplo, C) está codificada dentro de comillas meta " , para separar la sintaxis de la regla de reescritura de la del lenguaje de destino. Las barras invertidas dentro de las comillas meta representan escapes de dominio, para indicar metavariables de patrón (por ejemplo, \v , \e1 , \e2 ) que coinciden con cualquier construcción del lenguaje correspondiente a la declaración de metavariable en la línea de firma, por ejemplo, e1 debe ser de categoría sintáctica: (cualquier) expresión . Si una metavariable se menciona varias veces en el patrón de coincidencia , debe coincidir con subárboles idénticos; la misma v con forma idéntica debe aparecer en ambas asignaciones en el patrón de coincidencia en este ejemplo. Las metavariables en el patrón de reemplazo se reemplazan por las coincidencias correspondientes del lado izquierdo. Una cláusula condicional if proporciona una condición adicional que se debe cumplir para que se aplique la regla, por ejemplo, que la metavariable coincidente v , al ser un lado izquierdo arbitrario, no debe tener un efecto secundario (por ejemplo, no puede tener la forma de a[i++] ; la cláusula no_side_effects El predicado se define mediante un analizador creado con otros mecanismos DMS).

Para lograr una transformación compleja en el código, se proporciona una serie de reglas que cooperan para lograr el efecto deseado. El conjunto de reglas se centra en partes del programa mediante metaprogramas codificados en PARLANSE.

Se muestra un ejemplo completo de una definición de lenguaje y reglas de transformación de fuente a fuente definidas y aplicadas utilizando álgebra de secundaria y un poco de cálculo como lenguaje de dominio específico.

Referencias

  1. ^ DMS: Transformaciones de programas para una evolución de software escalable y práctica. Actas de la Conferencia internacional sobre ingeniería de software 2004 Reimpresión
  2. ^ Sistemas de diseño y mantenimiento. Comunicaciones de la ACM 1992Reimpresión
  3. ^ Cobertura de ramas para lenguajes arbitrarios simplificada
  4. ^ "Detección de clones mediante árboles de sintaxis abstracta. Actas de la Conferencia internacional sobre mantenimiento de software de 1998". doi :10.1109/ICSM.1998.738528. S2CID  12834606. Archivado desde el original el 10 de octubre de 2012. Consultado el 6 de noviembre de 2010 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  5. ^ Akers, Robert L.; Baxter, Ira D.; Mehlich, Michael; Ellis, Brian J.; Luecke, Kenn R. (2007). "Estudio de caso: reingeniería de modelos de componentes de C++ mediante transformación automática de programas". Tecnología de la información y el software . 49 (3): 275–291. doi :10.1016/j.infsof.2006.10.012. S2CID  13219993.
  6. ^ Investigación de innovación para pequeñas empresas (DoE): Refactor++
  7. ^ "Diseños semánticos: lenguaje de programación paralela PARLANSE para Windows Pentium/80x86". www.semanticdesigns.com .
  • Página principal del kit de herramientas de reingeniería de software DMS
Obtenido de "https://es.wikipedia.org/w/index.php?title=Kit_de_herramientas_de_reingeniería_de_software_DMS&oldid=1091089633"