Pregunta

Nuestro cliente nos quiere construir una aplicación rica de Internet basado en web para los requisitos de software de reunión. Básicamente se trata de una herramienta CASE basada en web que sigue un proceso específico para conseguir los requisitos de las partes interesadas. Soy el director del proyecto y estamos todavía en las primeras fases del proyecto.

He estado pensando acerca del uso de métodos formales para ayudar a aclarar los requisitos para la herramienta tanto para mi cliente y los desarrolladores. Por métodos formales me refiero a algún tipo de modelado, posiblemente algo basado matemáticamente. Algunas de las cosas que he leído sobre y están considerando incluyen Z ( http://en.wikipedia.org / wiki / Z_notation ), máquinas de estado, UML 2.0 (posiblemente con extensiones como OCL ), redes de Petri , y algunas cosas-nivel de codificación como los contratos y pre y condiciones de correos. ¿Hay algo más que debería tener en cuenta?

Los desarrolladores tienen experiencia pero dependiendo del formalismo utilizado pueden tener que aprender un poco de matemáticas.

Estoy tratando de determinar si vale la pena, mientras que para mí usar métodos formales en este proyecto y en caso afirmativo, en qué medida. Sé que "depende" por lo que las respuestas más útiles para mí es un sí / no y argumentos de apoyo.

¿Le utiliza métodos formales si estuviera en este proyecto?

¿Fue útil?

Solución

  

He estado pensando acerca del uso de métodos formales para ayudar a aclarar los requisitos para la herramienta tanto para mi cliente y los desarrolladores.

Muy pocos desarrolladores tienen experiencia formal métodos. La única vez que he visto a los clientes con los métodos formales de formación eran miembros de la ZUG cuando estábamos portar Cádiz a Windows.

  

Por métodos formales me refiero a algún tipo de modelado, posiblemente algo matemáticamente basa. Algunas de las cosas que he leído sobre y están considerando incluyen Z ( http://en.wikipedia.org/ wiki / Z_notation ), máquinas de estado, UML 2.0 (posiblemente con extensiones como OCL), redes de Petri, y algunas cosas-nivel de codificación como contratos y las condiciones de pre y post. ¿Hay algo más que debería tener en cuenta?

Hay una brecha muy grande entre Z, que es un método formal, teniendo su base en la teoría de conjuntos, y UML, que es una notación informal con algunas anotaciones semiformales (máquinas de estado) con etiqueta adelante.

Algunos clientes técnicos, como era de esperar para encontrar el uso de una herramienta de requisitos de software, son bastante cómodos con UML.

Puede haber valor creando un modelo Z de su dominio, y puede haber valor en la creación de un modelo de pi-cálculo de su programa de mensajería entre el cliente y el servidor (o de Petri-net, pero me parece pi es a la vez más simple y más potente ).

Lo que un modelo Z de su dominio daría es un conjunto independiente implementación de restricciones de tipo, expresa con más fuerza que el sistema de tipo de cualquier lenguaje de implementación común.

Lo que un modelo formal de su programa de mensajería le daría es la facilidad para ejecutar los análisis para asegurar que no pierda actualizaciones o conseguir los conflictos o los puntos muertos.

Lo que un modelo UML le da es una notación para romper un sistema grande para arriba en las áreas de función (diagramas de paquetes), de mostrar clases de cómo en esas áreas se relacionan entre sí (diagramas de clases) de forma estática, de mostrar cómo las instancias de esas clases relacionar dinámicamente (secuencia, actividad y diagramas de interacción), y que muestra cómo los paquetes se implementan (componente y diagramas de despliegue). Estos son útiles para la comunicación en el equipo, y para obtener ideas concretarse un poco, pero no tienen la semántica formalmente definidas que permite análisis muy sofisticado.

Los especialistas Z que trabajé en los años 90 consideraron la idea de especificar una interfaz gráfica de usuario CASE en Z ridícula. La creación de un modelo UML para una interfaz gráfica de usuario de este tipo es un lugar común.

No he utilizado antes y después de las condiciones formales de diseño por contrato, aunque a veces me añadirlos en los comentarios, y con frecuencia en las afirmaciones y las condiciones de prueba unidad de E susceptible de vulnerar ellos.

Otros consejos

La verdadera pregunta que hacer aquí no es si se debe utilizar o no, pero lo que se gana y se pierde.

¿La productividad y los resultados de aprendizaje necesarias mayores que la complejidad y?

En general se debe utilizar lo que el equipo se sienta cómodo. Con los nuevos artículos que va a ser una curva de aprendizaje, lo que significa que van a ser las preguntas sobre el proceso y los errores cometidos. Parte de su línea de tiempo de desarrollo se utiliza para corregir estos problemas, y si usted no está planeando sobre el uso con este equipo en el futuro, realmente no vas a tener una ganancia a largo plazo mediante la introducción de algo nuevo. Cambio proceso toma mucho tiempo y mucho trabajo.

Si ha estimado el tiempo suficiente para manejar estos problemas que pueda estar bien ..... si su estimación es correcta. Teniendo en cuenta que usted no ha trabajado con estas personas (por lo menos eso es lo que suena como su posterior), es probable que su línea de tiempo no va a ser tan preciso como debiera, que significa que no podría haber asignado tiempo suficiente para terminar el proyecto por no hablar de la introducción de un nuevo proceso.

La otra pregunta que hay que preguntar a su auto es "lo cómodo que está usted con el proceso que desea implementar?" Nunca tratar de introducir un nuevo proceso en un proyecto a menos que sepa que puedo sacar al equipo a través de él, si tengo que hacerlo. Probar cosas nuevas de vez en cuando es bueno, pero es necesario tener un equipo que está cómodo con saber cómo navegar de una situación difícil.

He estado buscando en varias aproximaciones a los métodos formales 'ligeros', para aplicaciones que pueden ser de misión crítica, pero no la vida / seguridad crítica. Algunas ideas:

Hay algunos ejemplos de éxito en el uso de ACSL (ANSI C Language Specification) que tiene madura conjunto de herramientas de la mayoría de los cuales son de código abierto tales como ¿Por qué plataforma, Frama-C. Por otra tecnología similar de Java llamada JML (Java Modeling Language). Creo que ambos se utilizan para pequeñas y medianas proyectos de tamaño para aplicaciones embebidas y ayudan a añadir algunas garantías en el código pero no están dirigidos a la validación de las especificaciones. Z no es en absoluto fácil de usar y carecen de una adecuada herramienta de apoyo en mi humilde opinión.

Entre las herramientas comerciales que se pueden utilizar en las etapas de especificación Me gustaría ver en la plataforma de Rodin que se basa en B-método.

Al final del partido aquí, pero que podría considerar algo así como arquitectura comprobable a través Savara que utilizamos para muchos proyectos en los que hay un predominio de la comunicación o la interacción entre los componentes. Esto se observa con mayor frecuencia en cualquier backend SOA a una interfaz web.

Se basa formalmente en pi-cálculo y no es necesario para entender pi-cálculo para usarlo.

Estoy totalmente de acuerdo con Tom y hago la misma pregunta,

¿La productividad y los resultados de aprendizaje necesarias mayores que la complejidad y?

En mi opinión a menos que el sistema / software puede ser identificado como “seguridad crítica” métodos formales no son necesarios.

¿Qué medio crítico para la seguridad:

Cuando el fracaso de un sistema informático puede llevar a consecuencias catastróficas, tales como la pérdida de vidas humanas, daños al medio ambiente, o daños en el mismo, un sistema de este tipo se conoce como “la seguridad críticos” del sistema.

Estoy de acuerdo tanto con Tom y Abufardeh - ¿La productividad y los resultados superan la complejidad y aprendizaje requeridos

?

Además, es esta methd mejor para conseguir todos los requisitos antes de desarrollo (AMD asegurar que estos requisitos están bien definidos ambos y comprobable)? Conseguir todas las prescripciones primera parece de sentido común, pero un gran porcentaje de los programas de hacer cosas en el pensamiento paralelo que no hay problema para conseguir algunos de los requisitos más adelante. Requisitos fluencia es una pesadilla! La película "El Pentágono Wars" es una ojos a cualquiera que esté en desacuerdo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top