Clean code - Qualidade em desenvolvimento de Software

30
Clean Code Qualidade e velocidade em desenvolvimento de software

Transcript of Clean code - Qualidade em desenvolvimento de Software

Page 1: Clean code - Qualidade em desenvolvimento de Software

Clean CodeQualidade e velocidade em

desenvolvimento de software

Page 2: Clean code - Qualidade em desenvolvimento de Software

Apresentação

Gabriel Felipe Soares <[email protected]>

Desenvolvedor PHPZend 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.

Page 3: Clean code - Qualidade em desenvolvimento de Software

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.

Page 4: Clean code - Qualidade em desenvolvimento de Software

“Resolvo isso em 5 minutos!”

Primeiros dias de trabalho...

“É simples. apenas mais um if!”

“Basta criar uma flag...”

Page 5: Clean code - Qualidade em desenvolvimento de Software

“Não temos orçamento para os testes… Pode liberar para produção ainda hoje? É urgente!!”

Page 6: Clean code - Qualidade em desenvolvimento de Software

“Precisamos deste módulo personalizado…”

Page 7: Clean code - Qualidade em desenvolvimento de Software

“Assim já é o suficiente. Vai atender a nossa necessidade atual…”

Page 8: Clean code - Qualidade em desenvolvimento de Software

“É algo simples. Por favor, adicione mais esta condicional. O cliente está me pressionando…”

Page 9: Clean code - Qualidade em desenvolvimento de Software

Em 1982, James Q. Wilson e George L. Kelling escreveram um famoso artigo chamado “Janelas Quebradas”

GUERREIRO. O Bombeiro

Page 10: Clean code - Qualidade em desenvolvimento de Software

- 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?

Page 11: Clean code - Qualidade em desenvolvimento de Software

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?

Page 12: Clean code - Qualidade em desenvolvimento de Software

Algumas perguntasComo 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?

Page 13: Clean code - Qualidade em desenvolvimento de Software

O que é Clean Code?

Page 14: Clean code - Qualidade em desenvolvimento de Software

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++

Page 15: Clean code - Qualidade em desenvolvimento de Software

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”

Page 16: Clean code - Qualidade em desenvolvimento de Software

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.

● ...

.

Page 17: Clean code - Qualidade em desenvolvimento de Software

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.

Page 18: Clean code - Qualidade em desenvolvimento de Software

Evite comentários// Classe que representa a entidade Clienteclass Cliente { // Nome do cliente

private $name;

// Retorna o nome do clientepublic function getName()

Page 19: Clean code - Qualidade em desenvolvimento de Software

Evite nomes sem sentidoclass ServicoConta{

public function addSl($ct, $v) {$cl->setSl($cl->getSl() + $v);

}

Page 20: Clean code - Qualidade em desenvolvimento de Software

Use nomes autoexplicativosclass ContabilizadorSaldo{

public function adicionaSaldo(Conta $conta, $valor) {$conta->setSaldo($conta->getSaldo() + $valor);

}

Page 21: Clean code - Qualidade em desenvolvimento de Software

Evite classes métodos assimclass 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 forif ($aceitaMeioPagamento) {$pagamento = new Pagamento();

$pagemento->setConta($conta);$pagemento->setLoja($conta);$pagamento->setData($dataPagamento);...

Page 22: Clean code - Qualidade em desenvolvimento de Software

Distribua as responsabilidadesclass 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);

...

Page 23: Clean code - Qualidade em desenvolvimento de Software

Ferramentas que vão te ajudar...- SOLID

- KISS

- DRY

- TDD (Ex: PHPUnit)

- Refactoring

- Design Patterns (Factory, DI)

- Mess Detector (Ex: PHPMD)

- Code Standard (Ex: PHP Code Sniffer, PHP-FIG)

- Documentation (Ex: PHPDoc)

Page 24: Clean code - Qualidade em desenvolvimento de Software

Ferramentas que vão te ajudar...

Page 25: Clean code - Qualidade em desenvolvimento de Software

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).

Page 26: Clean code - Qualidade em desenvolvimento de Software

Branching Model

Page 27: Clean code - Qualidade em desenvolvimento de Software

Gerenciamento de dependências

$ composer install$ composer updatehttps://getcomposer.orghttps://packagist.org

Page 28: Clean code - Qualidade em desenvolvimento de Software

Gerenciamento de dependências

Page 29: Clean code - Qualidade em desenvolvimento de Software

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)

- https://www.phpdoc.org/ (PHPDoc)

Page 30: Clean code - Qualidade em desenvolvimento de Software

Livro Clean Code

Livro: Clean CodeAutor: Robert C. Martin