No debe aplicar la cobertura del código automáticamente.
Esto es como imponer las líneas máximas de código por método: de acuerdo, la mayoría de los métodos deberían ser inferiores a, digamos, 20 LOC, pero hay casos válidos en los que los métodos serían más largos que eso.
De la misma manera, apuntar a un porcentaje dado de cobertura de código por clase puede conducir a consecuencias no deseadas. Por ejemplo:
Las clases de código repetitivo o las clases creadas por generadores de código pueden no probarse en absoluto. Obligar a los desarrolladores a probarlos no tendrá ningún beneficio y tendrá un costo sustancial en términos de tiempo dedicado a hacerlo.
El código simple que maneja partes no importantes de la aplicación no necesariamente tiene que ser probado.
En algunos idiomas, algunos códigos no se pueden probar. Tuve este caso en C # con métodos anónimos en una biblioteca donde realmente quería tener una cobertura de código del 100%. Esos casos pueden ser desmoralizantes para los desarrolladores.
Más importante aún, la cobertura del código debe ser proporcional a dos aspectos del código: cuán crítico y cuán complicado es :
Una pieza de código con una lógica complicada, que es parte de la característica principal de una aplicación, debería probarse cuidadosamente, ya que las fallas o regresiones pueden tener consecuencias importantes.
Un código simple que maneja una característica que nadie usa puede tener pruebas básicas que cubren solo casos básicos.
Por supuesto, aún puede usar la cobertura del código como medida , especialmente para comparar cómo los diferentes equipos logran la cobertura del código: puede haber equipos que sean menos disciplinados y más reacios a la hora de realizar las pruebas. En esos casos, es posible que desee combinar esta métrica con otras, como la cantidad de errores, el tiempo dedicado a resolver errores o la cantidad de comentarios durante las revisiones de código.
También es posible que desee aplicar al menos algo de cobertura de código, digamos 60% ¹, en proyectos individuales donde tenga sentido (tenga cuidado de excluir prototipos, código generado, CRUD, etc.) Haciendo posible que los desarrolladores marquen clases específicas como excluidas desde la cobertura del código también es agradable². En este caso, esto puede hacerse bajo una forma de verificación que falla una compilación si la cobertura del código está por debajo del mínimo requerido. Lo haría en la etapa de compilación, no en la etapa de confirmación , ya que no se espera que ejecute pruebas unitarias durante la confirmación .
¹ Consideraría el 60% como un mínimo razonable basado en mi base de código: casi todos los proyectos o clases que tienen menos del 60% de cobertura de código realmente no han sido probados . Esto puede variar mucho de un idioma a otro y de una compañía a otra (en algunas compañías, el 0% es un estándar). Asegúrese de discutir con su equipo qué es normal y qué es demasiado alto para ellos. Tal vez están constantemente alcanzando el 95% y pueden apuntar fácilmente al 99%, o tal vez luchan por aumentar su cobertura de código del 70% al 75%.
² Dado que se detectará un posible abuso durante las revisiones de código, no debe tener miedo de dar esta posibilidad a los desarrolladores. Esto es similar a la posibilidad de excluir algunas partes del código de los cheques por parte de los linters o los correctores de estilo. JSLint, StyleCop y Code Analysis son tres ejemplos en los que se admite la exclusión y en realidad es útil sin alentar el abuso.