Você está na página 1de 6

.

NET - Anti-Patterns ou Anti-Padres


Hoje eu vou falar sobre Anti-Patterns ou Anti-Padres.
Obs: Estou escrevendo Anti-Patterns/Anti-Padroes ,mas no sei se esta a forma correta de escrever; segundo a regra
anterior deveramos escrever antipatterns (s se usuaria o hifem antes do h, r e s e vogal )

O termo Anti-Patterns foi criado em 1995 por Andrew Koenig, inspirado no livro da Gang of Four, que
desenvolveram o conceito de padro de projeto.
Um anti-pattern ou anti-padro, como o prprio significado do termo sugere , significa algo contrrio
ao padro. Seria isso mesmo ???
Em engenharia de software, um anti-padro uma soluo semelhante a um padro de projeto
(Design Pattern) s que sua aplicao produz conseqncias negativas.
Assim um anti-padro uma soluo pois resolve um problema s que de uma forma ineficiente.
Quem nunca viu ou ouviu falar na famosa 'gambiarra' ? Pois ela o exemplo prtico de um antipadro: resolve o problema mas ineficiente e com certeza vai causar problemas a curto, mdio e a
longo prazo.
Para relaxar um pouco...
A Programao Orientada a Gambiarras (POG ou WOP Workaround-oriented
programming) um paradigma da programa de sistemas de software que integra-se
perfeitamente a qualquer grande Paradigma de programao atual.
Por definio, Gambiarra aquilo que de difcil concepo, de inesperada execuo para
tornar fcil o uso de algo que sequer deveria existir.
A Programao Orientada a Gambiarras foi uma evoluo natural do uso do Programa
bacalhau, tambm conhecido como ATND - "Artifcio Tcnico No Documentado"
Para que um programador possa exercer a Programao Orientada a Gambiarras, so
necessrios alguns fatores especficos, facilmente encontrados em ambiente de desenvolvimento:











Sistemas originalmente mal projetados


clientes chatos
Usurios chatos
Falta de vontade
Falta de tempo
Gente que pensa que DBA (normalmente so pessoas chatas, gordas, feias, sem
certificao nenhuma e que fizeram um curso de SQL Bsico)
Arquiteto de software achando que o mximo (normalmente pessoas altas, loiras,
chatas, arrogantes e metidos a sabe-tudo)
Trmino do estoque de caf/ch
Aproximao do final da tarde
Vspera de feriado/fim-de-semana

Seria cmico seno fosse trgico.


Fonte: http://tiny.cc/10p4c

Os anti-padres no so uma caracterstica da engenharia de software ( claro) esto em todas as


reas; para ilustrar isso veja uma relao de anti-padres sociais e de software:
1

Anti-Padres Sociais
Criminoso
Terrorista
Pervertido
Traficante
Hertico

Anti-Padres de Software
Cdigo Espagueti
Classes SuperPoderosas
Boto Mgico
Anemic Model Model
Grande bola de lama

O problema com os anti-padres e que eles muitas vezes esto documentados e so usados como se
fossem a soluo para determinados tipos de problemas mas que acabam acarretando problemas
maiores.
Seriam os anti-padres um mal hbito ou uma m prtica ?
Em essncia no. Os anti-padres so mais do que isso.
Vejamos algumas caractersticas dos anti-padres:
- Os Anti-Padres so solues negativas que apresentam mais problemas do que se propem a
resolver;
- Os Anti-Padres so uma extenso natural dos Padres de Projeto; (O maior perigo quando a
mentira se parece com a verdade.)
- Os Anti-Padres so a ponte entre a lacuna existente entre os conceitos de arquitetura e a
implementao do mundo real;
- Os Anti-Padres, apresentam uma soluo comum que refaz o sistema de modo a maximizar os
benefcios e minimizar as conseqncias (aspectos negativos);
- Os Anti-Padres identificam abordagens tcnicas equivocadas e prticas de desenvolvimento erradas
que levam ao desenvolvimento de software de m qualidade e ao fracasso de projetos de software;
Compreender e conhecer os Anti-Padres permite-nos evit-los pois so uma armadilha que levam a
situaes desastrosas.
Dessa forma um Anti-Padro um Padro de Projeto que pode (e infelizmente ) ser usado para
resolver um problema mas ineficiente e apresenta resultados negativos.
Mas o que faz com que , mesmo apresentando os problemas conhecidos, os anti-padres continuem a
serem usados ?
Vejamos as principais causas da utilizao dos anti-padres :
1. Orgulho ( s fazer do jeito que eu to falando que entregamos na data correta)
2. Preguia ( Fazer essa refatorao muito complicado ento deixa assim mesmo que vai dar
certo)
3. Pressa ( No precisa testar tudo no, temos que entregar isso amanh...)
4. Ignorncia (O que essa parte desse cdigo faz mesmo ?)
5. Desleixo ( No quero nem saber, se compilou porque funciona)
6. Avareza ( Pra que gastar com mo de obra especializada, manda o estagirio fazer isso., o cara
fera)
7. Irresponsabilidade (Se ningum reclamou porque est funcionando.)
Na engenharia de Software os Anti-Padres so divididos em trs classes:(fonte:
http://www.ime.usp.br/~kon/MAC5715/aulas/Aula6.html)
1.

Anti-Padres de Desenvolvimento - relacionados


programao;
2

The Blob
 referncia a filme B com monstro extra-terrestre de gelia que come tudo a sua volta e cresce cada vez
que come algo. O aliengena chega do espao sideral na forma de uma gotinha gelatinosa e vai
crescendo at se tornar uma ameaa para o planeta inteiro :
 ocorre freqentemente com programadores novos em OO que vem de linguagens procedurais e que
concentram a maior parte do sistema em uma classe central que passa a ter dezenas de mtodos e
atributos. Outras classes pequenas orbitam o Blob e servem apenas para guardar pequenas estruturas
de dados.
 Causas Tpicas:
 falta de arquitetura OO;
 falta de arquitetura, o sistema uma grande massa disforme;
 preguia: ao estender o sistema, ao invs de adicionar novas classes, programadores incham as
classes existentes;


Soluo refatorada: remova responsabilidades do Blob e as transfira para as classes que o orbitam. A
longo prazo, o objetivo um desenho OO de melhor qualidade onde os objetos interagem entre si e
no numa arquitetura de estrela centrada no Blob;
Exceo conhecida: um Blob aceitvel quando estamos encapsulando um sistema legado dentro de
uma grande classe. No queremos modificar o sistema legado, queremos apenas acess-lo a partir do
nosso sistema OO;

Lava Flow
 Historinha-Evidncia:
 "AAHHH, isso? Bem, o Marcelo e o Edson escreveram esta rotina quando o Joo (que saiu da
empresa no ms passado) estava tentando resolver o problema das funes de entrada e sada
implementadas pela Irene (que agora trabalha no departamento de vendas). Eu acho que esse
cdigo no mais utilizado, mas no tenho certeza. O Marcelo no escreveu nenhuma
documentao e ns no temos testes automatizados, ento acho melhor no mexer nisso pois
pode quebrar alguma coisa. Afinal, est funcionando do jeito que est, no est? Ento
melhor no mexer."
 Forma geral:
 Fluxo de Lava encontrado muitas vezes em sistemas que comearam como experimentao
mas que acabaram em produo.
 caracterizado por ondas de cdigo disforme de verses anteriores que deslizam para as verses
novas sem termos muito controle sobre elas.
 Partes da lava podem se solidificar na forma de grandes rochas e serem carregadas pelo fluxo de
lava derretida. Como grandes partes de cdigo antigo que so incorporados ao sistema sem
sabermos exatamente o que ele faz e se ele realmente necessrio.
 Sintomas e Conseqncias:
 alta freqncia de variveis e fragmentos de cdigo no justificados
 funes aparentemente importantes completamente no-documentadas que na verdade no se
relacionam claramente arquitetura do sistema
 Grandes blocos de cdigo entre comentrios sem justificativa
 Muitos comentrios do tipo /* Substituir isso */ /* Em construo */
 Interfaces nos arquivos de cabealhos que no so usadas e que no podem ser explicadas pelos
programadores atuais
 Se a lava se solidifica, se torna impossvel a compreenso e documentao do cdigo existente e
a falta de conhecimento da arquitetura se torna to grande que fica praticamente impossvel
implementar melhorias no sistema.
 Refactored Solution:
 S h uma maneira de evitar: garantir que a todo momento se tenha uma clara noo da
arquitetura do sistema e que todo o cdigo seja compatvel com esta arquitetura.
 Quando o fluxo de lava j existe, a cura em geral muito dolorosa:
 especialistas devem conduzir uma minerao do cdigo cuidadosa (investigar o que h l
e tentar entender a arquitetura) e da remover as partes inteis e refatorar a arquitetura.
 s vezes, implementar o item anterior to difcil que a soluo jogar o cdigo fora e
comear de novo com uma arquitetura clara.

Poltergeists
3

um poltergeist um fantasma que aparece de repente no meio da noite, esbarra na nossa frente e
desaparece misteriosamente.
 comum com programadores muito especialistas nas especificidades de uma determinada linguagem e
que usam esse conhecimento para o mal.
 por exemplo, programadores de LISP ou C que usam efeitos colaterais da linguagem para fazer coisas
importantes no sistema.
 poltergeists podem se manifestar na forma de classes estranhas dentro do sistema que no fazem parte
da arquitetura mas que so usadas de vez em quando para realizar alguma tarefa-chave que ficou
faltando.
 uma forma muito comum entre "maus-bons programadores" so trechos de cdigo ultra eficientes e
geniais que ningum entende a no ser o prprio programador.
Spaghetti Code
 Historinha-Evidncia: "Argh, que meleca! Voc sabe que em Java voc pode ter mais do que uma
classe por aplicao, n ? Do jeito que est mais fcil re-escrever tudo do que tentar consertar".
 Forma Geral: aparece em sistemas que tem muito pouca estrutura. Em geral, temos poucas classes com
poucos mtodos, e cada mtodo enorme.
 Exceo aceitvel: quando se est testando uma arquitetura e se implementa uma das componentes do
sistema usando cdigo espagueti. A interface da componente tem que ser muito bem feita para no
contaminar o resto do sistema. Uma vez terminado o teste, deve-se jogar fora o cdigo espagueti e
reimplement-lo decentemente.
 Soluo refatorada: utilizar tcnicas de refatoramento de cdigo para redistribuir o cdigo de forma
mais OO, criando novas classes e mtodos.


Input Kludge
 software que falha com entradas triviais;
 Historinha: "O programador disse que o programa estava pronto e que funcionava perfeitamente e
que eu poderia testar. Sentei na frente do computador, apertei <enter> e o sistema deu Falha de
Segmentao ".

Cut-and Paste Programming


 Historinhas:
 "Ei, eu pensei que voc j tinha consertado esse erro, por que est acontecendo de novo?"
 "Puxa, vocs so bons mesmo, 400.000 linhas de cdigo novo em duas semanas? Que
progresso, parabns!"
 Programao baseada em copiar e colar a pior forma de re-utilizao de cdigo. Herana (reutilizao caixa branca) melhor pois evita a repetio do cdigo. Componentes tipo caixa preta
ainda melhor pois evita repetio e incentiva o desacoplamento.
 Solues relacionadas: em geral, cdigo espagueti est cheio de cut-and-paste programming.
Identificar repeties e criar um nico mtodo para elas.

Mushroom Management
 Em algumas empresas se diz que os desenvolvedores no devem ter contato com usurios finais, que a
intermediao deve ser feita por Analistas de Requisitos especializados nisso.
 Historinha: "Mantenha os seus desenvolvedores no escuro e alimente-os com fertilizante".
 Normalmente, os desenvolvedores acabam construindo o sistema errado.

2.

Anti-Padres Arquiteturais - relacionados estrutura dos


sistemas;

Vendor Lock-In
 Construo de sistemas que so altamente dependentes de interfaces proprietrias.
 Soluo:
 use interfaces padro (Ex: CORBA, assim voc no depende de um s fabricante)
 crie uma camada de isolamento arquitetural entre o seu sistema e a plataforma de um fabricante
especfico

Design by Committee (projeto de comit)


 Muita gente trabalhando junto para projetar a mesma arquitetura sem um mtodo bem organizado;
4

Conseqncia: arquitetura excessivamente complexa para atender a todas as diferentes opinies e


pontos de vista;
Soluo:
 limite grupo a no mais do que 10 pessoas.
 use processos bem definidos e planejados (Ex: processo do OMG para definio de CORBA)
(ser?)

Swiss Army Knife


 uma classe cuja interface grande demais. O projetista tenta antecipar na interface todos os
possveis usos da classe no futuro.
Reinvent the Wheel
 Historinha: "Este problema nico no mundo. Antes de continuar implementando os requisitos
bsicos, vamos implementar uma biblioteca nova para cuidar desta questo".

3. Anti-Padres Gerenciais - relacionados aos processos e mtodos de

desenvolvimento nas empresas e grupos de desenvolvimento de software;




Analysis Paralysis
 Analistas buscam o entendimento perfeito e completo do problema. Passam meses estudando as
questes relacionadas ao problema ao invs de colocar a mo na massa e comear a projetar e
implementar o sistema.
 Soluo: desenvolvimento incremental.

Death by Planning
 Excesso no planejamento do que se vai fazer. Cronogramas excessivamente complexos que se
mostram impraticveis na vida real.

Intellectual Violence
 Utilizao prepotente de um conhecimento sobre uma determinada teoria, tecnologia ou jargo
especfico para intimidar outras pessoas numa reunio.

Smoke and Mirrors


 Tambm conhecido como Vaporware
 Gerentes pedem para programadores criarem GUIs com a casca de um sistema ainda no desenvolvido
para mostrar a potenciais clientes o que poderia ser feito;
 Programadores explicam para gerentes e vendedores que nada est feito na realidade e que demoraria
meses ou anos para fazer de verdade;
 Vendedores ignoram a advertncia dos programadores e VENDEM o sistema antes de que ele exista;

Vejamos a seguir uma anlise resumida de um anti-padro muito conhecido e usado pelos
desenvolvedores de software:

O anti-padro cdigo Espaguete (Spaghetti Code)


Definio:
Qualifica-se de cdigo espaguete um programa de computador que no segue as regras da
programao e abusa de desvios, condicionais ou no, o que torna a leitura do mesmo por seres
humanos bem difcil. O sistema difcil de entender, de manter e de testar.
Ele conseqncia do estilo de adotados por muitos desenvolvedores: sentar na frente do
computador e comear a programar.
Sintomas do padro:



Cdigo confuso e mal estruturador;


Usos de controles
5

Causas Principais : Ignorncia, Preguia, Displicncia;


Tipo da soluo : Refatorao do Software;
Nome da soluo : Software Refactoring, Code Cleanup;
Escala mais freqente : Aplicao;
Voc alguma vez se enquadrou em um dos anti-padres aqui citados ? (seja sincero...)
Eu sei apenas anti-padres mas eu gosto...

Jesus disse-lhes: A minha comida fazer a vontade daquele que em enviou, e realizar
a sua obra. (Joo 4:34)
Referncias:








http://www.antipatterns.com/AntiPatterns/Welcome.html
AntiPatterns - Refactoring Software, Architectures, and Projects in Crisis e W. Brown, R.
Malveau, H. McCormick III e T. Mowbray
http://www.ryanpadilha.com.br/en/2010/09/soa-erros-comuns-anti-patterns-e-boas-praticas/
http://www.ime.usp.br/~kon/MAC5715/aulas/Aula6.html
Seo de Padres de Projetos do site Macoratti.net
Seo Engenharia de Software do site Macoratti.net

Jos Carlos Macoratti

Você também pode gostar