Pregunta

Un amigo mío estaba explicando cómo lo hacen ping-pong vinculación con TDD en su lugar de trabajo y me dijo que tome una "confrontación" enfoque.Es decir, cuando la prueba por escrito de la persona de manos al teclado para el ejecutor, el ejecutor intenta hacer el desnudo más simple (y a veces de forma equivocada) para hacer el paso de la prueba.

Por ejemplo, si se está probando una GetName() el método y la prueba de los cheques de "Sally", la aplicación del método GetName sería simplemente:

public string GetName(){
    return "Sally";
}

Y que, naturalmente, pasar la prueba (ingenuamente).

Él explica que esto ayuda a eliminar ingenuo de pruebas que verifican específicos de conservas de valores en lugar de probar el comportamiento real o esperado estado de los componentes.También ayuda a impulsar la creación de más pruebas y, finalmente, un mejor diseño y el número de errores.

Sonaba bien, pero en una breve sesión con él, parecía que tomó mucho más tiempo para conseguir a través de una ronda de pruebas de lo contrario y no siento que una gran cantidad de valor ganado.

¿El uso de este enfoque, y si es así, ¿has visto que pagar?

¿Fue útil?

Solución

Se basa en el equipo de la personalidad.Cada equipo tiene una personalidad que es la suma de sus miembros.Usted tiene que tener cuidado de no practicar la pasivo-agresiva de implementaciones de hecho con un aire de superioridad.Algunos desarrolladores se sienten frustrados por las implementaciones como

return "Sally";

Esta frustración va a llevar a una incorrecta del equipo.Yo estaba entre los frustrados y no lo paga.Creo que un mejor enfoque es el más comunicación oral haciendo sugerencias acerca de cómo una prueba podría ser mejor implementado.

Otros consejos

Puede ser muy eficaz.

Te obliga a pensar más en lo que prueba que usted tiene que escribir para llegar al otro programador para escribir la correcta funcionalidad que requieren.

Generar el código de pieza por pieza, pasando por el teclado con frecuencia

Puede ser bastante agotador y consume mucho tiempo, pero he encontrado que su rara que he tenido que volver y arreglar un error en el código que se ha escrito como este

He utilizado este enfoque.No funciona con todos los pares;algunas personas son naturalmente resistentes y no le dará una honesta oportunidad.Sin embargo, le ayuda a hacer TDD y XP correctamente.Quieres probar y agregar características a su codebase lentamente.Usted no desea escribir un enorme monolítica de la prueba, que tendrá un montón de código para satisfacer.Te quiero un montón de pruebas sencillas.Usted también querrá asegurarse de que usted está pasando el teclado de ida y vuelta entre sus pares regularmente, de modo que ambas parejas se dedican.Con la confrontación de emparejamiento, que está haciendo tanto.Pruebas simples conducen a la simple implementación, el código se construye lentamente, y ambas personas están involucradas en todo el proceso.

Me gusta algo de tiempo pero no uso ese estilo todo el tiempo.Actúa como un buen cambio de ritmo, a veces.No creo que me gustaría utilizar el estilo todo el tiempo.

He encontrado una herramienta útil con la que los principiantes a presentar la forma en que las pruebas de la unidad de la implementación.

(Primero, apagado, de Confrontación TDD debe ser divertido.Debe ser una oportunidad para la enseñanza.No debería ser una oportunidad para que los humanos rituales de dominación.Si no hay espacio para un poco de humor, a continuación, abandonar el equipo.Lo siento.La vida es corta para perder en un ambiente negativo.)

El problema aquí es mal llamada pruebas.Si la prueba se veía así:

foo = new Thing("Sally")
assertEquals("Sally", foo.getName())

Entonces me imagino que fue denominado "testGetNameReturnsNameField".Este es un mal nombre, pero no es inmediatamente obvio.El nombre correcto para esta prueba es "testGetNameReturnsSally".Que es lo que hace.Cualquier otro nombre es confundir a usted en un falso sentido de seguridad.La prueba es mal nombre.El problema no es el código.El problema no es ni siquiera la prueba.El problema es el nombre de la prueba.

Si, por el contrario, el probador había nombrado a la prueba "testGetNameReturnsSally", entonces habría sido obvio que esto probablemente no es prueba de lo que queremos.

Por lo tanto, es el deber de la implementador para demostrar la mala elección del probador.También es el deber de la implementador para escribir sólo lo que las pruebas de la demanda de ellos.

Tantos errores en la producción de no ocurrir porque el código lo hizo menos de lo esperado, pero porque lo hizo más.Sí, allí estaban las pruebas de unidad para todos los casos, pero no había pruebas para todos los especiales de borde de los casos que el código lo hizo porque el programador pensamiento "yo mejor solo hacer esto demasiado, probablemente vamos a necesitar", y luego se olvidó de ella.Es por eso que TDD funciona mejor que la prueba después.Es por eso que tenemos que tirar código de distancia después de un pico.El código podría hacer todas las cosas que usted desea, pero probablemente algo que usted piensa que usted necesita, y luego se olvidó.

La fuerza de la prueba escritor para poner a prueba lo que realmente quieren.Sólo escribir código para hacer pruebas pasan y no más.

RandomStringUtils es tu amigo.

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