El enfoque de esta pregunta: algunos programas realizan un "trabajo adicional" para aumentar las posibilidades de un resultado "eventualmente exitoso / satisfactorio", a pesar de uno o más errores internos en el software, que requieren un tiempo de ejecución más prolongado cuando ocurren esos errores. Todo esto sucede sin el conocimiento del usuario si el resultado fue exitoso.
Definición de software complejo:
- Contiene código escrito por (contribuido por) más de 10 desarrolladores durante su vida útil, y no escrito en el mismo período de tiempo
- Depende de más de 10 bibliotecas externas, cada una con advertencias
- Una tarea de software típica (para generar un resultado deseado por el usuario) requiere 10 o más parámetros de entrada, donde la mayoría de ellos tienen valores predeterminados pero son configurables si el usuario necesita control.
- Lo más importante es que el software tiene la complejidad adecuada en relación con la tarea que se realiza, es decir, no es innecesariamente complicado .
Editado: ¿Qué es complejo? Consulte Hay una gran diferencia entre complejo y complicado . (enlace directo)
Definición de redundancia / robustez dentro de esta pregunta :
(robustez agregada basada en comentarios)
- Si una tarea de software falló cuando se usó el conjunto de parámetros actual, pruebe con diferentes parámetros.
- Obviamente, debe haber conocimiento interno de que esos parámetros "diferentes" usan una ruta de código diferente, posiblemente dando como resultado un resultado diferente (con suerte mejor).
- A veces, estas diferentes rutas de código se eligen en función de las observaciones de las bibliotecas externas.
- Al final, si la tarea real realizada es ligeramente diferente de la especificación del usuario, el usuario recibirá un informe que detalla la discrepancia.
- Finalmente, al igual que los más de 10 parámetros configurables, la redundancia y los informes también son configurables.
Ejemplo de dicho software:
- Migración de base de datos
- Base de datos de negocios
- Base de datos de control de fuente, etc.
- Conversión por lotes entre un documento de Word y un documento de OpenOffice, PowerPoint y OpenOffice Draw, etc.
- Traducción automática de un sitio web completo
- Análisis automático del paquete de software, como Doxygen, pero donde el análisis debe ser más confiable (es decir, no solo una herramienta de documentación)
- Comunicación de red, donde se pueden perder paquetes y se esperan varios reintentos
Esta pregunta se inspiró originalmente en ¿Cómo lidias con un código intencionalmente malo?
pero ahora se centra en solo una de las causas de la acumulación de software. Esta pregunta no aborda ninguna otra causa de la acumulación de software, como la adición de nuevas funciones.
Posiblemente relacionado: