Pregunta

Yo suelo utilizar formularios web ASP.NET para la interfaz gráfica de usuario, tal vez uno de la mayoría de las tecnologías "con estado". Pero se aplica a cualquier tecnología que tiene estados. A veces formas son difíciles y complejas, con> 30 elementos y> 3 estados de cada elemento. forma intuitiva de diseñar una forma tan general funciona para el 90%. Otro 10% suele encontrar probadores o usuarios finales:.)

El problema que yo veo que hay que imaginar una gran cantidad de escenarios en el mismo objeto, que es mucho más difícil que una consecuencia de operaciones independientes.

A partir de los cursos de programación funcionales Sé que mejor manera es no utilizar la administración del estado y el uso de funciones puras y paso variable de valor y todas estas cosas, que se formaliza en gran medida. A veces, no podemos evitarlo.

¿Utiliza alguna formalismos matemáticos y enfoques para la gestión de estado de objetos complejos? No como mónadas en Haskell, pero que se puede utilizar en aplicaciones de negocios más tradicionales y lenguajes - Java, C #, C ++.

Puede ser que no Turing completo formalismo, pero el 99% será grande también:.)

Lo siento si es sólo otra pregunta rodadora:)

¿Fue útil?

Solución

Uso de paso de mensajes como una abstracción. Ventajas:

  1. La dificultad con el estado complejo es interacciones complejas, que son especialmente peludo en sistemas concurrentes como interfaces gráficas de usuario típicos. De paso de mensajes, mediante la eliminación de estado compartido, se detiene la complejidad de estado en un solo proceso de ser infeccioso.
  2. concurrencia de paso de mensajes tiene buenos modelos fundamentales:. Por ejemplo, el modelo Actor, CSP, ambos de los cuales influenciada Erlang
  3. Se integra bien con la programación funcional: Salida Erlang nuevo. libro de Peter Van Roy * conceptos, técnicas y modelos de Programación es un excelente texto que muestra los ingredientes fundamentales de los lenguajes de programación, tales como funciones puras, y paso de mensajes, y cómo se pueden combinar. El texto es avilable como PDF.

Otros consejos

  

Puede ser que no Turing completo formalismo, pero el 99% será grande también:.)

Lo sentimos, pero prefiero dar solución NP-completo:)

Respuesta Rápida de mí sería . Pero leer más por más.

  

El problema que yo veo que deberíamos   imaginar una gran cantidad de escenarios en el mismo   objeto, que es mucho más difícil que una   consecuencia de las operaciones independientes.

En estos casos, el descomposición (no sólo en sentido, pero en matemática también) es muy útil. De descomponer escenario complejo en muchas más simples , que a su vez todavía pueden ser complejos por sí mismos y se pueden descomponer aún más.

Como resultado de tal proceso debe terminar con una serie de funciones simples (tareas) en su mayoría independientes de cada queridos. Esto es muy importante porque entonces se puede UNIDAD DE PRUEBA esos escenarios simples. Además, es mucho más fácil y mejor seguir enfoque de la prueba en primer lugar que permite ver la descomposición en el comienzo mismo del proceso de desarrollo.

  

¿Utiliza alguna formalismos matemáticos y enfoques para la gestión de estado de objetos complejos?

Para continuar con lo que he dicho, para mí lo más importante es hacer una buena descomposición de modo que pueda garantizar la calidad y ser capaz de reproducir fácilmente los errores de una manera automatizada.


Para dar un ejemplo abstracto

Tiene una complejo escenario A. Siempre hay que escribir al menos 3 pruebas para cada escenario:. De entrada correcta, la entrada incorrecta y la caja de esquina (s)

A partir de escribir la primera prueba (entrada correcta) Soy consciente de que el prueba se vuelve demasiado compleja .

Como resultado, I descomponer escenario A en A1 menos complejo, A2, A3. Entonces me pongo a escribir pruebas para cada uno de ellos de nuevo (que debería terminar con al menos 3 * 3 = 9 pruebas).

Me doy cuenta de que A1 sigue siendo demasiado complejo para poner a prueba, por lo que descomponerse de nuevo en A1-1, A1-2. Ahora tengo 4 escenarios diferentes (A1-2, A1-2, A2, A3) y 3 * 4 = 12 pruebas potenciales. Sigo escribiendo las pruebas.

Después de que he terminado. I iniciar la aplicación , por lo que pasan todas mis pruebas. Después de que usted tiene 12 demuestra que A escenario (más precisamente sus partes) que funciona correctamente . Además, es posible escribir otros 3 ensayos para la A escenario que combina todas sus partes descompuestas - este tipo de pruebas es a menudo (pero no siempre!) Puede ser visto como Las pruebas de integración .

A continuación, vamos a suponer que un error se encuentra en A escenario. No está seguro de qué parte pertenece a, pero se sospecha que está relacionado con A1-2 o A3. Por lo que escribir 2 pruebas más para cada uno de los escenarios a reproducir el error (escribir una prueba de tal manera que no falla cumplir con sus expectativas). Después de haber reproducido el error a corregir y hacer pasar todas las pruebas.

Ahora usted tiene más de 2 demuestra de sistema funciona correctamente asegura que todo el functionalit anteriorY está funcionando de la misma manera.

Hay 2 principales problemas principales con este enfoque de la OMI.

  1. Usted tiene que escribir una gran cantidad de pruebas y apoyarlos. Muchos los desarrolladores simplemente no quieren para hacer eso.
  2. Además, el proceso de descomposición es más un arte que una ciencia. Buena descomposición dará lugar a una buena estructura, pruebas y compatibilidad, mientras que una mala dará lugar a una gran cantidad de dolor y pérdida de tiempo. Y es difícil saber si la descomposición es bueno o malo al principio.

Este proceso se llama Test-Driven-Desarrollo . Me parece que es el más cerca de la "formalización" del proceso de desarrollo que juega limpio entre la ciencia y el mundo real .

Así que realmente no me refiero a estado aquí, sino más bien el comportamiento y probar que funciona correctamente.

A partir de la experiencia personal, debo mencionar que ASP.NET WebForm es técnicamente muy difícil prueba. Para superar esto, yo sugeriría a aplicar el patrón MVP de ASP.NET Web Forms .

A diferencia de los formularios Web, ASP.NET MVC es mucho más fácil para probar. Pero aún así, debe haber definido de los llamados "servicios" (nuestros escenarios) y (unidad) prueba de ellos por separado, y luego probar la integración de la interfaz de usuario en el entorno cercano a pruebas de integración.

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