E aí [Música] o Olá eu sou o professor Marcelo Fantinato Essa é a disciplina de engenharia de software e agora nós vamos com a aula sobre refatoração de software pó nós temos vindo falando sobre as etapas do ciclo do processo de desenvolvimento de software né Sempre pensando em pega um artefato melhora passa para o próximo faz alguma coisa nova vai passando vai passando para poder chegar lá na programação propriamente dita no desenvolvimento propriamente dito para lá na frente entregar o software pronto então cada etapa que a gente passa a gente está evoluindo né Trabalhando uma
um passo a mais mas agora nessa aula a gente vai falar de refatoração de software e significa que a gente vai parar um pouco para refazer algo é o termo refatoração de software essa palavrinha é esse prefixo e ele significa rede refazer né é o rei significa quando o prefixo re quando aparece em algum lugar ele significa fazer duas vezes então refatorar faturar significa fabricar e o refatorar é refabricar então você refazer mas porque nós queremos refazer algo porque obviamente É pode ser melhorado então a ideia de refaturar refabricar refazer o software é porque nós
temos condições nós entendemos que existe condição de melhorar então a ideia mas esse melhorar e não significa melhorar o a funcionalidade em si a gente não entende que está errado em termos de resultado E nós queremos corrigir isso aí é o papel do teste de software texto identifica um defeito e vou corrigir ao refatorar não veja só o refaturar uma alteração feita na estrutura interna do softer para torná-lo mais fácil de ser entendido e menos Custoso de ser modificados sem alterar seu comportamento observável então a ideia de refaturar o software é alterar a estrutura interna
mas não mudar nada na capa dele então para o usuário final quem tá ali ao usando Soster usando uma funcionalidade usando a interface o resultado de uma faturação é nada ele não ver uma diferença não entrou um botão novo não mudou uma cor não alterou nada certo então re-faturar é alterar a estrutura interna mas para que eu vou querer fazer isso para que eu vou querer alterar a estrutura interna de um software se para o usuário não vai mudar nada porque como já tá escrito aí né para deixar ele mais fácil de ser entendido para
quem Para o próprio desenvolvedor tá em termos de usabilidade do grupo para o usuário não é deixar ali mais fácil de ser entendido para quem vai usá-lo mas deixar mais fácil de ser entendido pelo próprio desenvolvedor e menos Custoso descer e consequentemente menos gostoso de ser modificado então a gente assumi que alguém um dia vai ter que dar manutenção nesse softer seja para corrigir um defeito que foi pego ou ou para alta adicionar uma nova função bom E daí é esse só fica essa farra Alice entendido o código a talvez não então A ideia é
vamos melhorando o softer fazendo refatorações para que isso seja alcançado certo Então olha só é mais do que uma apenas uma limpeza de código não apenas limpar tirar comentários que não servem para nada o que estão errados por exemplo é tirar variáveis que não estão sendo O que é mais do que isso certo é uma técnica para limpar assim o código mais de forma eficiente e controlada então é você na engenharia de software a gente pensa em fazer tudo de forma sistemática aqui é fazer uma limpeza de forma sistemática certo então a Porque por mais
porque nós queremos fazer isso eu já comentei um pouco né para poder deixar o software mais fácil de entender pensando na manutenção futura Mas por que isso acontece porque eu vou melhorar o próprio projeto do software lembra daquele projeto que a gente falou em aulas anteriores inclusive que a gente pode seguir alguns estilos arquiteturais algumas boas práticas então se eu tiver refatorando eu vou poder organizar o o software de uma forma melhor numa arquitetura melhor eu posso pegar um componente quebrarem dois eu posso quebrar uma classe em duas possa juntar duas classes em uma à
medida que eu vou percebendo que as coisas poderiam ser melhor não é porque não foi feito da melhor forma a primeira vez que eu não posso resolver isso depois certo ah não é e aqui a gente não vai usar aquela ideia do time que está ganhando não se mexe né o software pode estar funcionando bem no ponto de vista do usuário Mas ainda tem eu posso querer mexer nele sim é assumindo que ele vai continuar funcionando da mesma forma que o usuário mas eu vou deixar ele com uma estrutura interna melhor ainda para hora que
ele for precisar de fazer uma manutenção nele certo então eu vou tornar o software mais fácil de entender o e consequentemente ajudar a encontrar defeitos e falhas na verdade além de Eu a pensar no futuro enquanto estou refatorando eu posso acabar encontrando defeitos e falhas é como é por tabela né como efeito colateral eu estou mexendo só pensando em reestruturá-lo e eu começo olhar uma coisa e falou nossa mas ele só que tá com uma cara Estranha como é que Ninguém percebeu usando o software que acontece dessa forma e aí eu acabei percebendo e obviamente
eu corrijo não é o objetivo principal mas acaba sendo é um efeito colateral bom sério e ajuda a programar mais rapidamente porque o programador que adota a técnica de refatoração ele acaba desenvolvendo ainda mais as suas habilidades e técnicas de programação bom então é com a refatoração ela permite pensar em um proaf Então ela permite pensar em um projeto é se você assume que você a fatoração com o passar do tempo você não precisa ser tão perfeccionista na primeira vez você não precisa pensar eu tenho que ter a melhor arquitetura possível eu tenho que ter
A melhor solução possível porque eu tenho que acertar de primeira não você se permitia ter uma solução razoável na primeira vez sabendo que como passar o tempo você vai melhorá-la certo isso é é bem alinhado inclusive com a as ideias dos métodos ágeis né que você vai incrementando melhorando é por meio de diferentes interações Tá bom então a é justamente o que eu acabei de falar e tava informação também um pouco aqui na embaixo né à medida que a solução é construído problema é melhor compreendido uma solução melhor diferente da original pode ser percebida lembrando
uma solução de código uma solução de estrutura interna uso o resultado para o usuário é o mesmo então você pode ter um algoritmo de ordenação diferente mas o resultado é a ordenação certo então não é que você a ideia aqui da refatoração não é ter um uma funcionalidade diferente é diferente formas de implementar a melhor a mesma funcionalidade Mas e daí quando você vai refaturar então eu fiz a primeira solução sabendo que ela não é a perfeita não é a melhor possível Quando é que eu vou pensar em refaturar Bom na verdade é uma coisa
que a gente deveria fazer o tempo todo em pequenas quantidades sempre que possível vai lá e refeitório um pouquinho sempre que se sobrar um tempinho retorna um pedaço sobre o outro tempinho é fator um outro pedaço então é sempre que você volta para fez o código a primeira vez tá só não ficou tão contente voltou no código para fazer uma consulta olhou e falou assim nossa isso aqui não ficou legal né bom paciência voltou nele de novo para fazer uma outra consulta ou até para corrigir um defeito que alguém pegou a não terceira vez que
eu tô vendo esse código não estou contente com ele vou refatorar isso é a lei das três vezes e você refator a terceira vez que você olhou para o código e sabe que ele não é a melhor solução possível e que tem uma solução melhor você refatorar então é uma dica uma boa prática refaturar na terceira vez que você re visita na verdade na terceira vez que você tem contato com o código considerando que a primeira vez em quando você fez ele ou que alguém fez né porque Quem é o dono do código você pode
refatorar o código uma outra pessoa fez obviamente aliás Esse é um dos princípios dos métodos Ages e a se você tiver acrescentando uma função você pode aproveitar para refaturar aquela parte do código aquele componente é quando você tiver a concertando um defeito na verdade foram os dois exemplos de quando do três vezes e você retorna né porque você estaria trabalhando naquela parte do código novamente porque você tá acrescentando uma função porque você tá precisando consertar um defeito ou quando você tiver trabalhando com revisão de código a alguém fez um código e um outro alguém vai
lá revisar aquele código E aí essa pessoa já está revisando porque não refaturar se ela perceber possibilidade de refatoração agora a refatoração têm limitações por exemplo é difícil refaturar o banco de dados a porque quando eu falo aqui refaturação do código refatoração do Foster Lembra daquela definição que só fica é tudo porta não é apenas o código programado na linguagem Java por exemplo sofre é tu e inclusive requisitos do projeto da arquitetura então você pode refaturar até a especificação de requisitos melhorar até especificação de requisitos se você achar apropriado você poderia refaturar o banco de
dados mas é bem difícil re-faturar o banco de dados é difícil refaturar interface entre objetos Então aquela interface lá da classe que para ser invocado tem que passar Tais parâmetros e retorna Tais parâmetros isso aí é difícil porque normalmente é o refatorar você acaba criando problemas de interface de comunicação com outros objetos outros componentes pode diminuir o desempenho do softer Às vezes você ó fita por deixar o software mais fácil de entender mas para isso você acaba tendo que optar por uma por uma uma sequência de comandos por exemplo que é mais lento então às
vezes isso acontece você fez se depara com o aí agora eu vou trocar esse conjunto e daqui essa sequência que ninguém entende a hora que tiver que da manutenção por essa que é bem mais fácil de entender mas que deixou só ficar mais lento sim ou não e é bom é o livro que eu vou mostrar aqui para vocês no final como referência dessa vez não é o livro que eu tenho usado nas aulas anteriores e ele mostra um catálogo de refatoração significa isso ideias sugestões isso que é o legal isso que eu interessante né
naquela ideia de padrões de boas práticas existe um catálogo de refatoração é existem diferentes catálogos de diferentes autores então pessoas que já tem uma experiência de muitos anos décadas e que fazem refatoração normalmente elas né porque elas são muito legais elas gostam de contribuir com a comunidade de engenharia de software de Engenheiros desenvolvedores elas documentam fala Olha uma refatoração que eu costumo fazer é essa eu procuro por tal tipo de coisa para alterar aquele tipo de coisa e aí existe no livro que que tá disponível o material para vocês um catálogo de Sete Tipos infecção
tipos de refatoração compondo métodos movendo recursos entre objetos organizando dados simplificando expressões condicionais tornando as chamadas de métodos mais simples lidando com generalização e refatura c e e um grupo que são as refatorações grandes tão por exemplo existe um grupo só de lidando com lidando com Ops lidando com generalização algumas refatorações para quem em orientação assim são todas refatorações de orientação a objetos é um aviso o detergente lá no início da aula mas sim então por exemplo para quem está lidando com generalização e especialização e veja aqui algumas algumas ideias de refatoração específica para isso
E aí ah ah agora sim né são as o só que eu estou apenas mostrando só estou listando né E aí é vocês precisam então olhar lá no material no livro é pelo menos uma para vocês entender exatamente como é um A ideia é o que significa exatamente a a sugestão desses autores aqui para fazer refaturação é mais por exemplo em termos de compôr métodos que eu quero primeiro daqui né olha primeira queira com por métodos o primeiro de sete é um grupo que tem na verdade é nove sugestões para refatoração um deles é internalizar
Método então quando é que você deveria identificar métodos que você deveria considerar a possibilidade de internalizar essas esses métodos Quando que você deveria pensar em dividir variável a temporária quando você deveria substituir variável temporária por consulta quando você deveria substituir um método por um objeto método a enfim o catálogo ele traz a descrição de cada um desses né E você conhecendo entendendo você fica com aquilo na sua mente e quando você se depara com uma situação daquela você pode então considerar fazer essa refaturação aqui oito sobre o segundo grupo que é movendo recursos entre objetos
organizando dados então por exemplo é subir substituir diretor por objeto a transformar a associação unidirecional e bidirecional ou o contrário é claro que ele vai explicar lá olha uma associação unidirecional é mais usada para isso a e o melhor é que ela seja usada para isso então se você tá usando errado considere trocar né a esse aqui é super grande tem 16 ideias né sobre organização de dados a simplificando expressões com condicionais são oito ideias no total nessa eu acho que são por volta de 60 ou 70 ideias de refatoração neste catálogo aqui do livro
que eu estou me baseando para apresentar essa aula para vocês certo tornando as chamadas de métodos mais simples Tem um aqui que é simplesmente renomear o método então considere renomear o método claro que também como nos outros casos ou o autor aqui explica né quando você deveria considerar renomear o método e que tipo de padrão seria bom você pensar em adotar a também é um Esse é um bom conjunto de ideias aqui de sugestões são 15 temos também lidando com generalização que aquele um que eu tinha destacado lá atrás né então subir Campo na irá
que ia subir método na hierarquia de ser método na hierarquia de ser Campo na ar Kia como a gente tá trabalhando com generalização e especialização subir e descer na hierarquia por exemplo e por fim é um grupo aqui pequeno de refatorações grandes Eu imagino que há Apenas listando cada uma delas obviamente não fica exatamente claro o que é né quando cada uma deve ser usada mas é um catálogo bastante grande e é ela para ser um livro de cabeceira não é para quem gosta de engenharia de software e quer se tornar um engenheiro de software
bastante produtivo e melhorar a qualidade do seu código a ideia que vocês conheçam esses Padre esses padrões não mas sim essas esse catálogo de ida a apuração a bom então aqui sim a refaturar a referência é o livro refatoração aperfeiçoando O projeto de código existente é do autor Martin fowler é de 2008 Ok então é por essa aula é isso obrigado a [Música] [Música]