Trabajo para una empresa de productos de software. Tenemos grandes clientes empresariales que implementan nuestro producto y les brindamos asistencia. Por ejemplo, si hay un defecto, proporcionamos parches, etc. En otras palabras, es una configuración bastante típica.
Recientemente, se emitió y me asignó un ticket con respecto a una excepción encontrada por un cliente en un archivo de registro que tiene que ver con el acceso simultáneo a la base de datos en una implementación agrupada de nuestro producto. Por lo tanto, la configuración específica de este cliente puede ser crítica en la aparición de este error. Todo lo que obtuvimos del cliente fue su archivo de registro.
El enfoque que le propuse a mi equipo fue intentar reproducir el error en una configuración de configuración similar a la del cliente y obtener un registro comparable. Sin embargo, no están de acuerdo con mi enfoque y dicen que no necesito reproducir el error ya que consume demasiado tiempo y requeriré simular un clúster de servidores en máquinas virtuales. Mi equipo sugiere que simplemente "siga el código" para ver dónde está el código inseguro de transacciones y / o subprocesos y poner el cambio en función de un desarrollo local simple, que no es una implementación de clúster como el entorno del que ocurre del error se origina.
Para mí, trabajar a partir de un plan abstracto (código de programa) en lugar de una manifestación tangible y visible (reproducción en tiempo de ejecución) parece difícil, por lo que quería hacer una pregunta general:
¿Es razonable insistir en reproducir cada defecto y depurarlo antes de diagnosticarlo y repararlo?
O:
Si soy un desarrollador sénior, ¿debería ser capaz de leer código multiproceso y crear una imagen mental de lo que hace en todos los escenarios de casos de uso en lugar de requerir la ejecución de la aplicación, probar diferentes escenarios de casos de uso de manera práctica y pasar por el código línea por línea? ¿O soy un desarrollador pobre por exigir ese tipo de ambiente de trabajo?
¿La depuración de las mariquitas?
En mi opinión, cualquier corrección presentada en respuesta a un ticket de incidente debe probarse en un entorno simulado para estar lo más cerca posible del entorno original. ¿De qué otra manera puede saber que realmente solucionará el problema? Es como lanzar un nuevo modelo de vehículo sin chocar probándolo con un maniquí para demostrar que las bolsas de aire funcionan.
Por último, pero no menos importante, si estás de acuerdo conmigo:
¿Cómo debería hablar con mi equipo para convencerlos de que mi enfoque es razonable, conservador y más a prueba de balas?
new
. Y estos errores no se garantiza que sea reproducible de forma fiable, de acuerdo con la especificación de memoria de Java Modelo