Articulo de referencia

Asistente de software basado en el conocimiento

El Asistente de Software Basado en Conocimiento (KBSA) fue un programa de investigación financiado por la Fuerza Aérea de los Estados Unidos . Su objetivo era aplicar conceptos ...

El Asistente de Software Basado en Conocimiento (KBSA) fue un programa de investigación financiado por la Fuerza Aérea de los Estados Unidos . Su objetivo era aplicar conceptos de inteligencia artificial al diseño e implementación de software . El software se describiría mediante modelos en lenguajes de muy alto nivel (equivalentes a la lógica de primer orden ) y, posteriormente, reglas de transformación convertirían la especificación en código eficiente. La Fuerza Aérea esperaba generar el software necesario para controlar sistemas de armas y otros sistemas de mando y control mediante este método. A medida que el software adquiría mayor importancia para los sistemas de armas de la USAF, se comprendió que mejorar la calidad y la productividad del proceso de desarrollo de software podría aportar beneficios significativos tanto para las fuerzas armadas como para la tecnología de la información en otras industrias importantes de Estados Unidos.

Historia

A principios de la década de 1980, la Fuerza Aérea de los Estados Unidos se percató de los importantes beneficios que había obtenido al aplicar tecnologías de inteligencia artificial para resolver problemas especializados , como el diagnóstico de fallas en aeronaves. La Fuerza Aérea encargó a un grupo de investigadores de las comunidades de inteligencia artificial y métodos formales la elaboración de un informe sobre cómo dichas tecnologías podrían utilizarse para abordar el problema más general del desarrollo de software.

El informe describía una visión para un nuevo enfoque del desarrollo de software. En lugar de definir las especificaciones con diagramas y transformarlas manualmente en código, como se hacía hasta entonces, la visión del Asistente de Software Basado en Conocimiento (KBSA) consistía en definir las especificaciones en lenguajes de muy alto nivel y, a continuación, utilizar reglas de transformación para refinar gradualmente la especificación y convertirla en código eficiente para plataformas heterogéneas.

Cada paso en el diseño y perfeccionamiento del sistema se registraría como parte de un repositorio integrado. Además de los artefactos del desarrollo de software, los procesos, las diversas definiciones y transformaciones también se registrarían de manera que pudieran analizarse y reproducirse posteriormente según fuera necesario. La idea era que cada paso fuera una transformación que tuviera en cuenta diversos requisitos no funcionales para el sistema implementado. Por ejemplo, requisitos para usar lenguajes de programación específicos como Ada o para reforzar el código para la tolerancia a fallos en tiempo real en misiones críticas. [ 1 ]

La fuerza aérea decidió financiar investigaciones adicionales sobre esta visión a través de su laboratorio del Centro de Desarrollo Aéreo de Roma, ubicado en la base aérea de Griffiss en Nueva York. La mayor parte de la investigación inicial se llevó a cabo en el Instituto Kestrel en el norte de California (con la Universidad de Stanford ) y en el Instituto de Ciencias de la Información (ISI) en el sur de California (con la USC y la UCLA ). El Instituto Kestrel se centró principalmente en la transformación, demostrablemente correcta, de modelos lógicos a código eficiente. El ISI se centró principalmente en la fase inicial del proceso, definiendo especificaciones que pudieran mapearse a formalismos lógicos, pero en formatos intuitivos y familiares para los analistas de sistemas. Además, Raytheon realizó un proyecto para investigar la recopilación informal de requisitos, y Honeywell y la Universidad de Harvard trabajaron en marcos subyacentes, integración y coordinación de actividades.

Aunque no fue financiado principalmente por el programa KBSA, el proyecto MIT Programmer's Apprentice también tenía muchos de los mismos objetivos y utilizaba las mismas técnicas que KBSA. [ 2 ]

En las etapas posteriores del programa KBSA (que comenzó en 1991), los investigadores desarrollaron prototipos que se utilizaron en problemas de desarrollo de software de mediana a gran escala. Además, en estas etapas posteriores, el énfasis pasó de un enfoque puramente KBSA a cuestiones más generales sobre cómo utilizar la tecnología basada en el conocimiento para complementar y ampliar las herramientas de ingeniería de software asistida por computadora (CASE) existentes y futuras. En estas etapas posteriores hubo una interacción significativa entre la comunidad KBSA y las comunidades de ingeniería de software y orientada a objetos. Por ejemplo, los conceptos e investigadores de KBSA desempeñaron un papel importante en los programas de megaprogramación e ingeniería de software centrada en el usuario patrocinados por la Agencia de Proyectos de Investigación Avanzada de Defensa (DARPA). [ 3 ] En estas etapas posteriores, el programa cambió su nombre a Ingeniería de Software Basada en el Conocimiento (KBSE). El cambio de nombre reflejó el objetivo de investigación diferente: ya no se trataba de crear una herramienta totalmente nueva y abarcadora que cubriera todo el ciclo de vida del software, sino de incorporar gradualmente la tecnología basada en el conocimiento a las herramientas existentes. Empresas como Andersen Consulting (uno de los mayores integradores de sistemas y, en aquel momento, proveedor de su propia herramienta CASE) desempeñaron un papel fundamental en el programa en estas últimas etapas.

Conceptos clave

Reglas de transformación

Las reglas de transformación que utilizaba KBSA eran diferentes de las reglas tradicionales para sistemas expertos. Estas reglas se comparaban con los lenguajes de especificación e implementación, en lugar de con los hechos del mundo. Era posible especificar transformaciones mediante patrones, comodines y recursión tanto en el lado derecho como en el izquierdo de una regla. La expresión del lado izquierdo especificaba los patrones de la base de conocimiento existente que se debían buscar. La expresión del lado derecho podía especificar un nuevo patrón para transformar el del lado izquierdo. Por ejemplo, transformar un tipo de datos de teoría de conjuntos en código utilizando una biblioteca de conjuntos de Ada. [ 4 ]

El propósito inicial de las reglas de transformación era refinar una especificación lógica de alto nivel en código bien diseñado para una plataforma de hardware y software específica. Esto se inspiró en los primeros trabajos sobre demostración de teoremas y programación automática. Sin embargo, los investigadores del Instituto de Ciencias de la Información (ISI) desarrollaron el concepto de transformaciones evolutivas . [ 5 ] En lugar de transformar una especificación en código, una transformación evolutiva tenía como objetivo automatizar varios cambios estereotípicos a nivel de especificación, por ejemplo, desarrollar una nueva superclase extrayendo diversas capacidades de una clase existente que se pueden compartir de forma más general. Las transformaciones evolutivas se desarrollaron aproximadamente al mismo tiempo que el surgimiento de la comunidad de patrones de software, y ambos grupos compartieron conceptos y tecnología. Las transformaciones evolutivas eran esencialmente lo que se conoce como refactorización en la comunidad de patrones de software orientados a objetos. [ 6 ]

Repositorio basado en el conocimiento

Un concepto clave de KBSA era que todos los artefactos (requisitos, especificaciones, transformaciones, diseños, código, modelos de procesos, etc.) se representaban como objetos en un repositorio basado en el conocimiento . El informe original de KBSA describe lo que se denominó un lenguaje de amplio espectro. El requisito era un marco de representación del conocimiento que pudiera dar soporte a todo el ciclo de vida : requisitos, especificaciones y código, así como al propio proceso de desarrollo de software. La representación central de la base de conocimiento debía utilizar el mismo marco, aunque se podían añadir diversas capas para dar soporte a presentaciones e implementaciones específicas.

Estos primeros marcos de conocimiento fueron desarrollados principalmente por ISI y Kestrel, basándose en Lisp y entornos de máquina Lisp . El entorno Kestrel se convirtió finalmente en un producto comercial llamado Refine, desarrollado y respaldado por Reasoning Systems Incorporated, una empresa derivada de Kestrel.

El lenguaje y el entorno Refine también demostraron ser aplicables al problema de la ingeniería inversa de software: tomar código heredado que es crítico para el negocio pero que carece de la documentación adecuada y usar herramientas para analizarlo y transformarlo en una forma más mantenible. Con la creciente preocupación por el problema del año 2000, la ingeniería inversa se convirtió en una preocupación empresarial importante para muchas grandes corporaciones estadounidenses y fue un área de enfoque para la investigación de KBSA en la década de 1990. [ 7 ] [ 8 ]

Hubo una interacción significativa entre las comunidades de KBSA y las de lenguajes Frame y programación orientada a objetos . Las primeras bases de conocimiento de KBSA se implementaron en lenguajes orientados a objetos, en lugar de lenguajes orientados a objetos . Los objetos se representaban como clases y subclases, pero no era posible definir métodos sobre ellos. En versiones posteriores de KBSA, como la demostración conceptual de Andersen Consulting, el lenguaje de especificación se amplió para admitir también el paso de mensajes.

Asistente inteligente

KBSA adoptó un enfoque distinto al de los sistemas expertos tradicionales en cuanto a la resolución de problemas y la interacción con los usuarios. En los sistemas expertos tradicionales, el usuario responde a una serie de preguntas interactivas y el sistema proporciona una solución. El enfoque de KBSA, en cambio, dejaba el control en manos del usuario. Mientras que un sistema experto intentaba, en cierta medida, reemplazar y eliminar la necesidad del experto, el enfoque de asistente inteligente de KBSA buscaba reinventar el proceso mediante la tecnología. Esto dio lugar a diversas innovaciones en la interfaz de usuario.

Un ejemplo de la colaboración entre la comunidad orientada a objetos y KBSA fue la arquitectura utilizada para las interfaces de usuario de KBSA. Los sistemas KBSA empleaban una interfaz de usuario modelo-vista-controlador (MVC). Esta idea se incorporó de los entornos Smalltalk. [ 9 ] La arquitectura MVC se adaptaba especialmente bien a la interfaz de usuario de KBSA. Los entornos KBSA presentaban múltiples vistas heterogéneas de la base de conocimiento. Podía ser útil observar un modelo emergente desde el punto de vista de las entidades y relaciones, las interacciones de objetos, las jerarquías de clases, el flujo de datos y muchas otras vistas posibles. La arquitectura MVC facilitaba esto. Con la arquitectura MVC, el modelo subyacente siempre era la base de conocimiento, que era una descripción del metamodelo de los lenguajes de especificación e implementación. Cuando un analista realizaba algún cambio a través de un diagrama en particular (por ejemplo, agregaba una clase a la jerarquía de clases), ese cambio se realizaba a nivel del modelo subyacente y las diversas vistas del modelo se actualizaban automáticamente. [ 10 ]

Una de las ventajas de usar una transformación era que muchos aspectos de la especificación e implementación podían modificarse simultáneamente. Para prototipos a pequeña escala, los diagramas resultantes eran lo suficientemente simples como para que los algoritmos básicos de diseño, combinados con la colaboración de los usuarios para su limpieza, fueran suficientes. Sin embargo, cuando una transformación puede redibujar radicalmente modelos con decenas o incluso cientos de nodos y enlaces, la actualización constante de las distintas vistas se convierte en una tarea compleja. Investigadores de Andersen Consulting incorporaron trabajos de la Universidad de Illinois sobre teoría de grafos para actualizar automáticamente las distintas vistas asociadas a la base de conocimiento y generar grafos con una mínima intersección de enlaces, teniendo en cuenta además las restricciones de diseño específicas del dominio y del usuario.

Otro concepto utilizado para brindar asistencia inteligente fue la generación automática de texto. Las primeras investigaciones en ISI estudiaron la viabilidad de extraer especificaciones formales de documentos de texto informales en lenguaje natural. Determinaron que el enfoque no era viable. El lenguaje natural es, por naturaleza, demasiado ambiguo para servir como un buen formato para definir un sistema. Sin embargo, se consideró que la generación de lenguaje natural era factible como una forma de generar descripciones textuales que pudieran ser leídas por gerentes y personal no técnico. Esto resultó especialmente atractivo para la fuerza aérea, ya que, por ley, exigían a todos los contratistas que generaran diversos informes que describieran el sistema desde diferentes puntos de vista. Investigadores de ISI y, posteriormente, de Cogentext y Andersen Consulting demostraron la viabilidad del enfoque utilizando su propia tecnología para generar la documentación requerida por sus contratos con la fuerza aérea. [ 11 ]

Referencias

  1. Green, Cordell; D. Luckham; R. Balzer; T. Cheatham; C. Rich (agosto de 1983). "Informe sobre un asistente de software basado en el conocimiento" (PDF) . Kestrel Institute ( FTP ). pág.  78. Recuperado el 4 de enero de 2014 .(Para ver los documentos, consulte Ayuda:FTP )
  2. Rich, Charles; Richard C. Waters (noviembre de 1988). "El proyecto del aprendiz de programador: una visión general de la investigación" (PDF) . Computer . 21 (11): 10–25 . doi : 10.1109/2.86782 . hdl : 1721.1/6054 . S2CID 18925917. Archivado del original (PDF) el 6 de julio de 2017. Consultado el 26 de diciembre de 2013 . 
  3. DeBellis, Michael; Christine Haapala (febrero de 1995). "Ingeniería de software centrada en el usuario". IEEE Expert . 10 (1): 34– 41. doi : 10.1109/64.391959 .
  4. Smith, Doug (1991). "KIDS - Un sistema de desarrollo de software basado en el conocimiento". En Michael Lowry, Robert McCartney (eds.). Automatización del diseño de software . AAAI/MIT Press. pp. 483–514 . CiteSeerX 10.1.1.54.6955 . ISBN   978-0262620802.
  5. Johnson, Lewis; MS Feather (1991). "Uso de transformaciones evolutivas para la construcción de especificaciones". Automatización del diseño de software . AAAI Press: 65–92 .
  6. Fowler, Martin (1999). Refactoring: Improving the Design of Existing Code . Addison Wesley. ISBN 0201485672.
  7. Boehm, Barry; Prasanta Bose (15 de agosto de 1998). "Evaluación del ciclo de vida de KBSA: Informe técnico final" (PDF) . Contrato n.° F30602-96-C-0274 . I. Centro de Ingeniería de Software de la USC. Archivado del original (PDF) el 27 de julio de 2013. Consultado el 4 de enero de 2014. A medida que el programa ha avanzado hacia sus objetivos finales, ha generado una serie de derivados que mejoran la productividad, como las herramientas de reingeniería y prueba de software basadas en Refine.
  8. Welty, Chris. "Resumen de KBSE-93: La octava conferencia anual de ingeniería de software basada en el conocimiento" . ase-conferences.org . Archivado del original el 17 de marzo de 2012. Recuperado el 4 de enero de 2014. REFINE/COBOL Object Modeling Workbench proporciona un conjunto de herramientas de reingeniería; Refine es el lenguaje de la demostración del concepto KBSA.
  9. Harris, Dave; A. Czuchry (1988). "El asistente de requisitos basado en el conocimiento". IEEE Expert . 3 (4).
  10. Johnson, Lewis; David R. Harris; Kevin M. Benner; Martin S. Feather (octubre de 1992). "Aries: El aspecto de requisitos/especificaciones para KBSA". Informe técnico final del Laboratorio de Roma . RL-TR-92-248.
  11. ^ DeBellis, Michael; Kanth Miriyala; Sudin Bhat; William C. Sasso; Owen Rambo (abril de 1993). "Demostración del concepto KBSA: Informe técnico final" . Informe técnico del laboratorio de Roma de la USAF . RL-TR-93-38 . Consultado el 25 de octubre de 2021 .