Usar un "interruptor de hombre muerto" para administrar el código urgente

8

En nuestro entorno de software, a menudo ejecutamos pruebas a / b, como probablemente sea una buena práctica. Sin embargo, nuestro entorno está configurado de tal manera que, en muy poco tiempo, el código comienza a ser muy difícil con las pruebas muertas. El registro de pruebas es poco más que una colección de páginas wiki internas.

Pensé en el estilo de un "interruptor de hombre muerto" de gestión de código difunto. Si no está familiarizado con el término, se refiere a un interruptor que debe reiniciarse periódicamente para evitar que algo se dispare; en esencia, si no responde, el interruptor se dispara y lo que sea que desee que cambie. Se realiza el gatillo.

Por ejemplo, escribiría algún código, lo registraría de alguna manera con este sistema, y ​​cuando aparezca una fecha de mi elección predeterminada, recibiría una notificación de que este código se eliminaría (se limpiaría automáticamente) a menos que interviniera (manualmente limpiar o posponer).

¿Cuáles son los pros, los contras y la viabilidad de incorporar dicho sistema? ¿Es posible o sabio? ¿Cuáles podrían ser algunas formas alternativas de administrar el código contra la descomposición?

dclowd9901
fuente
1
Cambié "mano del hombre muerto" por "interruptor del hombre muerto", ya que ese parecía ser el término que quería decir: en.wikipedia.org/wiki/Dead_man's_switch
vaughandroid

Respuestas:

8

Me preocuparía un sistema que elimine automáticamente el código. A menos que su equipo esté muy bien disciplinado, solo puedo ver esto como un camino hacia las lágrimas y el dolor. Las cosas suceden: la gente se va de vacaciones, se enferma, deja la empresa, olvida lo que hace el código que está a punto de caducar, ... y hacer que el código se limpie automáticamente suena como si invitara a todo tipo de problemas. Tendría que asegurarse de que no hay dependencias del compilador entre estos módulos, o podrían fallar repentinamente en la compilación cuando algo de lo que dependen expire fuera de existencia. Y no olvide lo que sucedería si alguien en el soporte de producción está trabajando en un ticket de problema anterior y el seguimiento de la pila en el mensaje de error hace referencia al código que se eliminó. Y esto tampoco haría que las personas que realizan auditorías tengan mucho éxito, me imagino ...

Algo que podría ser más seguro es un marco donde sus pequeños módulos de código pueden consultar una fecha de activación y una fecha de desactivación. Cuando el código está a punto de ejecutarse, verifica en una base de datos cuáles son las fechas y si la fecha actual está entre la fecha de activación y desactivación, su marco permite que el código se ejecute. Y si almacena estas fechas en una base de datos, puede escribir fácilmente un script que generará un informe de todos los módulos que vencen en los próximos n días y se lo enviará por correo electrónico para que sea lo primero en su bandeja de entrada el lunes por la mañana.

FrustratedWithFormsDesigner
fuente
Esto podría ser excelente si se integra con un sistema de tickets. ¡Gracias!
dclowd9901
2
la activación / desactivación se puede expresar con un sistema de licencias del que hay muchos disponibles, por lo que ni siquiera tendría que escribir uno usted mismo. A los ensamblados individuales se les puede aplicar dichos sistemas de licencia de manera que acceder a cualquiera de las interacciones exportadas de dichos ensamblajes verifique automáticamente que usted tenga una licencia disponible (que no haya expirado) con un servidor de licencias flotante.
Jimmy Hoffa
6

Este sistema crea un problema de pruebas huérfanas: si alguien que escribió un conjunto de pruebas y un conjunto de código de producción asociado a él abandona la empresa, las pruebas corren el peligro de ser eliminadas prematuramente por omisión de su nuevo propietario.

No creo que "demasiadas pruebas" sea un problema: siempre que las pruebas estén automatizadas, su desperdicio se limita principalmente a las horas de CPU, que es un cambio pequeño en comparación con las horas hombre. Una prueba eliminada automáticamente a través del interruptor del hombre muerto podría detectar errores que de lo contrario terminarían en producción, causando graves problemas de mantenimiento en el futuro.

Creo que puede crear una alternativa basada en procesos creando un registro que combine conjuntos de pruebas con módulos de su código. Cada vez que se realiza un mantenimiento en un módulo, el proceso requeriría tomar una decisión sobre mantener / eliminar / actualizar el conjunto de pruebas correspondiente. Como se trata de una contabilidad pura, no hay peligro de que el código se elimine de la lista automáticamente.

dasblinkenlight
fuente
1
Pensé que el problema del código huérfano sería muy relevante, pero esperaba ser lo suficientemente tonto como para no conocer una alternativa de automatización. Pero me alegro de que haya presentado otra alternativa, incluso si no está automatizada (que ambos podemos estar de acuerdo, casi seguramente terminará en lágrimas).
dclowd9901
@ dclowd9901 - ¿Por qué no elimina las pruebas que prueban el código que está eliminando? Además, ¿no deberían estar contenidas las pruebas dentro del mismo archivo que las pruebas o, al menos, un comentario dentro del código sobre las pruebas que se ejecutan?
Ramhound
¿Pereza? Honestamente, entré en este sistema mucho después de su implementación inicial. Las pruebas mismas descifran el código bajo ciertas circunstancias. Literalmente se sientan junto al código ellos mismos.
dclowd9901
3

Durante mucho tiempo he usado alertas de calendario simples (cualquier software de calendario que use su empresa debería ser suficiente) donde simplemente lo configuré para que me avise en cualquier momento y pongo toda la información que necesitaré, supongo que olvidé todo cuando suena la alerta.

Instalar un certificado SSL? Mire la fecha de vencimiento, establezca un evento de calendario para mí (y un gerente y otro ingeniero en caso de que uno o 2 de los tres ya no estemos con la compañía, lo que ha sucedido) 2 meses antes de eso para comenzar a sonar el alarma a quien sea que deba reemplazarse, poner en caso de que la información de contacto de las personas de las que recibimos el certificado, los lugares específicos en los que se usa el certificado y los detalles de las ramificaciones sistémicas de dejar que caduque (tal vez sea un sistema muerto y el certificado debe expirar cuando llegue ese momento).

La modificación automática del código es una idea francamente terrible y peligrosa. Todo lo que necesita hacer es usar juiciosamente su calendario para asegurarse de que se le notifiquen las cosas urgentes cuando su tiempo se vuelva relevante. Esto es específicamente para lo que son los calendarios. Ahora, si tiene un problema de no prestar atención a los eventos sensibles al tiempo de una manera responsable, creo que tiene un problema completamente diferente sobre el que podría preguntar en el lugar de trabajo .

Jimmy Hoffa
fuente
2

Suena como una muy mala idea, ya que el código más tarde será dependerá de esos cambios. La reversión automática causará daños generalizados.

En cambio, escriba sus pruebas como pruebas automatizadas (unitarias) y ejecútelas todas las noches.

MSalters
fuente
¿Pruebas unitarias automatizadas? ¿Cómo funcionaría eso con las pruebas de interacción?
dclowd9901
@ dclowd9901: si ese es el caso, simplemente los ejecuta con la misma frecuencia que todas las demás pruebas de interacción. No debería ser difícil determinar qué interacción debe ejecutarse y no ejecutarse en un punto dado. Si es difícil, entonces su proceso es el problema.
Ramhound
@ dclowd9901: Espero que en realidad no esté cambiando la interfaz de usuario semanalmente, incluso si el código detrás de la interfaz de usuario cambia con tanta frecuencia. A los usuarios no les gustan los cambios en la interfaz de usuario, solo pregúntele a Microsoft. Entonces, lo que probaría es que la interfaz de usuario sigue siendo lo suficientemente idéntica.
MSalters
En las aplicaciones web, tenemos oportunidades para probar diferentes enfoques de interfaz de usuario (ya sean ajustes en la colocación o el color, o lo que sea) de una manera iterativa muy rápida, por lo que aprovechamos eso. Sin embargo, los cambios semanales no lo son. En general, los datos se recopilan durante meses.
dclowd9901