El kit de herramientas de reingeniería de software DMS [1] 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 fuente personalizados para mezclas arbitrarias de lenguajes fuente para sistemas de software a gran escala.
Desarrollador (es) | Diseños semánticos |
---|---|
Licencia | propiedad |
Sitio web | www |
Uso
DMS se ha utilizado para implementar una amplia variedad de herramientas prácticas, que incluyen lenguajes específicos de dominio (como la generación de código para el control de fábrica), cobertura de prueba [2] y herramientas de creación de perfiles, detección de clones , [3] herramientas de migración de idiomas, reingeniería de componentes C ++ ., [4] y para la investigación de temas difíciles como refactorizar C ++ de manera confiable. [5]
El kit de herramientas proporciona medios para definir las gramáticas del lenguaje y producirá analizadores que construyen automáticamente árboles de sintaxis abstracta (AST) y prettyprinters para convertir AST originales o modificados en texto fuente compilable. Los árboles de análisis capturan, y las impresoras bonitas regeneran, detalles completos sobre el programa fuente original, incluida la posición de la fuente, los comentarios, la base y el formato de los números, etc., para garantizar que el texto fuente regenerado sea tan reconocible para un programador como el módulo de texto original. cualquier transformación aplicada.
Muchas herramientas de análisis y transformación de programas están limitadas a ASCII o conjuntos de caracteres de Europa occidental como ISO-8859 ; DMS puede manejarlos, así como UTF-8 , UTF-16 , EBCDIC , Shift-JIS y una variedad de codificaciones de caracteres de Microsoft.
DMS utiliza la tecnología de análisis GLR , lo que le permite manejar todas las gramáticas prácticas libres de contexto. Los predicados semánticos extienden esta capacidad a gramáticas interesantes no libres de contexto ( Fortran requiere la coincidencia de múltiples bucles DO con declaraciones CONTINUE compartidas por etiqueta; GLR con predicados semánticos permite que el analizador DMS Fortran produzca AST para bucles correctamente anidados a medida que analiza).
DMS proporciona evaluadores de gramática de atributos para calcular análisis personalizados sobre AST, como métricas, e incluye soporte especial 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 .
Los cambios en los AST se pueden lograr mediante métodos de procedimiento codificados en PARLANSE y transformaciones de árbol de fuente a fuente codificadas como reglas de reescritura utilizando la sintaxis de superficie condicionada por cualquier hecho del programa extraído, utilizando el lenguaje de especificación de reglas (RSL) de DMS. El motor de reglas de reescritura que soporta RSL maneja reglas asociativas y conmutativas. Una regla de reescritura para que C reemplace una condición compleja por parte del ?:
operador se escribirá como:
regla simplify_conditional_assignment (v: left_hand_side, e1: expresión, e2: expresión, e3: expresión) : declaración-> declaración = "si (\ e1) \ v = \ e2; si no \ v = e3;" -> "\ v = \ e1? \ e2: \ e3;" if no_side_effects (v);
Las reglas de reescritura tienen nombres, por ejemplo, simplify_conditional_assignment . Cada regla tiene un par de patrones "hacer coincidir esto" y "reemplazar por ese" separados por -> , en nuestro ejemplo, en líneas separadas para facilitar la lectura. Los patrones deben corresponder a las categorías de sintaxis del lenguaje; en este caso, ambos patrones deben ser de enunciado de categoría de sintaxis también separados en simpatía con los patrones por -> . La sintaxis de la superficie del idioma de destino (p. Ej., C) se codifica dentro de las metacomillas " , para separar la sintaxis de la regla de reescritura de la del idioma de destino. Las barras invertidas dentro de las metacomillas representan escapes de dominio, para indicar las metavariables de patrón (p. Ej., \ V , \ e1 , \ e2 ) que coincidan con cualquier construcción de lenguaje correspondiente a la declaración de la metavariable en la línea de firma, por ejemplo, e1 debe ser de la categoría sintáctica: (cualquier) expresión . Si una metavariable se menciona varias veces en el patrón de coincidencia , debe coincidir a subárboles idénticos; la misma v de forma idéntica debe ocurrir 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 debe cumplirse para que se aplique la regla, por ejemplo, que la metavariable coincidente v , que es un lado izquierdo arbitrario, no debe tener un efecto secundario (por ejemplo, no puede tener la forma de un [i ++] ; el predicado no_side_effects está definido por un an alyzer construido con otros mecanismos DMS).
El logro de una transformación compleja en el código se logra proporcionando 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 la escuela secundaria y un poco de cálculo como un lenguaje específico de dominio.
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. Idiomas. Los lenguajes predefinidos permiten a los personalizadores centrarse inmediatamente en su tarea de reingeniería en lugar de en los detalles de los lenguajes que se van a procesar.
Además, DMS es inusual al implementarse en un lenguaje de programación paralelo , PARLANSE, que utiliza multiprocesadores simétricos disponibles en estaciones de trabajo básicas . Esto permite que DMS proporcione respuestas más rápidas para análisis y conversiones de sistemas grandes.
DMS fue originalmente motivado por una teoría para mantener diseños de software llamada Design Maintenance Systems. [6]
DMS y "Design Maintenance System" son marcas registradas de Semantic Designs.
Referencias
- ^ DMS: Transformaciones de programa para la evolución práctica del software escalable . Proceedings International Conference on Software Engineering 2004 Reimpresión
- ^ Fácil cobertura de sucursales para idiomas arbitrarios
- ^ " Detección de clones mediante árboles de sintaxis abstractos . Conferencia internacional de actas sobre mantenimiento de software 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
|journal=
( ayuda ) - ^ Akers, Robert L .; Baxter, Ira D .; Mehlich, Michael; Ellis, Brian J .; Luecke, Kenn R. (2007). "Caso de estudio: reingeniería de modelos de componentes C ++ a través de la 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 .
- ^ Investigación de innovación para pequeñas empresas (DoE): Refactor ++
- ^ Diseño de sistemas de mantenimiento . Comunicaciones de la reimpresión de ACM 1992
enlaces externos
- Página principal de DMS Software Reengineering Toolkit
- Google TechTalk invitado: DMS: infraestructura de herramientas de software en YouTube
- Modernización de los sistemas de software B-2 Spirit Bomber referenciados indirectamente por la iniciativa financiada por Northrop Grumman que desarrolló una forma rentable de traducir (JOVIAL)
- PARLANSE
- Diseños semánticos