2009-06-05 15 views
15

¿Tiene algún consejo sobre cómo probar una aplicación multiproceso?Cómo probar la seguridad de la hebra

Lo sé, los errores de subprocesamiento son muy difíciles de detectar y pueden ocurrir en cualquier momento, o no ocurrir. Las pruebas son difíciles y los resultados nunca son seguros. Ciertamente, es mejor diseñar y programar cuidadosamente los módulos concurrentes.
Sin embargo, no quiero dejar de lado el aspecto de la prueba. Por lo tanto, ejecutar una gran cantidad de subprocesos que funcionan con los mismos elementos puede ocasionar errores de subprocesamiento.

¿Alguna idea o mejores prácticas para obtener una alta tasa de aciertos de errores ocultos de subprocesamiento?
(Estoy usando .Net/C#)

+0

aquí hay una pregunta similar: http://stackoverflow.com/questions/111676/unit-testing-a-multithreaded-application –

+0

gracias, tenía una mira alrededor, pero no encontró este. – tanascius

+0

Vaya, comentario duplicado. –

Respuesta

11

Puede usar algunas buenas herramientas para probar todos los problemas de enhebrado como carreras de datos, interbloqueos, hilos detenidos, etc. intel-thread-checker es una de esas buenas herramientas.

También puede tratar, CHESS por Microsoft Research

+0

Gracias por los enlaces: ahora estoy mirando CHESS: los ejemplos parecen muy prometedores – tanascius

+1

CHESS definitivamente es el camino a seguir, mire también videos en http://channel9.msdn.com/ –

5

Intente aumentar el número de hilos a un número grande si es posible, incluso más allá de cuántos se utilizarán en un lanzamiento. Con muchos subprocesos ejecutando su programa, un error aparecerá más a menudo ya que más subprocesos se están ejecutando sobre el código.

Revise dos veces sus declaraciones, bloqueos, desbloqueos, conteos de semáforos, etc. y asegúrese de que tengan sentido.

Cree un documento de prueba u hoja de cálculo, y utilizando su conocimiento del código, piense en dónde podrían presentarse condiciones de carrera o puntos muertos.

Coge a algunas personas del pasillo y haz una prueba de usabilidad en el pasillo (¿Joel on Software dijo que creo?). Generalmente, las personas que no tienen idea de lo que hace/trata su programa podrán romperlo fácilmente.

2

Buena pregunta. Por lo general, pruebo las condiciones de la raza al generar muchos hilos y dejar que realicen las operaciones que sospecho que podrían estar sujetas a condiciones de carrera.

Quizás pueda mirar PNUnit - aunque es probable que sea un poco diferente de lo que está buscando. Los autores dicen que lo construyeron porque "necesitábamos simular cientos de clientes contra el mismo servidor".

-1

código grep para llamadas a rutinas de subprocesamiento. Si encuentra alguno, falle la prueba, ya que su código tiene errores de varios hilos.

Si se aprueba, amplíe su búsqueda a las partes de las bibliotecas que utiliza, hasta que falle o (poco probable) se demuestre que es seguro para subprocesos (es decir, de subproceso único).

Una vez que sepa que tiene errores de enhebrado, la parte de prueba del trabajo estará lista. Todo lo que queda es la pequeña cuestión de encontrarlos y eliminarlos ...

Cuestiones relacionadas