Mi flujo de trabajo siempre ha sido escribir un paso lógico y luego ejecutar el programa e inspeccionar la salida. Este proceso me ha servido increíblemente bien para las tareas en la universidad. Sin embargo, a medida que hago más desarrollo, a menudo hay momentos en que simplemente compilar y ejecutar su código lleva de 1 a 2 minutos. Los ejemplos incluyen cargar un programa a un microcontrolador, requerir interacción con un servidor externo e incapaz de implementar la automatización debido a autenticación, arquitectura de software o complejidad.
Este tipo de tareas son muy inadecuadas para la forma en que normalmente programo, y tengo dificultades para codificar de manera efectiva. Por lo general, cometo muchos errores de sintaxis y errores de lógica, la mayoría de los cuales puedo detectar fácilmente mediante pruebas. Sin embargo, con un tiempo de espera tan largo, este método lleva demasiado tiempo.
fuente
Respuestas:
En primer lugar, cualquier tipo de depuración interactiva es excelente. Desea eso en su kit de herramientas, porque si aún no, algún día realmente se beneficiará de tenerlo. (Los detalles varían según el idioma, la plataforma y el IDE).
Buscaría algunos marcos para usar objetos simulados . Esto le permite rodear el componente que se está probando con un ecosistema falso de otros componentes, para que sus pruebas estén más específicamente dirigidas y pueda evitar probar todo como una unidad completa.
Además, los objetos simulados se pueden programar con aserciones, por lo que puede verificar que el componente que se está probando realmente hizo una determinada llamada.
fuente
Trabajaría duro para reducir el tiempo de prueba. Trabajé en un par de empresas desarrollando código incrustado, y las pruebas fueron dolorosas, requirieron viajes a la sala de servidores y FTP manuales, reinicios y múltiples comandos para el hardware de prueba. Luego me uní a un grupo realmente bueno, donde simplemente podía escribir 'hacer prueba' en mi escritorio y obtener resultados en menos de un minuto. En ese minuto:
Tomó algún tiempo hacer que todo esto funcionara, pero el esfuerzo para automatizar todos estos pasos se recuperó cien veces a medida que el personal de desarrollo creció.
fuente
Las pruebas automatizadas no reemplazan la revisión y la comprensión.
Puede ser que esté utilizando las pruebas como una muleta. Si está haciendo esto, impedirá su aprendizaje. No estoy abogando por que no pruebes. En cambio, le recomendaría que antes de ejecutar su prueba revise lo que escribió. Comprenda lo que escribió, asegúrese de que tenga sentido y de que la sintaxis se vea correcta.
fuente
Usted ya dio la respuesta:
I usually make a lot of syntax errors and logic errors
Entonces, trabajando duro para mejorar eso, debería poder reducir el tiempo de prueba. Los errores de sintaxis deben ser los primeros que debe reducir. ¿Nunca tuvo una prueba de programación con papel y lápiz en su estudio?
Tuve lo mismo cuando cambié de PHP a Java. Tuve que aprender a depurar en lugar de simplemente imprimir algunas variables y presionar F5 en el navegador ...
fuente
make a lot of
que parece que debería invertir su energía para mejorarloNecesita una buena unidad o plataforma de prueba funcional que pueda ejecutar las pruebas automáticamente, preferiblemente en segundo plano. Esto requerirá el uso de simulacros como se indicó anteriormente y dependiendo del idioma que esté utilizando algún tipo de inyección de dependencia.
Al hacer que sus objetos sean lo más independientes posible y luego usar métodos de inyección para agregar restricciones externas, no es difícil crear una plataforma de prueba para su código.
fuente
La verdadera diversión viene cuando simplemente no puedes probar tu código excepto si lo usas con ira. Esto sucede bastante con los sistemas de negociación, ya que los simuladores de intercambio disponibles a menudo son pobres, inexistentes o ni siquiera cumplen con lo que dicen los proveedores del software de intercambio. Esto es parte del rico tapiz de la vida, me temo. Mi enfoque es asegurarme de que al menos mi lado de la transacción esté bien escrito y bien documentado, para que pueda cambiarse fácilmente rápidamente.
fuente
Examen de la unidad; Simuladores / aplicaciones simuladas.
Esto tomará tiempo, por supuesto, y es posible que deba recopilar y masajear datos de muestra para crear maquetas apropiadas, pero al final dará sus frutos: se ahorrará todo el tiempo y los problemas que encuentre al intentar realizar pruebas contra sistemas.
Utilizadas correctamente, estas herramientas asegurarán que antes de acercarse a sistemas externos, esté 99.9% seguro de que si su código falla, es algo en el sistema externo / cambio de entorno lo que lo causó, no un error en su propio código.
Trabajé profesionalmente durante bastante tiempo como lo hiciste en la escuela, y en muchos casos fue muy efectivo. Eventualmente trabajé con algunas personas que me obligaron a abandonar esa metodología y usar pruebas unitarias y maquetas en su lugar.
Ahora, no comienzo ningún proyecto sin pensar primero en la implementación de las fases de prueba: pruebas unitarias, maquetas, simuladores, datos de muestra, etc.
fuente
Tal vez usar un Linter puede ayudarte un poco aquí.
Estaba en una situación similar con mi empleador anterior. Nuestra base de código era realmente enorme y para hacer los cambios que tenía que codificar, compilar y luego reemplazar los
.class
archivos en un servidor de desarrollo y luego reiniciar el servidor de desarrollo con el script de reinicio. Y para mi consternación, llevará aproximadamente media hora volver a poner en marcha el servidor de desarrollo.Más tarde descubrí que la depuración remota del servidor de desarrollo también era posible.
Esto es lo que hice para optimizar mi proceso.
Primera ronda inicial de depuración remota, esto me permitió ver el flujo de código exacto y los valores / estados exactos de las variables.
Planeando cómo y qué cambios haré.
Hacer cambios y luego comparar las diferencias
Errores de almacenamiento en caché utilizando linter o compilando.
Dando el hotfix reemplazando los
.class
archivos y reiniciando.A veces también incluiría una gran cantidad de declaraciones de registro para verificar nuevamente el flujo del código y verificar la verificación de valores / estados. Esto me ayudó mucho.
También usar un IDE con una buena complicación automática puede ser de gran ayuda para reducir los errores tipográficos.
Espero que esto ayude.
fuente