2010-08-04 18 views
10

Estoy preparando una presentación sobre pruebas unitarias para los gerentes. Mi equipo ha estado escribiendo pruebas unitarias durante años, pero otras áreas de la empresa parecen tener dificultades para adoptarlo. Puedo entusiasmar a los desarrolladores, pero si no hay una aceptación de la gerencia, no se convertirá en un estándar.¿Cómo presentar mejor las pruebas unitarias a la administración?

¿Tienen alguna sugerencia sobre cómo abordar mejor la gestión al respecto? ¿Qué cosas has intentado en el pasado que funcionó? ¿Cuáles son las cosas que no funcionaron?

+2

Como con todos persuasión - mostrar por qué lo que sugieres es en * su * inetrest. – Mawg

Respuesta

10

Para gerentes no técnicos he recurrido a una analogía de la construcción de una casa. ¿Construirían uno sin planos, simplemente tomando ladrillos de una pila y poniéndolos uno encima del otro con una idea vaga en la casa en mente? Si no, ¿por qué no aceptarán la documentación adecuada antes de la codificación, revisiones de diseño, etc.?

Para prueba de la unidad, podría intentar compararla con la calidad de las pruebas de los diversos componentes de la casa de forma individual antes de ponerlos juntos (ladrillos, cemento, puertas, ventanas, fontanería)

Para aquellos con cualquier agarre tecnología en absoluto, Mencione que entre el 30% y el 50% maneja las condiciones de error y la recuperación (en sistemas incrustados de misión crítica) y que simplemente no puede probar eso sin una prueba unitaria. Por ejemplo, si solo prueba la integración de blackbox, ¿cómo puede hacerlo? De una manera controlada y repetible; pruebe lo que sucede cuando el módulo A no puede asignar memoria en un punto determinado o expira profundamente en el módulo C cuando espera un mensaje de respuesta desde algún lugar, o una lectura de base de datos que normalmente tendrá éxito. Explique que al manipular los módulos de interfaz puede simular su comportamiento erróneo a voluntad.

Y, por supuesto, dibujo mi gráfico favorito con un símbolo $ en un eje y un reloj en el otro. Le gané a la gerencia todo esto en cada oportunidad para demostrar que el costo de obtener errores aumenta cuanto más tarde se descubren (cambiar una línea en una especificación de requisitos - 5 minutos; unos pocos parametros en un documento de diseño - horas; líneas de código (en la revisión del código o en la etapa de prueba de la unidad) - días: encontrar la aguja en un error del pajar y corregirla en la prueba del sistema - semanas).

No es solo una prueba de unidad; debe convencer a la gerencia y a sus compañeros desarrolladores de que la "carga innecesaria" de documentación, revisiones, pruebas ... s/w Procesos en general (y eso incluye aprender nuevas herramientas) ... en realidad ahorra tiempo en lugar de agregar tiempo a un proyecto. En otras palabras, lleva más tiempo y cuesta más equivocarse. Mida dos veces, corte una vez, etc.

Para la prueba unitaria, dígales acerca de continuous integration. Recomiendo encarecidamente a Jenkins, pero utiliza lo que sea que funcione para ti. Explique que una compilación normal, ya sea cada noche o con cada check-in, puede automáticamente extraer pruebas de unidad de su VCS y ejecutarlas, enviando correos electrónicos o alertando de otro código que rompió las pruebas existentes casi tan pronto como suceden.

Si nada de esto funciona, buscar un nuevo trabajo (si se encuentra en Singapur, o quiere ser, hablar conmigo ;-)

+0

Ahora he cambiado mi lealtad de Hudson a Jenkins http://jenkins-ci.org/ – Mawg

1

Dígales que hace que el código sea más fácil de mantener y les ahorrará dinero a largo plazo. También reduce los errores, si se hace correctamente.

En otras palabras, reduce los costos y aumenta la fiabilidad del software.

1

Para construir sobre @hvgotcodes respuesta, no sólo les digo cómo se hace mejor las cosas, recopilar algunos datos de su propio equipo de la forma en que tiene

  1. su vez redujo alrededor
  2. coste reducido $
  3. regresiones reducidos
  4. etc

Especialmente los costes, las empresas les encanta ahorrar dinero :)

+0

Si bien estoy de acuerdo con la sugerencia en principio, podría ser difícil venderla si no tiene buenos datos de antes y después de implementar las pruebas unitarias. – GreenMatt

+0

@GreenMatt - Cierto. Una vez hice lo mismo que el OP y cuando estaba a medio camino paré para hacer preguntas. La gerencia dijo "Suena fantástico". ¿Tienes algún número? No lo hice, y no solo mataron el ímpetu de los otros equipos, sino que nos hicieron reducir el tiempo invertido en las pruebas de desarrollo. Eventualmente cambiamos al modo completo en "dejar que QA encuentre errores" y me fui :) –

1

Prueba de la unidad, si se hace bien, se supone que

  • errores de captura anterior, lo que reduce la cantidad de errores encontrados por el control de calidad o en la producción, así como reducir el costo de corregir errores
  • apoyo de refactorización , manteniendo el diseño limpio y extensible, que a largo plazo debería hacer que el mantenimiento sea más económico

¿Se han recopilado estadísticas relevantes en su empresa que puedan basar estas afirmaciones en concreto? Es decir. número de errores encontrados por QA/usuarios en diferentes productos, o costo promedio de implementación de funciones/corrección de errores, ...

2

No engañar.

Cuando se mencionan los costos reducidos, está dando a entender que el costo de la garantía de calidad y la refactorización más fácil son mayores que el precio de creación y mantenimiento de las pruebas. Sería bueno señalarlo y tratar de establecer algunas métricas para reforzar su punto.

El problema es que no se puede poner un valor en dólares en la ruta no tomada ("Evitamos 1,000 defectos que hubieran costado $ 1M reparar").

Pero debe estar al tanto del hecho de que la creación de las pruebas tiene un costo y deben mantenerse. Si los creas y luego los dejas caer en mal estado, estás igual de mal.

Su argumento recibirá un impulso cuando vaya a agregar nuevas características y es más fácil porque ha mantenido el código limpio.

2

Creo estadísticas harían el mejor de los casos por lo que los administradores no técnicos están preocupados. Code Complete, 2nd Ed. tiene un resumen de un par de estudios que muestran que las pruebas unitarias conducen a una tasa promedio de detección de defectos del 30% (Tabla 20-2, p 470). Creo que debería ser fácil tomarlo desde allí y demostrar que menos errores se traducen en más dinero ahorrado.

2

En algunos casos, he encontrado que esperar la oportunidad correcta es la clave.

Por ejemplo, en un caso esperé hasta que hubo un sitio caliente con un cliente. Fue muy doloroso (piensa $$$). Una de las preguntas inevitables planteadas por la alta dirección era cómo evitar el mismo problema en el futuro. Y fue entonces cuando presenté las pruebas unitarias a la gerencia ...

Así que supongo que depende mucho de las circunstancias.

3

Muéstreles un ejemplo de donde las pruebas ya detectaron un problema y salvó el día.

+1

De manera similar, escribí una nueva función hace algunos años esa era una de esas áreas con muchos casos esquineros muy complicados, de modo que arreglar uno probablemente rompería a los otros. Utilicé un método de prueba unitaria/TDD para ello y en 5 años no se encontró ni un solo error porque todos quedaron atrapados en el desarrollo. Compare eso con otras características que no fueron probadas por unidad y tuvieron que ser reparadas una y otra vez. –

+0

Puedo encontrar * muchos * casos cuando casi perdimos clientes de varios millones de dólares por casos de esquinas simples que podrían haber sido probados en minutos antes incluso de haber dejado el desarrollo. Incluso podría intentar desenterrar el código de svn y escribir una prueba y ver que falla. Por supuesto, este código probablemente será un desastre, por lo tanto, difícil de probar por unidad. Todavía voy a excavar un poco para hacer algo como esto. Realmente mostraría el contraste entre lo fácil que podría haber sido y lo difícil y costoso que fue. –

+1

Agregaré a esto que también puede mostrarles un caso en el que las pruebas unitarias aceleraron enormemente el desarrollo del código. Mi ejemplo está de vuelta cuando estaba trabajando en un sistema de informes. Hacia el final del desarrollo, el producto decidió repentinamente que todo debía hacerse en EST en lugar de GMT (GMT simplifica el código). Como teníamos un código bien probado, podíamos hacer los cambios que necesitábamos con mucho menos temor de que nos perdiéramos una parte del código en algún lugar que debía actualizarse. – RHSeeger

1

De ser posible, trataría de proporcionar ejemplos del mundo real de la dificultad que su empresa ha enfrentado en el pasado al admitir código en vivo sin pruebas. Luego continúe para resaltar, tal vez con ejemplos específicos, que la reducción en los costos de soporte para actualizaciones y correcciones tuvo lugar en las pruebas.

Buena suerte y cuéntanos cómo te va.:)

1

Preséntelo como Behavior Driven Development o Test Driven Development, no solo como prueba unitaria.

Tanto BDD como TDD tienen ventajas superiores que son fácilmente entendidas por los no técnicos. De hecho, una de sus principales ventajas es que se centran en lo no técnico.

La prueba de la unidad, por otro lado, es un concepto técnico que puede ser muy abstracto para el no programador. Prueba tu código? ¿No haces eso mientras desarrollas? ¿Por qué estamos pagando por el personal de prueba? Y así.

2

1 - ¿Tienen que saberlo o aprobarlo? Usted es el ingeniero y sabe mejor que ellos cómo construir cosas que funcionen, por lo que realmente no deberían interferir. ¿Les importarían qué herramientas y qué métodos de garantía de calidad/seguridad utilizaron si fuera un modelo de automóvil nuevo que usted construyó para ellos? No lo pensaría así.

2 - El costo de los defectos es muy, muy alto. Baja calidad, defectos y deuda técnica es un riesgo muy serio del proyecto que puede poner en riesgo toda la inversión de un proyecto de software. La prevención de defectos es mucho más rentable que la detección de defectos (muchos múltiplos según los estudios). Las pruebas unitarias tienen el ciclo de retroalimentación más corto posible, por lo tanto, se evita la baja calidad sistemática del proyecto y se reducen significativamente los riesgos del proyecto.

3 - No puede ir rápido durante un largo período de tiempo sin una tasa de defectos muy baja - alias, invertir supera el gasto/especulación (esto deberían obtener).

0

trazar una analogía a algo que los gerentes utilizan probablemente sobre una base regular - como un corrector ortográfico en su cliente de correo o editor de documentos ....