¿Cuál es el enfoque TDD en el desarrollo de software? ¿Qué tan importante es en el desarrollo integrado?

TDD, Test Driven Development, dice que no escribe software hasta que haya escrito primero las pruebas para él. Las pruebas se escriben desde afuera, probando la funcionalidad del software, no desde adentro, probando lo que acaba de escribir. Por lo tanto, tiene el valor, considerable, de que su mente no está contaminada al escribir las pruebas por la memoria del código que acaba de escribir. Porque eso significa que es muy probable que cometas el mismo error en el código y las pruebas. En sentido inverso, si diseñó las pruebas después de una cuidadosa consideración de la especificación, su conocimiento de las pruebas le pedirá que escriba un mejor código, pensando en cosas como casos extremos antes.

El TDD completo significa que primero debe escribir el conjunto de pruebas de la competencia, antes de escribir una palabra de código. Si falla porque no ha creado el código. Luego, escribe apéndices que existen, pero devuelve los errores como no implementados. Por lo tanto, primero prueba su manejo de errores. Luego, etapa por etapa, implementas tu código. Cuando pasan todas las pruebas, ha terminado. Debido a que su conjunto de pruebas se completó, no hay nada más que escribir, y la lista cada vez más corta de fallas en las pruebas le brinda a la administración una visión general cómoda de su progreso, lo que los hace felices.

Es un poco más difícil de implementar en código incrustado que en código de modo de usuario, en parte debido a las dependencias en el hardware. Pero recomiendo hacer todo lo posible. La disciplina de diseñar pruebas antes de implementar el código es muy saludable. Y mi experiencia es que ofrece menos código con errores que cualquier otra metodología que haya encontrado.

Me gustaría agregar algo a las respuestas anteriores, ya que no lo aclaran. TDD en embebido no significa que ejecute sus pruebas en su plataforma de destino: es factible pero tedioso y económicamente inviable. Para probar la plataforma de destino, es mejor centrarse en la automatización de algunas pruebas de nivel superior.

Uno de los enfoques más utilizados es ejecutar sus pruebas con simulacros en el objetivo más universal como el escritorio (o servidor) de Windows o Linux utilizando uno de los marcos más populares. Incluso el código de muy bajo nivel puede probarse de esa manera si está diseñado como comprobable. Luego prueba sus rutinas dirigiéndose a una memoria compartida que imita sus interfaces periféricas. Sin embargo, la mayor parte del código (especialmente hoy en la era de IoT) en los sistemas integrados es lo suficientemente alto y aborda la lógica de negocios, por lo tanto, es muy fácil escribir pruebas unitarias para estas piezas.

TDD son las siglas de Test Driven Development. La idea aquí es escribir una prueba ejecutable que especifique el comportamiento del sistema, ejecutar la prueba y verla fallar, luego escribir código para que pase. Cuando pase, escribe otra prueba. Esto se conoce como el ciclo rojo-verde .

Sus pruebas están impulsando su desarrollo. Si lo hace bien, el sistema con el que termina se acerca al 100% de cobertura de prueba.

TDD puede funcionar con desarrollo integrado, pero es posible que tenga que construir muchas de las herramientas usted mismo. Su entorno de desarrollo y su entorno de prueba diferirán del entorno de destino. Un ciclo rojo-verde podría no ser suficiente para garantizar que el sistema se pruebe completamente. Tendrá que dedicar ciclos cerebrales adicionales a pensar en cómo llevar a cabo un flujo de trabajo de prueba.

More Interesting

¿Por qué se requiere una arquitectura asincrónica para lograr la escalabilidad? ¿Puede por favor proporcionar una aplicación / ejemplo de la vida real?

He estado sentado en mi escritorio sin hacer nada en una gran empresa tecnológica y me siento increíblemente poco inspirado. Tengo ganas de dejarlo. ¿Esto es normal?

¿Qué porcentaje de tiempo deberían dedicar los desarrolladores de software a la refactorización con el tiempo?

Ingeniería de software: ¿Cómo documentan los programadores su trabajo?

¿Hay organizaciones que patrocinan Raspberry Pi para que un estudiante universitario aprenda y cree aplicaciones si tengo un objetivo claro?

¿Qué cosas son importantes en los servicios de desarrollo de software offshore?

¿Cómo puede un objeto llamar a una función que está fuera de ese objeto?

¿Crees que es mejor desarrollar una aplicación web o una aplicación nativa de iOS y Android para la primera versión de un producto?

¿Los programadores agregan códigos de trucos en los juegos de forma deliberada o otros los descifran como lagunas?

¿Cuál es la forma más rentable de convertir varios terabytes de videos FLV al formato H.263?

¿Qué camino debe seguir un desarrollador web después de realizar una Licenciatura en Ingeniería de Software?

Cómo convertirme en ingeniero de software si ya tengo un doctorado en matemática pura y algunos conocimientos autodidactas de C ++ pero no tengo antecedentes formales de CS

¿Cuáles son los mejores eventos que pueden formar parte de un foro de tecnología de software?

¿Cuáles son las desventajas del ciclo de vida del desarrollo de sistemas?

¿Cuáles de las operaciones básicas de la CPU son esenciales para construir una computadora universal?