unit thread test programming parallel await async c# multithreading concurrency testing

c# - thread - Cómo probar la seguridad del hilo



parallel programming c# (4)

Esta pregunta ya tiene una respuesta aquí:

¿Tienes algún consejo sobre cómo probar una aplicación multiproceso?

Lo sé, los errores de subprocesamiento son muy difíciles de detectar y pueden ocurrir en cualquier momento, o no aparecer. 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 mejor práctica para obtener una alta tasa de aciertos de errores de subprocesamiento ocultos?
(Estoy usando .Net / C #)


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 las condiciones de carrera.

Tal vez pueda ver 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".


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

Revise 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.

Tome algunas personas del pasillo y haga 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.


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

También puedes probar, CHESS por Microsoft Research


código grep para llamadas a rutinas de enhebrado. 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 pruebe que es seguro para subprocesos (es decir, de subproceso único).

Una vez que sabe que tiene errores, la parte de prueba del trabajo está completa. Todo lo que queda es la pequeña cuestión de encontrarlos y eliminarlos ...