SlideShare uma empresa Scribd logo
1 de 30
Clean Code
Qualidade e velocidade em
desenvolvimento de software
Apresentação
Gabriel Felipe Soares <gabrielfs7@gmail.com>
Desenvolvedor PHP
Zend Certified PHP Engineer (ZEND022952)
8 anos de experiência na área de desenvolvimento web, principalmente na
parte de processamento de cartões de crédito e ecommerce.
Objetivos
● Conhecer a relação de “Clean Code” com a qualidade
no desenvolvimento de software.
● Conhecer algumas das principais ferramentas para
qualidade de software em PHP.
● Apropriar os conhecimentos de forma empírica
utilizando algumas das ferramentas apresentadas.
“Resolvo isso em 5
minutos!”
Primeiros dias de
trabalho...
“É simples. apenas
mais um if!”
“Basta criar uma
flag...”
“Não temos orçamento para os
testes… Pode liberar para produção
ainda hoje? É urgente!!”
“Precisamos
deste módulo
personalizado…”
“Assim já é o
suficiente. Vai
atender a nossa
necessidade atual…”
“É algo simples. Por
favor, adicione mais esta
condicional. O cliente
está me pressionando…”
Em 1982, James Q. Wilson e George L. Kelling escreveram um
famoso artigo chamado “Janelas Quebradas”
GUERREIRO.
O Bombeiro
- Mais tempo para o entendimento.
- Dificulta adaptação de novos
desenvolvedores.
- Gera redundância e discrepância.
- Maior tempo e dificuldade de
manutenção.
- Menor controle de impactos.
- Maior risco e dificuldade de
crescimento.
Quanto custa um código sujo?
Em 1982, James Q. Wilson e George L. Kelling escreveram um
famoso artigo chamado “Janelas Quebradas”
● Redundância = Discrepância.
● Falta de padrão = Código confuso.
● Ausência de testes = Sem controle.
● Negligência de segurança (sem tempo?).
● Ausência de tratamento de exceções.
● Desmotivação / Descaso.
● Aumento do estresse.
● Saída do funcionário (ou não…)
● Aumentos dos custos e prazos.
Quanto custa um código
sujo?
Algumas perguntas
Como você se sente ao pegar um código “ruim” de um colega?
Por que produzimos código “ruim”?
Por que perdemos a produtividade/motivação?
Como você quer ser lembrado?
O que é Clean Code?
Clean Code
“Programar é a arte de dizer a
outro humano o que o ele quer
que o computador faça.”
Donald Knuth. Cientista computacional de
renome e professor da Universidade de
Stanford e autor do livro “The Art of
Computer Programming”
“ A lógica deve ser direta para
dificultar o encobrimento de bugs,
as dependências mínimas para
facilitar a manutenção [...] O
código limpo faz bem apenas uma
coisa.”
Bjarne Stroustrup, criador do C++
Clean Code
“Ele jamais torna confuso o
objetivo do desenvolvedor, em vez
disso, ele está repleto de
abstrações claras e linhas de
controles objetivas”
Grady Booch, autor do livro “Object
Oriented Analysis and Design with
Applications”
“ Um código limpo parece que foi
escrito por alguém que se
importava. Não há nada de óbvio
que se pode fazer para torná-lo
melhor”
Michael Feathers, autor de “Working
Effectively with Legacy Code”
Clean Code
● É inteligível.
● É autoexplicativo.
● É expressivo.
● Usa nomes significativos.
● É testável e testado.
● É curto, simples e objetivo.
● Faz bem apenas uma coisa.
● Sem duplicação de código.
● É escrito com cuidado.
Boas práticas
● Deixe o código melhor do que
você encontrou.
● Refatore sempre!
● Teste ao menos as partes mais
críticas.
● Evite classes e métodos muito
grandes (excesso de
responsabilidade).
● Excluir métodos, classes e
atributos não utilizados.
● ...
Total Productive Maintenance e o 5S
- Seiri (Organização): Nomenclatura e lugares adequados.
- Seiton (Arrumação): Constante refatoração.
- Seiso (Limpeza): Código, claro, simples e sem repetições
- Seiketsu (Padronização): Definir um padrão.
- Shutzuke (Disciplina): Seguir padrão, refletir e melhorar.
Evite comentários
// Classe que representa a entidade Cliente
class Cliente
{
// Nome do cliente
private $name;
// Retorna o nome do cliente
public function getName()
Evite nomes sem sentido
class ServicoConta
{
public function addSl($ct, $v) {
$cl->setSl($cl->getSl() + $v);
}
Use nomes autoexplicativos
class ContabilizadorSaldo
{
public function adicionaSaldo(Conta $conta, $valor) {
$conta->setSaldo($conta->getSaldo() + $valor);
}
Evite classes métodos assim
class EfetuadorPagamento
{
public function paga(
Conta $conta, Compra $compra, $dataPagamento = null,
Loja $loja, MeioPagamento $meioPagamento) {
$dataPagamento = $dataPagamento ?: new DateTime();
if ($conta->getSaldo() < $compra->getValor()) {
return false;
}//end if
$aceitaMeioPagamento = false;
for ($loja->getMeiosPagamentoAceitos() as $meioPagamentoAceito) {
if ($meioPagamentoAceito->getId() == $meioPagamento->getId()) {
$aceitaMeioPagamento = true;
}
}//end for
if ($aceitaMeioPagamento) {
$pagamento = new Pagamento();
$pagemento->setConta($conta);
$pagemento->setLoja($conta);
$pagamento->setData($dataPagamento);
...
Distribua as responsabilidades
class RealizadorCheckout
{
public function realizaPagamento(Compra $compra, MeioPagamento
$meioPagamento)
{
$this->verificadorSaldo
->validaSaldoDisponivel($compra->getConta(), $compra->getValor());
$this->verificadorMeioPagamento
->validaLojaAceitaMeioPagamento($compra->getLoja(), $meioPagamento);
$this->registradorPagamento
->registraPagamento($compra, $meioPagamento);
...
Ferramentas que vão te ajudar...
- SOLID
- KISS
- DRY
- TDD (Ex: PHPUnit)
- Refactoring
- Design Patterns (Factory, DI)
Ferramentas que vão te ajudar...
Controle de Versão
- É mais seguro.
- Histórico de modificações (backup /
análise).
- Trabalho simultâneo (branching).
- Gera ambiente colaborativo.
- Planejamento de releases.
- Integração contínua (hooks).
Branching Model
Gerenciamento de dependências
$ composer install
$ composer update
https://getcomposer.org
https://packagist.org
Gerenciamento de dependências
Infos
- http://meldmerge.org (Merge tool)
- https://github.com/gabrielfs7/clean-code (Projeto dojo)
- https://phpunit.de/manual/current/pt_br/index.html (Testes)
- https://phpmd.org/rules/index.html (mess detector)
Livro Clean Code
Livro: Clean Code
Autor: Robert C. Martin

Mais conteúdo relacionado

Mais procurados

Analise de Requisitos de Software
Analise de Requisitos de SoftwareAnalise de Requisitos de Software
Analise de Requisitos de SoftwareRobson Silva Espig
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalhoRuan Pozzebon
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixCris Fidelix
 
Comparativo entre Processos Ágeis
Comparativo entre Processos ÁgeisComparativo entre Processos Ágeis
Comparativo entre Processos ÁgeisDaniel Ferreira
 
Identificação de necessidades e estabelecimento de requisitos
Identificação de necessidades e estabelecimento de requisitosIdentificação de necessidades e estabelecimento de requisitos
Identificação de necessidades e estabelecimento de requisitosptbr
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de SoftwareNécio de Lima Veras
 
Introdução a engenharia de software aula 02
Introdução a engenharia de software   aula 02Introdução a engenharia de software   aula 02
Introdução a engenharia de software aula 02Franklin Matos Correia
 
Teste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testingTeste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testingQualister
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeisQualister
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software PressmanSimoneinfo
 
02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentaisWaldemar Roberti
 
Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]rafael327780
 
IBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em TestesIBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em TestesFelipe Freire
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareFelipe Goulart
 
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de Software[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de SoftwareJúlio de Lima
 
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves RochaAPRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves RochaCloves da Rocha
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Sérgio Souza Costa
 

Mais procurados (20)

Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Analise de Requisitos de Software
Analise de Requisitos de SoftwareAnalise de Requisitos de Software
Analise de Requisitos de Software
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalho
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
 
Comparativo entre Processos Ágeis
Comparativo entre Processos ÁgeisComparativo entre Processos Ágeis
Comparativo entre Processos Ágeis
 
Identificação de necessidades e estabelecimento de requisitos
Identificação de necessidades e estabelecimento de requisitosIdentificação de necessidades e estabelecimento de requisitos
Identificação de necessidades e estabelecimento de requisitos
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
Introdução a engenharia de software aula 02
Introdução a engenharia de software   aula 02Introdução a engenharia de software   aula 02
Introdução a engenharia de software aula 02
 
Teste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testingTeste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testing
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeis
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
 
02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais
 
Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]
 
Ferramentas case
Ferramentas caseFerramentas case
Ferramentas case
 
IBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em TestesIBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em Testes
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de Software[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
 
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves RochaAPRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
APRESENTAÇÃO DO PROFESSOR - By Prof. Cloves Rocha
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
 
Aula 4- Engenharia de Software
Aula 4- Engenharia de SoftwareAula 4- Engenharia de Software
Aula 4- Engenharia de Software
 

Destaque

Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...
Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...
Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...Roberto Pepato
 
Banco de questões qualidade de software
Banco de questões qualidade de softwareBanco de questões qualidade de software
Banco de questões qualidade de softwareBruno Nascimento
 
MPS.BR - Melhoria do processo de Software Brasileiro
MPS.BR - Melhoria do processo de Software BrasileiroMPS.BR - Melhoria do processo de Software Brasileiro
MPS.BR - Melhoria do processo de Software BrasileiroPaulo Henrique de Sousa
 
ISO 9126 - Qualidade de Software
ISO 9126 - Qualidade de SoftwareISO 9126 - Qualidade de Software
ISO 9126 - Qualidade de SoftwareFelipe Cabral
 
Melhorando a qualidade do software com testes de ponta a-ponta
Melhorando a qualidade do software com testes de ponta a-pontaMelhorando a qualidade do software com testes de ponta a-ponta
Melhorando a qualidade do software com testes de ponta a-pontaGuilherme Cardoso
 

Destaque (7)

Qualidade de código
Qualidade de códigoQualidade de código
Qualidade de código
 
Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...
Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...
Continuous Inspection - Uma abordagem efetiva para melhoria contínua da quali...
 
Banco de questões qualidade de software
Banco de questões qualidade de softwareBanco de questões qualidade de software
Banco de questões qualidade de software
 
MPS.BR - Melhoria do processo de Software Brasileiro
MPS.BR - Melhoria do processo de Software BrasileiroMPS.BR - Melhoria do processo de Software Brasileiro
MPS.BR - Melhoria do processo de Software Brasileiro
 
Qualidade de software
Qualidade de softwareQualidade de software
Qualidade de software
 
ISO 9126 - Qualidade de Software
ISO 9126 - Qualidade de SoftwareISO 9126 - Qualidade de Software
ISO 9126 - Qualidade de Software
 
Melhorando a qualidade do software com testes de ponta a-ponta
Melhorando a qualidade do software com testes de ponta a-pontaMelhorando a qualidade do software com testes de ponta a-ponta
Melhorando a qualidade do software com testes de ponta a-ponta
 

Semelhante a Clean code - Qualidade em desenvolvimento de Software

Scrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento ÁgilScrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento Ágilabacrazy
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Softwareguest2f8cba
 
InCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP EspecificaçãoInCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP EspecificaçãoInCuca
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013André Borgonovo
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasKleitor Franklint Correa Araujo
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTiago Link
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 

Semelhante a Clean code - Qualidade em desenvolvimento de Software (20)

Test First, TDD e outros Bichos
Test First, TDD e outros BichosTest First, TDD e outros Bichos
Test First, TDD e outros Bichos
 
Scrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento ÁgilScrum e o Ambiente de Desenvolvimento Ágil
Scrum e o Ambiente de Desenvolvimento Ágil
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Software
 
InCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP EspecificaçãoInCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP Especificação
 
Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
 
Over engineering
Over engineeringOver engineering
Over engineering
 
clean code
clean codeclean code
clean code
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
O que é código bonito?
O que é código bonito?O que é código bonito?
O que é código bonito?
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 

Clean code - Qualidade em desenvolvimento de Software

  • 1. Clean Code Qualidade e velocidade em desenvolvimento de software
  • 2. Apresentação Gabriel Felipe Soares <gabrielfs7@gmail.com> Desenvolvedor PHP Zend Certified PHP Engineer (ZEND022952) 8 anos de experiência na área de desenvolvimento web, principalmente na parte de processamento de cartões de crédito e ecommerce.
  • 3. Objetivos ● Conhecer a relação de “Clean Code” com a qualidade no desenvolvimento de software. ● Conhecer algumas das principais ferramentas para qualidade de software em PHP. ● Apropriar os conhecimentos de forma empírica utilizando algumas das ferramentas apresentadas.
  • 4. “Resolvo isso em 5 minutos!” Primeiros dias de trabalho... “É simples. apenas mais um if!” “Basta criar uma flag...”
  • 5. “Não temos orçamento para os testes… Pode liberar para produção ainda hoje? É urgente!!”
  • 7. “Assim já é o suficiente. Vai atender a nossa necessidade atual…”
  • 8. “É algo simples. Por favor, adicione mais esta condicional. O cliente está me pressionando…”
  • 9. Em 1982, James Q. Wilson e George L. Kelling escreveram um famoso artigo chamado “Janelas Quebradas” GUERREIRO. O Bombeiro
  • 10. - Mais tempo para o entendimento. - Dificulta adaptação de novos desenvolvedores. - Gera redundância e discrepância. - Maior tempo e dificuldade de manutenção. - Menor controle de impactos. - Maior risco e dificuldade de crescimento. Quanto custa um código sujo?
  • 11. Em 1982, James Q. Wilson e George L. Kelling escreveram um famoso artigo chamado “Janelas Quebradas” ● Redundância = Discrepância. ● Falta de padrão = Código confuso. ● Ausência de testes = Sem controle. ● Negligência de segurança (sem tempo?). ● Ausência de tratamento de exceções. ● Desmotivação / Descaso. ● Aumento do estresse. ● Saída do funcionário (ou não…) ● Aumentos dos custos e prazos. Quanto custa um código sujo?
  • 12. Algumas perguntas Como você se sente ao pegar um código “ruim” de um colega? Por que produzimos código “ruim”? Por que perdemos a produtividade/motivação? Como você quer ser lembrado?
  • 13. O que é Clean Code?
  • 14. Clean Code “Programar é a arte de dizer a outro humano o que o ele quer que o computador faça.” Donald Knuth. Cientista computacional de renome e professor da Universidade de Stanford e autor do livro “The Art of Computer Programming” “ A lógica deve ser direta para dificultar o encobrimento de bugs, as dependências mínimas para facilitar a manutenção [...] O código limpo faz bem apenas uma coisa.” Bjarne Stroustrup, criador do C++
  • 15. Clean Code “Ele jamais torna confuso o objetivo do desenvolvedor, em vez disso, ele está repleto de abstrações claras e linhas de controles objetivas” Grady Booch, autor do livro “Object Oriented Analysis and Design with Applications” “ Um código limpo parece que foi escrito por alguém que se importava. Não há nada de óbvio que se pode fazer para torná-lo melhor” Michael Feathers, autor de “Working Effectively with Legacy Code”
  • 16. Clean Code ● É inteligível. ● É autoexplicativo. ● É expressivo. ● Usa nomes significativos. ● É testável e testado. ● É curto, simples e objetivo. ● Faz bem apenas uma coisa. ● Sem duplicação de código. ● É escrito com cuidado. Boas práticas ● Deixe o código melhor do que você encontrou. ● Refatore sempre! ● Teste ao menos as partes mais críticas. ● Evite classes e métodos muito grandes (excesso de responsabilidade). ● Excluir métodos, classes e atributos não utilizados. ● ...
  • 17. Total Productive Maintenance e o 5S - Seiri (Organização): Nomenclatura e lugares adequados. - Seiton (Arrumação): Constante refatoração. - Seiso (Limpeza): Código, claro, simples e sem repetições - Seiketsu (Padronização): Definir um padrão. - Shutzuke (Disciplina): Seguir padrão, refletir e melhorar.
  • 18. Evite comentários // Classe que representa a entidade Cliente class Cliente { // Nome do cliente private $name; // Retorna o nome do cliente public function getName()
  • 19. Evite nomes sem sentido class ServicoConta { public function addSl($ct, $v) { $cl->setSl($cl->getSl() + $v); }
  • 20. Use nomes autoexplicativos class ContabilizadorSaldo { public function adicionaSaldo(Conta $conta, $valor) { $conta->setSaldo($conta->getSaldo() + $valor); }
  • 21. Evite classes métodos assim class EfetuadorPagamento { public function paga( Conta $conta, Compra $compra, $dataPagamento = null, Loja $loja, MeioPagamento $meioPagamento) { $dataPagamento = $dataPagamento ?: new DateTime(); if ($conta->getSaldo() < $compra->getValor()) { return false; }//end if $aceitaMeioPagamento = false; for ($loja->getMeiosPagamentoAceitos() as $meioPagamentoAceito) { if ($meioPagamentoAceito->getId() == $meioPagamento->getId()) { $aceitaMeioPagamento = true; } }//end for if ($aceitaMeioPagamento) { $pagamento = new Pagamento(); $pagemento->setConta($conta); $pagemento->setLoja($conta); $pagamento->setData($dataPagamento); ...
  • 22. Distribua as responsabilidades class RealizadorCheckout { public function realizaPagamento(Compra $compra, MeioPagamento $meioPagamento) { $this->verificadorSaldo ->validaSaldoDisponivel($compra->getConta(), $compra->getValor()); $this->verificadorMeioPagamento ->validaLojaAceitaMeioPagamento($compra->getLoja(), $meioPagamento); $this->registradorPagamento ->registraPagamento($compra, $meioPagamento); ...
  • 23. Ferramentas que vão te ajudar... - SOLID - KISS - DRY - TDD (Ex: PHPUnit) - Refactoring - Design Patterns (Factory, DI)
  • 24. Ferramentas que vão te ajudar...
  • 25. Controle de Versão - É mais seguro. - Histórico de modificações (backup / análise). - Trabalho simultâneo (branching). - Gera ambiente colaborativo. - Planejamento de releases. - Integração contínua (hooks).
  • 27. Gerenciamento de dependências $ composer install $ composer update https://getcomposer.org https://packagist.org
  • 29. Infos - http://meldmerge.org (Merge tool) - https://github.com/gabrielfs7/clean-code (Projeto dojo) - https://phpunit.de/manual/current/pt_br/index.html (Testes) - https://phpmd.org/rules/index.html (mess detector)
  • 30. Livro Clean Code Livro: Clean Code Autor: Robert C. Martin