Hace un tiempo tuvo lugar una conversación entre un buen amigo mío y yo en la que se escucharon las siguientes frases:
— El número de programadores crecerá constantemente, porque la cantidad de código crece y cada vez se necesitan más desarrolladores para soportarlo.
— Pero el código se está volviendo obsoleto, parte de él ya no es compatible. Incluso es posible que exista algún tipo de equilibrio.
Al recordarlos unos días después, me pregunté si mantener el código, que requiere cada vez más recursos con el tiempo, podría en última instancia paralizar el desarrollo de nuevas funciones o requeriría un aumento ilimitado en el número de programadores. El análisis matemático y las ecuaciones diferenciales ayudaron a evaluar cualitativamente la dependencia del volumen de apoyo al desarrollo y a encontrar respuestas a las preguntas.
Pregunta uno. ¿Puede el apoyo “consumir” todos los recursos para el desarrollo?
Considere un equipo de programadores en el que el número de participantes es constante. Parte de su tiempo de trabajo () se dedica a desarrollar código nuevo y la parte restante del tiempo va al soporte. Dentro de los supuestos del modelo, asumimos que el primer tipo de actividad tiene como objetivo aumentar el volumen de código, y el segundo tiene como objetivo cambiarlo (corregir errores) y no tiene un impacto significativo en el volumen de código.
denotemos la cantidad total de código escrito hasta ese momento . Suponiendo que la velocidad de escritura de código es proporcional obtenemos:
Es natural suponer que los costos laborales para mantener el código son proporcionales a su volumen:
o
de donde
Obtenemos una ecuación diferencial que se puede integrar fácilmente. Si en el momento inicial la cantidad de código es cero, entonces
en funcion Y . Y esto significa una reducción gradual a lo largo del tiempo en el desarrollo de nuevas funciones a cero y la transferencia de todos los recursos al soporte.
Sin embargo, si durante el tiempo el código se vuelve obsoleto y deja de ser compatible, entonces la cantidad de código que requiere soporte a la vez ya es igual Entonces
а es una solución a una ecuación diferencial con un argumento retrasado [1]:
La solución a dicha ecuación se determina de forma única especificando los valores "antes del principio de los tiempos" . Dado que el código aún no se había escrito antes del momento inicial, en nuestro caso en .
Veamos algunos ejemplos. Mediremos el tiempo en años y la cantidad de código en miles de líneas. Entonces para Los valores del orden de decenas son aceptables, tomaremos 50 y 100. Es decir, en un año el equipo de desarrollo escribirá cincuenta y cien mil líneas de código, respectivamente. Para Los valores aceptables pueden ser: , , . Esto significa que un equipo de desarrollo puede soportar la cantidad de código que escribe en un año, ya sea un trimestre, medio o tiempo completo. Como vida media del código estableceremos los siguientes valores: 1, 2 y 4 años. Resolviendo la ecuación numéricamente, obtenemos ejemplos del comportamiento de la función. para algunas combinaciones de parámetros .
Comportamiento de la función A medida que el código envejece, ha cambiado. La función ya no es monótona, pero las fluctuaciones se "calman" con el tiempo y hay una tendencia a a algún valor constante. Los gráficos muestran: cuanto más , и , es decir, cuanto más lento envejece el código, más rápido es el desarrollo de código nuevo y menor es la calidad del código, menos recursos quedarán para el desarrollo de nuevas funcionalidades. Existía el deseo de dar al menos un ejemplo en el que “acurrucado” cerca de cero. Pero esto requirió la selección de indicadores de calidad de desarrollo muy pobres y de un código que no envejece por mucho tiempo. Incluso en el gráfico inferior izquierdo, queda una cantidad significativa de recursos para la nueva funcionalidad. Por tanto, la respuesta correcta a la primera pregunta es más bien esta: teóricamente, sí, es posible; prácticamente - apenas.
Preguntas que no se pudieron responder:
- ¿Es cierto que tiende a algún límite en para todos ? Si no es para todos, ¿para cuáles?
- Si existe un límite, ¿cómo depende su valor de ?
Pregunta dos. ¿Podría el mantenimiento del código provocar un crecimiento ilimitado en el número de programadores?
denotemos el número de programadores involucrados en el desarrollo de código nuevo. Como anteriormente, — la cantidad de código escrito hasta un momento determinado . Entonces
Mantenga ocupado el soporte de código programadores. Teniendo en cuenta el código de antigüedad,
de donde
si entonces
Por tanto, la respuesta a la segunda pregunta es negativa: si el número de desarrolladores de código nuevo es limitado, entonces, en condiciones de código obsoleto, el soporte no puede provocar un aumento ilimitado en el número de programadores.
Conclusión
Los modelos considerados son modelos matemáticos “blandos” [2]. Son muy simples. Sin embargo, la dependencia de los resultados de la simulación de los valores de los parámetros corresponde a lo que se espera para sistemas reales, lo que habla a favor de la adecuación de los modelos y la precisión suficiente para obtener estimaciones de alta calidad.
Referencias
1. Elsgolts L.E., Norkin SB. Introducción a la teoría de ecuaciones diferenciales con argumento desviado. Moscú. Editorial "Ciencia". 1971.
2. Arnoldo V.I. Modelos matemáticos “duros” y “blandos”. Moscú. Editorial MCNMO. 2004.
Fuente: habr.com