[MÚSICA] [MÚSICA] Olá.
Bem-vindo ao curso sobre TDD.
Eu sou o Clóvis Fernandes e hoje iremos falar sobre o ciclo da refatoração.
Nós estamos apresentando essa fase de refatoração do ciclo do TDD, está certo?
E a refatoração também tem seu, ciclo interno que,
vai ser guiado pela, maus cheiros que forem identificados.
Então, bem-vindo ao nosso espetáculo da Refatoração Guiada Por Mau Cheiro.
É isso que nós iremos fazer através do,
da apresentação do ciclo de refatoração que vai ser guiado,
então, pelo mau cheiro.
Normalmente, nós definimos teste com base
num caso de teste dentre os vários casos de teste de uma responsabilidade.
Fazemos com que ele falhe, depois fazemos com que ele seja bem sucedido.
Para isso, construímos código de produção que faça com que ele seja bem sucedido.
Ele é testado com, para ser bem sucedido e esse
código é retestado relação a todo o código anterior, todos os testes
anteriores da minha bateria de testes que eu tenho até ao dado momento.
Está certo?
Então, quando eu entro na fase de refatoração,
eu tenho código que funciona e foi testado.
Não garante.
Não se garante que ele tenha código muito bem estruturado.
Podemos recusar fazer alguma refatoração, como nós mostramos, não é?
Usando a regra de 3, a gente pode pular algumas coisas.
Só fazer determinados momentos, mas normalmente, quando nós começamos,
vamos começar os casos de testes de uma nova
responsabilidade, de uma nova funcionalidade.
Aí, garantidamente, a gente vai fazer a refatoração, para deixar o código mais
flexível e propício a incorporar novos códigos,
com base nos casos de teste que, que estivermos trabalhando.
Bom. Com isso,
construímos então essa lista e com base nessa lista de maus cheiros.
Está certo?
Nós iremos trabalhar cima de cada desses maus cheiros.
Eu posso escolher o pior mau cheiro, aquele mais problemático ou então,
olhando eles eu posso ver aquele que seja mais conveniente porque,
às vezes, mau cheiro sendo eliminado, removido,
ajuda na eliminação ou no tratamento dum próximo mau cheiro.
Então, a gente não, necessariamente, vamos escolher o pior mau cheiro, nesse momento.
Nós vamos, então, examinar e fazer uma escolha.
Se não encontrarmos nenhum mau cheiro, está certo?
Nós já saímos do ciclo, ou seja, aquele código que estava funcionando,
não encontramos mau cheiro, significa que ele já estava bem estruturado.
Não estava necessitando, realmente, de uma refatoração.
Está certo?
O código está bem estruturado.
Então, a gente bate carimbo nele, de que, é como se ele tivesse sido refatorado.
Algum momento, ele pode ter sido e testado.
Ele está as duas coisas.
Está certo?
Caso haja, pelo menos, mau cheiro, não é,
nessa lista eu vou identificar, dentre aqueles nomes de
maus cheiros do, definidos pelo Fowler, está certo?
Eu vou escolher deles, de acordo com a minha lógica
de trabalhar com os maus cheiros, está certo?
Dependendo, então, do tipo de mau cheiro, eh,
eu já tenho uma previsão de quais refatorações eu posso fazer.
Eu posso trabalhar, está certo?
Então, eu vou,
qual técnica de refatoração eu vou usar para remover aquele mau cheiro?
Então, eu vou escolher uma técnica, está certo?
Que seja mais apropriada na,
para a situação daquele momento, daquele mau cheiro.
Às vezes, mau cheiro numa situação, num contexto o mesmo mau cheiro pode ter uma,
uma forma de solução.
Num outro contexto, o mesmo mau cheiro pode ter outra técnica de refatoração.
Seguida, o próximo passo é fazer a,
a aplicação da técnica de refatoração.
A técnica de refatoração, ela pode ter passos internos diversos, está certo?
Mas, normalmente, muitas das técnicas você aplica apenas
passo interno e já faz, gera código, não é?
Está certo?
Que ainda não foi testado.
Então, a próxima tarefa é testar.
Então, você testa.
Então, supondo que, eu esteja usando uma técnica de refatoração que
só não tinha passos internos, eu já chego lá no,
no ponto onde eu examino de novo a minha lista,
pego a, a próximo a, o próximo tipo, não é, de mau cheiro,
escolho as técnicas ou a técnica de refatoração mais
apropriada para esse mau cheiro e, assim, prossigo nesse ciclo.
Está certo?
Até o momento que, realmente, não tenha mais nenhum mau cheiro a ser tratado.
O que acontece é que, às vezes, o mesmo tipo de mau cheiro,
ele ocorre várias vezes.
Então, eu vou ciclar várias vezes, não é?
Para resolver, para cada tipo de mau cheiro, eu elimino ele e faço o teste,
elimino o, o outro mau cheiro análogo e faço o teste de novo.
Então, fico passando isso.
O que pode acontecer também é que a técnica de refatoração
possa implicar; isso é muito comum quando eu estou fazendo
técnicas que vão levar para padrões de projeto.
Então, eu, às vezes, eu tenho muitos passos ou então,
algum princípio como o Law Of Demeter, não é?
Está certo?
O LOD, eu vou ter mais do que passo.
Então, esses passos internos, todos eles, eu, eu testo,
nunca fico fazendo sem testar.
Eu vou testando esse passo interno, não é?
Está certo?
A cada desses passos.
Quando terminar, eventualmente, eu já testei tudo,
posso ir direto lá para ver a lista do, dos maus cheiros,
mas normalmente, eu dou uma última testada para fechar isso.
Ou seja, esse ciclo que eu fico fazendo,
vai acontecer algumas técnicas de refatoração que eu escolher.
Quando eu vou testar, antes de ir para olhar a lista de maus cheiros,
se eu já completei ou não, eh, pode ser que não funcione.
O que é que aconteceu?
Eu fiz uma refatoração de forma errada.
De alguma forma, eu fiz alguma coisa errada.
Então, cada desses pontos onde tem, onde estou testando os ciclos,
os passos internos dentro da técnica de refatoração ou quando a técnica toda
já foi feita e eu vou testar como todo, eu posso cometer algum erro.
Está certo?
E aí, o que é que eu faço?
Eu retomo o passo anterior que estava funcionando.
Refaço com mais cuidado, tento descobrir o que foi que causou o problema.
Está certo?
Conserto e vou frente.
Se começar a demorar muito isso, esse processo,
eu paro a refatoração desse mau cheiro e vou para os outros.
Vou tratar disso uma outra hora.
Eu, normalmente, não posso perder mais do que 10 minutos, por exemplo,
nessa tarefa, não é?
As coisas têm que ser muito rápidas e eu deixo para uma outra hora.
Bom, ciclei, passei por todos os maus cheiros, está certo?
Removi todos os maus cheiros aplicando técnicas de refatoração,
chega dado momento que esgotei todos os maus cheiros que tinha identificado.
Pode acontecer, quando eu estou lá aplicando a técnica de refatoração, surjam
alguns novos maus cheiros, que eles são decorrentes das aplicações das técnicas.
Mas aí, eu posso fazer como, fosse passo interno ali e resolver.
Ou então, eu posso colocá-la na lista e fazer mais tarde,
se for conveniente com novo passo.
Remover esse, esse mau cheiro que apareceu,
decorrência da aplicação das técnicas, não é?
Está certo?
Mas, no final quando eu não percebo, mas veja: eu não percebo.
Não quer dizer que não exista mau cheiro ali.
Eu não estou percebendo, ou então, por questão de tempo,
eu não estou querendo eliminar todos os maus cheiros.
Eu saio e ai eu vou ter código, razoavelmente, bem estruturado.
Se eu conseguir passar por todos os maus cheiros que eu reconheci, possivelmente
ele vai estar bem estruturado, bem flexível para aceitar as novas,
a inclusão de novas responsabilidades, novas funcionalidades para novos testes.
Os dois livros que a gente, normalmente,
encontra na praça principalmente para Java, está certo?
Tem o livro do Fowler de refatoração e do William Wake o Bill Wake,
são dois livros muito interessantes, bastante completos.
Esse ciclo, por exemplo, ele fica implícito no, no livro do,
do Fowler, mas fica explícito, o, o Bill Wake,
ele apresenta explicitamente o ciclo e é de lá que eu tive a inspiração
de fazer esse trabalho de apresentação educacional para vocês.
Com isso então, mostramos como o ciclo de refatoração funciona, está certo?
Ele está dentro do, do do ciclo do TDD.
Nós já havíamos mostrado que o ciclo do TDD tem
ciclo para consumir os casos de teste de uma responsabilidade,
para consumir depois as responsabilidades, não é?
Está certo?
E, quando eu chego na refatoração,
internamente eu tenho esse ciclo que nós acabamos de mostrar, que,
de uma forma bastante interessante ele, ele é guiado pelos maus cheiros.
Então, se eu tiver essa capacidade de identificar os maus cheiros, eu tenho uma
facilidade muito grande de identificar as técnicas que eu vou aplicar.
Eu não, não preciso ficar assim: não sei o que eu vou fazer.
Está certo?
Você vai ter alguma ideia de como aplicar e com o tempo,
com o uso, com a aplicação, a identificação desses maus cheiros e
a aplicação de técnicas para resolver esses maus cheiros,
você vai conseguindo fazer isso de uma maneira muito mais rápida e confiável.
Obrigado.
[MÚSICA]