ES2334041T3 - Sistema analitico de diseño de software. - Google Patents

Sistema analitico de diseño de software. Download PDF

Info

Publication number
ES2334041T3
ES2334041T3 ES05742438T ES05742438T ES2334041T3 ES 2334041 T3 ES2334041 T3 ES 2334041T3 ES 05742438 T ES05742438 T ES 05742438T ES 05742438 T ES05742438 T ES 05742438T ES 2334041 T3 ES2334041 T3 ES 2334041T3
Authority
ES
Spain
Prior art keywords
specifications
design
formal
verified
generator
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES05742438T
Other languages
English (en)
Inventor
Guy Hampson Broadfoot
Philippa Jane Hopcroft
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Verum Holding BV
Original Assignee
Verum Holding BV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Verum Holding BV filed Critical Verum Holding BV
Application granted granted Critical
Publication of ES2334041T3 publication Critical patent/ES2334041T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)
  • Saccharide Compounds (AREA)

Abstract

Sistema analítico de diseño de software dispuesto para recibir especificaciones (14, 18, 22) informales de diseño de sistema, para permitir el desarrollo de diseños (102, 104) de especificaciones formales para una pluralidad de componentes del sistema y para convertir los diseños (102, 104) de especificaciones formales en especificaciones (66, 68, 70, 72) de diseño verificadas para su uso en la creación automática de código (76) fuente y llevar a cabo pruebas de implementación del código (76) fuente, comprendiendo el sistema: un módulo (91) editor dispuesto para permitir la edición por un usuario de las especificaciones (102, 104) formales para cada componente; un generador (90) de especificaciones de caja negra verificadas dispuesto para permitir desarrollar las especificaciones (14, 18, 22) informales de diseño de sistema recibidas para cada componente en: (i) especificaciones (102) formales de diseño representativas de una función de caja negra completamente especificada; y (ii) especificaciones (104) formales de interfaz representativas de una especificación de caja negra infraespecificada, en el que se consigue una infraespecificación introduciendo predicados indefinidos para capturar, para un estímulo s dado, una pluralidad de posibles respuestas y comportamiento posterior, en el que las especificaciones (i) y (ii) se desarrollan usando el módulo (91) editor, y el generador (90) de especificaciones de caja negra está dispuesto además para probar la corrección de las especificaciones (102) formales de diseño y especificaciones (104) formales de interfaz y para generar las especificaciones (66, 68, 70, 72) de diseño verificadas; comprendiendo el generador (90) de especificaciones de caja negra: medios para presentar, a través del módulo (91) editor, tablas (160) de enumeración para capturar las especificaciones formales como especificaciones basadas en secuencias, en el que cada fila de una tabla identifica un estímulo, su respuesta y su equivalencia; un generador (106) de modelos dispuesto para generar automáticamente un modelo (108) matemático en notación CSP del comportamiento del sistema para cada componente a partir de las especificaciones (102) formales de diseño y las especificaciones (104) formales de interfaz expresadas en las tablas (160) de enumeración, donde CSP significa Comunicación de Procesos Secuenciales; y un comprobador (110) de modelos dispuesto para analizar los modelos (108) matemáticos para determinar si tienen el comportamiento requerido para ese componente, para identificar errores en las especificaciones (102) formales de interfaz y en las especificaciones (104) formales de diseño, para realimentar los errores en las especificaciones (102, 104) de diseño informales y/o formales; en el que el generador (90) de caja negra verificada está dispuesto para permitir a un usuario ajustar las especificaciones (102) formales de interfaz y las especificaciones (104) formales de diseño a través de las tablas (160) de enumeración, para generar modelos (108) matemáticos corregidos, para analizar los mismos, para identificar errores y para realimentar los errores hasta que se consiga el comportamiento requerido para ese componente; y para derivar las especificaciones (66, 68, 70, 72) de diseño verificadas requeridas a partir de los modelos (108) matemáticos libres de errores.

Description

Sistema analítico de diseño de software.
Campo de la invención
La presente invención se refiere a un sistema analítico de diseño de software y, más en particular, aunque no exclusivamente, a un sistema de diseño de software que está dispuesto para mejorar la eficacia y la efectividad del desarrollo de software en un entorno industrial aplicando técnicas matemáticas para especificar, modelar y verificar diseños de software antes de que se implementen.
Antecedentes de la invención
En prácticamente todas las ramas reconocidas de la ingeniería, las implementaciones se basan en diseños verificados; es decir, los requisitos funcionales del producto final se especifican de manera rigurosa, se construyen modelos matemáticos para representar estos y los diseños propuestos, y los modelos de diseño se verifican matemáticamente frente a los modelos de requisitos para garantizar que cumplen su función prevista antes de que empiece la implementación.
El software no se desarrolla por lo general de esta forma. La mayor parte de los sistemas de software se especifican mediante especificaciones informales de requisitos que se escriben en lenguaje natural en términos específicos del negocio y el campo por expertos en el campo que generalmente no son expertos en diseño e implementación de software. Se reconoce ampliamente que tales especificaciones adolecen de un carácter incompleto, ambigüedad e inconsistencias; en otras palabras, una falta de rigor y precisión.
Los diseños los realizan expertos en diseño e implementación de software, pero cuyos conocimientos de base del campo a menudo son superficiales o incompletos. Como consecuencia, a menudo no reconocerán las deficiencias de las especificaciones a partir de las cuales trabajan hasta muy avanzada la implementación de la fase de pruebas de un proyecto, si es que lo hacen.
El comportamiento de software integrado, accionado por eventos, es a menudo extremadamente complejo recurriéndose a muchos paralelismos y el diseño debe afrontar numerosas cuestiones relacionadas con la concurrencia. Los errores en tales diseños son habituales porque es extremadamente difícil entender y razonar sistemas concurrentes. En caso de no detectarse, tales errores de diseño llevan a errores de implementación que son extremadamente difíciles de detectar y diagnosticar mediante pruebas porque suelen ser intermitentes en su efecto y difíciles de reproducir.
Como resultado, es habitual lanzar este tipo de software con un gran número de defectos sin descubrir y que estos permanezcan sin detectar durante meses o incluso años.
Resulta útil definir varios términos que se usan a lo largo de esta memoria descriptiva para describir los enfoques de la técnica anterior y las realizaciones de la presente invención (también denominada como el sistema ASD) y estos se exponen a continuación:
Software industrial
Software informático desarrollado principalmente por motivos comerciales. Este tipo de software se desarrolla con fines comerciales y/o constituye un producto previsto para la explotación comercial o constituye una parte de algún otro producto desarrollado a su vez con fines comerciales y/o previsto para su explotación comercial.
El software industrial debe cumplir las normas de calidad normalmente exigidas y esperadas de productos comerciales en el mercado. El software industrial habitualmente necesita tener una vida sostenible de muchos años y poder modificarse y mantenerse por muchos (equipos de) expertos en desarrollo de software diferentes durante su vida.
Esto contrasta con el software desarrollado por individuos u organizaciones académicas, de investigación o de otro tipo por motivos no comerciales tales como promover el conocimiento o por otros motivos cuya principal motivación no es la comercial.
Desarrollo de software industrial
Cualquier actividad para el desarrollo de software industrial. El desarrollo de software industrial se lleva a cabo en un contexto empresarial y está sujeto a limitaciones de coste y tiempo de salida al mercado. A menudo conlleva un esfuerzo de muchos años de desarrollo y se compone de miles y hasta millones de líneas de código de programa fuente y las especificaciones y diseños materializan un extenso conocimiento específico del producto y el campo. La escala y complejidad del desarrollo de software industrial hace que esté fuera de las capacidades de personas individuales y requiere equipos de expertos en desarrollo de software que trabajan junto con especialistas en el producto y el campo.
Diseño de software industrial
Actividades de diseño emprendidas durante el desarrollo de software industrial.
Especificación de caja negra
La especificación del comportamiento visible externamente del componente de software en términos de función matemática absoluta que correlaciona cualquier posible secuencia de estímulos de entrada con la respuesta apropiada. La forma exacta de esta función y su especificación se indica en [PP03]. En el sistema ASD, se emplean dos variedades de especificaciones de función de caja negra:
1. Una función de caja negra infraespecificada se usa para especificar interfaces de componentes de una manera que captura el comportamiento no determinístico habitualmente presente en especificaciones de interfaces porque se especifican a un nivel de abstracción en el que se ocultan detalles de implementación. En el sistema ASD, tales especificaciones también se denominan especificaciones formales de interfaces.
2. Una caja negra totalmente especificada se usa para especificar el diseño de un componente. Siempre se pretende que los diseños de componentes sean determinísticos al nivel de abstracción al que se especifica el comportamiento diseñado. En el sistema ASD, tales especificaciones también se denominan especificaciones formales de diseño de componentes.
Una especificación de caja negra especifica el comportamiento en términos de secuencias de estímulos de entrada y respuestas. No se incluye información de flujo de estado o de control.
Especificación de caja de estado
Una especificación de caja de estado es una refundición de una especificación de caja negra en forma de una función matemática absoluta que correlaciona un par (estado, estímulos) con un par (nuevo estado, respuesta). Las secuencias de estímulos de entrada se sustituyen por datos de estado que capturan la misma información. En el sistema ASD, se requieren especificaciones de caja de estado, también denominadas especificaciones de implementación, únicamente para aquellas partes del software para las que el código fuente de programa no puede generarse automáticamente por el generador de código y por tanto deben programarse a mano. Una caja de estado debe especificar exactamente el mismo comportamiento que la caja negra de la que se deriva.
Requisitos funcionales
Un conjunto de afirmaciones que especifican el comportamiento requerido de un componente o sistema de software. Los requisitos funcionales tienen que ver únicamente con el comportamiento; otras propiedades requeridas del sistema o componente se denominan requisitos no funcionales.
Especificación de interfaz funcional
Una especificación de interfaz que describe el comportamiento de un componente en términos de sus respuestas visibles frente a secuencias de estímulos de entrada en una de sus interfaces.
Especificación de requisitos
Una afirmación de requisitos, funcionales y no funcionales que el sistema o componente de software ha de satisfacer.
Especificación de arquitectura
Una descripción de un sistema de software que identifica sus partes componentes, las interfaces entre esos componentes, las funciones que ha de realizar cada componente y todos los demás requisitos técnicos y reglas de diseño que deben cumplir todos los diseños de componente y especificaciones de interfaz.
Diseño y especificación de componente
La especificación detallada de un componente, su organización y estructura y su comportamiento detallado.
Casos de prueba de componentes
Pruebas diseñadas para probar componentes individuales específicos en cuanto a su corrección frente al diseño y especificación de componente. En el sistema ASD, normalmente se generan automáticamente a partir del diseño por el Generador de casos de prueba en forma de programas de prueba de autoejecución.
Código de programa fuente
La implementación del software en un lenguaje de programación. Normalmente no está en una forma que pueda ejecutarse por un ordenador; primero debe traducirse a una forma ejecutable mediante traductores especiales denominados compiladores. Un compilador es específico del lenguaje de programación que está traduciéndose y el conjunto de instrucciones y la arquitectura del procesador de ordenador objetivo.
\vskip1.000000\baselineskip
Especificación de diseño funcional
Una especificación de un diseño de componente en términos de su comportamiento.
\vskip1.000000\baselineskip
Corrección funcional
Se dice que un diseño es funcionalmente correcto si y sólo si el comportamiento del componente cumple sus especificaciones de requisitos funcionales, las especificaciones de interfaces funcionales de las interfaces de componentes que debe implementar y las interfaces de componentes hacia otros componentes que usa.
También ha de apreciarse que la presente memoria descriptiva hace referencia a diversos estudios académicos y, por motivos de comodidad, se proporciona una bibliografía totalmente detallada al final de la descripción especí-
fica.
En referencia ahora al diagrama de bloques de la figura 1, se muestra un sumario de alto nivel de las fases esenciales de un proceso 10 de desarrollo de software convencional habitualmente usado en la industria. Por motivos de claridad, se ignoran cuestiones tales como fases que se solapan en la práctica y que extienden la descripción más allá de la fase de prueba de integración, ya que no son relevantes para la presente invención. Adicionalmente, se supone que todos los datos/documentos generados por cualquier etapa se arrastran como entrada a todas las etapas posteriores (por ejemplo, la especificación 14 informal de requisitos está disponible para las cinco fases del proceso de desarrollo que siguen a la etapa 12 de análisis de requisitos). Las etapas realizadas para el desarrollo de software, según se describe en la figura 1, se resumen de la siguiente manera:
1.
Análisis de requisitos 12: analistas de negocios y expertos en el campo desarrollan especificaciones 14 informales de requisitos que describen, entre otras cosas, el comportamiento funcional requerido del sistema de software. Se escriben según la práctica actual y pueden usar técnicas tales como diagramas de UML, casos de uso, escenarios, diagramas de secuencias y diagramas de flujo junto con descripciones en lenguaje natural en un intento de capturar el comportamiento esencial de la manera más clara posible.
2.
Especificar y diseñar la arquitectura 16: Los expertos en diseño de software analizan los requisitos 14 informales y dividen el sistema de software en componentes, identificando interfaces entre ellos y asignando requisitos funcionales a los mismos. El resultado de este trabajo se documenta en una especificación 18 de arquitectura informal.
3.
Especificar y diseñar componentes 20: Para cada componente identificado en la arquitectura 16, expertos en diseño de software analizan los requisitos informales y la especificación de arquitectura informal y desarrollan especificaciones detalladas del comportamiento requerido de cada componente, sus interfaces y un diseño detallado para implementar el comportamiento requerido. El resultado de este trabajo es un conjunto de documentos 22 de especificaciones informales de componentes y diseños.
4.
Implementar manualmente los componentes 24: Los expertos en implementación de software escriben el código 26 de programa fuente a mano, usando todos los documentos producidos por las etapas anteriores. También diseñan y producen los casos 28 de prueba de componentes detallados necesarios para probar los programas, y detectar y eliminar defectos de los mismos.
5.
Pruebas de componentes 30: Los programas 26 fuente que implementan cada componente se prueban individualmente y de manera independiente entre sí usando los casos 28 de prueba de componentes definidos en la etapa anterior. Dependiendo de la naturaleza de los componentes que estén implementándose, la prueba de componentes 30 será algún tipo de mezcla de casos de prueba automatizados y procedimientos de prueba ejecutados manualmente. Durante esta etapa, normalmente se descubren muchos errores en el código de programa. Algunos de ellos son errores de implementación; otros reflejan errores realizados en etapas anteriores y son defectos en los requisitos informales, la arquitectura y/o en los diseños de componentes y especificaciones. En la figura 1, las consecuencias de esto se ilustran en forma de los bucles 32, 34 de realimentación de defectos de especificación, diseño e implementación. Las salidas resultantes de esta etapa son componentes 36 probados.
6.
Pruebas de integración 38: En esta etapa, los componentes 36 probados individualmente se integran y prueban para formar el sistema de software completo. Durante esta etapa, normalmente se encuentran por primera vez una clase de defectos referentes a las interacciones entre los componentes. Debido a cuestiones tales como la concurrencia, se reconoce que éstos se encuentran entre los más difíciles de detectar y resolver. Algunos de ellos son errores de implementación; otros reflejan errores realizados en etapas anteriores y son defectos en los requisitos informales, la arquitectura y/o diseño de componentes y especificaciones. En la figura 1, las consecuencias de esto se ilustran en forma de bucles 32, 34 de realimentación de defectos de especificación, diseño e implementación.
Como se muestra en la figura 1, todas las especificaciones y diseños se describen como "informales": no se describen en una notación rigurosa basada en principios matemáticos. Por consiguiente, (i) los diseños no pueden verificarse de manera rigurosa respecto a sus especificaciones de requisitos antes de que empiece la implementación; y (ii) los desarrolladores de software se basan en probar su implementación con el fin de detectar errores en las especificaciones y diseños originales, así como errores introducidos durante la implementación. La figura 1 ilustra este problema de manera visual porque los bucles 32 de defectos de especificación y diseño conectan entre sí todas las fases del proceso 10 de diseño de software.
Esta forma de llevar a cabo diseño de software convencional y sus efectos se ilustran gráficamente en la figuras 2 y 3. La figura 2 es un gráfico 50 que muestra cómo se introducen habitualmente defectos a lo largo del proceso de desarrollo de software, aunque la mayoría de ellos no se detectan y eliminan hasta que empiezan las pruebas tarde en el proceso. La figura 3 es un gráfico 52, que ilustra las consecuencias del enfoque convencional en un proyecto típico. Cuando empiezan las pruebas, se descubren defectos y aumenta de manera incontrolada la cantidad de trabajo repetido.
Como se ha mostrado anteriormente existe un problema en que los errores en especificaciones y diseños no se detecten y eliminen antes de la implementación y, como resultado, las pruebas de software deben detectar y eliminar por tanto errores que se originan en la especificación y diseños, así como errores de implementación. Para el software desarrollado en un marco industrial, el hecho de basarse de este modo únicamente en las pruebas lleva a que queden niveles inaceptables de defectos en el software. Algunos de los motivos de esto, que se han apreciado en la industria se resumen de la siguiente manera:
1.
Las pruebas de software nunca pueden ser completas y no pueden "demostrar" la corrección; y
2.
El software industrial es demasiado complejo de probar de manera exhaustiva y por tanto sólo puede probarse un subconjunto relativamente pequeño de la funcionalidad total.
En términos generales, se han adoptado dos enfoques principales para intentar abordar estos problemas:
\bullet
Enfoques basados en procesos, en los que se establecen flujos de trabajo disciplinados y se soportan por prácticas de gestión apropiadas en un intento de reducir los defectos inyectados durante la fase de especificación y diseño. Esto se consigue mediante técnicas sociales tales como revisiones de documentos, repasos del diseño, inspecciones de código, etc.;
\bullet
Enfoques basados en procedimientos formales, en los que se usan técnicas matemáticas para especificar requisitos y diseños y realizar una cierta verificación de corrección basada en matemáticas antes de la implementación.
Los enfoques basados en procesos informales surgen generalmente de la propia industria de desarrollo de software. Su mayor debilidad es su firme rechazo a reconocer la necesidad de las matemáticas en la especificación y verificación de diseños de software antes de su implementación. Estos enfoques, aunque valiosos como forma de procesos de ingeniería disciplinados, siguen basándose en procedimientos informales de especificación de requisitos y diseños y no proporcionan medios para analizar el comportamiento dinámico de los diseños propuestos antes de su implementación. También tienden a dirigir la concentración a la corrección de componentes individuales en lugar de a los sistemas en su conjunto y no abordan las cuestiones de diseño más difíciles de concurrencia en grandes sistemas.
Los enfoques basados en procedimientos formales se han desarrollado en gran medida en ámbitos académicos y se basan en las matemáticas. Normalmente, el comportamiento requerido se especifica usando una notación matemática rigurosa y los diseños evolucionan mediante un proceso denominado Refinamiento por pasos en el que se producen diseños y eventualmente implementaciones en series de pasos pequeños que preservan la corrección, de manera bastante similar en concepto a la forma en la que se presentan demostraciones matemáticas.
"Using CSP to Support the Cleanroom Development Method for Software Development" de Broadfoot G H es una tesis doctoral de la Universidad de Oxford con fecha de septiembre de 2001 que proporciona información de base sobre el álgebra de procesos CSP y un proceso establecido de desarrollo de software denominado el procedimiento Cleanroom (sala limpia).
"Academia and industry meet: some experiences of formal methods in practice" de Broadfoot G H, y Broadfoot P J, páginas 49-58 de Proceedings of the Tenth Asia-Pacific Software Engineering Conference, 2003, es un artículo publicado que proporciona una visión general de la aplicación de procedimientos formales de verificación, con referencia al procedimiento Cleanroom y a CSP.
En teoría, el enfoque de procedimientos formales ha sostenido desde hace ya varios años la promesa de abordar los problemas descritos en la sección anterior. Existen numerosos procedimientos formales que se han desarrollado durante las últimas décadas, que tienen la teoría matemática necesaria para modelar los diseños de sistemas de software y razonar acerca de su corrección. En la práctica, sin embargo, los procedimientos formales casi nunca se encuentran en el entorno de trabajo industrial. Algunos de los motivos de esto que han apreciado los presentes inventores se resumen de la siguiente manera:
Falta de integración en el proceso de software: existe un vacío de comunicación entre los expertos en procedimientos formales por un lado y los analistas de negocios y expertos en el campo por otro lado. Apenas hay nada por la vía del conocimiento común compartido entre ellos. Los analistas de negocios y expertos en el campo no son por lo general expertos en ningún procedimiento formal específico y no pueden participar en el proceso de desarrollo de especificaciones formales. Los expertos en procedimientos formales por lo general no son expertos en el campo del sistema que está especificándose e implementándose y no estarán familiarizados con la práctica empresarial que subyace al producto; deben fiarse de los analistas de negocios y expertos en el campo para adquirir este conocimiento. Este vacío de comunicación plantea la siguiente cuestión: si los analistas de negocios y los expertos en el campo que tienen el conocimiento específico del producto no pueden entender las especificaciones formales y los expertos en procedimientos formales que escriben y entienden estas especificaciones formales no tienen una comprensión suficientemente profunda del campo del producto para estar seguros de que no están cometiéndose errores, ¿cómo pueden validarse estas especificaciones formales? Quienes las entienden no conocen demasiado y quienes conocen lo suficiente no las entienden. Este vacío debe superarse con el fin de integrar un enfoque formal en un proceso de desarrollo de software en la industria. Debe haber bucles de realimentación hacia y desde cada fase del proceso de desarrollo, incluyendo a los clientes y a los expertos en el campo. Resistencia dentro de la industria: los desarrolladores de software y sus gerentes no están acostumbrados a aplicar las matemáticas en el desarrollo de software y muchos no tienen la formación y experiencia necesaria para hacerlo. Hay una gran resistencia entre los desarrolladores de software frente a un enfoque formal y los costes de hacerlo se perciben como prohibitivos por los gerentes. En la actualidad, la industria está dedicada a un enfoque basado en la detección y eliminación de defectos e intenta abordar los problemas actuales volviéndose más eficaz en las pruebas. El uso de procedimientos formales requiere un cambio de actitud que se aleja de este enfoque y se centra en la prevención de defectos, una práctica común en todas las demás ramas de la ingeniería y este cambio es muy difícil de conseguir.
La inmadurez de los procedimientos y herramientas formales: Las técnicas y herramientas de los procedimientos formales son inmaduras y no pueden asumir los desarrollos de software a escala industrial. Esto supone problemas técnicos importantes que no se han resuelto. También hay obstáculos importantes en la progresión porque sin herramientas, todas las obligaciones de demostración deben llevarse a cabo a mano. Esto es tanto susceptible a errores como inviable, dada la escala de los sistemas de software modernos que están desarrollándose.
Sumario de la presente invención
Un objetivo de la presente invención es reducir al menos sustancialmente los problemas que se han descrito anteriormente y proporcionar un sistema para el desarrollo de software que, cuando se use para desarrollar un producto de software dé como resultado menos errores presentes en ese producto, acortando así el tiempo de desarrollo y reduciendo los costes de generación de software industrial totalmente probado y libre de defectos importantes.
Según un aspecto de la presente invención se proporciona un sistema de diseño de software analítico dispuesto para recibir especificaciones informales de diseño de sistema, para permitir el desarrollo de diseños de especificaciones formales para una pluralidad de componentes del sistema y para convertir los diseños de especificaciones formales en especificaciones de diseño verificadas para su uso en la creación automática de código fuente y para llevar a cabo pruebas de implementación del código fuente, comprendiendo el sistema: un módulo editor dispuesto para permitir a un usuario editar las especificaciones formales para cada componente; un generador de especificaciones de caja negra verificadas dispuesto para permitir desarrollar las especificaciones informales de diseño de sistema recibidas, para cada componente, en (i) especificaciones formales de diseño representativas de una función de caja negra totalmente especificada y (ii) especificaciones formales de interfaz representativas de una especificación de caja negra infraespecificada, consiguiéndose la infraespecificación introduciendo predicados indefinidos para capturar, para un estímulo s dado, una pluralidad de posibles respuestas y comportamiento posterior, en el que las especificaciones (i) y (ii) se desarrollan usando el módulo editor, y el generador de especificaciones de caja negra está dispuesto además para probar la corrección de las especificaciones formales de diseño y las especificaciones formales de interfaz y para generar las especificaciones de diseño verificadas; comprendiendo el generador de especificaciones de caja negra: medios para presentar, a través del módulo editor, tablas de enumeración para capturar las especificaciones formales como especificaciones basadas en secuencias, en las que cada fila de una tabla identifica un estímulo, su respuesta y su equivalencia; un generador de modelos dispuesto para generar automáticamente un modelo matemático en notación CSP del comportamiento del sistema para cada componente a partir de las especificaciones formales de diseño y las especificaciones formales de interfaz expresadas en las tablas de enumeración, donde CSP significa Comunicación de Procesos Secuenciales; y un comprobador de modelos dispuesto para analizar los modelos matemáticos para determinar si tienen el comportamiento requerido para ese componente, para identificar errores en las especificaciones formales de interfaz y las especificaciones formales de diseño, para realimentar los errores en las especificaciones informales y/o formales de diseño; en el que el generador de caja negra verificada está dispuesto para permitir a un usuario ajustar las especificaciones formales de interfaz y las especificaciones formales de diseño a través de las tablas de enumeración, para generar modelos matemáticos corregidos, para analizar los mismos, para identificar errores y para realimentar los errores hasta que se consiga el comportamiento requerido para ese componente; y para derivar las especificaciones de diseño verificadas requeridas a partir de los modelos matemáticos libres de errores.
La presente invención aborda los problemas de la técnica anterior proporcionando un sistema en el que las especificaciones y los diseños se verifican de modo que se eliminan errores antes de que empiece la implementación. La derivación de especificaciones de diseño requeridas de este modo permite la separación de los dos tipos diferentes de pruebas, lo que significa que las pruebas de componentes y de integración pueden concentrarse en detectar y eliminar únicamente errores de implementación lo que a su vez reduce el coste y el número de días requerido para llevar a cabo las pruebas de implementación. Esto se consigue por lo general mediante la presente invención franqueando el vacío entre la práctica industrial existente y los procedimientos formales desarrollados en el ámbito académico de modo que estos procedimientos formales pueden aplicarse de manera más generalizada.
Según otro aspecto de la presente invención, se proporciona un procedimiento para desarrollar y convertir diseños de especificaciones formales de un sistema de software que va a diseñarse, en especificaciones de diseño verificadas para su uso en la creación automática de código fuente y para llevar a cabo pruebas de implementación del código fuente para el sistema de software, comprendiendo el procedimiento: recibir especificaciones informales de diseño de sistema para una pluralidad de componentes del sistema de software, permitir a un usuario, usando un módulo editor; editar los diseños de especificaciones formales para cada componente; proporcionar un generador de especificaciones de caja negra verificadas para desarrollar, para cada componente, a partir de las especificaciones informales de diseño de sistema recibidas (i) especificaciones formales de diseño representativas de una función de caja negra totalmente especificada, y (ii) especificaciones formales de interfaz representativas de una especificación de caja negra infraespecificada, consiguiéndose la infraespecificación introduciendo predicados indefinidos para capturar, para un estímulo s dado, una pluralidad de posibles respuestas y el comportamiento posterior, en el que las especificaciones (i) y (ii) se desarrollan usando el módulo editor, probando la corrección de las especificaciones formales de diseño y las especificaciones formales de interfaz; generando las especificaciones de diseño verificadas; presentando, a través del módulo editor, tablas de enumeración para capturar las especificaciones formales como especificaciones basadas en secuencias, en las que cada fila de una tabla identifica un estímulo, su respuesta y su equivalencia; produciendo automáticamente, usando un generador de modelos, un modelo matemático en notación CSP del comportamiento del sistema para cada componente a partir de las especificaciones formales de diseño y las especificaciones formales de interfaz expresadas en las tablas de enumeración, donde CSP significa Comunicación de Procesos Secuenciales; analizando, usando un comprobador de modelos, los modelos matemáticos para determinar si tienen el comportamiento requerido para ese componente, para identificar errores en las especificaciones formales de interfaz y las especificaciones formales de diseño, y para realimentar los errores en las especificaciones informales y/o formales de diseño; y usando el generador de especificaciones de caja negra para permitir a un usuario ajustar las especificaciones formales de interfaz y las especificaciones formales de diseño a través de las tablas de enumeración, para generar modelos matemáticos corregidos, para analizar los mismos, para identificar errores y para realimentar los errores hasta que se consiga el comportamiento requerido para ese componente; y para derivar las especificaciones de diseño verificadas requeridas a partir de los modelos matemáticos libres de errores.
En términos generales, las ventajas técnicas del sistema analítico de diseño de software (ASD) que realiza la presente invención son tres:
1.
Los expertos en desarrollo de software pueden usar el sistema ASD para producir especificaciones formales y diseños de sistema verificados, totalmente integrados en los procesos de desarrollo de software convencionales existentes convencionales. Totalmente integrados, en este contexto, implica que (i) hay bucles de realimentación continua en el proceso de desarrollo para tratar errores, extensiones y modificaciones que surgen en la práctica, y (ii) se franquea el vacío entre las especificaciones formales y los diseños producidos usando ASD y el resto del ciclo de desarrollo industrial. La consecuencia de esto es que se evita que los errores realizados durante las fases de análisis de requisitos, especificación y diseño de la arquitectura y diseño y especificación de componentes lleguen a la fase de implementación y más lejos. Esto se ilustra en la figura 4 (descrita más adelante) mediante el bucle de realimentación de defectos de especificación y diseño que ya no se extiende a las fases de implementación manual de componentes, prueba de componentes y pruebas de integración.
2.
El sistema ASD genera preferiblemente código de programa fuente automáticamente a partir de los diseños verificados para partes del sistema reduciendo así la cantidad de código de programa fuente que ha de producirse manualmente. La ventaja de esto es una reducción en errores introducidos durante la fase de implementación.
3.
El sistema ASD genera preferiblemente casos de prueba de componentes automáticamente a partir de los diseños de componentes verificados. Esto también es ventajoso porque aumenta tanto la efectividad como la cobertura de las pruebas de componentes, dando como resultado menos defectos restantes cuando el software entra en la fase de pruebas de integración.
Las figuras 5 y 6 describen gráficamente el efecto resultante de extender el proceso de desarrollo de software al sistema ASD en cuanto a tasas de inyección de errores (véase el gráfico 54 de la figura 5) y tasas de detección (véase el gráfico 56 de la figura 6), y estos dos gráficos también hacen una comparación directa con el enfoque convencional.
A continuación se exponen otras ventajas de la presente invención y características descritas en la descripción y reivindicaciones adjuntas.
\sqbullet
El sistema ASD garantiza que la fase de implementación empieza a partir de diseños correctos de manera verificable y evita que errores de diseño lleguen a la fase de implementación. Esto lleva a los siguientes beneficios:
\circ
Las pruebas sólo tienen que abordar errores de implementación.
\circ
Una reducción significativa en trabajo repetido evitable; los errores de diseño son con frecuencia los más caros y problemáticos de arreglar.
\circ
Una reducción significativa en el esfuerzo y tiempo para las pruebas de integración.
\circ
Una reducción significativa en el tiempo hasta la comercialización.
\circ
Un tiempo, coste y calidad de desarrollo más predecible.
\sqbullet
Franqueo rastreable: El procedimiento de enumeración basada en secuencias proporciona una trazabilidad total entre los modelos formales que se analizan y los requisitos informales, participantes y miembros del proyecto. Esto proporciona la unidad requerida en la práctica entre especificaciones y el modelo formal que está verificándose.
\sqbullet
Generación automatizada de modelos de CSP usando los algoritmos proporcionados. Esto significa que los beneficios de usar modelado matemático basado en CSP pueden ponerse a disposición más fácilmente porque los expertos en diseño de software no necesitan el nivel de conocimientos matemáticos necesario para realizar los modelos a mano. Además, dado que los modelos se generan automáticamente a partir de diseños y especificaciones, cuando estos diseños y especificaciones cambian, no hay apenas dificultad en mantener los modelos matemáticos actualizados; sencillamente vuelven a generarse.
\sqbullet
El lenguaje CSP se diseñó con fines de descripción de sistemas concurrentes y por tanto permite un análisis riguroso de cuestiones de concurrencia que surgen durante la fase de diseño. Tales cuestiones se sabe que están entre los problemas más difíciles de tratar en el diseño de software y son inviables de solucionar en la fase de implementación. Antes de proporcionar el sistema ASD dado a conocer en una realización de la presente invención, había un prejuicio importante contra el uso de procedimientos formales tales como CSP en la industria, ya que se percibía como demasiado complicado y comercialmente inaceptable de usar. Esto se debe a que la mayoría de los expertos en diseño de software no tienen el conocimiento matemático especializado requerido para construir modelos razonables en CSP. Además, la construcción y mantenimiento de tales modelos a mano es muy caro. El sistema ASD hace posible realizar los beneficios de CSP de manera mucho más generalizada y tiene como resultado que llegan menos errores de diseño a la implementación.
\sqbullet
El sistema ASD proporciona una verificación totalmente automatizada del comportamiento funcional de especificaciones y diseños usando el comprobador de modelos FDR. Al igual que los requisitos de sistema, esto incluye verificar los diseños en cuanto a propiedades tales como falta de determinismo accidental, seguridad y vitalidad, evitación de bloqueos y libertad de divergencia.
\sqbullet
Se reconoce de manera generalizada en la industria del software que la reutilización de software ofrece el potencial de reducir de manera significativa el tiempo y el coste de desarrollo de software y de reducir de manera significativa el número de errores todavía presentes en el software cuando se lanza a sus usuarios finales. Un impedimento principal para una adopción más generalizada de la reutilización de software es la dificultad a la hora de especificar el comportamiento de componentes complejos con suficiente precisión. Las especificaciones formales de interfaces de componentes producidas por el sistema ASD son tanto precisas de manera rigurosa como comprensibles. Además, pueden convertirse automáticamente en los modelos matemáticos necesarios para verificar el diseño de software usando tales componentes reutilizables. El sistema ASD facilita por tanto la reutilización de software.
\sqbullet
Un sistema de software debe extenderse y mantenerse a lo largo de toda su vida. En un entorno de desarrollo de software convencional, se trata de una actividad cara y susceptible a errores porque gran parte de la información de diseño importante no se pone por escrito y se basa en el conocimiento personal acumulado de las personas que diseñan y programan el software. El sistema ASD mejora esta situación porque produce un conjunto completo de especificaciones y diseños verificados. Pueden realizarse cambios planificados en estas especificaciones y diseños verificados y volverse a verificar usando el sistema ASD antes de cambiar la implementación, dando como resultado una mejor calidad y costes reducidos.
\sqbullet
Certificación de diseños de software.
\sqbullet
Puede usarse en sistemas de cualquier tamaño debido a la capacidad de composición de CSP.
\sqbullet
La generación de código implica menos errores.
\sqbullet
La verificación automática de caja de estado frente a caja negra implica menos errores.
\sqbullet
La verificación automática de caja de estado frente a caja de estado implica que pueden realizarse optimizaciones a nivel de caja de estado y verificarse; esto no puede realizarse a nivel de código.
Breve descripción de los dibujos adjuntos
A continuación se describirán a modo de ejemplo procedimientos y aparatos según realizaciones preferidas de la presente invención para diseñar analíticamente y probar software, con referencia a los dibujos adjuntos en los que:
la figura 1 es un diagrama de bloques esquemático que muestra un proceso de desarrollo de software convencional;
la figura 2 es un gráfico tridimensional que ilustra el problema técnico de las tasas de inyección de errores y detección de defectos en el ciclo de vida del proceso de desarrollo de software convencional de la figura 1;
la figura 3 es un gráfico tridimensional que ilustra la cantidad de trabajo repetido requerido a lo largo del proceso de desarrollo de software como resultado de la manera de realizar las pruebas empleada en el proceso de desarollo de software convencional de la figura 1;
la figura 4 es un diagrama de bloques esquemático que muestra un proceso y sistema de desarrollo de software modificado, que incluye un sistema de diseño analítico de software (ASD) integrado, según una primera realización de la presente invención;
la figura 5 es un gráfico tridimensional que muestra una comparación gráfica entre la tasa de inyección de defectos real en el proceso de desarrollo de software convencional y la tasa de inyección de defectos modificada conseguida con la primera realización de la figura 4, que introduce el sistema de diseño de software analítico (ASD);
la figura 6 es un gráfico tridimensional que muestra una comparación gráfica entre la tasa de detección de defectos real en el proceso de desarrollo de software convencional y la tasa de detección de defectos modificada de la primera realización de la figura 4, que introduce el sistema ASD;
la figura 7 es un diagrama de bloques general esquemático del sistema ASD de la primera realización de la figura 4, que muestra un generador de especificaciones de caja negra verificadas y un generador de especificaciones de implementación verificadas;
la figura 8 es un diagrama de bloques esquemático del sistema ASD que muestra una visión general más detallada del generador de especificaciones de caja negra verificadas de la figura 7;
la figura 9 es un diagrama de bloques esquemático del sistema ASD que muestra una visión general más detallada del generador de especificaciones de implementación verificadas de la figura 7;
la figura 10 es un diagrama de flujo de bloques esquemático que muestra una visión general más detallada de un proceso para generar modelos matemáticos para un único componente A de software usando la primera realización de la figura 7;
la figura 11 es un diagrama de flujo de bloques esquemático que muestra una visión general más detallada de un proceso para verificar formalmente si la especificación de diseño de un componente A cumple todas las especificaciones de interfaz necesarias usando la primera realización de la figura 7;
la figura 12 es un diagrama de flujo de bloques esquemático que muestra una visión general más detallada de un proceso para generar modelos matemáticos para la especificación de implementación de un único componente A de software usando la primera realización de la figura 7;
la figura 13 es un diagrama de flujo de bloques esquemático que muestra una visión general más detallada de un proceso para verificar formalmente si la especificación de caja de estado de un componente A cumple la correspondiente especificación de caja negra usando la primera realización de la figura 7;
la figura 14 es una tabla para ilustrar un ejemplo de una tabla de enumeración para alguna secuencia C canónica;
la figura 15 es una tabla para ilustrar un ejemplo de la aplicación del algoritmo 1 a una tabla de enumeración para alguna secuencia C canónica y generar el correspondiente proceso P_{C} de CSP;
la figura 16 es una tabla que ilustra un ejemplo de una caja de estado para algún estímulo s;
la figura 17 es una tabla que ilustra un ejemplo de la presente aplicación del algoritmo 4 a tablas de caja de estado y generar el correspondiente proceso P_{SB} de CSP;
la figura 18 es una representación esquemática de una pantalla de interfaz generada mediante un módulo editor de ASD del sistema ASD mostrado en la figura 7;
la figura 19 es una representación esquemática de una pantalla de enumeración de secuencias generada por el módulo editor de ASD del sistema ASD mostrado en la figura 7;
la figura 20 es una representación esquemática de una pantalla de requisitos derivados generada por el módulo editor de ASD del sistema ASD mostrado en la figura 7;
la figura 21 es una representación esquemática de una pantalla de análisis canónico generada por el módulo editor de ASD del sistema ASD mostrado en la figura 7;
la figura 22 es un diagrama de bloques esquemático que ilustra el proceso de ejecutar código fuente generado para un componente que está diseñándose (CBD) dentro de su entorno de tiempo de ejecución que consiste en todos los demás componentes con los que interacciona;
la figura 23 es un diagrama de bloques esquemático que ilustra el proceso de ejecutar código fuente generado para un componente que está diseñándose (CBD) dentro de su entorno de tiempo de ejecución junto con los verificadores de protocolo de interfaz para cada uno de los componentes con los que interacciona según una segunda realización de la presente invención;
la figura 24 es un diagrama de bloques esquemático que muestra un proceso y sistema de desarrollo de software modificado, que incluye un sistema ASD integrado y verificadores de protocolo de interfaz, según la segunda realización de la presente invención como se muestra en la figura 23; y
la figura 25 es un diagrama de bloques general esquemático del sistema ASD de la segunda realización de la figura 24, que muestra un generador de especificaciones de caja negra verificadas, un generador de especificaciones de implementación verificadas y un generador de verificadores de protocolo de interfaz.
Descripción detallada de las realizaciones preferidas de la presente invención
En referencia ahora de nuevo a la figura 4, se describe ahora un proceso para desarrollo 60 de software que incorpora un sistema 62 de diseño analítico de software (ASD) según una primera realización de la presente invención. El sistema 62 ASD se integra en un proceso de desarrollo de software convencional y tiene algunos componentes comunes como se describe en detalle más adelante. Cuando se usa el sistema 62 ASD, el proceso de desarrollo de software modificado es como sigue:
1.
Análisis de requisitos 12: Es igual a como se ha descrito anteriormente en relación con la figura 1.
2.
Especificar y diseñar la arquitectura 16: Es igual a como se ha descrito anteriormente en relación con la figura 1.
3.
Especificar y diseñar componentes 20: Es igual a como se ha descrito anteriormente en relación con la figura 1.
4.
Sistema 62 de diseño analítico de software (ASD): Las entradas al sistema 62 ASD son las especificaciones 14 informales de requisitos, las especificaciones 18 informales de arquitectura y las especificaciones 22 informales de componentes y diseños. Las salidas del sistema 62 ASD son las siguientes:
a.
Salida 64 de especificación verificada:
i.
Especificación 66 de requisitos verificada;
ii.
Especificación 68 de arquitectura verificada;
iii.
Especificaciones 70 de diseño de componentes verificadas;
iv.
Especificaciones 72 de interfaces de componentes verificadas;
v.
Especificaciones 74 de implementación de componentes verificadas.
b.
Código 76 de programa fuente generado por máquina para partes del sistema de software.
c.
Casos 78 de prueba de componentes generados por máquina se generan también para su uso en un procedimiento de pruebas de componentes.
d.
Gráficos y tablas 79 de máquina de estados también se generan.
Más adelante se da una descripción detallada del sistema ASD.
5.
Implementar manualmente componentes 80: los expertos en implementación de software escriben el resto de programas fuente a mano para aquellas partes del sistema que no pueden generarse automáticamente por el sistema 62 ASD, usando las especificaciones 66, 68, 70, 72, 74 verificadas producidas por el sistema 62 ASD.
6.
Pruebas de componente 84: los programas 82 fuente que implementan cada componente se prueban individualmente y de manera independiente entre sí frente a las especificaciones y diseños verificados usando los casos 78 de prueba de componentes generados por máquina por el sistema 62 ASD. Dado que la implementación se basa en especificaciones y diseños verificados, los errores descubiertos en esta fase son principalmente errores de implementación únicamente y sólo están relacionados con aquellas partes de los programas fuente escritos a mano 80. Los programas 82 fuente generados por el sistema 62 ASD son una representación funcionalmente correcta del diseño. Esto contrasta con la situación en el proceso de desarrollo de software no modificado cuando no se usa el sistema 62 ASD. La figura 4 muestra que el bucle 32 de realimentación de defectos de especificación y diseño mostrado en la figura 1, ya no se extiende a las fases de implementación y prueba.
7.
Pruebas de integración 88: en esta etapa, los componentes 86 probados individualmente se integran y se prueban para formar el sistema de software completo. Durante esta etapa, normalmente se encuentran por primera vez una clase de defectos referentes a las interacciones entre los componentes. Dado que la implementación se basa en especificaciones y diseños verificados, los errores descubiertos en esta fase son principalmente errores de implementación únicamente. Las cuestiones más difíciles tales como la concurrencia se han eliminado durante la verificación del diseño. La figura 4 muestra que el bucle 32 de realimentación de defectos de especificación y diseño ya no se extiende a las fases de implementación y prueba.
El sistema 62 ASD descompone de manera eficaz las pruebas de diseño en dos partes diferentes que no se solapan: siendo la primera la prueba de requisitos, arquitectura y componentes en busca de defectos en su especificación y diseño; siendo la segunda la prueba de requisitos verificados, arquitectura verificada, diseño de componentes verificado, interfaces de componentes verificadas e implementaciones de componentes verificadas, individualmente y de manera integrada en busca de defectos en su implementación.
\vskip1.000000\baselineskip
En referencia ahora a la figura 7, el sistema 62 ASD se describe ahora más detalladamente. El sistema 62 ASD es el corazón de la primera realización y comprende los siguientes elementos:
1.
Generador 90 de especificaciones de caja negra verificadas: la primera fase de procesamiento del sistema 62 ASD llevada a cabo por el generador 90 de especificaciones de caja negra verificadas es producir especificaciones formales funcionales de los requisitos, arquitectura, diseños de componentes e interfaces de componentes a partir de las especificaciones 14, 18, 22 informales de los requisitos, arquitectura, diseños de componentes e interfaces de componentes. La salida de esta fase son:
a.
Especificación 66 de requisitos verificada,
b.
Especificación 68 de arquitectura verificada,
c.
Especificaciones 70 de diseño de componentes verificadas, y
d.
Especificaciones 72 de interfaces de componentes verificadas.
El generador 90 de especificaciones de caja negra verificadas del sistema 62 ASD incluye un módulo de procesamiento denominado un editor 91 de ASD, que forma parte del sistema 62 ASD, que sirve de interfaz para arquitectos y diseñadores de software y se usa para capturar los resultados de este trabajo en forma tabular. El editor 91 de ASD almacena los resultados en archivos 93 de datos en una forma que puede usarse como entrada para el generador de modelos, descrito más adelante.
Capturar especificaciones y diseños funcionales de este modo es un proceso iterativo con realimentación continua entre especialistas de producto, expertos en el campo, arquitectos y diseñadores de software con realimentación en todas las fases previas en el proceso de desarrollo de software para corregir los defectos de especificación y/o diseño realizados en esas fases más tempranas. En cualquier momento durante o después de este proceso, los arquitectos y diseñadores de software pueden usar el editor 91 de ASD para imprimir los resultados en forma de tablas y gráficos 79 de máquina de estados.
2.
Generador de código: El generador 92 de código es un programa informático que toma como entrada la especificación 66 de requisitos verificada, la especificación 68 de arquitectura verificada, las especificaciones 70 de diseño de componentes verificadas y las especificaciones 72 de interfaces de componentes verificadas en los archivos de datos producidos por el editor 91 de ASD y produce código 76 fuente de programa generado en un lenguaje de programación que implementa (parte de) el diseño de componentes. Esta primera realización genera programas fuente en C y C++. Es fácilmente extensible a otros lenguajes de programación cuando sea necesario. Este componente se describe en detalle más adelante.
3.
Generador 94 de especificaciones de implementación verificadas: aquellas partes del software para las que el código 82 de programa fuente no puede generarse automáticamente por el generador 92 de código, deben programarse a mano. Para hacer esto lo más sencillo y libre de errores posible, se generan especificaciones 74 de implementación verificadas detalladas usando el procedimiento de desarrollo de estructura en caja como se describe más adelante. Las entradas son los diseños 66, 68, 70, 72 de componentes verificados producidos por el generador 90 de caja negra verificada y las salidas son las especificaciones 74 de implementación de componentes verificadas. El editor 91 de ASD del generador 90 de caja negra verificada se usa para capturar las especificaciones 72 de implementación de componentes verificadas, y almacenarlas en forma de archivos de datos (no mostrados).
4.
Generador 96 de casos de prueba de componentes: el generador 96 de casos de prueba de componentes es un módulo de procesamiento que toma como entradas los archivos de datos producidos por el editor 91 de ASD, concretamente, la especificación 66 de requisitos verificada, la especificación 68 de arquitectura verificada, especificaciones 70 de diseño de componentes verificadas y especificaciones 72 de interfaces de componentes verificadas, y genera una amplia selección de casos 78 de prueba de componentes estadísticamente seleccionados. Una de las posibles formas en las que estos casos de prueba pueden generarse son programas fuente de ordenador en un lenguaje de programación apropiado. La realización de la presente invención se da a conocer generando casos de prueba de componentes en Perl, C, C++, Visual Basic y Java. Esto es fácilmente extensible a otros lenguajes de programación cuando sea necesario. Este componente se describe con más detalle más adelante.
En referencia ahora a la figura 8, el generador 90 de especificaciones de caja negra verificadas introducido en la figura 7, se describe ahora más detalladamente. El generador 90 de especificaciones de caja negra verificadas, produce especificaciones formales funcionales de los requisitos, arquitectura, diseños de componentes e interfaces de componentes a partir de las especificaciones informales de los requisitos, arquitectura y diseños de componentes y las verifica en cuanto a su corrección. Las especificaciones verificadas producidas son: especificación 66 de requisitos verificada, especificación 68 de arquitectura verificada, especificaciones 70 de diseño de componentes verificadas y especificaciones 72 de interfaces de componentes verificadas. Además, produce una versión tabular impresa de las especificaciones y una representación gráfica del comportamiento especificado en forma de gráficos y tablas 79 de máquina de estados para permitir la validación.
El generador 90 de especificaciones de caja negra verificadas, comprende los siguientes componentes:
1.
Generador 100 de especificaciones basadas en secuencias: usando el editor 91 de ASD, que se describe más adelante, los expertos en diseño de software analizan las especificaciones 14, 18, 22 informales y aplican el procedimiento de especificaciones basadas en secuencias [PTLP98, PP03] para producir una especificación de caja negra infraespecificada que describe el comportamiento funcional requerido, visible en cada interfaz, de cada componente de software que va a implementarse. Al mismo tiempo, también se identifican todos los demás componentes de hardware y/o software, con los que el software que va a desarrollarse debe estar interconectado, y, si no existen ya las especificaciones de caja negra para ellos, se producen. Estas especificaciones 104 de caja negra infraespecificadas son una definición formal, matemáticamente completa y consistente del comportamiento funcional requerido de cada componente que es visible por sus interfaces. Se describen como infraespecificadas porque se suprimen todos los detalles de implementación y se ocultan de sus eventuales usuarios. Como resultado, el comportamiento de interfaz casi siempre es no determinístico. Cuando todas las interfaces se han especificado formalmente en las especificaciones 104 formales de interfaz, cada componente debe diseñarse. Los expertos en diseño de software usan el editor 91 de ASD y aplican de nuevo el procedimiento de especificaciones basadas en secuencias, esta vez para desarrollar un diseño determinístico de cada componente 102. El diseño debe reflejar apropiadamente el comportamiento de interfaz requerido especificado en la especificación 72 de interfaz de componente y debe cumplir apropiadamente con el comportamiento de interfaz especificado de los componentes que utiliza. Para garantizar que éste es el caso, los diseños y especificaciones de interfaz se verifican unos frente a otros y frente a cualquier otro requisito de comportamiento derivado de las especificaciones informales. Además, en cualquier momento durante o después de este proceso, el editor 91 de ASD puede usarse para producir una versión tabular impresa de las especificaciones y una representación gráfica del comportamiento especificado en forma de gráficos y tablas 79 de máquina de estados para permitir la validación.
2.
Generador 106 de modelos: el generador 106 de modelos es un programa informático que toma como entrada las especificaciones 104 de interfaces de componentes y las especificaciones 102 de diseño de componentes generadas por el generador 100 de especificaciones basadas en secuencias. Éstas están en forma de archivos de datos almacenados por el editor de ASD. A partir de estos archivos de datos, el generador 106 de modelos genera modelos 108 matemáticos con el fin de verificar los diseños e interfaces de componentes y guarda estos modelos como archivos de datos almacenados en un ordenador y disponibles para su introducción en el verificador 110 de modelos.
\newpage
El generador 106 de modelos implementa los algoritmos genéricos descritos más adelante y automáticamente genera los modelos matemáticos necesarios en una notación adecuada. Una notación matemática de este tipo es el álgebra de procesos existente CSP [Hoa85, Ros98], que es la implementación usada en la presente primera realización. El generador 106 de modelos se describe con más detalle más adelante.
3.
Verificador 110 de modelos: una vez generados los modelos matemáticos del comportamiento del sistema, se analizan para determinar que los componentes de software modelados tienen el comportamiento requerido. Los modelos matemáticos generados por el generador 106 de modelos se introducen en una herramienta de verificación formal existente (no mostrada) apropiada para la notación matemática en la que se generan los modelos. Para modelos expresados en CSP, la herramienta de verificación apropiada es el comprobador de modelos FDR [Ros94, For03]. La primera realización de la presente invención se da a conocer usando esta herramienta de verificación. Este componente se describe con más detalle más adelante.
El verificador 110 de modelos identifica errores en las especificaciones 104 de interfaces de componente y en las especificaciones 102 de diseño e inconsistencias entre las mismas. Cuando se identifican errores de este tipo, se realimentan a las especificaciones informales y/o a las especificaciones formales resultado del generador 100 de especificaciones basadas en secuencias. Una vez realizadas las correcciones, se generan modelos 108 matemáticos actualizados usando el generador 106 de modelos y se verifican de nuevo usando el verificador 110 de modelos. Este proceso iterativo continúa hasta que se consiga un conjunto libre de errores de especificaciones 72 de interfaces de componentes verificadas y especificaciones 70 de diseño de componentes verificadas. Esto se ilustra en la figura 8 como el bucle 32 de realimentación de defectos de especificación y diseño.
En referencia ahora a la figura 9, se describe ahora el generador 94 de especificaciones de implementación verificadas. Produce especificaciones 74 de implementación verificadas detalladas para aquellas partes de los componentes de software para las que no puede generarse automáticamente el código 82 fuente de programa necesario y debe programarse a mano. Comprende el editor 91 de ASD (descrito más adelante), el generador 106 de modelos descrito en detalle más adelante, el verificador 110 de modelos descrito en detalle más adelante y la aplicación de un procedimiento existente, el procedimiento 112 de desarrollo de estructura en caja (BSDM) [PTLP98].
Como entradas, el generador 94 de especificaciones de implementación verificadas toma las especificaciones 70 de diseño de componentes verificadas producidas como salida por el generador 90 de especificaciones de caja negra verificadas y almacenadas en forma de archivos de datos mediante el editor de ASD.
Las salidas producidas son especificaciones 74 de implementación de componentes verificadas en forma de especificaciones de función de caja de estado a partir de las que los desarrolladores de software pueden producir el código de programa fuente necesario a mano y frente a las que puede validarse el código de programa fuente mediante las prácticas de inspección de código convencionales.
Según se describe en la figura 9, el generador 94 de especificaciones de implementación verificadas comprende los siguientes componentes:
1.
Procedimiento 112 de desarrollo de estructura en caja (BSDM): los expertos en diseño de software usan el editor 91 de ASD para aplicar el procedimiento 112 de desarrollo de estructura en caja a las especificaciones 70 de diseño de componentes verificadas de un componente con el fin de producir especificaciones 114 formales de implementación. Esta salida se captura en forma de un conjunto de tablas de caja de estado que representan conjuntamente una especificación de caja de estado determinística que describe la implementación detallada del componente. Se trata de una especificación matemáticamente completa y consistente a partir de la que los expertos en desarrollo de software pueden producir código fuente de programa a mano. El editor 91 de ASD almacena las especificaciones de implementación generadas en un archivo de datos en una forma que puede introducirse por el generador 106 de modelos.
Aplicar el BSDM 112 para producir especificaciones de implementación detalladas es una actividad susceptible a errores y una vez realizada, es necesario verificar las especificaciones 114 formales de implementación resultantes frente a las especificaciones 70 de diseño de componentes verificadas con el fin de detectar y eliminar cualquier error que se haya realizado.
2.
Generador 106 de modelos: se trata de un programa informático que toma como entradas las especificaciones 70 de diseño de componentes verificadas y las especificaciones 114 formales de implementación en forma de archivos de datos almacenados por el editor de ASD. A partir de estos archivos de datos, el generador 106 de modelos genera modelos 108 matemáticos con el fin de verificar si las especificaciones 114 formales de implementación cumplen las especificaciones 70 de diseño de componentes verificadas. Estos modelos 108 se almacenan como archivos de datos en el ordenador y están disponibles como entradas para el verificador 110 de modelos. El generador 106 de modelos implementa los algoritmos genéricos presentados a continuación y automáticamente genera los modelos 108 matemáticos necesarios en una notación adecuada. Una notación matemática de este tipo es el álgebra de procesos existente CSP [Hoa85, Ros98], que es la implementación usada en la presente primera realización de la presente invención. Esto se describe en detalle a continuación.
3.
Verificador 110 de modelos: una vez generados los modelos 108 matemáticos de las especificaciones 70 de diseño de componentes verificadas y las especificaciones 114 formales de implementación propuestas, se analizan para determinar que las especificaciones 114 formales de implementación modeladas cumplen todas las propiedades especificadas por la especificación 70 de diseño de componentes verificada. Los modelos 108 matemáticos generados por el generador 106 de modelos se introducen en una herramienta de verificación formal existente apropiada para la notación matemática en la que se generan los modelos 108. Para modelos108 expresados en CSP, la herramienta de verificación apropiada es el comprobador de modelos FDR [Ros94, For03]. La presente primera realización usa esta herramienta de verificación.
El verificador 110 de modelos se describe en detalle más adelante. El verificador 110 de modelos identifica errores en las especificaciones 74 de implementación de componentes y cualquier inconsistencia entre las especificaciones 74 de implementación de componentes y las especificaciones 70 de diseño de componentes verificadas. Cuando se identifican errores de este tipo, deben realimentarse en la fase de procedimiento 112 de desarrollo de estructura en caja para producir especificaciones 114 formales de implementación actualizadas. Una vez realizadas las correcciones, se generan nuevos modelos 108 matemáticos por el generador 106 de modelos y vuelven a verificarse usando el verificador 110 de modelos. Este proceso iterativo continúa hasta que se producen especificaciones 74 de implementación de componentes verificadas libres de errores. Esto se ilustra en la figura 9 como el bucle 32 de realimentación de defectos de especificación y diseño.
Con frecuencia sucede que las versiones iniciales de las especificaciones 114 formales de implementación, aunque sean correctas con respecto a las especificaciones 70 de diseño de componentes verificadas, no son inmediatamente adecuadas para su uso por los expertos en desarrollo de software para producir el código fuente de programa a mano. En este caso, las especificaciones 74 de implementación verificadas se transforman y optimizan a mano, usando técnicas matemáticas tales como álgebra booleana y lógica de predicados; esto contrasta con las prácticas de programación convencionales en las que tales optimizaciones detalladas se realizan como parte de la fase de programación.
En el sistema 62 ASD, tales transformaciones y optimizaciones se realizan en la medida de lo posible sobre las especificaciones 114 formales de implementación por el siguiente motivo: cada vez que las especificaciones 114 formales de implementación se transforman y optimizan manualmente, el generador 106 de modelos se usa para generar modelos 108 matemáticos correspondientes y el verificador 110 de modelos se usa para verificar automáticamente que cumplen con las especificaciones 70 de diseño de componentes verificadas. En cambio, en el enfoque de la técnica anterior convencional descrito en la figura 1, tales transformaciones se harían manualmente durante la fase de programación y no pueden verificarse automáticamente.
El generador 106 de modelos se describe ahora más detalladamente con referencia a la figuras 10 y 12. La figura 10 ilustra cómo se generan modelos 108 a partir de especificaciones 72 de interfaces de componentes y especificaciones 70 de diseño de componentes. La figura 12 ilustra cómo se generan modelos 108 a partir de la especificación 74 de implementación de componentes.
El generador 106 de modelos es un módulo de procesamiento que toma como entrada la especificación 104 de interfaz de componente y las especificaciones 102 de diseño de componentes generadas por el generador 100 de especificaciones basadas en secuencias y las especificaciones 74 de implementación de componentes generadas por el procedimiento 112 de desarrollo de estructura en caja. Están en forma de archivos de datos almacenados por el editor 91 de ASD (descrito más adelante). A partir de estos archivos de datos, el generador 106 de modelos genera modelos 108 matemáticos con el fin de verificar los diseños de componentes, interfaces e implementación prevista y guarda estos modelos como archivos de datos almacenados en un ordenador y disponibles para su introducción en el verificador 110 de modelos.
El generador 106 de modelos implementa los algoritmos genéricos presentados más adelante y automáticamente genera los modelos matemáticos necesarios en una notación adecuada. Una notación matemática de este tipo es el álgebra de procesos existente CSP [Hoa85, Ros98], que se usa en la presente primera realización de la presente invención.
El generador 106 de modelos constituye una parte inventiva importante del sistema 62 ASD al permitir traducir la salida a partir de la especificación basada en secuencias y el desarrollo de estructura en caja anteriormente descrito, directamente en los modelos 108 matemáticos necesarios para las posteriores etapas de verificación de diseño. Los algoritmos usados en esta traducción se han demostrado matemáticamente por el presente inventor que producen modelos 108 matemáticos que describen exactamente el mismo comportamiento que las especificaciones basadas en secuencias y las especificaciones de implementación de componentes a partir de las cuales se traducen. Es este enlace exclusivo entre técnicas y teorías formales existentes el que permite que se integren en un entorno de desarrollo de software industrial y hace posible y práctico que arquitectos y diseñadores de software verifiquen matemáticamente los diseños de los sistemas de software a escala industrial sin tener que convertirse en expertos en las técnicas de verificación matemática empleadas.
\newpage
Para entender completamente las funciones del generador 106 de modelos y el verificador 110 de modelos, es necesario y útil considerar los antecedentes de los procedimientos formales existentes que se usan para implementar el componente generador 106 de modelos del sistema 62 ASD. La siguiente descripción representa estos antecedentes.
Procedimiento de desarrollo de estructura en caja
El procedimiento de desarrollo de estructura en caja [Mil88, MLH86] proporciona un marco para la aplicación de la teoría de funciones en el desarrollo de software. Define tres vistas funcionales de un sistema de software, formando una jerarquía de abstracción que permite el refinamiento por pasos y la verificación: una caja negra es una descripción, sin estados, de la vista externa del sistema; una caja de estado se deriva de la caja negra e introduce el estado interno; y la vista final es la caja limpia que es una implementación de la caja de estado en un lenguaje seleccionado. Cada vista debe ser completa, consistente y correcta de manera rastreable. A continuación, se proporcionan los antecedentes necesarios acerca de las cajas negras y las cajas de estado para entender y dar a conocer completamente el sistema 62 ASD.
Especificaciones de caja negra
Una especificación de caja negra es la vista más abstracta y define el comportamiento externo de un sistema o componente en términos de estímulos de entrada desde y respuestas de salida observables hacia su entorno; S y R indican el conjunto de estímulos y respuestas respectivamente. Una caja negra se caracteriza por una función de caja negra BB: S^{\text{*}}\rightarrowR que correlaciona el historial de estímulos con respuestas, donde S^{\text{*}} es el conjunto de todas las secuencias finitas respecto a S.
Una función de caja negra debe ser absoluta: cada secuencia de estímulos se correlaciona con una respuesta. En la práctica, puede haber un estímulo que no invoque una respuesta; por motivos de exhaustividad, una respuesta especial cero se añade al conjunto R para tratar este caso.
Por ejemplo, en el estado inicial de un sistema antes de cualquier entrada de estímulo, ninguna respuesta puede suceder (espontáneamente) por lo que BB (\langle\rangle) = cero. Deben incluirse secuencias de estímulos ilegales y correlacionarse con el valor especial \omega\inR. Las secuencias ilegales son cerradas en extensión: todas las extensiones de secuencias ilegales también son ilegales y dan como resultado la respuesta w.
La caja negra se desarrolla a partir de los requisitos informales y se requiere que sea completa, consistente y correcta de manera rastreable con respecto a los mismos. En [PP03], se presenta un procedimiento de especificación de software basada en secuencias para definir de manera sistemática una especificación de caja negra que garantiza la exhaustividad y consistencia, así como mantener una trazabilidad completa con los requisitos informales originales.
El procedimiento de especificación basado en secuencias implica la enumeración ordenada de todas las posibles secuencias de estímulos en S^{\text{\text{*}}} por orden de longitud, empezando con la secuencia vacía (es decir, de longitud 0), y la asignación de una respuesta de R a cada una. Para cada longitud, la ordenación debe ser completa. Durante esta enumeración, pueden surgir equivalencias entre secuencias: dos secuencias u,v\inS^{\text{\text{*}}} son equivalentes Mealy, escrito u\equiv_{\rho Me}v, precisamente cuando todas las extensiones no vacías de las mismas dan como resultado la misma respuesta; es decir, para todas
1
Cuando surge una equivalencia entre una secuencia u y una previamente enumerada v, se indica la respuesta asociada con u, junto con su equivalencia con v. El conjunto S^{\text{\text{*}}} se divide en un conjunto finito de clases de equivalencia según se define por _{\rho Me} donde, para cada secuencia u\inS^{\text{*}}, hay una forma v única normal irreducible de manera que u\in[v]_{\rho Me}. Estas formas normales únicas para el sistema de reducción definido por _{\rho Me} se conocen como secuencias canónicas.
El formato presentado en [PTLP98] se usa a lo largo de este documento, en el que la enumeración de secuencias se presenta como un conjunto de tablas de enumeración: una para cada secuencia canónica. Por ejemplo, una tabla de enumeración para alguna secuencia canónica c_{j} adopta la forma:
2
donde {s_{1}, s_{2}} = S (puesto que cada extensión debe ser completa), r_{1}, r_{2}\inR y c_{j} es una secuencia canónica existente (identificada anteriormente en la ordenación). Sólo se usan secuencias no reducidas en las equivalencias. La primera fila de la tabla reza lo siguiente:
3
y esta etapa puede rastrearse de vuelta al requisito R_{1} en la especificación informal de requisitos. Debido a la equivalencia establecida, no tienen que considerarse extensiones adicionales de esta secuencia.
En la tabla anterior, extender secuencias en [c_{i}]_{\rho Me} con s_{2} invoca la respuesta r_{2} y no son reducibles a una secuencia previamente enumerada. Por tanto, c_{i}^{\cap}\langleS_{2}\rangle es una nueva secuencia canónica, para la que debe definirse una tabla de enumeración.
El proceso de enumeración se completa una vez que todas las secuencias se han asignado a una equivalencia; clase: una enumeración completa especifica exactamente un valor para cada secuencia z\inS^{\text{*}}, y por lo tanto define una especificación de caja negra completa y consistente [PP03].
Especificaciones de caja de estado
Una especificación de caja de estado es la siguiente etapa hacia la implementación y se deriva de una especificación de caja negra. Introduce variables de estado para capturar características distintivas del historial de estímulos, de manera que el comportamiento externo sea equivalente al especificado por la caja negra (sin necesidad de hacer referencia al historial de estímulos). Se caracteriza por una función de caja de estado absoluta SB: (Q X S) \rightarrow (Q X R), donde Q, S y R son los conjuntos de estados, estímulos y respuestas respectivamente.
Los estados en Q representan predicados característicos, un estado distinto para cada clase de equivalencia, sobre la partición de S^{\text{\text{*}}}. Definir variables de estado y sus instanciaciones únicas para cada clase de equivalencia se consigue a través de un proceso denominado el análisis de la secuencia canónica y se describe en [PTLP98].
Una caja negra y una caja de estado con funciones BB:S^{\text{*}}\rightarrowR y SB: (Q X S)\rightarrow(Q X R) respectivamente son equivalentes en comportamiento precisamente cuando, para cada secuencia en S^{\text{*}}, invocan la misma respuesta.
La especificación de caja de estado se representa como un conjunto de tablas, una para cada estímulo s\inS de la forma:
4
donde q_{1}, q_{2}\inQ y r_{1}, r_{2}\inR. En una especificación de caja de estado completa y consistente, a partir de cada tabla, para un estímulo S\inS, debe poder determinarse la respuesta única en cualquier estado dado del sistema. Por tanto, la columna de estado actual debe abarcar todos los estados.
Notación CSP
CSP [Hoa85, Ros98] es un álgebra de procesos para describir procesos concurrentes que interaccionan entre sí o con su entorno a través de alguna forma de comunicación. CSP tiene un lenguaje expresivo rico y una colección de modelos semánticos para razonar acerca del comportamiento de los procesos.
Un proceso se define en términos de comunicaciones atómicas sincrónicas, conocidas como eventos, que puede realizar con su entorno. Por ejemplo, el proceso a\rightarrowP puede realizar inicialmente el evento a y después actuar como el proceso P. La notación ? x:A\rightarrowP(x) (constructo de elección de prefijo) indica un proceso que desea realizar cualquier evento en A y después comportarse como el proceso P(x).
Los canales llevan conjuntos de eventos; por ejemplo, c.5 es un evento de canal c. El proceso c?x\rightarrowP_{x} introduce un valor x del canal c y después actúa como P_{x}. El proceso d.x\rightarrowQ realiza el evento d.v, donde v es el valor asignado a x, y después actúa como el proceso Q.
\newpage
En CSP, hay dos tipos de operadores de elección: P \boxempty Q indica una elección externa entre P y Q; los eventos iniciales de ambos procesos se ofrecen al entorno; cuando se realiza un evento, se resuelve la elección. P\PiQ indica una elección interna entre P y Q; el proceso puede actuar como P o como Q, realizándose la elección según algún criterio interno (y por tanto, el entorno no tiene control sobre cómo se resuelve la elección).
Como un ejemplo, considérese una sencilla máquina dispensadora de bebidas que ofrece una elección de menú de dispensación de té y café, la elección de cuál de ellas la realiza el entorno. Esto podría modelarse mediante el siguiente proceso CSP:
5
La elección (en el estado inicial del proceso MáquinaDispensadora) entre té y café se modela como una externa, reflejando el hecho de que la máquina dispensadora está preparada para ofrecer cualquiera de las bebidas, la decisión sobre cuál de ellas la realiza el entorno (es decir, el usuario de la máquina dispensadora). Una vez resuelta la elección, el proceso dispensa la bebida seleccionada, modelado por los eventos dispensar.té y dispensar.café respectivamente.
Como un segundo ejemplo, considérese la siguiente extensión del modelo de máquina dispensadora presentado anteriormente: una vez que el entorno (es decir, el usuario) ha seleccionado la bebida que va a dispensarse, la máquina dispensadora o bien dispensa la bebida elegida (como en el caso anterior) o bien visualiza un mensaje de error indicando que no hay ingredientes suficientes para la bebida elegida. La elección de qué respuesta realiza la máquina dispensadora se realiza internamente dentro de la máquina dispensadora y por tanto se modela como una elección interna dentro del modelo CSP como sigue:
6
Los procesos pueden ponerse en paralelo, sincronizándose en caso de (todos o especificados) eventos comunes o intercalándose, cuando se ejecutan de manera independiente entre sí. Por ejemplo, si dos procesos en un sistema de software se comunican entre sí mediante intercambio de mensajes, cada proceso se modelará de manera individual en CSP y los dos modelos se pondrán en paralelo, sincronizándose sobre un conjunto de eventos correspondiente al conjunto de mensajes que están intercambiándose.
\vskip1.000000\baselineskip
Algoritmos 1 y 2: traducir cajas negras en CSP
El punto de partida para especificar un componente usando el procedimiento de desarrollo de estructura en caja es construir una especificación de caja negra que describa el comportamiento externo requerido del componente, usando el procedimiento de especificación basada en secuencias.
El algoritmo 1 presentado a continuación es una implementación de cómo puede traducirse un conjunto de tablas de enumeración basadas en secuencias que codifican una especificación de caja negra en un correspondiente proceso CSP. Por motivos de claridad, una tabla de enumeración para alguna secuencia canónica c se representa como el conjunto Filas_{BB} (c) que comprende un elemento por cada fila de la tabla y que adopta la forma (s, r, c_{j}), donde s, r y c_{j} representan las columnas de estímulo, respuesta y equivalencia respectivamente. La figura 14 ilustra un ejemplo de una tabla de enumeración para alguna secuencia canónica c y su correspondiente conjunto Filas_{BB} (c). Con el fin de generar el modelo CSP, la primera columna que contiene el número de secuencias único de la fila y la cuarta columna que captura la trazabilidad con requisitos informales se ignoran, ya que no son relevantes en el análisis CSP del sistema.
\newpage
Algoritmo 1: para una especificación basada en secuencias dada, que codifica una especificación de caja negra con función BB: S^{\text{*}}\rightarrowR, se define un proceso CSP correspondiente P_{BB} como sigue:
1.
La especificación basada en secuencias comprende un conjunto de tablas de enumeración, una por cada secuencia canónica. Para cada secuencia canónica c_{i} en la enumeración, se define un proceso CSP P_{ci} como sigue:
7
donde
8
Esto produce una colección de procesos CSP mutuamente recursivos P_{c0},..., P_{cn}, un proceso P_{ci} para cada secuencia canónica c_{i} en la enumeración.
2.
El proceso CSP P_{BB} se define entonces como sigue:
9
donde c_{0} representa la secuencia canónica más corta que, por definición, es \langle\rangle.
La figura 15 ilustra la aplicación del algoritmo 1 para traducir una tabla de enumeración en un proceso CSP correspondiente. Muestra el CSP correspondiente a cada fila en la tabla y cómo se combina en una ecuación de proceso CSP que representa el comportamiento de la tabla de enumeración en su conjunto.
El algoritmo 1 anterior no concierne al caso en el que los estímulos se definen usando predicados. Una característica importante del enfoque de enumeración basado en secuencias para un uso práctico es la posibilidad de abstraer detalles introduciendo predicados que posibilitan distinguir las respuestas resultantes y el futuro comportamiento de un único estímulo de entrada. Por ejemplo, lo siguiente ilustra cómo puede dividirse un único estímulo s en dos estímulos abstractos usando predicados dentro de una tabla de enumeración:
10
donde, s\inS es por tanto un estímulo de entrada, p es un predicado, r_{1} \neq r_{2} y C_{i} \neq C_{j} (es decir, las respuestas resultantes y los comportamientos futuros son distintos, y dependen del valor del predicado p).
Además, los predicados se definen normalmente en términos de funciones de especificación que, a su vez, se definen sobre el historial de secuencia de estímulos. Por ejemplo, el predicado p puede determinar si hay o no suficientes recursos para permitir que tenga lugar el estímulo s. En este caso, p puede definirse como sigue:
11
donde Recurso(h) es una función de especificación sobre el historial de secuencias h. Dada h, Recurso devuelve el conjunto de recursos que están disponibles. Si este conjunto es no vacío, entonces p evalúa verdadero, si no p es falso. Un estímulo s cuya respuesta dependa de este predicado (por ejemplo, té), se modela entonces mediante los estímulos abstractos especiales s:p y s:\textlnotp. Por ejemplo, la tabla anterior puede convertirse en:
12
El algoritmo 2 a continuación extiende el algoritmo 1 para tratar tablas de enumeración que contienen estímulos que se definen en términos de predicados que implican funciones de especificación sobre historial de estímulos, y los traduce en los correspondientes modelos CSP. Esto se consigue modelando el historial de estímulos como variables de estado; en lugar de remitiendo al historial de secuencias, las funciones de especificación se calculan en términos de los datos de estado correspondientes dentro de los modelos CSP. Las variables de estado deben definirse por tanto para reflejar de manera precisa las funciones de especificación y el historial.
Algoritmo 2: dado un conjunto de tablas de enumeración basadas en secuencias que capturan una función de caja negra BB:S^{\text{*}}\rightarrowR, se define un proceso CSP correspondiente P_{BB} como sigue:
1.
Para cada función de especificación usada por predicados que definen estímulos de entrada, definir variables de estado apropiadas. Por ejemplo, la función de especificación Recurso(h ) para un historial h dado definido anteriormente podría capturarse por la variable Res que representa un conjunto de Recursos disponibles en cualquier estado dado.
2.
Para cada secuencia canónica c_{i}, expresar las funciones de especificación en términos de sus variables correspondientes y, para cada estímulo, calcular todos los posibles valores anteriores y posteriores asignados a cada variable. Esta representación debe ser de tal manera que, dado cualquier estado del sistema y un estímulo, pueden determinarse los valores precisos que han de asignarse a todas las variables de estado. Una posible implementación es capturar esto en forma tabular.
3.
Sean x_{1},..., x_{k} las variables de estado que capturan las correspondientes funciones de especificación derivadas en la etapa anterior. Para cada secuencia canónica c_{i}, se define un proceso CSP P_{ci}(x_{1},..., x_{k}) como sigue:
\hskip1cm13
donde la función actualizar devuelve el valor resultante para cada variable de estado. Estos valores se derivan directamente de las tablas construidas en la etapa anterior. El proceso Q se define como sigue:
14
si s=s':p, para algún s'\inS y el predicado p, si no.
donde la función estado(p) representa el predicado p en términos de las correspondientes variables de estado en oposición a las funciones de especificación. Por ejemplo, si p se definió previamente como:
15
y la función de especificación Recurso(h) se define en términos de la variable de estado Res según se describe en la etapa anterior del algoritmo, entonces el estado (p) puede definirse como sigue:
16
El proceso Q (s, r, c_{j}, (y_{1},..., y_{k})) se define en términos de los siguientes dos casos:
Caso 1 (Predicados): El estímulo s se define en términos de un predicado y por tanto adopta la forma s=s':p. El proceso CSP resultante captura el predicado como un estado de guardia (p), definido en términos de las variables de estado, sobre la secuencia estándar del evento de estímulo s' seguida por el evento de respuesta r y que lleva al proceso P_{ci}.
Caso 2 (No predicados): El estímulo s no implica predicados y por tanto da como resultado la definición CSP estándar como se define en el algoritmo 1.
4.
El proceso CSP P_{BB} se define entonces como sigue:
17
donde c_{0} representa la secuencia canónica más corta \langle\rangle y I_{1},..., I_{k} son los valores iniciales de cada variable de estado respectivamente. Estos valores iniciales se derivan directamente de las definiciones de las funciones de especificación.
Algoritmo 3: traducir cajas negras infraespecificadas en CSP
Pueden usarse funciones de predicado en especificaciones basadas en secuencias para la infraespecificación [PP03] (sin romper la teoría de funciones sobre la que se construye este enfoque). Esta forma de abstracción se usa para diseñar interfaces de componentes, en las que las acciones internas se ocultan de su entorno. La infraespecificación se consigue introduciendo predicados indefinidos para capturar el hecho de que para un estímulo s dado, hay un número de posibles respuestas y un comportamiento posterior, la decisión de cuál de ellas todavía es indefinida. El estímulo s se modela entonces como los estímulos abstractos s:p y s:\textlnotp donde p es indefinido.
El algoritmo 3 a continuación extiende el algoritmo 2 y presenta una implementación de cómo pueden traducirse tales especificaciones basadas en secuencias en modelos CSP correspondientes.
Algoritmo 3: dado un conjunto de tablas de enumeración basadas en secuencias que capturan una función de caja negra BB:S^{\text{*}}\rightarrowR, se define un proceso CSP correspondiente P_{BB} como sigue:
1.
Sea U el conjunto de todos los predicados indefinidos {p_{1},..., p_{n}}.
2.
(Igual que en la etapa 1 en el algoritmo 2) Para cada función de especificación usada por predicados que definen estímulos de entrada, definir variables de estado apropiadas.
3.
(Igual que en la etapa 2 en el algoritmo 2) Para cada secuencia canónica c_{i}, expresar las funciones de especificación en términos de sus correspondientes variables y, para cada estímulo, calcular todos los posibles valores anteriores y posteriores asignados a cada variable. Según se describe en el algoritmo 2, una posible implementación de esto sería una forma tabular.
4.
Sean x_{1},..., x_{k} las variables de estado que capturan las correspondientes funciones de especificación derivadas en la etapa anterior. Para cada secuencia canónica c_{i}, se define un proceso CSP P_{ci}(x_{1},..., x_{k}) como sigue:
\vskip1.000000\baselineskip
18
\vskip1.000000\baselineskip
donde la función actualizar devuelve el valor resultante para cada variable de estado. Estos valores se derivan directamente de las tablas construidas en la etapa anterior. El proceso Q se define como sigue:
\vskip1.000000\baselineskip
\hskip1cm19
donde la función estado(p) representa el predicado p en términos de las correspondientes variables de estado (como se define en la etapa 3 del algoritmo 2). El proceso Q (s, r, c_{j}, (y_{1},...,y_{k})) se define en términos de los siguientes tres casos:
Caso 1 (Predicados definidos): El estímulo s es un estímulo abstracto en la forma s=s':p, donde s' es algún estímulo en S y p es un predicado definido (es decir p\notinU). El proceso CSP resultante se define según la etapa 3 (Caso 1) del algoritmo 2.
Caso 2 (Predicados indefinidos): El estímulo s es un estímulo abstracto en la forma s=s':p, donde s' es algún estímulo en S y p es un predicado indefinido (es decir, p\inU). El proceso CSP resultante captura este elemento indefinido ignorándolo (en oposición a construir una guardia) y extrayendo simplemente el estímulo s' como el evento inicial ofrecido seguido por el correspondiente evento de respuesta r.
Caso 3 (Ausencia de predicados): El estímulo s no implica predicados y por tanto da como resultado la definición de CSP estándar según se define en el Algoritmo 1.
5.
(Igual que en la etapa 4 en el algoritmo 2) El proceso CSP P_{BB} se define entonces como sigue:
20
donde c_{0} representa la secuencia canónica más corta \langle\rangle y I_{1},..., I_{k} son los valores iniciales de cada variable de estado respectivamente. Estos valores iniciales se derivan directamente de las definiciones de las funciones de especificación.
Algoritmo 4: traducir cajas de estado en CSP
La especificación de caja de estado es la siguiente etapa hacia la implementación en el procedimiento de desarrollo de estructura en caja y se deriva de la especificación de caja negra. Captura el historial de estímulos como datos de estado, de manera que el comportamiento externo sigue siendo igual a como se ha definido en la especificación de caja negra. Una caja de estado de un componente dado (o sistema) define una función de caja de estado SB desde un estado y estímulo antiguo a un correspondiente estado y respuesta nuevo (SB: (Q X S)\rightarrow(Q X R), donde Q es el conjunto de posibles estados, S es el conjunto de estímulos y R es el conjunto de respuestas). Una vez introducidos tales datos de estado, ya no es necesario hacer referencia al historial de estímulos (como era el caso para las especificaciones de caja negra).
Hay una caja de estado definida para cada estímulo s\inS en la forma:
21
El algoritmo 4 a continuación presenta una posible implementación para traducir especificaciones de caja de estado en correspondientes modelos CSP. Por motivos de claridad (y como se ha hecho para el algoritmo 1), la información presentada en una caja de estado para un estímulo s\inS se captura como el conjunto Filas_{SB}(s), comprendiendo un elemento por cada fila de la tabla de caja de estado: para un estímulo s\inS dado, el conjunto Filas_{SB}(s) se define como un conjunto de tríos que contienen un trío (q, r, q') para cada fila en la tabla de caja de estado para s, donde q es el estado actual, r es la respuesta y q' es el nuevo estado. Por ejemplo, considérese la siguiente tabla de caja de estado para algún estímulo s:
22
Entonces Filas_{SB}(s) se definiría como el siguiente conjunto:
23
La figura 16 ilustra un ejemplo de una tabla de caja de estado para algún estímulo s y su correspondiente conjunto Filas_{SB}(s).
\newpage
Algoritmo 4: dada una especificación de caja de estado para alguna función de caja de estado SB: (Q X S) \rightarrow(Q X R), se define un proceso CSP correspondiente P_{SB} como sigue:
1.
Sean x_{1},..., x_{k} las variables de estado según se definen por la especificación de caja de estado.
2.
El proceso P_{SB} se define como sigue:
24
donde inic_{1},..., inic_{k} son los valores iniciales de las variables de estado. Estos valores iniciales se derivan directamente de las definiciones de las correspondientes funciones de especificación.
3.
El proceso P_{SB}' se define como sigue:
25
Hay un Q(s) por cada caja de estado para el estímulo s.
4.
Para cada estímulo s\inS, Q(s) se define como sigue:
26
donde
27
Para un estímulo s, hay un proceso Q' (q, s, r, q') para cada fila en su caja de estado. El valor de q refleja la condición previa para la cual s invoca la respuesta r y el estado actualizar q', y se modela como una guardia booleana en CSP.
La figura 17 ilustra un ejemplo de la aplicación del algoritmo 4 a un par de tablas de caja de estado, habiendo una tabla para cada estímulo s_{1} y s_{2}. El diagrama ilustra las ecuaciones CSP correspondientes a cada tabla de caja de estado y cómo se combinan para formar el modelo CSP para la caja de estado completa.
Una vez descritos los antecedentes para entender cómo funciona el generador 106 de modelos, se describe ahora el verificador 110 de modelos con más detalle con referencia a las figuras 11 y 13. El verificador 110 de modelos comprende un módulo 120 de procesamiento que introduce modelos 116, 118 matemáticos de las especificaciones formales de diseño, las especificaciones formales de interfaces y las especificaciones formales de implementación según se han generado y almacenado (no mostrado) en archivos de datos por el generador 106 de modelos y los verifica en cuanto a su corrección.
Se realizan las siguientes verificaciones de corrección estándar:
1.
Los modelos 118 de las especificaciones formales de interfaces de componentes se verifican para garantizar que están libres de bloqueos y divergencias y cumplen con cualquier ley de control derivada de las especificaciones 66 de requisitos verificadas.
2.
Los modelos 116 de cada uno de los diseños formales de componentes se verifican junto con los modelos 118 de sus respectivas interfaces de componentes, los modelos 108 de todas las demás interfaces de componentes que usan y los modelos de cualquier ley de control derivada de las especificaciones 66 de requisitos verificadas. Esto es para garantizar que, para cada componente, (i) el diseño de componentes implementa todo el comportamiento y sólo el comportamiento especificado por las especificaciones de interfaces de los componentes; (ii) todos los demás componentes usados por el diseño de componentes que están verificándose se usan según sus respectivas especificaciones de interfaces de componentes y que no se realizan acciones definidas como ilegales por esas especificaciones de interfaces; (iii) los diseños de componentes preservan cualquier ley de control derivada de las especificaciones 66 de requisitos verificadas; (iv) el diseño de componentes está libre de falta de determinismo, bloqueos y divergencias cuando interacciona con todos los demás componentes con los que está interconectado e interacciona. Esta verificación se lleva a cabo por el módulo 120 de procesamiento del verificador 110 de modelos como se ilustra en la figura 11.
3.
Para aquellas partes del software que deben programarse a mano y para las que se requieren especificaciones de implementación detalladas, se verifican modelos 108 de los diseños (en forma de especificaciones de caja negra) y modelos 108 de las especificaciones de implementación detalladas (en forma de especificaciones de caja de estado) para garantizar que son exactamente equivalentes y que las especificaciones de implementación detalladas están por tanto libres de errores. Esta verificación se lleva a cabo por el módulo 120 de procesamiento del verificador 110 de modelos como se ilustra en la figura 13.
Las verificaciones de corrección descritas anteriormente y en las siguientes secciones no son una lista exhaustiva; son representativas de verificaciones de corrección que normalmente se requerirán en la mayoría de los casos. La presente realización se describe basándose en cualquier verificación de corrección que puede expresarse en el álgebra de procesos elegida y su verificador 110 de modelos asociado puede formularse y aplicarse según sea necesario, como resultará evidente para el destinatario experto.
En general, las verificaciones son un proceso iterativo. Los modelos 108 se generan por el generador 106 de modelos, el verificador 110 de modelos descubre errores en las interfaces y diseños que están modelándose y verificándose y se ponen a disposición de los expertos en diseño de software. Estos corrigen entonces esas interfaces y diseños, y el sistema genera entonces nuevos modelos e intenta volver a verificarlos.
En cada fase del procedimiento 112 de desarrollo de estructura en caja para un diseño de componente, una vez modelada la especificación en CSP, pueden formularse propiedades tales como exhaustividad, determinismo y cumplimiento de leyes de control especificadas en los requisitos del sistema (por ejemplo, verificando que la máquina dispensadora nunca dispense bebidas sin pago) en CSP y verificarse automáticamente en FDR.
En el caso de las cajas de estado, al definir los predicados de características como datos de estado, es importante garantizar que dividen correctamente S^{\text{*}}: no deben solaparse y deben ser completos. En la práctica, a menudo se introducen errores durante esta fase. Ambas propiedades se comprueban fácilmente en FDR. La primera de ellas se captura comprobando la ausencia de determinismo; si hay predicados que se solapan, entonces habrá un estado en el que, para un estímulo s dado, al menos dos guardias evalúan verdadero, llevando a una elección no determinística en cuanto a cuál de ellas se realiza. Para garantizar que los predicados de estado que se solapan siempre dan como resulto ausencia de determinismo, el modelo CSP se extiende introduciendo eventos únicos inmediatamente después de cada evento de estímulo. Por ejemplo,
\vskip1.000000\baselineskip
28
\vskip1.000000\baselineskip
donde x es el predicado de estado (que se solapa) derivado en la caja de estado, s es un estímulo, r_{1} y r_{2} son respuestas, g y f modelos de las actualizaciones de estado, y e_{1} y e_{2} son los eventos únicos insertados en el modelo. La ausencia de determinismo se introduce claramente cuando x = verdadero. Sin los eventos adicionales, los predicados que se solapan no llevan necesariamente a ausencia de determinismo; en el ejemplo anterior, si r_{1} = r_{2} y f(x) = g(x), entonces no se introduce ausencia de determinismo. El generador 106 de modelos genera el modelo 108 CSP con estos eventos adicionales insertados para permitir comprobar esta propiedad. Una vez comprobada, los modelos 108 se generan sin estos eventos adicionales para el análisis posterior.
Cada etapa en el procedimiento 112 de desarrollo de estructura en caja se verifica. En cuanto a cajas negras y cajas de estado, es importante verificar que son equivalentes en comportamiento. Cuando en la técnica anterior se usa el procedimiento BSDM por sí mismo en un proceso de diseño de software sin usar el sistema ASD de la presente realización, tal verificación se realiza derivando el comportamiento de caja negra de la caja de estado y comprobando si es equivalente a la especificación de caja negra original. Esto lleva tiempo, es susceptible a errores y económicamente inviable en la práctica. Los algoritmos presentados anteriormente (algoritmos 1 a 4) permiten traducir ambas especificaciones en correspondientes modelos CSP respectivamente y realizar las comprobaciones de verificación necesarias automáticamente en FDR.
La equivalencia de comportamiento entre una especificación basada en secuencias y una especificación de caja de estado puede formularse en términos de las trazas de los correspondientes procesos CSP: Una especificación determinística basada en secuencias Espec_{BB} y una especificación determinística de caja de estado Espec_{SB} son equivalentes en comportamiento precisamente cuando sus respectivos modelos CSP P_{BB} y P_{SB} son equivalentes en trazas, escrito como P_{BB \equiv T} P_{SB}. Esto se comprueba automáticamente usando FDR. Si la comprobación fracasa, entonces FDR produce contraejemplos.
El procedimiento 112 de desarrollo de estructura en caja se centra en componentes en el desarrollo de diseños; aborda los diseños de componentes individuales sin tener en cuenta el comportamiento del sistema en su conjunto comprendido por sus numerosos componentes. Una vez traducidas en CSP, las interacciones entre componentes y el comportamiento del sistema pueden analizarse en su conjunto, analizando su composición paralela y comprobando que cumplen la especificación del sistema. Propiedades tales como evitación de bloqueos y cumplimiento de leyes de control especificadas por los requisitos se formulan en CSP y se verifican automáticamente en FDR. La propiedad de capacidad de composición de CSP proporciona la escalabilidad para un desarrollo de este tipo en la práctica.
Verificar si un diseño de componente implementa por completo exactamente el comportamiento especificado en sus especificaciones 104 de interfaces, supone verificar que el modelo 108 CSP de una especificación basada en secuencias de un diseño es un refinamiento en el modelo de fallos del modelo 108 CSP de una especificación basada en secuencias de una interfaz. Esta verificación se realiza automáticamente por FDR para especificaciones de interfaces sin divergencia no determinísticas y diseños de componentes determinísticos.
Como se ha mencionado anteriormente, el editor 91 de ASD es el módulo de procesamiento usado por los arquitectos y expertos en diseño de software. Ahora se describe con más detalle a continuación. El editor 91 de ASD proporciona funcionalidad para dar soporte a estos usuarios en las siguientes actividades:
1. Realizar la especificación 104 formal de interfaz de una interfaz de componente usando el generador 100 de especificaciones basadas en secuencias para definir el comportamiento de la interfaz como una función de caja negra infraespecificada;
2. Realizar la especificación 102 formal de diseño de un componente usando el generador 100 de especificaciones basadas en secuencias para definir el comportamiento del componente como una función de caja negra totalmente especificada.
3. Realizar la especificación 114 formal de implementación de cada parte del componente para la que el código 82 fuente de programa no puede generarse automáticamente por el generador 92 de código, sino que en lugar de ello debe programarse a mano. La especificación 114 formal de implementación se realiza aplicando el procedimiento 112 de desarrollo de estructura en caja para especificar el diseño requerido en forma de una caja de estado.
4. Anotar la especificación 102 formal de diseño con la información adicional necesaria por el generador 96 de casos de prueba para permitirle generar casos 78 de prueba que se ponderan por la probabilidad de que se produzcan secuencias de estímulos particulares. Tal especificación 102 formal de diseño anotada se denominada un modelo de uso.
5. Producir salidas impresas en copia física de las especificaciones de caja negra y los modelos de uso en forma tabular y trazarlos como gráficos 79 directos que representan el comportamiento de máquina de estados de interfaces y diseños de componentes. Estas salidas 79 representan un medio mediante el que los usuarios pueden validar mediante inspección manual si las especificaciones de caja negra reflejan o no las especificaciones 14, 18, 22 informales a partir de las cuales se derivan. Además, también se producen salidas 79 impresas de las especificaciones de caja de estado en forma tabular. Las funciones del editor 91 de ASD se proporcionan a sus usuarios a través de un conjunto de interfaces de usuario, habiendo un conjunto para cada una de las áreas principales de funcionalidad anteriormente descritas. Las interfaces de usuario se describen a continuación con referencia a la figuras 18 a 21 que muestran los cuatro tipos principales de interfaz de usuario.
Todas las especificaciones producidas mediante el editor 91 de ASD se almacenan en la base de datos (véase la figura 7) del sistema 62 ASD en una forma en la que puede reutilizarse y modificarse usando el editor 91 de ASD y se introducen en otras partes del sistema 62 ASD. La realización de la presente invención se da a conocer siendo el almacenamiento en forma de archivos 93 de datos. También está previsto que puedan usarse otras formas de almacenamiento informático tales como bases de datos relacionales.
El editor 91 de ASD proporciona un conjunto de interfaces de usuario para todas las funciones que proporciona. La presente realización incorpora las interfaces de usuario descritas a continuación; aunque ha de apreciarse que son posibles otras variaciones e interfaces de usuario.
Al especificar una interfaz de componente usando el procedimiento especificaciones basadas en secuencias para producir una especificación formal de interfaz en forma de una caja negra infraespecificada, se presentan las siguientes pantallas al usuario:
1.
La pantalla 138 de interfaz como se muestra en la figura 18, que contiene la siguiente información:
a)
El nombre de la interfaz;
b)
Un prefijo con el que el generador 106 de modelos identifica de manera unívoca cada estímulo y la respuesta perteneciente a esta interfaz;
c)
Una lista de todos los estímulos de entrada que pueden enviarse a la interfaz, especificando para cada uno un nombre corto abreviado, una breve descripción, un código que describe cómo han de trazarse las transiciones provocadas por el estímulo (color de línea, estilo, etc.) y el nombre de procedimiento que ha de usarse por el generador de código para el procedimiento que ha de llamarse cuando se recibe el estímulo;
d)
Una lista de respuestas que pueden emitirse por la interfaz 138, especificando para cada una un nombre abreviado, una breve descripción y el nombre de procedimiento que ha de usarse por el generador 92 de código al generar un código fuente de programas del correspondiente procedimiento de respuesta.
Esta interfaz se describe más detalladamente a modo de un ejemplo que se describe más adelante con referencia a la figura 18.
2.
La pantalla 160 de enumeración de secuencias como se muestra en la figura 19: contiene todas las tablas de enumeración, habiendo una tabla por cada clase de equivalencia de secuencias de estímulos de entrada, resultado del procedimiento de especificaciones basadas en secuencias. Conjuntamente, estas tablas definen la función de caja negra total que especifica el comportamiento de un componente tal como es visible en la interfaz. Cada tabla consiste en:
a)
Una fila de cabecera que identifica la secuencia canónica de la clase de equivalencia;
b)
Una colección de filas, habiendo una o más filas por cada estímulo de entrada.
Los estímulos de entrada se listan en las colecciones de filas en cada tabla en el mismo orden. En la mayoría de los casos, hay exactamente una fila para cada estímulo de entrada. Habrá más de una fila para un estímulo dado si hay más de un resultado posible (es decir, elección de respuesta y/o comportamiento de sistema futuro) que puede ser resultado del estímulo. En tal caso, hay una fila por cada resultado posible y cada fila se anota mediante un predicado que representa uno de los posibles casos. Los predicados se expresarán en términos de expresiones que implican funciones recursivas de prefijo sobre las secuencias de entrada y debe abarcarse cada caso. Si la elección entre resultados es determinística y conocida, las funciones recursivas de prefijo deben estar totalmente especificadas y definidas; si la elección no es determinística al nivel de abstracción al que se expresa la interfaz (es decir, depende de eventos ocultos por la implementación), entonces las funciones recursivas de prefijo se identifican pero todavía no se especifican. La función de caja negra sigue siendo infraespecificada. Dentro de cada tabla, cada fila en la colección de filas tiene las siguientes columnas definidas que contienen la siguiente información:
a)
Número de secuencia de fila - todas las filas en todas las tablas se numeran secuencialmente con una única secuencia de numeración con el fin referenciarlas;
b)
Estímulo - el nombre abreviado del estímulo de entrada;
c)
Predicado - un predicado según se ha descrito anteriormente. El predicado puede estar presente o no en cada fila;
d)
Respuesta - el nombre abreviado de la respuesta emitida por la interfaz;
e)
Clase de equivalencia - la identificación de la clase de equivalencia correspondiente al futuro comportamiento del sistema tras este estímulo;
f)
Un comentario explicando y justificando la respuesta y el futuro comportamiento del sistema;
g)
Etiquetas de requisitos - referencias a requisitos etiquetados en la especificación informal de requisitos que justifican el resultado tras el estímulo.
Esta interfaz se describe más detalladamente a modo de un ejemplo que se describe más adelante con referencia a la figura 19.
3.
La pantalla de especificación de función (no mostrada): una especificación de todas las funciones recursivas de prefijo usadas por los predicados. Para aquellas funciones que no pueden especificarse en términos de estímulos de entrada visibles a este nivel de abstracción, las funciones se identifican y se especifican los posibles valores de función sin especificar las ecuaciones recursivas de prefijo que definen el valor de función.
4.
La pantalla 180 de requisitos derivados como se muestra en la figura 20 comprende una lista etiquetada de requisitos 182 que faltan o son incorrectos en las especificaciones informales de requisitos. Durante la especificación basada en secuencias, es habitual que deban hacerse elecciones relativas a cuestiones sobre qué especificación informal de requisitos está ausente, es inconsistente o incorrecta. Para resolver tales cuestiones, se realizan requisitos o modificaciones adicionales y se graban y etiquetan en la pantalla 180 de requisitos derivados. Cuando la interfaz se ha especificado y validado por completo, se actualizan los requisitos informales según los requisitos derivados.
Esta interfaz se describe más detalladamente a modo de un ejemplo que se describe más adelante con referencia a la figura 20.
Al especificar un diseño de componente usando el generador 100 de especificaciones basadas en secuencias para producir una especificación 102 formal de diseño, en forma de una caja negra totalmente especificada, se presentan las siguientes pantallas al usuario:
1.
La pantalla 138 de interfaz que es igual a la descrita anteriormente salvo porque habrá una pantalla de interfaz para cada interfaz implementada o usada por el componente que está diseñándose.
2.
La pantalla 160 de enumeración de secuencias que es igual a la descrita anteriormente, salvo porque:
a.
El conjunto de estímulos de entrada es la unión de (i) todos los estímulos de entrada de todas las interfaces que están implementándose por el componente, y (ii) para cada interfaz usada, el subconjunto de respuestas a las que debe reaccionar el componente.
b.
Todas las funciones recursivas de prefijo referenciadas en cualquier predicado deben especificarse completamente para eliminar ausencia de determinismo intencionada.
c.
La función de caja negra resultante debe ser determinística; si no lo es, se trata de un error de diseño.
d.
Deben añadirse columnas adicionales para hacer un seguimiento de los estados de componentes usados como ayuda para el experto en diseño de software que realiza el diseño.
3.
La pantalla 190 de análisis canónico como se muestra en la figura 21. Esta pantalla 190 tiene una fila por cada clase de equivalencia y cada fila tiene las siguientes columnas:
a.
El número de secuencia de la secuencia canónica en la pantalla 160 de enumeración de secuencias;
b.
La propia secuencia canónica en forma de una lista separada por comas de estímulos de entrada, con predicado asociado si lo hay;
c.
Un nombre simbólico de la clase de equivalencia que se usa para anotar tanto las tablas de enumeración de secuencias como la representación gráfica trazada del correspondiente comportamiento de máquina de estados finita de la función de caja negra total;
d.
Una o más columnas de propiedades de sistema definidas según el procedimiento 112 de desarrollo de estructura en caja.
Esta interfaz se describe más detalladamente a modo de un ejemplo que se describe más adelante con referencia a la figura 21.
4.
La pantalla de especificación de función (no mostrada): Igual a la descrita anteriormente salvo porque todas las funciones recursivas de prefijo referenciadas en cualquier predicado deben especificarse completamente para eliminar ausencia de determinismo intencionada.
5.
La pantalla 180 de requisitos derivados que es igual a la descrita anteriormente.
Al especificar una implementación en forma de una caja de estado para aquellas partes del componente para las que el código fuente de programa no puede generarse automáticamente por el generador 92 de código, se presentan al usuario las siguientes pantallas:
1.
La pantalla 160 de enumeración de secuencias que es igual a la inicialmente descrita anteriormente salvo porque se añaden dos columnas adicionales, concretamente:
a)
Para cada fila para la que se especifica un predicado, una columna que contiene el mismo predicado expresado en términos de elementos de datos de estado en lugar de funciones recursivas de prefijo sobre las secuencias de entrada;
b)
Para cada fila para la que se especifica un predicado, una columna que contiene la especificación de actualizaciones de elementos de datos de estado.
\newpage
2.
La pantalla de especificación de elementos de datos de estado (no mostrada). Una pantalla que identifica y define el tipo de cada elemento de datos de estado y especifica el valor inicial.
Al anotar una especificación 102 formal de diseño de componentes para definir un modelo de uso necesario para el generador 96 de casos de prueba para generar casos 78 de prueba, se presentan al usuario las siguientes pantallas:
1.
La pantalla 160 de enumeración de secuencias que es igual a la inicialmente descrita anteriormente, salvo porque se añade una columna adicional para permitir que cada resultado se etiquete con una probabilidad estimada de suceso.
2.
La pantalla de generación de programa de prueba (no mostrada): Esta pantalla permite al usuario especificar tres tipos de información usada por el generador de casos de prueba de componentes para generar casos de prueba de componentes ejecutables:
a)
El prólogo de código de caso de prueba. Se trata de una secuencia de código de programa en el lenguaje de programación en el que van a generarse las pruebas. Cada programa de prueba generado empieza con esta secuencia.
b)
El epílogo de código de caso de prueba. Se trata de una secuencia de código de programa en el lenguaje de programación en el que van a generarse las pruebas. Cada programa de prueba generado termina con esta secuencia.
c)
El mapa de código de estímulo. Especifica para cada estímulo de entrada usado en el diseño, la secuencia de codificación que va a generarse en los casos de prueba para invocar el procedimiento correcto en la interfaz hacia el componente que está probándose.
En referencia ahora de nuevo a la figura 18, puede verse que la pantalla 138 de interfaz se divide en varias secciones como sigue:
Hay una sección 140 de canales, que lista los nombres de los canales 140 de comunicación mediante los que interacciona este componente especificado con otros componentes y el entorno. En el ejemplo mostrado en la figura 18, ISS e ISSCB son los nombres de canales que representan partes de las interfaces que están implementándose por el componente que está especificándose. Esta información la usa el generador 106 de modelos al generar modelos 108 matemáticos de la interfaz y diseño del componente.
Se proporciona una sección 142 de colas que identifica cualquier cola 142 necesaria para modelar correctamente un comportamiento de interfaz sincrónico. Una cola 142 se especifica por (i) su nombre 143; (ii) su nombre 144 de canal de entrada; (iii) su nombre 145 de canal de salida; y (iv) la longitud 146 de cola (el número de entradas que puede contener). En el ejemplo mostrado en la figura 18, se especifica una cola 142; el nombre de cola es DPCQ, los canales de entrada y salida se denominan DPCQin y DPCQout respectivamente y la longitud de cola es 12.
Esta información la usa el generador 106 de modelos al generar modelos 108 matemáticos de la interfaz y el diseño del componente. Permite modelar correctamente la naturaleza sincrónica de una interfaz automáticamente.
La pantalla 138 de interfaz tiene una sección 147 de enlaces que especifica información adicional necesaria para el generador 106 de modelos para generar correctamente modelos 108 matemáticos. Las afirmaciones se escriben en el lenguaje de modelado elegido, en esta realización se expresan en la forma legible por máquina de CSP denominada CSP_{m}. Las afirmaciones especificadas se emiten como parte de la salida generada sin cambio. En este ejemplo no se muestra ninguna.
Se proporciona una sección 148 de interfaz implementada adicional. Esta sección define el conjunto de interfaces implementadas por el componente que está especificándose. En el ejemplo en la figura 18, la interfaz 148 se denomina ISubStage y se implementa por el diseño especificado en la tabla de enumeración de secuencias denominada ISubStage. La finalidad de esta sección es definir los estímulos y respuestas que pasan a través de la interfaz implementada.
Cada estímulo y respuesta se define mediante una única fila en la tabla mostrada como parte de la pantalla 138 de interfaz. El significado de las columnas mostradas en la pantalla es el siguiente:
Columna 149 más a la izquierda: Una breve descripción del estímulo o respuesta. Es para comodidad del usuario humano del editor 91 de ASD; no tiene significado para el ASD o para el editor 91 de ASD y puede ser cualquier texto libre.
Columna 150 de estímulos: si la fila define un estímulo, esta columna contiene su nombre con su canal como prefijo.
Columna 151 de respuesta: si la fila define una respuesta, esta columna contiene su nombre con su canal como prefijo.
Hay tres respuestas que tienen nombres reservados predefinidos y se usan con significados predefinidos. Estos significados y nombres son parte del sistema ASD y no pueden cambiarse. Son (i) Cero usado en aquellos casos en los que un estímulo no tiene respuesta visible para representar la ausencia de una respuesta; (ii) Ilegal usado para identificar secuencias de estímulos de entrada que no tienen sentido o no pueden suceder por el diseño; (iii) Bloqueado- se usa para identificar secuencias que no pueden observarse en una situación particular. Tiene una semántica similar a la Ilegal salvo porque el estímulo y la respuesta se omiten ambos de los modelos matemáticos generados.
Columna 152 de trazado: esta columna se usa para controlar la apariencia de la representación trazada del diseño. Se usa para especificar el color y estilo de línea de las líneas de transición en la salida trazada.
En el ejemplo de la figura 18, se han agrupado estímulos y respuestas y se han separado por títulos para aumentar la claridad de la memoria descriptiva. El editor 91 de ASD permite total libertad a este respecto.
Además de la interfaz implementada, hay una sección 153 de interfaz usada. Es decir, interfaces usadas por el componente que está especificándose pero no implementadas por él. Cada interfaz 153 usada se define del mismo modo que la interfaz implementada, en términos de los estímulos y respuestas que pasan a través de la misma.
En referencia de nuevo a la figura 19, la pantalla 160 de enumeración de secuencias se usa para definir el comportamiento funcional visible externamente de una interfaz de componente y el comportamiento diseñado de un diseño de componente. La pantalla 160 visualiza una tabla que está dividida en un número de secciones, habiendo una sección para cada secuencia canónica que resulta de aplicar el Procedimiento de especificaciones basadas en secuencias. Cada sección va precedida de una línea 161 de cabecera que contiene la identificación y especificación de la secuencia canónica a la que se aplica la sección. La línea de cabecera se especifica en un color de contraste seleccionado por el usuario por motivos de claridad.
Cada sección especifica la única extensión de estímulo de la secuencia canónica más todas las demás secuencias en la misma clase de equivalencia. Dentro de cada sección, hay una o más filas para cada estímulo.
Cada fila consiste en la siguiente información:
\bullet
Columna 162 de número: esta columna es el número de secuencia de fila al que se ha hecho referencia previamente.
\bullet
Columna 163 de estímulo: es el estímulo de entrada al que se ha hecho referencia previamente.
\bullet
Columna 164 de predicado: esta columna contiene el predicado al que se ha hecho referencia previamente.
\bullet
Columna 165 de respuesta: es la respuesta a la que se ha hecho referencia previamente.
\bullet
Columna 166 de actualizar estado: esta columna se refiere a una modificación de la presente realización que puede incorporarse en una realización adicional. La columna 166 contiene actualizaciones de los predicados para reflejar el estado del sistema después de cualquiera de las secuencias representadas por la fila. Esta variación se describe a continuación.
\bullet
Columna 167 de equivalencia: es la clase de equivalencia a la que se ha hecho referencia previamente.
\bullet
Columna 168 de comentarios: esta columna contiene los comentarios a los que se ha hecho referencia previamente.
\bullet
Columna 169 de etiquetas: esta columna contiene las etiquetas de requisitos a las que se ha hecho referencia previamente.
\vskip1.000000\baselineskip
El ejemplo mostrado en la figura 19 muestra las dos primeras secciones de un diseño de componente. Obsérvese que la organización, disposición y apariencia de las tablas es importante en la descripción de la interfaz más que el contenido particular que se proporciona meramente como datos de ejemplo ilustrativos. Una especificación de interfaz de componente tiene la misma disposición y estructura.
En referencia de nuevo a la figura 21, la pantalla 190 de análisis canónico tiene un formato y una disposición que es parte de la interfaz de usuario del editor de ASD, pero el contenido son datos de ejemplo dados con fines de ilustración únicamente. De manera más específica, la pantalla 190 de análisis canónico comprende:
Una columna 192 más a la izquierda: corresponde al número de secuencia como se ha especificado anteriormente. Una columna 194 de secuencia canónica: corresponde a la secuencia canónica como se ha especificado anteriormente. Una columna 196 de nombre de estado: corresponde al nombre simbólico de la clase de equivalencia correspondiente como se ha especificado anteriormente. Columnas 198 de propiedad 1 y propiedad 2: una o más columnas, cada una de las cuales contiene una de las propiedades del sistema como se ha especificado anteriormente. En la pantalla mostrada en la figura 21, se muestran dos columnas que son únicamente ejemplares; el número de columnas y los nombres de las columnas se especifican por el usuario del editor de ASD y son específicos de cada especificación de componente individual.
Una variación de lo que se ha descrito anteriormente en relación con la pantalla 160 de enumeración de secuencias, se describe ahora como parte de una realización diferente. En la primera realización se describió el uso de funciones recursivas de prefijo sobre las secuencias de entrada como medio para especificar predicados asociados con secuencias de estímulos de entrada. Originalmente se mencionó que una pantalla de especificación de función era parte del editor 91 de ASD para especificar estas funciones.
En la práctica, resulta muy difícil que el generador de modelos y el generador de código generen los modelos matemáticos y el código fuente apropiados que representan el comportamiento de las funciones recursivas de prefijo. En lugar de ello, como una extensión de la aplicación de la primera realización, se usan variables de estado en las especificaciones de predicado. Esto significa que hay una forma de especificar el efecto de una secuencia de estímulos sobre los valores de estas variables de estado. De este modo, se consigue el mismo efecto que usando funciones recursivas de prefijo, pero la generación de modelos puede llevarse a cabo más fácilmente.
El efecto de esto puede verse en la pantalla 160 de enumeración de secuencias mostrada en la figura 19. La columna 164 de predicado contiene extensiones de predicado que usan variables de estado. La columna 166 de actualizar estado, se usa para especificar los nuevos valores de las variables de estado como una consecuencia de las secuencias de estímulos de entrada. Finalmente, las variables de estado deben tener valores definidos después de la secuencia vacía. Esto se consigue especificándolas en la línea 161 de cabecera de la primera sección de la tabla. Se trata de la sección que corresponde a la secuencia canónica vacía.
Esta modificación de la primera realización tiene los siguientes beneficios:
1.
La mayor parte de los ingenieros de software consideran el uso de variables de estado en predicados más intuitivo y fácil que definir funciones recursivas de prefijo;
2.
Hace que la generación de modelos sea más directa;
3.
Hace la generación de códigos más sencilla.
Además, significa que la pantalla 160 de enumeración de secuencias mencionada anteriormente tiene el mismo formato que el usado anteriormente.
Una modificación adicional es que la columna 167 de EQU tiene un código de color por el editor 91 de ASD para ayudar al usuario a distinguir entre diferentes casos.
El generador 96 de casos de prueba de componentes toma como entrada los modelos de uso en forma de los archivos 93 de datos almacenados por el editor 91 de ASD, genera los casos 78 de prueba de componentes necesarios y analiza los resultados de prueba. Se compone de los siguientes módulos de procesamiento:
1.
Un generador de secuencias de prueba (no mostrado) que genera un conjunto de casos de prueba en forma de secuencias de estímulos de entrada con las respuestas esperadas, ponderado estadísticamente según el modelo de uso según los principios descritos en [PTLP98]. En la presente realización, los modelos de uso se registran en el lenguaje TML como se describe en [PRO00] y el generador de secuencias de prueba funciona como el programa JUMBL según se especifica en [PRO03].
2.
Un generador de programas de prueba (no mostrado) que toma como entrada los casos de prueba generados por el generador de secuencias de prueba y genera los programas de prueba correspondientes a cada caso de prueba. En la presente realización, los casos de prueba se generan en forma de programas informáticos individuales, cada uno de los cuales corresponde a uno de los casos de prueba generados por el generador de secuencias de prueba. Puede elegirse cualquier lenguaje de programación adecuado; las secuencias de código de programa se generan según las secuencias introducidas usando el editor 91 de ASD y almacenadas como parte del modelo de uso. Para cada caso de prueba, el programa de prueba se genera como sigue:
a.
Se genera el prólogo de código (véase anteriormente).
b.
Para cada estímulo de entrada en el caso de prueba, se genera la secuencia de código especificada en el mapa de código de estímulo (véase anteriormente).
c.
Después de la última secuencia de código de estímulo de entrada, se genera el epílogo de código (véase anteriormente).
3.
Un oráculo de prueba (no mostrado) que toma como entrada archivos de datos generados por los programas de prueba cuando se ejecutan y que registran los resultados de la prueba y analiza los resultados con el fin de determinar si la prueba ha tenido éxito o ha fracasado y calcula estadísticas en cuanto al progreso de la prueba y la probable fiabilidad del componente que está probándose. En la realización de la presente invención, este análisis se realiza mediante el programa JUMBL especificado en [PRO03].
Un conjunto de programas informáticos que, cuando se compilan y están listos para su ejecución por un ordenador y que implementan el comportamiento de máquina de estados de un componente se denomina una máquina de estados ejecutable. Una máquina de estados ejecutable tiene tres partes:
\bullet
Un entorno de ejecución que determina cómo recibe la máquina de estados ejecutable estímulos de entrada. Es específico del sistema y la implementación y es independiente de cualquier máquina de estados particular que esté implementándose. Se diseña y programa a mano del modo habitual, posiblemente haciendo uso de componentes reutilizables. Su función es proporcionar los estímulos de entrada en el orden correcto para hacer que la máquina de estados opere según se especifica en la especificación 70 de diseño de componentes verificada.
Este código de programa no se genera por el generador 92 de código.
\bullet
Un conjunto de procedimientos de respuesta, habiendo un procedimiento de respuesta para cada respuesta r\inR y cada uno de los cuales implementa una de las respuestas en R. Este código de programa se desarrolla a mano basándose en las especificaciones 74 de implementación de componentes verificadas.
Este código de programa no se genera por el generador 92 de código.
\bullet
Una implementación de la máquina de estados que, dado un estímulo, invoca el procedimiento de respuesta correspondiente y ejecuta la función de transición de estado según su diseño especificado por las especificaciones 70 de diseño de componentes verificadas.
Todo este código se genera automáticamente por el generador 92 de código a partir de la especificación 70 de diseño de componentes verificada.
El código 82 de programa fuente que implementa el comportamiento de máquina de estados puede generarse en cualquier lenguaje de programación. La presente realización genera código de programa fuente en C++ y C; otros lenguajes de programación tales como JAVA o ADA podrían usarse igualmente.
El algoritmo (no mostrado) para generar el código fuente de programa en C++ es el siguiente:
1.
Generar la definición de un estado de clase de base abstracto con un procedimiento puro virtual definido para cada estímulo s\inS. La firma de cada procedimiento debe incluir el valor devuelto de tipo referencia a estado.
2.
Generar la definición de una clase denominada contexto para representar el estado del componente y que contiene datos de estado variables necesarios para mantener los valores de los diversos predicados. Para cada uno de tales elementos de datos, definir un elemento de datos con un nombre adecuado y un par de procedimientos de acceso para recuperar y actualizar los valores de elemento de datos. Para cada uno de tales predicados, definir una función booleana con un nombre adecuado que devuelve el valor del predicado.
3.
Para cada secuencia canónica C_{i}, generar la definición de una subclase concreta de clase abstracta estado, denominada estado_{i}, todas las instancias de la cual proporcionan una implementación para cada procedimiento puro virtual en la clase de base abstracta estado. La finalidad de cada procedimiento es (i) evaluar cualquier predicado usando los datos de estado encapsulados en la clase contexto y determinar la función de respuesta apropiada que debe invocarse y el estado sucesor; (ii) invocar la función de respuesta; (iii) capturar cualquier actualización de datos de estado en contexto necesarias para evaluar predicados en el futuro; y (iv) devolver una referencia al estado sucesor. Los datos de estado se recuperan y actualizan a través de los procedimientos de acceso implementados en la clase contexto.
Puede adoptarse un enfoque similar para generar código fuente para otros lenguajes orientados a objetos tales como Java.
Para lenguajes de procedimiento, tales como C, es necesario un enfoque diferente. Un algoritmo de este tipo es generar un módulo que encapsula todo el comportamiento de estado. Las características del módulo generado son las siguientes:
1.
El módulo define variables de datos locales estáticas para contener los datos de estado requeridos para evaluar predicados. Un elemento de datos de estado especial se denomina estado actual y se usa para identificar la secuencia canónica correspondiente a la clase de equivalencia de secuencias de estímulos de entrada ya introducidos.
2.
Para cada uno de los predicados, el módulo define una función booleana con un nombre adecuado que evalúa el predicado y devuelve su valor.
3.
El módulo define un procedimiento para cada estímulo s\inS. Los nombres de procedimiento tienen un ámbito global y el entorno de ejecución debe invocar el procedimiento que corresponde a cada estímulo cuando se produce. La finalidad de estos procedimientos es delegar el procesamiento real a un procedimiento de estímulo P_{i,j} diseñado para llevar a cabo las acciones necesarias para el estímulo s_{i} después de cualquier secuencia en la clase de equivalencia identificada por la secuencia canónica C_{j};
4.
Para cada estímulo s_{i}\inS y cada secuencia canónica C_{j}, el módulo contiene un procedimiento de estímulo local P_{i,j} para ejecutar las acciones definidas para el estímulo s_{i} después de cualquier secuencia en la clase de equivalencia representada por C_{j}. Cada uno de tales procedimientos debe (i) evaluar cualquier predicado basándose en valores de datos de estado; (ii) invocar el procedimiento de respuesta apropiado; (iii) realizar cualquier actualización de datos de estado necesaria; y (iv) devolver un valor que representa la clase de equivalencia a la que pertenecen las secuencias recién formadas.
\vskip1.000000\baselineskip
Un enfoque similar puede adoptarse para cualquier lenguaje de programación de procedimiento.
Para facilitar la prueba de componentes, el generador de código opcionalmente genera afirmaciones de programa de diagnóstico adicionales que registran el estímulo que está procesándose y la respuesta generada en forma de un archivo de datos que puede introducirse por el oráculo de prueba para analizar los resultados de pruebas de componentes.
Una segunda realización de la presente invención se describe ahora con referencia a la figuras 22 a 25. De manera más específica, la segunda realización es muy similar a la primera realización y por tanto, por motivos de concisión, sólo se comentarán a continuación detalladamente las diferencias entre las realizaciones.
En la realización anterior, el generador 90 de especificaciones de caja negra verificadas era responsable de generar especificaciones de caja negra para las siguientes:
1. Una especificación funcional de interfaz del componente que está diseñándose (que se denomina a continuación como CBD);
2. Un diseño y especificación de componente del CBD;
3. Especificaciones de interfaces funcionales para todos los demás componentes con los que interacciona el CBD.
Según se describe en la primera realización, esto permite verificar el diseño del CBD en cuanto a su corrección tanto con respecto a su propia especificación funcional de interfaz como con respecto a las especificaciones funcionales de interfaces de los demás componentes con los que interacciona. Estos componentes usados (denominados a continuación como UC) pueden implementarse en software o hardware o alguna combinación de ambos.
Cuando los UC se han desarrollado o se desarrollarán sin usar el sistema 62 ASD, por ejemplo, porque ya existen o van a suministrarse por una organización o equipo de proyecto diferente que usa procedimientos de desarrollo convencionales, no puede garantizarse su corrección con respecto a sus especificaciones funcionales de interfaces usando el sistema 62 ASD para desarrollar el CBD. Por tanto existe la posibilidad de que las especificaciones funcionales de interfaces de uno o más de los UC puedan diferir del comportamiento implementado real. Esto es importante porque el diseño del CBD se verifica frente a estas especificaciones funcionales de interfaces y no frente a los diseños o implementaciones de los UC.
En la práctica esto significa que los defectos en el sistema implementado provocados por diferencias entre una especificación funcional de interfaz de UC y su implementación real pueden quedar sin detectar hasta las pruebas de integración. Con el fin de aislar y detectar tales defectos, el sistema 62 ASD de la segunda realización se extiende para incluir los nuevos conceptos de verificadores 206 de protocolo de interfaz y un generador 208 de verificadores de protocolo de interfaz (figura 25).
En referencia ahora a la figura 22, se muestra una arquitectura 200 de ejecución de un CBD junto con un número de UC 202 con los que interacciona. El diseño del CBD se ha verificado como correcto suponiendo que cada UC implementa correctamente el comportamiento especificado por su especificación 72 de interfaces de componentes verificada, y el código 204 de programa del CBD se ha generado a partir de este diseño verificado.
Como se muestra en la figura 23, un verificador 206 de protocolo de interfaz es un componente de procesamiento de software que se inserta entre el CBD 204 y un UC 202. Su finalidad es observar todas las interacciones desde el CBD 204 hasta el UC 202 y desde el UC 202 hasta el CBD 204 y verificar las interacciones entre ellos según la especificación 72 de interfaz de componente verificada del UC 202.
No es necesario verificar que el CDB 204 interacciona correctamente con el UC 202 según la especificación 72 de interfaz de componente verificada del UC porque ya se ha verificado matemáticamente usando el sistema 62 ASD para diseñar e implementar el CBD. La finalidad de un verificador 206 de protocolo de interfaz es detectar cualquier diferencia entre el comportamiento del UC observado y su especificación 72 de interfaz de componente verificada y proporcionar información de diagnóstico (no mostrada) para permitir analizar estas diferencias y adoptar acciones correctivas. Obsérvese que esto no es necesario si el UC se ha desarrollado usando el sistema 62 ASD; en ese caso, su diseño se habrá verificado matemáticamente como correcto con respecto a su especificación funcional de interfaz.
Cada verificador 206 de protocolo de interfaz es un módulo de procesamiento generado a partir de una especificación 72 de interfaz de componente verificada por el generador ASD de verificadores 208 de protocolo de interfaz. El módulo 206 de procesamiento generado implementa una máquina de estados (no mostrada) que representa el comportamiento especificado de la interfaz de componente para la que se genera. Cuando se ejecuta el sistema, cada interacción del CBD 204 con el UC 202 a través de su interfaz se intercepta por el verificador 206 de protocolo de interfaz y pasa a través de su máquina de estados al UC 202 que implementa la interfaz. En cada interacción desde el CBD 204, el verificador 206 de protocolo de interfaz actualiza su máquina de estados según la especificación 72 de interfaz de componente verificada para reflejar esta interacción y la reenvía al UC 202 implementado.
Cada interacción del UC 202 dirigida hacia el CBD 204 se intercepta de manera similar por el verificador 206 de protocolo de interfaz y se valida frente a la máquina de estados de verificador de protocolo de interfaz. Si se permite, según el estado actual de verificador de protocolo de interfaz, entonces la interacción se reenvía al CBD 204. De lo contrario, se crea un registro de la información de diagnóstico y, opcionalmente, se detiene la ejecución del
sistema.
Cada verificador 206 de protocolo de interfaz generado puede configurarse durante la generación para mantener durante la ejecución una traza de un número especificado de las interacciones más recientes del CBD 204 y el UC 202 para ayudar a diagnosticar el error.
El verificador 206 de protocolo de interfaz sigue en su sitio durante la integración y las pruebas del sistema y puede eliminarse después o dejarse en su sitio permanentemente para proporcionar una monitorización continua del comportamiento del resto de componentes.
Dado que el verificador 206 de protocolo de interfaz es específico para una interfaz de componente dada, se genera un verificador 206 de este tipo para cada interfaz de UC.
El generador 208 de verificadores de protocolo de interfaz mostrado en la figura 25, es un módulo de procesamiento que es una versión modificada del generador 92 de código de ASD. Toma como entrada la especificación 72 de interfaz de componente verificada de un UC 202 en forma de una especificación de caja negra verificada y genera un verificador 206 de protocolo de interfaz en forma de un módulo de procesamiento de software escrito en un lenguaje de programación adecuado.
Una causa habitual de defectos en sistemas de software desarrollados usando procedimientos convencionales es que los componentes (UC) usados no se comportan según sus especificaciones de Interfaces de componente verificadas. A menudo se da el caso de que hay incertidumbre respecto al comportamiento del UC.
Esto lleva a una clase de defectos que no pueden detectarse hasta que haya empezado la integración y las pruebas del sistema y que son extremadamente difíciles de detectar y eliminar.
El beneficio técnico de esta realización es permitir que el sistema detecte e identifique tales defectos de manera más eficaz que en la práctica del diseño de software convencional y proporcionar información detallada relativa a la causa del defecto. En combinación con el resto del sistema 62 ASD, esto lleva a eliminar los defectos de manera más eficaz y más segura en comparación con otros procedimientos de desarrollo. Si se determina que el UC 202 se comporta de manera diferente a su especificación funcional de interfaz y que este comportamiento se considera el comportamiento correcto, usando el sistema 62 ASD de la segunda realización, el problema se aborda de la siguiente manera:
1.
Usando el editor 91 de ASD, se actualiza la especificación funcional de interfaz del componente para reflejar el comportamiento real observado y se produce una nueva especificación usando el generador 90 de especificaciones de caja negra verificadas de ASD. El generador de modelos de ASD se usa para generar un nuevo modelo 108 matemático de la interfaz modificada a partir de la especificación 72 de interfaz de componente verificada recién generada.
2.
Usando el verificador 208 de modelos de ASD, se verifica el diseño del CBD en cuanto a su corrección frente a estos cambios. En caso necesario, el diseño del CBD se modifica par reflejar este comportamiento cambiado, se generan nuevos modelos matemáticos usando el generador 106 de modelos de ASD y los cambios de diseño se verifican usando el verificador 110 de modelos de ASD. Este ciclo se repite según sea necesario hasta que el diseño del CBD modificado se haya verificado como correcto.
3.
El generador 92 de código de ASD se usa para generar el código de programa para el diseño de CBD modificado.
4.
El generador 208 de verificadores de protocolo de interfaz de ASD se usa para generar un nuevo verificador de protocolo de interfaz según la interfaz cambiada.
\newpage
La presente realización tiene una salida adicional del sistema ASD en comparación con la primera realización. Esta salida adicional es un verificador de protocolo de interfaz para uno o más UC como se muestra en las figuras 24 y 25.
La segunda realización incorpora un editor 91 de ASD mejorado que tiene muchas más funciones de edición. El editor 91 de ASD se extiende para proporcionar las siguientes funciones:
Insertar línea: una línea de número de secuencia vacía, y correctamente formateada se inserta en la tabla de enumeración de secuencias en el punto designado.
Insertar respuesta: el editor 91 de ASD presenta una lista de todas las respuestas definidas en la pantalla 138 de interfaz y permite al usuario elegir una o más de ellas. Estas respuestas se insertan en la tabla de enumeración de secuencias (pantalla 160) en el punto designado en el orden especificado.
Insertar estímulo: el editor 91 de ASD presenta una lista de todos los estímulos 150 definidos en la pantalla 138 de interfaz y permite al usuario seleccionar uno o más de ellos. Para cada estímulo 150 seleccionado, se inserta una nueva línea en el lugar designado en las tablas en el orden especificado.
Definir nueva secuencia canónica: al aplicar el procedimiento de especificaciones basadas en secuencias para construir tablas de enumeración de secuencias, se descubrirán e identificarán nuevas secuencias canónicas. Cada una de ellas requiere su propia sección en las tablas de enumeración de secuencias (pantalla 160). El editor 91 de ASD calcula la nueva secuencia 194 canónica, determina dónde debe insertarse la correspondiente sección en las tablas e inserta una nueva sección, cuyos valores se copian de la primera sección en la tabla. Una referencia a esta secuencia 194 canónica seleccionada se inserta en la columna 167 de equivalencia en las tablas de enumeración de secuencias (pantalla 160) en la fila designada.
Definir nueva secuencia canónica a partir de: se trata de una variación de la función descrita inmediatamente antes. En lugar de insertar una nueva sección creada copiando los valores de la primera sección, el editor 91 de ASD presenta una lista de todas las secuencias 194 canónicas actualmente definidas y permite al usuario elegir una de ellas. La nueva sección se crea copiando la sección correspondiente a la secuencia 194 canónica seleccionada por el usuario. Una referencia a esta secuencia 194 canónica seleccionada se inserta en la columna 167 de que en las tablas de enumeración de secuencias (pantalla 160) en la fila designada.
Enlazar a secuencia canónica existente: cuando el futuro comportamiento del sistema es igual que el comportamiento ya definido, el usuario debe especificar la secuencia 194 canónica a la que es equivalente el futuro comportamiento. El editor 91 de ASD visualiza una lista de todas las secuencias 194 canónicas ya definidas y el usuario selecciona la que tiene el mismo comportamiento de sistema futuro. Una referencia a esta secuencia 194 canónica seleccionada se inserta en la columna 167 de equivalencia en las tablas de enumeración de secuencias (pantalla 160) en la fila designada.
Clasificar secuencias canónicas: editar las tablas de enumeración de secuencias puede dar como resultado redefiniciones de secuencias 194 canónicas con la consecuencia de que las correspondientes secciones en la tabla están desordenadas. El editor 91 de ASD regenerará todas las secuencias 194 canónicas para garantizar que son la secuencia de longitud mínima en su respectiva clase de equivalencia y entonces clasifica las secciones de tabla para que reflejen el orden de longitud de las secuencias 194 canónicas.
Una vez descritas realizaciones preferidas particulares de la presente invención, ha de apreciarse que las realizaciones en cuestión son sólo meramente ejemplares, y que pueden realizarse variaciones y modificaciones, tales como las que concebirán quienes tengan el conocimiento y las aptitudes apropiados, sin alejarse del alcance de la invención según se establece en las reivindicaciones adjuntas.
\vskip1.000000\baselineskip
Bibliografía
[For03] Formal Systems (Europe) Ltd. Failures-Divergence Refinement: FDR2 User Manual, 2003. Véase
http://www.fsel.com.
[Hoa85] C. A. R. Hoare. Communicating Sequential Processes. Prentice Hall, 1985.
[Mil88] H. D. Mills. Stepwise Refinement and Verification in Box Structured Systems. Computer, 21(6):23-26, 1988.
[MLH86] H. D. Mills y R. C. Linger y A. R. Hevner. Principles of Information Systems Analysis and Design. Academic Press, 1986.
[PP03] S. J. Prowell y J. H. Poore, Foundations of Secuence-Based Software Especification. IEEE Transactions of Software Engineering, 29(5):417-429, 2003.
[Pro00] S. J. Prowell, TML: A Description Language for Markov Chain Usage Models. Information and Software Technology, 42(12):835-844, septiembre de 2000.
[Pro03] S. J. Prowell, JUMBL: A Tool for Model-Based Statistical Testing. En Proceedings of the 36th Hawaii International Conference on System Sciences (HICSS'03), 2003.
[PTLP98] S. J. Prowell, C. J. Trammell, R. C. Linger y J. H. Poore, Cleanroom Software Engineering - Technology and Process. Addison-Wesley, 1998.
[Ros94] A. W. Roscoe, Model-Checking CSP. A Classical Mind: Essays in Honour of C.A.R. Hoare, páginas 353-378. Prentice-Hall, 1994.
[Ros98] A. W. Roscoe, The Theory and Practice of Concurrency. Prentice Hall, 1998.

Claims (21)

1. Sistema analítico de diseño de software dispuesto para recibir especificaciones (14, 18, 22) informales de diseño de sistema, para permitir el desarrollo de diseños (102, 104) de especificaciones formales para una pluralidad de componentes del sistema y para convertir los diseños (102, 104) de especificaciones formales en especificaciones (66, 68, 70, 72) de diseño verificadas para su uso en la creación automática de código (76) fuente y llevar a cabo pruebas de implementación del código (76) fuente, comprendiendo el sistema:
un módulo (91) editor dispuesto para permitir la edición por un usuario de las especificaciones (102, 104) formales para cada componente;
un generador (90) de especificaciones de caja negra verificadas dispuesto para permitir desarrollar las especificaciones (14, 18, 22) informales de diseño de sistema recibidas para cada componente en:
(i) especificaciones (102) formales de diseño representativas de una función de caja negra completamente especificada; y
(ii) especificaciones (104) formales de interfaz representativas de una especificación de caja negra infraespecificada, en el que se consigue una infraespecificación introduciendo predicados indefinidos para capturar, para un estímulo s dado, una pluralidad de posibles respuestas y comportamiento posterior,
en el que las especificaciones (i) y (ii) se desarrollan usando el módulo (91) editor, y el generador (90) de especificaciones de caja negra está dispuesto además para probar la corrección de las especificaciones (102) formales de diseño y especificaciones (104) formales de interfaz y para generar las especificaciones (66, 68, 70, 72) de diseño verificadas;
comprendiendo el generador (90) de especificaciones de caja negra:
medios para presentar, a través del módulo (91) editor, tablas (160) de enumeración para capturar las especificaciones formales como especificaciones basadas en secuencias, en el que cada fila de una tabla identifica un estímulo, su respuesta y su equivalencia;
un generador (106) de modelos dispuesto para generar automáticamente un modelo (108) matemático en notación CSP del comportamiento del sistema para cada componente a partir de las especificaciones (102) formales de diseño y las especificaciones (104) formales de interfaz expresadas en las tablas (160) de enumeración, donde CSP significa Comunicación de Procesos Secuenciales; y
un comprobador (110) de modelos dispuesto para analizar los modelos (108) matemáticos para determinar si tienen el comportamiento requerido para ese componente, para identificar errores en las especificaciones (102) formales de interfaz y en las especificaciones (104) formales de diseño, para realimentar los errores en las especificaciones (102, 104) de diseño informales y/o formales;
en el que el generador (90) de caja negra verificada está dispuesto para permitir a un usuario ajustar las especificaciones (102) formales de interfaz y las especificaciones (104) formales de diseño a través de las tablas (160) de enumeración, para generar modelos (108) matemáticos corregidos, para analizar los mismos, para identificar errores y para realimentar los errores hasta que se consiga el comportamiento requerido para ese componente; y para derivar las especificaciones (66, 68, 70, 72) de diseño verificadas requeridas a partir de los modelos (108) matemáticos libres de errores.
2. Sistema según la reivindicación 1, en el que el sistema está dispuesto para manejar especificaciones informales de diseño de sistema que comprenden especificaciones informales de requisitos, especificaciones informales de arquitectura y diseños de componentes y especificaciones informales.
3. Sistema según la reivindicación 2, en el que el generador (90) de especificaciones de caja negra está dispuesto para permitir la creación de especificaciones (104) formales de interfaz del comportamiento funcional requerido de cada componente que es visible mediante sus interfaces.
4. Sistema según la reivindicación 3, en el que el generador (90) de especificaciones de caja negra está dispuesto para permitir la creación de las especificaciones (104) formales de interfaz como especificaciones de caja negra infraespecificadas del comportamiento funcional requerido.
5. Sistema según cualquiera de las reivindicaciones 2 a 4, en el que el generador (90) de especificaciones de caja negra está dispuesto para permitir la creación de especificaciones (102) formales de diseño de componentes del comportamiento funcional requerido de cada componente.
\newpage
6. Sistema según la reivindicación 5, en el que el generador (90) de especificaciones de caja negra está dispuesto para permitir la creación de las especificaciones (102) formales de diseño de componentes como especificaciones de caja negra totalmente especificadas del comportamiento funcional requerido.
7. Sistema según la reivindicación 5 ó 6, en el que el generador (90) de especificaciones de caja negra está dispuesto para garantizar que las especificaciones (102) formales de diseño de componentes se crean para ser compatibles con el comportamiento de interfaz requerido.
8. Sistema según cualquier reivindicación anterior, en el que el generador de especificaciones de caja negra está dispuesto para generar una especificación de requisitos verificada, una especificación de arquitectura verificada, una especificación de diseño de componentes verificada y una especificación de interfaces de componentes verificada.
9. Sistema según cualquier reivindicación anterior, en el que el módulo (91) editor está dispuesto para presentar una pantalla (138) de interfaz para permitir al usuario especificar una interfaz de componente, incluyendo la pantalla de interfaz el nombre de la interfaz, un identificador único para cada estímulo y respuesta pertenecientes a la interfaz, una lista de estímulos de entrada, y una lista de respuestas.
10. Sistema según cualquier reivindicación anterior, en el que el módulo editor está dispuesto para presentar tablas (160) de enumeración que están divididas cada una en secciones, una sección para una secuencia canónica que resulta de la especificación basada en secuencias.
11. Sistema según cualquier reivindicación anterior, en el que el generador (90) de especificaciones de caja negra comprende un generador (100) de especificaciones basadas en secuencias para facilitar la creación por el usuario de las especificaciones (102, 104) formales de diseño y de interfaz a partir de las especificaciones (14, 18, 22) informales de diseño de sistema recibidas.
12. Sistema según la reivindicación 11, en el que el generador (100) de especificaciones basadas en secuencias está dispuesto para emitir datos de análisis para su consideración por el usuario de las especificaciones de diseño.
13. Sistema según cualquier reivindicación anterior, en el que el comprobador (110) de modelos comprende un comprobador de modelos FDR para comprobar los modelos matemáticos descritos en notación CSP.
14. Sistema según cualquier reivindicación anterior, en el que el módulo (91) editor está dispuesto para almacenar datos como archivos (93) de datos.
15. Sistema según cualquier reivindicación anterior, que comprende además un generador (92) de código automatizado para crear código (76) fuente de programa generado por máquina a partir de las especificaciones (64) verifica-
das.
16. Sistema según cualquier reivindicación anterior, que comprende además un generador (96) de casos de prueba de componentes automatizado para crear casos (78) de prueba de componentes generados por máquina a partir de las especificaciones (64) verificadas.
17. Sistema según la reivindicación 16, en el que el generador (96) de casos de prueba automatizado comprende:
un generador de secuencias de prueba dispuesto para generar un conjunto de casos de prueba en forma de secuencias de estímulos de entrada con las respuestas esperadas;
un generador de programas de prueba que toma los casos de prueba y genera programas de prueba correspondientes a cada caso de prueba; y
un oráculo de prueba que toma archivos de datos, generados por los programas de prueba, que registran los resultados de la prueba y está dispuesto para analizar los resultados para determinar si se ha pasado la prueba.
18. Sistema según cualquier reivindicación anterior, que comprende además un generador (94) de especificaciones de implementación verificadas para ayudar a los usuarios a crear especificaciones (74) de implementación verificadas a partir de las especificaciones (64) verificadas para componentes de software que no pueden generarse automáticamente.
19. Sistema según cualquier reivindicación anterior, que comprende además un generador de verificadores de protocolo de interfaz para crear verificadores de protocolo de interfaz generados por máquina a partir de las especificaciones verificadas.
20. Un soporte de datos que tiene almacenado en el mismo un programa para un ordenador para configurar el ordenador para que funcione como un sistema como se expone en la reivindicación 1.
21. Procedimiento para desarrollar y convertir diseños (102, 104) de especificaciones formales de un sistema de software que va a diseñarse, en especificaciones (66, 68, 70, 72) de diseño verificadas para su uso en la creación automática de código (76) fuente y para llevar a cabo pruebas de implementación del código (76) fuente para el sistema de software, comprendiendo el procedimiento:
recibir especificaciones (14, 18, 22) informales de diseño de sistema para una pluralidad de componentes del sistema de software;
permitir, usando un módulo (91) editor, a un usuario editar las especificaciones (102, 104) formales para cada componente;
proporcionar un generador (90) de especificaciones de caja negra verificadas para:
desarrollar para cada componente, a partir de las especificaciones (14, 18, 22) informales de diseño de sistema recibidas:
(i) especificaciones (102) formales de diseño representativas de una función de caja negra completamente especificada; y
(ii) especificaciones (104) formales de interfaz representativas de una especificación de caja negra infraespecificada, en el que la infraespecificación se consigue introduciendo predicados indefinidos para capturar, para un estímulo s dado, una pluralidad de posibles respuestas y comportamiento posterior,
en el que se desarrollan las especificaciones (i) y (ii) usando el módulo (91) editor,
probando la corrección de las especificaciones (102) formales de diseño y de las especificaciones (104) formales de interfaz;
generando las especificaciones (66, 68, 70, 72) de diseño verificadas;
presentando, a través del módulo (91) editor, tablas (160) de enumeración para capturar las especificaciones formales como especificaciones basadas en secuencias, en el que cada fila de una tabla identifica un estímulo, su respuesta y su equivalencia;
producir automáticamente, usando un generador (106) de modelos, un modelo (108) matemático en notación CSP del comportamiento del sistema para cada componente a partir de las especificaciones (102) formales de diseño y las especificaciones (104) formales de interfaz expresadas en las tablas (160) de enumeración, donde CSP significa Comunicación de Procesos Secuenciales;
analizando, usando un comprobador (110) de modelos, los modelos (108) matemáticos para determinar si tienen el comportamiento requerido para ese componente, para identificar errores en las especificaciones (102) formales de interfaz y las especificaciones (104) formales de diseño, y para realimentar los errores en las especificaciones (102, 104) informales y/o formales de diseño; y
usando el generador (90) de especificaciones de caja negra para permitir a un usuario ajustar las especificaciones (102) formales de interfaz y las especificaciones (104) formales de diseño a través de las tablas (160) de enumeración, para generar modelos (108) matemáticos corregidos, para analizar los mismos, para identificar errores y para realimentar los errores hasta que se consiga el comportamiento requerido para ese componente; y para derivar las especificaciones (66, 68, 70, 72) de diseño verificadas requeridas a partir de los modelos (108) matemáticos libres de errores.
ES05742438T 2004-05-05 2005-05-05 Sistema analitico de diseño de software. Active ES2334041T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB0410047.5A GB0410047D0 (en) 2004-05-05 2004-05-05 An analytical software design system
GB0410047 2004-05-05

Publications (1)

Publication Number Publication Date
ES2334041T3 true ES2334041T3 (es) 2010-03-04

Family

ID=32482728

Family Applications (1)

Application Number Title Priority Date Filing Date
ES05742438T Active ES2334041T3 (es) 2004-05-05 2005-05-05 Sistema analitico de diseño de software.

Country Status (10)

Country Link
US (2) US8370798B2 (es)
EP (1) EP1749264B1 (es)
AT (1) ATE434216T1 (es)
DE (1) DE602005014970D1 (es)
DK (1) DK1749264T3 (es)
ES (1) ES2334041T3 (es)
GB (1) GB0410047D0 (es)
HK (1) HK1104100A1 (es)
SI (1) SI1749264T1 (es)
WO (1) WO2005106649A2 (es)

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4516001B2 (ja) * 2005-11-14 2010-08-04 富士通株式会社 ソフトウェアテスト管理プログラム、ソフトウェアテスト管理装置、ソフトウェアテスト管理方法
WO2007056807A1 (en) * 2005-11-18 2007-05-24 Robert Arthur Crewdson Computer software development system and method
US7813911B2 (en) * 2006-07-29 2010-10-12 Microsoft Corporation Model based testing language and framework
US8756561B2 (en) 2006-12-05 2014-06-17 International Business Machines Corporation Software model normalization and mediation
US8930890B2 (en) 2006-12-05 2015-01-06 International Business Machines Corporation Software model skinning
US8191044B1 (en) * 2006-12-14 2012-05-29 Fannie Mae System and method for maintaining requirements traceability
US8473910B2 (en) * 2007-08-09 2013-06-25 Infonovus Technologies, Llc Method and system for defining a software application as a complete and consistent specification in a software development process
EP2037359A1 (en) * 2007-09-14 2009-03-18 Siemens Aktiengesellschaft A method and a system for generating project-related requirements
US9098635B2 (en) * 2008-06-20 2015-08-04 Cadence Design Systems, Inc. Method and system for testing and analyzing user interfaces
EP2329376A1 (en) * 2008-08-15 2011-06-08 Verum Holding B.V. A method and system for testing complex machine control software
US20100114939A1 (en) * 2008-10-24 2010-05-06 Schulman Elad Software test management system and method with facilitated reuse of test components
JP5236564B2 (ja) * 2009-04-20 2013-07-17 株式会社日立製作所 ソフトウェア再利用支援方法及び装置
US8448133B2 (en) * 2009-06-24 2013-05-21 International Business Machines Corporation Software development, deployment and evolution system, method and program product
US20110041116A1 (en) * 2009-08-14 2011-02-17 Gm Global Technology Operations, Inc. Formal analysis driven based evolution of requirements specifications
US8719771B2 (en) * 2009-09-28 2014-05-06 Cadence Design Systems, Inc. Method and system for test reduction and analysis
US9703550B1 (en) * 2009-09-29 2017-07-11 EMC IP Holding Company LLC Techniques for building code entities
US8429605B2 (en) * 2009-12-30 2013-04-23 The United States Of America As Represented By The Secretary Of The Navy Finite state machine architecture for software development
US8949773B2 (en) * 2010-03-25 2015-02-03 International Business Machines Corporation Deriving process models from natural language use case models
WO2011149553A1 (en) 2010-05-27 2011-12-01 The Mathworks, Inc. Partitioning block diagrams into executable contextual models
US10657208B2 (en) 2010-05-27 2020-05-19 The Mathworks, Inc. Analyzing model based on design interest
US10719645B1 (en) 2010-05-27 2020-07-21 The Mathworks, Inc. Model structure analysis with integration of transformed slice
US8904358B1 (en) 2010-06-08 2014-12-02 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for synchronizing software verification flows
US8799867B1 (en) * 2010-06-08 2014-08-05 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for synchronizing software verification flows
US9020792B2 (en) * 2010-09-17 2015-04-28 International Business Machines Corporation Coupling architectural and implementation/behavioral models of a computer-based system
US8413249B1 (en) * 2010-09-30 2013-04-02 Coverity, Inc. Threat assessment of software-configured system based upon architecture model and as-built code
US9747187B2 (en) 2010-10-27 2017-08-29 International Business Machines Corporation Simulating black box test results using information from white box testing
CN102270130A (zh) * 2011-06-27 2011-12-07 浙江工业职业技术学院 一种运行时自适应软件体系结构的形式化描述方法
US8661305B2 (en) * 2011-07-10 2014-02-25 Ravishankar Rajarao Method and system for test vector generation
US8972928B2 (en) * 2011-08-30 2015-03-03 Uniquesoft, Llc System and method for generating application code
US9063673B2 (en) * 2011-08-30 2015-06-23 Uniquesoft, Llc System and method for implementing application code from application requirements
GB201116440D0 (en) * 2011-09-23 2011-11-02 Airbus Operations Ltd Conversion method and system
US9977655B2 (en) 2012-03-20 2018-05-22 Massively Parallel Technologies, Inc. System and method for automatic extraction of software design from requirements
US9324126B2 (en) 2012-03-20 2016-04-26 Massively Parallel Technologies, Inc. Automated latency management and cross-communication exchange conversion
US8959494B2 (en) 2012-03-20 2015-02-17 Massively Parallel Technologies Inc. Parallelism from functional decomposition
US8762946B2 (en) 2012-03-20 2014-06-24 Massively Parallel Technologies, Inc. Method for automatic extraction of designs from standard source code
US9424168B2 (en) 2012-03-20 2016-08-23 Massively Parallel Technologies, Inc. System and method for automatic generation of software test
US20130317889A1 (en) * 2012-05-11 2013-11-28 Infosys Limited Methods for assessing transition value and devices thereof
US8806425B1 (en) * 2012-05-25 2014-08-12 The Boeing Company Method and apparatus for generating infrastructure code
US9146709B2 (en) 2012-06-08 2015-09-29 Massively Parallel Technologies, Inc. System and method for automatic detection of decomposition errors
US9632754B2 (en) * 2012-07-06 2017-04-25 International Business Machines Corporation Auto generation and linkage of source code to test cases
US9323650B2 (en) 2012-07-23 2016-04-26 Infosys Limited Methods for generating software test input data and devices thereof
US9021432B2 (en) 2013-03-05 2015-04-28 Sap Se Enrichment of entity relational model
US9229688B2 (en) * 2013-03-14 2016-01-05 Massively Parallel Technologies, Inc. Automated latency management and cross-communication exchange conversion
US9081411B2 (en) * 2013-05-10 2015-07-14 Sri International Rapid development of virtual personal assistant applications
US9710263B2 (en) * 2013-09-26 2017-07-18 International Business Machines Corporation Understanding computer code with human language assistance
US9195570B2 (en) 2013-09-27 2015-11-24 International Business Machines Corporation Progressive black-box testing of computer software applications
JP6185148B2 (ja) * 2014-03-25 2017-08-23 株式会社日立製作所 ソフトウェア仕様間依存関係検証装置、及びソフトウェア仕様間依存関係検証方法
CN105446711B (zh) * 2014-08-08 2018-10-02 国际商业机器公司 获取用于软件开发任务的上下文信息的方法及装置
US9536093B2 (en) * 2014-10-02 2017-01-03 Microsoft Technology Licensing, Llc Automated verification of a software system
US10318653B1 (en) 2015-02-26 2019-06-11 The Mathworks, Inc. Systems and methods for creating harness models for model verification
US10831449B2 (en) * 2015-04-28 2020-11-10 Lexica S.A.S. Process and system for automatic generation of functional architecture documents and software design and analysis specification documents from natural language
US10733520B2 (en) 2015-05-13 2020-08-04 Microsoft Technology Licensing, Llc Making a prediction regarding development of a software product
DE102015209715A1 (de) * 2015-05-27 2016-12-01 Siemens Aktiengesellschaft Verfahren und System zur rechnergestützten Überführung eines Architektur-Konzepts eines technischen Systems in eine Architekturspezifikation
US10346140B2 (en) * 2015-08-05 2019-07-09 General Electric Company System and method for model based technology and process for safety-critical software development
US9952965B2 (en) 2015-08-06 2018-04-24 International Business Machines Corporation Test self-verification with integrated transparent self-diagnose
US9720652B2 (en) * 2015-08-06 2017-08-01 Symphore, LLC Generating a software complex using superordinate design input
US10049337B2 (en) 2015-08-31 2018-08-14 Salesforce.Com, Inc. Quantitative metrics for assessing status of a platform architecture for cloud computing
US10372421B2 (en) * 2015-08-31 2019-08-06 Salesforce.Com, Inc. Platform provider architecture creation utilizing platform architecture type unit definitions
US10048946B2 (en) 2016-03-24 2018-08-14 Microsoft Technology Licensing, Llc Converting visual diagrams into code
GB201611967D0 (en) 2016-07-08 2016-08-24 Cocotec Ltd An interoperable extensible system for the generation of verified software
CN106201538B (zh) * 2016-07-18 2019-05-31 北京航空航天大学 一种基于rucm的实时性测试方法
US10331415B2 (en) 2016-11-08 2019-06-25 International Business Machines Corporation Formal specification generation using examples
US10521197B1 (en) 2016-12-02 2019-12-31 The Mathworks, Inc. Variant modeling elements in graphical programs
EP3862871A1 (en) * 2016-12-19 2021-08-11 (Un)Manned N.V. Method and apparatus for real-time control loop application execution from a high-level description
CN106951368A (zh) * 2017-03-12 2017-07-14 北京工业大学 基于uml时序图的测试用例自动生成方法
CN107066388A (zh) * 2017-04-19 2017-08-18 艾瑞克·李 软件行为模型面向对象建模方法
US10248385B1 (en) * 2017-11-30 2019-04-02 International Business Machines Corporation Extracting mobile application workflow from design files
JP6890557B2 (ja) * 2018-01-17 2021-06-18 株式会社日立製作所 分析モデル作成システム、プログラミング装置および分析モデル作成方法
CN108509339A (zh) * 2018-03-22 2018-09-07 京北方信息技术股份有限公司 基于浏览器和思维导图的测试用例生成方法、装置及设备
EP3608773A1 (en) * 2018-08-09 2020-02-12 Audi Ag Method for providing an automatic software development/generation and deployment functionality in at least one vehicle and corresponding backend server system
US11126658B1 (en) * 2018-09-12 2021-09-21 Amazon Technologies, Inc. Scalable graph authoring and versioning techniques
CN109711710A (zh) * 2018-12-24 2019-05-03 浙江蓝卓工业互联网信息技术有限公司 一种数据分析模型中组件的排序方法及装置
US10860295B1 (en) * 2019-01-03 2020-12-08 Amazon Technologies, Inc. Automated detection of ambiguities in software design diagrams
US11144314B2 (en) 2020-01-17 2021-10-12 Accenture Global Solutions Limited Systems and methods for software documentation and code generation management
US11829689B1 (en) 2020-06-09 2023-11-28 The Mathworks, Inc. Systems and methods for creating variant regions in acausal simulation models
US11580284B1 (en) * 2021-01-06 2023-02-14 Cadence Design Systems, Inc. System, method, and computer program product for finding and analyzing deadlock conditions associated with the formal verification of an electronic circuit design
US11675582B2 (en) 2021-07-15 2023-06-13 Kyndryl, Inc. Neural networks to identify source code
WO2023060306A1 (en) * 2021-10-15 2023-04-20 SquareBear Technology Pty Ltd Systems and methods for generating and maintaining work units
DE102022118722A1 (de) 2022-07-26 2024-02-01 Cariad Se Anpassungsvorrichtung, eingerichtet zur Anpassung eines Betriebs einer Steuervorrichtung eines Fahrzeugs, Verfahren und Fahrzeug

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2147536A1 (en) * 1994-06-01 1995-12-02 Gerard Johan Holzmann On-the-fly model checking with partial-order state space reduction
US6259969B1 (en) * 1997-06-04 2001-07-10 Nativeminds, Inc. System and method for automatically verifying the performance of a virtual robot
WO2001022228A1 (en) * 1999-09-17 2001-03-29 Nortel Networks Limited System and method for producing a verification system for verifying procedure interfaces
US6532554B1 (en) * 1999-11-29 2003-03-11 Sun Microsystems, Inc. Network event correlation system using formally specified models of protocol behavior
US6681383B1 (en) * 2000-04-04 2004-01-20 Sosy, Inc. Automatic software production system
WO2002103466A2 (en) * 2001-01-19 2002-12-27 Engeneos, Inc. Methods and systems for designing machines including biologically-derived parts
US20030033406A1 (en) * 2001-06-14 2003-02-13 Rekesh John Apparatus for and a method of network load testing
US7694276B2 (en) * 2003-02-28 2010-04-06 Microsoft Corporation Contracts and futures in an asynchronous programming language
US7543274B2 (en) * 2003-12-22 2009-06-02 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration System and method for deriving a process-based specification

Also Published As

Publication number Publication date
US20130117727A1 (en) 2013-05-09
HK1104100A1 (en) 2008-01-04
SI1749264T1 (sl) 2009-12-31
WO2005106649A2 (en) 2005-11-10
US8370798B2 (en) 2013-02-05
US8943465B2 (en) 2015-01-27
EP1749264A2 (en) 2007-02-07
EP1749264B1 (en) 2009-06-17
ATE434216T1 (de) 2009-07-15
DE602005014970D1 (de) 2009-07-30
US20080263506A1 (en) 2008-10-23
WO2005106649A3 (en) 2006-03-23
DK1749264T3 (da) 2009-10-19
GB0410047D0 (en) 2004-06-09

Similar Documents

Publication Publication Date Title
ES2334041T3 (es) Sistema analitico de diseño de software.
US6948154B1 (en) Methodology for testing spreadsheets
Matallaoui et al. Model-driven serious game development integration of the gamification modeling language gaml with unity
Dwyer et al. Formal software analysis emerging trends in software model checking
Ergin et al. Design pattern oriented development of model transformations
Stephens et al. Design driven testing: test smarter, not harder
Oortwijn Deductive techniques for model-based concurrency verification
Nanthaamornphong et al. Extended ForUML for Automatic Generation of UML Sequence Diagrams from Object‐Oriented Fortran
Rossiter Simulation design: Trans-paradigm best-practice from software engineering
Cok et al. SPEEDY: An Eclipse-based IDE for invariant inference
de Carvalho et al. Business language driven development: joining business process models to automated tests
Signoles From static analysis to runtime verification with Frama-C and E-ACSL
Caracaş Modeling, compiling, and efficiently executing business processes on resource-constrained wireless sensor networks
Machado et al. Automatic test-case generation
Olszewski Scaling up stepwise feature introduction to construction of large software systems
Hessellund et al. Interfaces and metainterfaces for models and metamodels
Sharma et al. CMMI based software metrics to evaluate OOAD
Cabeda Automated Test Generation Based on an Applicational Model
Bianculli et al. Software Engineering and Formal Methods
Stapp et al. Chapter 4 Test Analysis and Design
van der Meijde et al. A Practical Application of Model Learning and Code Generation
Piho et al. Test Driven domain modelling
Nagler Extreme Programming with Perl
Sindhu Incremental Learning and Testing of Reactive Systems
Acher Modelling, Reverse Engineering, and Learning Software Variability