SlideShare a Scribd company logo
1 of 42
Anti-patterns
  Braga Geek Nights
  Luis Azevedo 2010




                       www.braceta.com
                  www.twitter.com/braceta
História
   O termo foi introduzido por Andrew Koening e
inspirado no livro Design Patterns do Gang of Four’s
Definição
   Um padrão que se repete (social, processual,
programaticamente, etc.) que tipicamente é uma má
         prática, mau hábito ou má ideia.
Copy and paste
        programming
Copiar e modificar código em vez de criar soluções
                   genéricas.
Antipattern
Antipattern?
Antipattern
Design pattern?
Categorias
• Organizational anti-patterns
• Project management anti-patterns
• Analysis anti-patterns
• Software design anti-patterns
• Programming anti-patterns
• Methodological anti-patterns
• Configuration management anti-patterns
Organizational
Analisys Paralisis
Dedicar esforço desproporcionado na analise de um
                    projecto
Design by committee
Muitos colaboradores num design mas sem visão
                  unificada.
Project management
Death march
 Toda a gente sabe que o project irá ser um desastre,
                  excepto o CEO.

   No entanto a verdade permanece escondida e o
projecto mantem-se vivo até o Dia Zero quando surge
                    o “Big Bang”
Groupthink
Algo que um brainstorm não deve ser. Os membros do
grupo evitam lançar ideias fora da zona do conforto do
                        grupo.
Smoke and mirrors
  (vaporware)
Demonstrar o quão não implementadas as
  funcionalidades/funções irão aparecer
Software Design
Gas factory
Um design desnecessariamente complexo. KISS!
Object Oriented
 Programming
BaseBean
Herdar funcionalidade utilitária de uma classe em vez
 de delegar ou utilizar composição (Roles, Traits?).

               Yeah.. Java.. we know :S
God Object
Concentrar demasiadas funções numa determinada
                    classe.

 GodObject jesus =(GodObject)new JorgeJesus();
Object Orgy
   Não existir possibilidade de impedir acesso aos
internals de um objecto. Normalmente associado ao
     Perl (por programadores não informados).

               Inside-Out Objects?
Poltergeist
 Objectos que apenas servem para passar informação
para outros. Tipicamente também conhecido o Design
                  Pattern “Adaptor”.
Yo-Yo Problem
Existe uma hierarquia complexa de classes que obriga o
olhar para “cima” e para “baixo” para perceber o fluxo
                 de informação. Java?

 Resolve-se com delegação ou composição de classes.
Methodological
Copy and paste
        programming
Copiar e modificar código em vez de criar soluções
                   genéricas.
Programming by
        permutation
 Ou “Programação por Acidente”. Tentar modificar o
código sem perceber muito bem o porquê, até que
             funcione. PHP anyone?
Tester Driven
 Development ou BDD
Requisitos e funcionalidade são especificados utilizando
           bug reports. Agile Programming?
Improbability factor
Assumir que que algo é improvavel que aconteça. Por
   exemplo, verificar se um malloc retorna NULL.

                  Lei de Murphy
Programming
Boat anchor
Manter uma parte do sistema, embora já não tenha uso.
Lava flow
 Manter código não desejado (redundante ou de baixa
qualidade) porque remover pode trazer consequências
               nefastas. Assembler, Perl?
Hardcode
Utilizar números ou literais de strings no meio de
   estruturas de código em vez de ficheiros de
                  configuração.
Soft code
Colocar lógica de negócio em ficheiros de configuração
                em vez do código fonte.
Spaghetti code
Código no qual a estrutura e fluxo é praticamente
     incompreensivel, tipicamente GOTO’s.
Ravioli code
Criado criado por um conjunto de componentes soltos
      mas que a integração resultante é confusa.
               Humm Frames anyone?
Spaghetti with
           meatballs
   Parecido com o Raviolli code, mas para alem da
integração dos componentes ser confusa, os próprios
            componentes também o são!
Lasagna Code
 Código em camadas (arquitecturas MVC, Three-tier)
com interfaces definidas mas na qual o código de cada
     camada se mistura desorganizado. Rails? :)
Big ball of mud
  Um programa/sistema onde é impossível distinguir
    arquitectura. Um conjunto de interligação de
componentes misturados em Spagetti, Lasagna e Raviolli
                       Code.
Duct Tape
Componentes interligados por forma a que o minimo
  de interligação aconteça, mas sem o minimo de
                     estrutura.

Programa em C, que chama um script Perl, que gera um
Bash, que compila um code generator em Java, que gera
  um programa em PHP para imprimir o número 42!
Job Keeper
  Um “Big ball of mud” escrito como segurança do
             emprego do colaborador.

Este alegadamente consegue corrigir qualquer bug do
    programa utilizando “Duct Tape” anti-pattern.
The End

           www.braceta.com
      www.twitter.com/braceta

More Related Content

What's hot

Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfAntonio Maniero
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador PragmáticoTadeu Marinho
 
O papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareO papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareLeonardo Zanivan
 
React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesJosé Barbosa
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funcionaRodrigo Serradura
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?tdc-globalcode
 
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...tdc-globalcode
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Thiago Barradas
 
Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Better Developer
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss DanielChristofolli
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featuretdc-globalcode
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendiVinta Software
 

What's hot (20)

Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConf
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador Pragmático
 
A saga do desenvolvedor java
A saga do desenvolvedor javaA saga do desenvolvedor java
A saga do desenvolvedor java
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
O papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de softwareO papel e a carreira do arquiteto de software
O papel e a carreira do arquiteto de software
 
React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer Circles
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funciona
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
 
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)
 
Design Patterns - Com Java
Design Patterns  - Com JavaDesign Patterns  - Com Java
Design Patterns - Com Java
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e feature
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudar
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendi
 
BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015BDD em Ação - Testadores 2015
BDD em Ação - Testadores 2015
 

Viewers also liked

Viewers also liked (20)

ADENOMECTOMIA PROSTÁTICA LAPAROSCÓPICA
ADENOMECTOMIA PROSTÁTICA LAPAROSCÓPICAADENOMECTOMIA PROSTÁTICA LAPAROSCÓPICA
ADENOMECTOMIA PROSTÁTICA LAPAROSCÓPICA
 
Guide du-routard-de-l-intelligence-economique-2012
Guide du-routard-de-l-intelligence-economique-2012Guide du-routard-de-l-intelligence-economique-2012
Guide du-routard-de-l-intelligence-economique-2012
 
Tromboembolia pulmonar
Tromboembolia pulmonarTromboembolia pulmonar
Tromboembolia pulmonar
 
Jeopardy
JeopardyJeopardy
Jeopardy
 
Urheberrechtsextremismus: Ausprägungen und Antworten
Urheberrechtsextremismus: Ausprägungen und AntwortenUrheberrechtsextremismus: Ausprägungen und Antworten
Urheberrechtsextremismus: Ausprägungen und Antworten
 
Manual Ventilador Bennet 560 manual clinico
Manual Ventilador Bennet 560 manual clinicoManual Ventilador Bennet 560 manual clinico
Manual Ventilador Bennet 560 manual clinico
 
BC Red Berries
BC Red BerriesBC Red Berries
BC Red Berries
 
F-Secure - Apresentação Técnica
F-Secure - Apresentação TécnicaF-Secure - Apresentação Técnica
F-Secure - Apresentação Técnica
 
Seminario 3
Seminario 3Seminario 3
Seminario 3
 
PDF-Format und PDF-Grundlagen
PDF-Format und PDF-GrundlagenPDF-Format und PDF-Grundlagen
PDF-Format und PDF-Grundlagen
 
Anti-vírus
Anti-vírusAnti-vírus
Anti-vírus
 
Antimobbing
AntimobbingAntimobbing
Antimobbing
 
Fiche mi theta 600
Fiche mi theta 600Fiche mi theta 600
Fiche mi theta 600
 
FOAD et pratiques d'individualisation
FOAD et pratiques d'individualisation FOAD et pratiques d'individualisation
FOAD et pratiques d'individualisation
 
Cv french version informatique
Cv french version informatiqueCv french version informatique
Cv french version informatique
 
Resultat siko2013
Resultat siko2013Resultat siko2013
Resultat siko2013
 
Endovascular newsletter ix
Endovascular newsletter ixEndovascular newsletter ix
Endovascular newsletter ix
 
PHP Anti Patterns
PHP Anti PatternsPHP Anti Patterns
PHP Anti Patterns
 
Andreita
AndreitaAndreita
Andreita
 
Sixième journal de l'Association Malezi de Hasseindjé Oichili
Sixième journal de l'Association Malezi de Hasseindjé OichiliSixième journal de l'Association Malezi de Hasseindjé Oichili
Sixième journal de l'Association Malezi de Hasseindjé Oichili
 

Similar to Anti-patterns overview

Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu códigoAna Claudia Nogueira
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team SystemTeched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team SystemFábio Câmara
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariTaller Negócio Digitais
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no javaPedro Cavalero
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheirasHigor César
 

Similar to Anti-patterns overview (20)

Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu código
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
O que devo procurar em um code review
O que devo procurar em um code review O que devo procurar em um code review
O que devo procurar em um code review
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team SystemTeched Brasil 2005 -  A Metodologia MSF Agile e o Visual Studio Team System
Teched Brasil 2005 - A Metodologia MSF Agile e o Visual Studio Team System
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Django
DjangoDjango
Django
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Cs 2
Cs 2Cs 2
Cs 2
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
clean code
clean codeclean code
clean code
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 

Anti-patterns overview

  • 1. Anti-patterns Braga Geek Nights Luis Azevedo 2010 www.braceta.com www.twitter.com/braceta
  • 2. História O termo foi introduzido por Andrew Koening e inspirado no livro Design Patterns do Gang of Four’s
  • 3. Definição Um padrão que se repete (social, processual, programaticamente, etc.) que tipicamente é uma má prática, mau hábito ou má ideia.
  • 4. Copy and paste programming Copiar e modificar código em vez de criar soluções genéricas.
  • 9. Categorias • Organizational anti-patterns • Project management anti-patterns • Analysis anti-patterns • Software design anti-patterns • Programming anti-patterns • Methodological anti-patterns • Configuration management anti-patterns
  • 11. Analisys Paralisis Dedicar esforço desproporcionado na analise de um projecto
  • 12. Design by committee Muitos colaboradores num design mas sem visão unificada.
  • 14. Death march Toda a gente sabe que o project irá ser um desastre, excepto o CEO. No entanto a verdade permanece escondida e o projecto mantem-se vivo até o Dia Zero quando surge o “Big Bang”
  • 15. Groupthink Algo que um brainstorm não deve ser. Os membros do grupo evitam lançar ideias fora da zona do conforto do grupo.
  • 16. Smoke and mirrors (vaporware) Demonstrar o quão não implementadas as funcionalidades/funções irão aparecer
  • 18. Gas factory Um design desnecessariamente complexo. KISS!
  • 20. BaseBean Herdar funcionalidade utilitária de uma classe em vez de delegar ou utilizar composição (Roles, Traits?). Yeah.. Java.. we know :S
  • 21. God Object Concentrar demasiadas funções numa determinada classe. GodObject jesus =(GodObject)new JorgeJesus();
  • 22. Object Orgy Não existir possibilidade de impedir acesso aos internals de um objecto. Normalmente associado ao Perl (por programadores não informados). Inside-Out Objects?
  • 23. Poltergeist Objectos que apenas servem para passar informação para outros. Tipicamente também conhecido o Design Pattern “Adaptor”.
  • 24. Yo-Yo Problem Existe uma hierarquia complexa de classes que obriga o olhar para “cima” e para “baixo” para perceber o fluxo de informação. Java? Resolve-se com delegação ou composição de classes.
  • 26. Copy and paste programming Copiar e modificar código em vez de criar soluções genéricas.
  • 27. Programming by permutation Ou “Programação por Acidente”. Tentar modificar o código sem perceber muito bem o porquê, até que funcione. PHP anyone?
  • 28. Tester Driven Development ou BDD Requisitos e funcionalidade são especificados utilizando bug reports. Agile Programming?
  • 29. Improbability factor Assumir que que algo é improvavel que aconteça. Por exemplo, verificar se um malloc retorna NULL. Lei de Murphy
  • 31. Boat anchor Manter uma parte do sistema, embora já não tenha uso.
  • 32. Lava flow Manter código não desejado (redundante ou de baixa qualidade) porque remover pode trazer consequências nefastas. Assembler, Perl?
  • 33. Hardcode Utilizar números ou literais de strings no meio de estruturas de código em vez de ficheiros de configuração.
  • 34. Soft code Colocar lógica de negócio em ficheiros de configuração em vez do código fonte.
  • 35. Spaghetti code Código no qual a estrutura e fluxo é praticamente incompreensivel, tipicamente GOTO’s.
  • 36. Ravioli code Criado criado por um conjunto de componentes soltos mas que a integração resultante é confusa. Humm Frames anyone?
  • 37. Spaghetti with meatballs Parecido com o Raviolli code, mas para alem da integração dos componentes ser confusa, os próprios componentes também o são!
  • 38. Lasagna Code Código em camadas (arquitecturas MVC, Three-tier) com interfaces definidas mas na qual o código de cada camada se mistura desorganizado. Rails? :)
  • 39. Big ball of mud Um programa/sistema onde é impossível distinguir arquitectura. Um conjunto de interligação de componentes misturados em Spagetti, Lasagna e Raviolli Code.
  • 40. Duct Tape Componentes interligados por forma a que o minimo de interligação aconteça, mas sem o minimo de estrutura. Programa em C, que chama um script Perl, que gera um Bash, que compila um code generator em Java, que gera um programa em PHP para imprimir o número 42!
  • 41. Job Keeper Um “Big ball of mud” escrito como segurança do emprego do colaborador. Este alegadamente consegue corrigir qualquer bug do programa utilizando “Duct Tape” anti-pattern.
  • 42. The End www.braceta.com www.twitter.com/braceta

Editor's Notes

  1. Andrew Koening, Investigador da A&T
  2. Tipicamente tem nomes engraçados