Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
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.
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 ".
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.
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
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.
Vejamos a seguir uma anlise resumida de um anti-padro muito conhecido e usado pelos
desenvolvedores de software:
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