Uma dica para os amantes do Scrum e do Dot Net e ler o slide abaixo, publicado por Aaron Bjork:Scrum With Team Foundation Server 2010View more presentations from Aaron Bjork. SOLID sao cinco principios basicos de programacao e design orientados a objeto, introduzidos por Robert C. Martin no inicio dos anos 2000:SRP: Single Responsibility Principle (Principio da Responsabilidade Unica). Nocao de que um objeto deve possuir uma unica responsabilidade.OCP: Open/Closed Principle (Principio Aberto / Fechado). Nocao de que o software deve ser aberto para extensao, mas fechado para modificacao.LSP: Liskov Substitution Principle (Principio da Substituicao de Liskov). Nocao de que objetos devem ser substituidos por instancias de seus subtipos, sem afetar a correcao do programa.ISP: Interface Segregation Principle (Principio de Segregacao da Interface). Muitas interfaces especificas sao melhores do que uma interface de uso geral.DIP: Dependency Inversion Principle (Principio de Inversao da Dependencia). Nocao de que se deve depender de interfaces abstratas e nao de classes concretas, uma vez que implementacoes concretas sao mais propensas a mudancas.Principios SOLID podem ser aplicados no desenvolvimento de software:- A fim de remover Code Smells. Desta forma, o desenvolvedor refatora o codigo fonte do software ate que esteja legivel e extensivel.- Em conjunto com TDD (Test-Driven Development: desenvolvimento orientado a testes).- E parte de uma estrategia global de programacao agil e adaptativa.- Quando os principios sao aplicados em conjunto, aumentam bastante as chances de que o sistema criado seja simples de manter e estender.Esta foi uma introducao a SOLID. Nos proximos posts farei uma explicacao simples de cada um dos principios aqui mencionados. Este post e um conjunto de trechos extraidos da Wikipedia.Em programacao, code smell e qualquer sintoma no codigo fonte que indica um problema mais profundo.O problema sugerido por um code smell sempre ser descoberto quando o codigo esta sujeito a um pequeno ciclo de feedback, onde e refatorado em etapas pequenas e controladas, e o design resultante e examinado para verificar se ha mais code smells que indiquem a necessidade de mais refatoracao.Do ponto de vista de um programador encarregado de realizar a refatoracao, code smells sao heuristicas que indicam quando refatorar, e quais tecnicas especificas de refatoracao devem ser usadas.Determinar o que e ou nao um code smell e sempre um julgamento subjetivo, e sempre ira variar de acordo com a linguagem de programacao, o desenvolvedor e a metodologia de desenvolvimento.Existem ferramentas que detectam certos tipos de code smells, como:Java: Checkstyle, PMD e FindBugs.Dot Net: ReSharper.Code smells comuns:Codigo duplicado: codigo identico ou muito similar existe em mais de um local.Metodo longo: um metodo, funcao ou procedure muito extenso.Classe extensa: uma classe que acabou ficando muito extensa (God Object).Feature envy (sem traducao): uma classe que utiliza em excesso metodos de outra classe.Intimidade inapropriada: uma classe que possui dependencia de detalhes de implementacao de outra classe.Legado recusado: uma classe que sobrepoe (override) o metodo da classe generica de forma que o contrato da classe generica nao e cumprido pela classe derivada.Classe preguicosa: classe que faz muito pouco.Complexidade artificial: uso forcado de design patterns extremamente complicados, onde um design simples seria suficiente.Identificadores excessivamente longos: em