O foco desta pergunta: Alguns softwares executam "trabalho extra" para aumentar a chance de um resultado "eventualmente bem-sucedido / satisfatório", apesar de um ou mais erros internos no software, o que requer um tempo de execução mais longo quando esses erros ocorrem. Tudo isso acontece sem o conhecimento do usuário se o resultado foi bem-sucedido.
Definição de software complexo:
- Contém código gravado por (contribuído de) mais de 10 desenvolvedores durante sua vida útil e não gravado no mesmo período de tempo
- Depende de mais de 10 bibliotecas externas, cada uma com ressalvas
- Uma tarefa típica de software (para gerar um resultado desejado pelo usuário) requer 10 ou mais parâmetros de entrada, onde a maioria deles possui valores padrão, mas são configuráveis se o usuário precisar de controle.
- Mais importante, software que possui a complexidade apropriada em relação à tarefa que está sendo executada, ou seja, não é desnecessariamente complicado .
Editado: O que é complexo? Por favor, veja Há uma grande diferença entre Complexo e Complicado . (link direto)
Definição de redundância / robustez nesta pergunta :
(Robustez adicionada com base nos comentários)
- Se uma tarefa do software falhar quando o conjunto de parâmetros atual foi usado, tente parâmetros diferentes.
- Obviamente, deve haver conhecimento interno de que esses parâmetros "diferentes" usam um caminho de código diferente, possivelmente resultando em um resultado diferente (espero que melhor).
- Às vezes, esse caminho de código diferente é escolhido com base em observações das bibliotecas externas.
- No final, se a tarefa real realizada for ligeiramente diferente da especificação do usuário, o usuário receberá um relatório detalhando a discrepância.
- Finalmente, como os mais de 10 parâmetros configuráveis, a redundância e os relatórios também são configuráveis.
Exemplo de tal software:
- Migração de banco de dados
- Banco de dados de negócios
- Banco de dados de controle de origem, etc.
- Conversão em lote entre um documento do Word e um documento do OpenOffice, PowerPoint e OpenOffice Draw, etc.
- Tradução automática de um site inteiro
- Análise automática de pacote de software, como Doxygen, mas onde a análise precisa ser mais confiável (ou seja, não apenas uma ferramenta de documentação)
- Comunicação de rede, onde os pacotes podem ser perdidos e várias tentativas são esperadas
Esta questão foi originalmente inspirada em Como você lida com código intencionalmente incorreto?
mas agora está focado em apenas uma das causas do inchaço do software. Esta pergunta não aborda outras causas de inchaço do software, como a adição de novos recursos.
Possivelmente relacionado: