¿He demostrado que he entregado software de alta calidad si le dije a mi cliente a través de pruebas unitarias y pruebas de extremo a extremo?

Estás en buena compañía. Lo que ha hecho es seguido por los mejores de la industria.

Es lamentable que tenga poco que ver con garantizar la calidad.

La cobertura del código es una medida de calidad muy débil, ¿por qué? Porque hay infinitas formas de medir la cobertura: 101 formas de pensar sobre su código / modelos de su código (CK)

Supongamos que obtiene el 80%; lo que eso significa es que las pruebas que escribió proporcionan una cobertura de ruta del 80%. ¿Qué hay de las cosas en las que no pensaste? ¿Qué pasa con las cosas que no estaban en los requisitos? Por supuesto, puede culpar a los requisitos del cliente. Sin embargo, eso no es calidad.

Es difícil saber si comprende las pruebas. Sin embargo, es una buena idea asegurarse de que lo haga en el futuro.

Estos son los recursos que uso para las pruebas: Recursos para comprender las pruebas de software de Nilanjan Bhattacharya en Counterfactuals

Aquí hay uno para comprender la automatización de pruebas: ¿Qué es la automatización de pruebas de software? por Nilanjan Bhattacharya en Contrafactuals

y uno sobre pruebas: el software de prueba no es “¿Funciona?” por Nilanjan Bhattacharya en Contrafactuals

Descargo de responsabilidad: todos los enlaces son míos, sin beneficio comercial.

No, ¿qué es “software de alta calidad”? Todo lo que se puede mostrar es que ha cumplido los requisitos funcionales y no funcionales acordados entre usted.

Si no se acordó previamente, una vez finalizado el proyecto, es demasiado tarde para comenzar a negociar cómo medir un requisito no funcional relacionado con la “calidad”.

Sin alguna medida explícita acordada, dado que le han pagado, simplemente declararía, si fuera necesario, que ha entregado software de calidad de acuerdo con los estándares de la industria.

Por otro lado, las pruebas unitarias, la cobertura, el tdd o las pruebas funcionales no tienen relación con el “software de calidad”.

Suena un poco raro Aunque si le han pagado, ¿eso suele ser el final?

Todo lo que ha dicho es bueno desde el punto de vista de la ingeniería. Pero en general, a los clientes les gustan los sentimientos cálidos y las palabras cálidas.

Espero que haya terminado cuando levante el teléfono, mencione que su control de calidad interno ha pasado y entregue la contraseña de github. Luego, una vez que el cliente haya tenido tiempo de revisarlo, y acepte que está hecho a su satisfacción, entonces habrá terminado.

Cualquier cosa menos suena un poco más como una disputa legal, para mí.

¡No necesariamente!

El software a menudo debe mantenerse y extenderse durante largos períodos de tiempo, y las pruebas unitarias y funcionales no hacen nada para demostrar que esto será fácil (aunque pueden ser inmensamente útiles, si son de alta calidad, pero es fácil de escribir malas pruebas).

¿Realmente hiciste TDD (primero escribiste la prueba y luego escribiste el código prod para que esas pruebas pasen cada vez)? Solo quiero estar seguro de que se ajusta a la categoría TDD y BDD aquí porque no ha hablado mucho sobre su proceso y técnica TDD. Solo hablas de “tener pruebas”. No digo que no lo hayas hecho, pero suena como si hubieras probado después en la forma en que escribiste tu subdescripción. Me suena como si lo hubieras codificado, luego volviste, agregué un montón de pruebas y luego dije hola cliente, aquí está, pagame, me voy de aquí. ¿Sería eso exacto? De lo contrario, elabore más y actualice su subdescripción.

No, aún podría diseñar un código incorrecto si no aplica buenas prácticas de codificación a medida que codifica; TDD no garantiza un código perfecto. Si realmente TDD’d lo que debería haber terminado es una tonelada de otros beneficios, como la retroalimentación de diseño durante todo el tiempo que codifica, y como resultado las pruebas. Pero los comentarios sobre el diseño deberían haberte obligado a repensar tu diseño con más frecuencia, y muchas veces terminas con un código más ágil. ¿es el código “bueno”? No tengo idea, no puedo ver tu código.

Y como dijo Alan, cualquiera puede escribir malas pruebas también.

TDD no es un ser humano, no escribe su código … pero lo obliga a codificar de una manera que es más crítica con su código, encuentra las cosas más pronto que tarde, ayuda a guiarlo, a menudo termina en una mejor prueba cobertura, y terminas con cobertura real durante todo el proceso a medida que codificas, no es algo que agregas después, así que estás seguro de que cada pocas líneas de código que agregues recibirás comentarios todo el tiempo, ya sea que lo hagas o no ‘ He roto algo. Tampoco tendrá una excusa como “agregaremos pruebas más tarde” … y le ofrece incluso mucho más que esto, no puedo cubrir todos los beneficios de TDD en esta respuesta.

Si tiene TDD, lo que le puede ayudar es decirle con confianza a su cliente que sí, cumplí con todos los requisitos. Y también le ayuda a dar mejores estimaciones … porque tiene una mejor medida cuando usa TDD para ayudar a estimar, ya que siempre está (debería estar) atacando características en fragmentos muy pequeños y, en cualquier momento, si el cliente pregunta qué tan avanzado está, puede decir que he hecho tanto código, porque he probado, mis pruebas me dicen que he cubierto muchas partes de la función, etc. En lugar de “oh, terminaré pronto “O” No estoy seguro todavía “, o” Te lo diré en una semana “. Si tiene TDD y tiene pruebas y tiene buenas pruebas y describen los escenarios en los que está trabajando y pasan, puede dar con confianza una mejor estimación o “estado” en el% de finalización de una función. Puedes dejar a ese cliente con “mira, aquí están las pruebas, pasan, cubren lo que querías, lee las pruebas que te dicen exactamente lo que implementé” y deja a ese cliente y a ti mismo con la confianza de que algo se hizo y pueden verlo a través de las pruebas. Ni siquiera tienen que mirar primero el código de producción. Las pruebas les mostrarán que sus especificaciones se realizan si los nombres de sus pruebas están escritos en términos comerciales.

Estoy de acuerdo con Alan, su afirmación sobre “manos libres ahora que me pagan” suena ridícula. Si quieren que lo extiendas más con código, o mantengas algo o busques algo, siempre puedes cobrar por eso. ¿Por qué simplemente lo tomarías y se lo tirarías básicamente y dirías aquí, tómalo, me voy de aquí! Eso es lo que parece, no profesional en absoluto.

¿Qué tiene que ver “una copia de github repo” con algo? Eso ni siquiera tiene sentido? ¿No tienen acceso a su propio repositorio ya que lo poseen? ¿O mantiene todos los repos para sus clientes? ¡Incluso si fuera una mala relación, al menos les ofrecería las llaves de su propio auto y sería cortés al respecto! Les daría acceso de administrador completo a su repositorio o los agregaría como colaboradores si es usted quien mantiene el repositorio de esa compañía. Si mantiene ese repositorio, será mejor que lo apoye, puedo decir eso. Pero no actúes como un imbécil … esa es la actitud que siento podría estar saliendo de la forma en que escribiste la subdescripción de Quora. Si así es como opera solo en general, realmente debería repensar su estrategia de comunicación sobre cómo concluir los proyectos.

Lo que le estás diciendo a tu cliente es realmente extraño, y si yo fuera el cliente, no te volvería a usar TBH.