unit-testing - unitarias - unit test c#
¿Cuál es la forma más convincente de requerir pruebas unitarias formalizadas? (13)
A veces, por ejemplo, es la mejor manera. También encuentro que recordar a la gente que ciertas cosas simplemente no ocurren cuando las cosas están bajo prueba. La próxima vez que alguien te pida que escribas algo, hazlo con exámenes independientemente. Eventualmente, sus pares estarán celosos de la facilidad con la que puede cambiar su código y saber que todavía funciona.
En cuanto a la gestión, debe destacar cuánto tiempo se desperdicia debido a la explosión nuclear que ocurre cuando necesita realizar un cambio en la base de código X que no está bajo prueba.
Muchos desarrolladores no se dan cuenta de cuánto refactorizan sin asegurarse de que estén preservando el comportamiento en todo el sistema. Para mí, este es el mayor beneficio para las pruebas unitarias y TDD en mi opinión.
- Los requisitos del software cambian
- Cambios de software para satisfacer los requisitos
La única certeza es el cambio. Cambiar el código que no está bajo prueba requiere que el desarrollador esté al tanto de todos los efectos colaterales de comportamiento posibles. La realidad es que los codificadores que piensan que pueden leer en cada permutación, lo hacen mediante un proceso de ensayo y error hasta que nada se rompe, obviamente. En este punto, se registran.
El programador pragmático reconoce que él / ella no es perfecto y que todo lo sabe, y que las pruebas son como una red de seguridad que les permite caminar la cuerda floja de refactorización de forma rápida y segura.
En cuanto a cuándo escribir la prueba en el código greenfield, tendría que abogar tanto como sea posible. Dedique el tiempo a definir los comportamientos que desea que salgan de su sistema y escriba pruebas inicialmente para expresar los constructos de mayor nivel. Las pruebas unitarias pueden venir cuando los pensamientos cristalizan.
Espero que esto ayude.
Esto ciertamente presupone que las pruebas unitarias son algo bueno. Nuestros proyectos tienen cierto nivel de pruebas unitarias, pero es inconsistente en el mejor de los casos.
¿Cuáles son las formas más convincentes que ha utilizado o ha utilizado con usted para convencer a todos de que las pruebas unitarias formales son algo bueno y que hacerlo es realmente lo mejor para los proyectos ''más grandes'' en los que trabajamos? No soy desarrollador, pero estoy en Quality Assurance y me gustaría mejorar la calidad del trabajo entregado para garantizar que esté listo para la prueba.
Mediante pruebas unitarias formalizadas, simplemente estoy hablando de
- Identificación de las pruebas unitarias que se escribirán
- Identificar los datos de prueba (o describirlos)
- Escribiendo estas pruebas
- Rastreando estas pruebas (y reutilizándolas según sea necesario)
- Haciendo que los resultados estén disponibles
Como líder del equipo, es mi responsabilidad garantizar que mis programadores realicen pruebas unitarias en todos los módulos en los que trabajan. Supongo que en este punto, ni siquiera es una cuestión de cómo convencerlos, es obligatorio. No a veces, no en proyectos grandes, todo el tiempo. Las pruebas unitarias son la primera línea de defensa contra poner algo en producción que tendrá que mantener. Si se pone en producción algo que no ha sido completamente probado por la unidad y el sistema, volverá a morderlo. Supongo que una de las políticas que tenemos aquí para respaldar esto es que si se dispara la producción o causa problemas, entonces el programador responsable de codificar y probar ese módulo será el que tenga que encargarse de los problemas, hacer la limpieza. , etc. Eso solo es un motivador bastante bueno.
El otro es que se trata de orgullo. Trabajo en una tienda de alrededor de 75 codificadores, aunque eso es grande según algunos estándares, es lo suficientemente pequeño para que todos nos conozcamos. También es lo suficientemente pequeño como para saber en qué está trabajando el otro, y cuando pasa a producción, somos conscientes de cualquier terminación, falla, etc. Si tiene cuidado, realice las pruebas de unidad y sistema, las posibilidades de mover algo a la producción sin causar fallas aumenta significativamente. Puede tomar un tiempo o dos para mover algo a la producción y no darse cuenta de ello, pero hay grandes recompensas involucradas en no estropear. Es muy lindo escuchar felicitaciones en el pasillo cuando mueves un proyecto y no se arruina.
Educación y / o certificación
Proporcione a los miembros de su equipo una capacitación formal en el campo de las pruebas, tal vez con un examen de certificación (dependiendo de los miembros de su equipo y de su propia actitud hacia la certificación). Llevarás las pruebas a un nivel más alto de esa manera, y los miembros de tu equipo tendrán más probabilidades de adoptar una actitud profesional hacia las pruebas.
El evento que me convenció fue cuando logramos retroceder un error tres veces, en tres lanzamientos consecutivos. Una vez que me di cuenta de lo mucho más productivo que era como programador cuando no estaba constantemente solucionando errores triviales después de que habían ido al cliente, y podía sentir que los colegas codificaban para hacer lo que afirmaban que sería, me volví un converso
En el día en que desarrollé Cobol en Mainframes lo hicimos religiosamente en las diversas compañías en las que trabajé y fue aceptado como la forma en que hiciste las cosas porque el entorno lo impuso. Creo que fue un esquema muy típico para la época y quizás algunas de las razones puedan ser aplicables a usted:
Al igual que la mayoría de los entornos de mainframe, tuvimos tres reinos, desarrollo, garantía de calidad y producción. Los programadores se desarrollaron en desarrollo y unidades probadas allí, y una vez que firmaron y estaban contentos, la unidad se migró al entorno de control de calidad (con los documentos de prueba y resultados) donde el personal de control de calidad lo probó en el sistema. El desarrollo de la migración de control de calidad fue un paso formal que sucedió de la noche a la mañana. Una vez que QA''ed el código se migró a producción, y tuvimos muy pocos errores.
La motivación para realizar las pruebas de la unidad correctamente fue que si no lo hacía y el personal de control de calidad encontró un error, era obvio que no había hecho el trabajo. En consecuencia, su reputación depende de cuán riguroso sea. Por supuesto, la mayoría de la gente terminaría con el error ocasional, pero los programadores que produjeron código sólido probado todo el tiempo pronto obtuvieron una reputación de estrella y también se notó a los que produjeron código defectuoso. El impulso siempre sería mejorar tu juego, y en consecuencia, la cultura producida fue una que empujó hacia el código libre de errores entregado por primera vez.
Extrayendo puntos pertinentes -
- La reputación del codificador está ligada a la entrega de código probado sin errores
- Una sobrecarga significativa asociada con el código de unidad probada en movimiento al siguiente nivel, por lo que la motivación para no repetir esto y hacerlo bien la primera vez.
- Pruebas del sistema realizadas por diferentes personas para pruebas unitarias: lo ideal sería un equipo diferente.
Estoy seguro de que su entorno será diferente, pero los principios podrían ser traducibles.
En mi equipo de software, tendemos a escribir un pequeño caso de negocios sobre estos temas y presentarlos a la gerencia para tener el tiempo disponible para crear y seguir las pruebas. Explicamos que el tiempo necesario para realizar la prueba está bien compensado cuando llega el momento crucial y todo está en juego. También configuramos un servidor de compilación Hudson para centralizar el seguimiento de las pruebas unitarias. Esto hace que sea mucho más fácil para los desarrolladores hacer un seguimiento de las pruebas fallidas y descubrir problemas recurrentes.
Hay una gran diferencia entre convencer y requerir .
Si encuentras una manera de convencer a tus colegas para que escriban, genial. Sin embargo, si crea algunas reglas formalizadas y les exige que escriban pruebas unitarias, encontrarán una forma de superar esto. Como resultado obtendrá un conjunto de pruebas unitarias que no valen nada: Habrá una prueba unitaria para cada clase individual disponible y probarán a los instaladores y captadores.
Piense dos veces antes de crear y hacer cumplir las reglas. Los desarrolladores son buenos para superarlos.
La primera vez, solo tiene que seguir adelante y escribir y mostrarle a la gente que vale la pena. En tres proyectos descubrí que es la única forma de convencer a la gente. Algunas personas que no codifican (por ejemplo, gerentes de proyecto junior) no podrán ver el valor hasta que no les mire directamente.
Recuérdele a su equipo u otros desarrolladores que son profesionales, no amateurs. ¡Trabajó para mi!
Además, es un estándar de la industria en estos días. Sin experiencia en pruebas de unidades, son menos deseables y menos valiosos como empleados para futuros empleadores potenciales.
Una forma muy convincente es realizar la prueba unitaria formalizada, independientemente de lo que haga su equipo / compañía. Esto podría requerir un esfuerzo adicional de tu parte, especialmente si no tienes experiencia con este tipo de práctica.
Cuando pueda, entonces, muestre que su código es mejor y que está siendo más productivo que sus compañeros desarrolladores, ellos querrán saber por qué. Luego, proporciónales tus métodos de prueba de unidad favoritos.
Una vez que hayas convencido a tus compañeros desarrolladores, convence a la gerencia.
Uso Maven con los complementos Surefire y Cobertura para todas mis compilaciones. Los casos de prueba reales se crean con JUnit , DbUnit y EasyMock .
Identificación de pruebas unitarias Intento seguir el desarrollo impulsado por pruebas, pero para ser honesto, generalmente solo hago eso para los pocos casos de prueba y luego vuelvo y creo exámenes para los casos de borde y excepción más adelante.
Identificación de datos de prueba DbUnit es ideal para cargar datos de prueba para las pruebas de su unidad.
Escribiendo casos de prueba Yo uso JUnit para crear los casos de prueba. Intento escribir casos de prueba autodocumentados pero usaré Javadocs para comentar algo que no es obvio.
Rastreando y haciendo disponibles los resultados Integro las pruebas unitarias en mi ciclo de compilación Maven usando el plugin Surefire y uso el plugin Corbertura para medir la cobertura lograda por esas pruebas. Siempre genero y publico un sitio web que incluye los informes de Surefire y Cobertura como parte de mi compilación diaria para poder ver qué pruebas fallaron / pasaron.
Escriba varios de ellos y demuestre que las pruebas unitarias han mejorado su productividad y la calidad de su código. Sin algún tipo de prueba, a veces las personas no creerán que vale la pena.
Entonces, dos años después de hacer esta pregunta, encuentro que una respuesta inesperada fue que al pasar a un nuevo SDLC era lo que se necesitaba. Hace cinco años, establecimos nuestro primer SDLC formal. Mejoró nuestra situación, pero omitió algunas cosas importantes, como la automatización. Ahora estamos en el proceso de establecer un nuevo SDLC (bajo nueva administración) donde uno de los inquilinos es la automatización. No solo pruebas unitarias automatizadas, sino pruebas funcionales automatizadas.
Supongo que la lección es que estaba pensando demasiado pequeño. Si va a cambiar la forma en que crea el software, vaya a "cerdo entero" y haga un cambio drástico en lugar de proponer un cambio incremental si no está acostumbrado a eso.