Existe um anti-padrão formal para descrever o cenário?


10

Algum código é escrito para gerar planilhas do Excel (Office Interop).

  • O código tem um desempenho muito ruim.
    • Um subsistema é projetado para gerar os arquivos à noite. O desempenho não é uma preocupação à noite.
      • Uma função é criada para selecionar o arquivo correto entre os 100 arquivos disponíveis, dependendo do conjunto de parâmetros escolhido.
      • Como existem arquivos físicos, um sistema de arquivamento é adicionado para fazer backup desses arquivos (não há motivo para arquivar. Esses arquivos devem ser gerados rapidamente).
      • Este sistema não inclui um arquivo de configuração, mas possui uma função de "selecionador de servidor" codificada que simplesmente reflete no servidor em que o código está sendo executado.
      • Uma tarefa agendada é necessária para dar suporte e executar este serviço.

Isso se resume a um único problema. O código original tem um desempenho muito ruim para ser executado em um ambiente de produção.

Se o problema de desempenho tivesse sido resolvido, o subsistema e o sistema de arquivamento subsequente, "função de fábrica do seletor de arquivos", ponto de falha codificado e a manutenção da tarefa agendada e seu ponto de falha adicional não precisam existir.

Esta é uma "falha em cascata", se você desejar. O problema original levou a mais códigos ruins, mais soluções ruins e sobrecarga desnecessária. Existe um anti-padrão formal ou termo geral para descrevê-lo?


11
Código que não é escalável? Se o seu provedor de hospedagem falisse em um mês e você precisasse migrar o ambiente de produção para novos servidores, isso constituiria a necessidade de uma liberação de software e um pânico geral de emergência? Eu acho que você sabe a resposta ...
maple_shaft

11
Uau, isso soa como um aplicativo gerador de relatórios que escrevi há cerca de 12 anos. Bem, exceto pela falta de uma configuração e codificação. O arquivamento pode ser um requisito legal como era para mim, inútil, mas necessário de qualquer maneira. O desempenho foi ruim no início, mas a criação de um banco de dados de relatórios separado adequadamente otimizado foi eliminada. A execução de relatórios em um banco de dados altamente transacional é o início de muitas idéias ruins.
jfrankcarr

Respostas:


23

Fluxo de lava?

No jargão da programação de computadores, o fluxo de lava é um problema no qual o código de computador escrito em condições sub-ótimas é colocado em produção e adicionado enquanto ainda está em um estado de desenvolvimento.

No Perl Design Wiki: Lava Flow é "quando o código se espalha e se torna permanente, ele se torna um recurso arquitetônico da variedade arqueológica. As coisas são construídas sobre a estrutura sem questionar e sem esperança de mudar o que está por baixo delas. o código existente é visto como uma curiosidade histórica ".

Freqüentemente, colocar o sistema em produção resulta na necessidade de manter a compatibilidade com versões anteriores (já que muitos componentes adicionais agora dependem dele) com o design original e incompleto.

Os fluxos de lava geralmente são exacerbados por mudanças na equipe de desenvolvimento que trabalha em um projeto. À medida que os trabalhadores entram e saem do projeto, o conhecimento da finalidade dos aspectos do sistema pode ser perdido e, em vez de limpar essas peças, eles são contornados, aumentando a complexidade e a bagunça do sistema.

O fluxo de lava é considerado um antipadrão, um fenômeno comumente encontrado que leva a um design inadequado.


3
Eu já vi isso antes (ok, ok, quase todos os dias), mas nunca o nomeei de novo.
Kevin

3
Obrigado. Eu nunca tinha ouvido isso chamar isso. Costumo me referir ao padrão como a Casa Misteriosa de Winchester.
jfrankcarr

@jfrankcarr: Eu gosto mais do seu nome. muito esperto.
21411 Kevin

Eu não acho que isso é o que o fluxo de lava realmente significa. A idéia é que o código que não é mais usado tenha congelado como lava sobre a paisagem do código real. No caso de o código ainda ser usado, provavelmente seria melhor fazer diferente em primeiro lugar.
Psr

@psr - A seção "" quando o código ... se espalha e se torna permanente, se torna um recurso arquitetônico da variedade arqueológica. As coisas são construídas sobre a estrutura sem questionar e sem esperança de mudar o que está por baixo delas. O código existente é visto como uma curiosidade histórica. "Está muito alinhado com o que aconteceu.
P.Brian.Mackey

3

Não tenho certeza se isso é um anti-padrão. Como em todos os antipadrões, temos que aceitar sua palavra de que quem pensou que era uma boa ideia estava enganado, mas nesse caso isso parece plausível e eu aceitarei sua palavra, portanto esse não é o problema.

O problema é que, para ser útil, um antipadrão precisa descrever algum tipo de armadilha geral e como pode ser evitado. Nesse caso, acho que seria encontrar uma solução alternativa para o código que apresenta um desempenho ruim quando você poderia apenas ter feito um desempenho melhor.

O problema com isso como anti-padrão, IMHO, é que o conhecimento sobre isso parece improvável de ter muito valor. Quem quer que tenha feito isso provavelmente já entendeu que seria bom saber como fazê-lo funcionar melhor; portanto, eles não devem saber como fazê-lo. Portanto, ter ouvido falar da situação geral como antipadrão realmente não teria ajudado.

Quanto a um termo geral para descrevê-lo, "falha em cascata", como você sugeriu, funciona muito bem. O termo que eu gosto para pessoas não qualificadas em uma missão que não fazia sentido em primeiro lugar é caçar snark , mas isso parece muito duro para essa situação. (Mas, de alguma maneira, jogarei o link gratuitamente, pois é a melhor representação de uma empresa condenada que conheço).


+1 Muitos bons pontos. Tu podes estar certo. Eu já vi o processo repetido várias vezes neste lugar em particular. Então, essa é a minha motivação para descrevê-lo como um Antipadrão. Em vez de corrigir esse problema específico.
usar o seguinte

3

Não sei se isso ajuda, mas a automação de escritório geralmente é um caso especial:

A automação de escritório geralmente é feita dessa maneira se for automatizada a partir de uma área de trabalho do usuário (especialmente para sites .net, porque os documentos de automação de escritório alertam corretamente que haverá vazamentos ruins nas ferramentas de interoperabilidade do escritório se elas forem executadas sem cabeça. forçados a escrever processos decapitados para gerar documentos de escritório com esse kit de ferramentas que chamamos de serviços de sacrifício porque você tinha que matá-los periodicamente para recuperar a memória.

Além do arquivamento que você está descrevendo, infelizmente, é uma prática recomendada em alguns casos.

Link: http://support.microsoft.com/kb/257757


+1 - Esse é um comentário interessante. Vou manter isso em mente. O serviço precisa ficar então. Embora o desempenho seja horrível. 1 minuto para gerar uma planilha com 5 colunas e menos de 100 linhas. Theres 100 planilhas ...
P.Brian.Mackey
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.