00:00:00
[Música]
00:00:08
Olá eu sou o professor Marcelo Fantinato
00:00:10
Esta é a disciplina de engenharia de
00:00:12
software e agora nós vamos com a aula
00:00:15
sobre
00:00:17
refaturar bom nós
00:00:20
eh temos vindo falando sobre as etapas
00:00:25
do ciclo do processo de desenvolvimento
00:00:28
de software né Sempre pensando em pega
00:00:31
um artefato melhora passa pro próximo
00:00:33
faz alguma coisa nova vai passando vai
00:00:36
passando para poder chegar lá na
00:00:39
programação propriamente dita no
00:00:41
desenvolvimento propriamente dito para
00:00:44
lá na frente entregar o software pronto
00:00:46
então cada etapa que a gente passa a
00:00:48
gente tá evoluindo né Trabalhando um um
00:00:52
passo a mais mas agora nessa aula a
00:00:55
gente vai falar de refatoração de
00:00:56
software Isso significa que a gente vai
00:01:00
um pouco para refazer algo né o termo
00:01:03
refatoração de software essa palavrinha
00:01:06
re esse prefixo re ele significa re de
00:01:10
refazer né e eh o re significa o prefixo
00:01:15
re quando aparece em algum lugar ele
00:01:18
significa fazer duas vezes então
00:01:21
refaturar faturar significa fabricar e o
00:01:24
refaturar é refabricar então é você
00:01:26
refazer Mas por que nós queremos refazer
00:01:30
algo porque obviamente eh pode ser
00:01:33
melhorado então a ideia de refaturar
00:01:36
refabricar refazer o software é porque
00:01:39
nós temos condições nós entendemos que
00:01:42
existe condição eh de melhorar então a
00:01:45
ideia mas esse melhorar não significa
00:01:48
melhorar o o a funcionalidade em si tá a
00:01:52
gente não entende que está errado em
00:01:54
termos de resultado E nós queremos
00:01:57
corrigir porque isso aí é o papel do
00:01:59
teste de software testo identifico um
00:02:03
defeito e vou corrigir tá ou refaturar
00:02:06
não veja só a definição de refaturar uma
00:02:09
alteração feita na estrutura interna do
00:02:12
software para torná-lo mais fácil de ser
00:02:16
entendido e menos Custoso de ser
00:02:18
modificado sem alterar seu comportamento
00:02:21
observável então a ideia de refaturar o
00:02:24
software é alterar a estrutura interna
00:02:27
mas não mudar nada na capa dele então
00:02:30
pro usuário final quem tá ali usando o
00:02:34
software usando uma funcionalidade
00:02:37
usando a interface o resultado de uma
00:02:39
faturação é nada ele não vê uma
00:02:42
diferença não entrou um botão novo não
00:02:44
mudou uma cor não alterou nada certo
00:02:48
então refaturar é alterar a estrutura
00:02:50
interna Mas para que eu vou querer fazer
00:02:52
isso para que eu vou querer alterar a
00:02:54
estrutura interna de um software se pro
00:02:56
usuário não vai mudar nada como já tá
00:02:59
escrito aí né para deixar ele mais fácil
00:03:02
de ser
00:03:03
entendido para quem pro próprio
00:03:05
desenvolvedor né não é em termos de
00:03:08
usabilidade do do pro pro usuário não é
00:03:11
deixar ele mais fácil de ser entendido
00:03:13
para quem vai usá-lo mas deixar mais
00:03:16
fácil el de ser entendido pro próprio
00:03:19
desenvolvedor e menos Custoso de ser e
00:03:22
consequentemente menos Custoso de ser
00:03:23
modificado então a gente assume que
00:03:26
alguém um dia vai ter que dar manutenção
00:03:27
nesse software seja para corrigir um
00:03:29
defeito que foi pego eh ou
00:03:33
para adicionar uma nova função bom E daí
00:03:37
eh esse software tá fácil de ser
00:03:39
entendido o código
00:03:41
Ah talvez não então A ideia é vamos
00:03:45
melhorando o software eh fazendo
00:03:48
refaturar
00:03:59
tirar comentários que não servem para
00:04:02
nada ou que estão errados por exemplo eh
00:04:04
tirar eh variáveis que não estão sendo
00:04:07
usadas é mais do que isso certo é uma
00:04:10
técnica para limpar sim o código mas de
00:04:13
forma eficiente e controlada então é
00:04:16
você na engenharia de software a gente
00:04:18
pensa em fazer tudo de forma sistemática
00:04:20
aqui é fazer uma limpeza de forma
00:04:22
sistemática certo então
00:04:26
ã Por que por mas por que nós queremos
00:04:29
fazer isso eu já comentei um pouco né
00:04:31
para poder deixar o software mais fácil
00:04:33
de entender pensando na manutenção
00:04:35
futura Mas por que isso acontece porque
00:04:38
eu vou melhorar o próprio projeto do
00:04:40
software lembra daquele projeto que a
00:04:42
gente falou em aulas anteriores
00:04:43
inclusive que a gente pode seguir alguns
00:04:46
estilos arquiteturais algumas boas
00:04:48
práticas então se eu tiver refatorando
00:04:50
eu vou poder organizar o o software de
00:04:53
uma forma melhor numa arquitetura melhor
00:04:55
eu posso pegar um componente quebrar em
00:04:57
dois eu posso quebrar uma classe em duas
00:04:59
posso juntar duas classes em uma à
00:05:01
medida que eu vou percebendo que as
00:05:03
coisas poderiam ser melhor não é porque
00:05:05
do não foi feito da melhor forma eh na
00:05:07
primeira vez que eu não posso resolver
00:05:09
isso depois certo
00:05:11
à Não é por e aqui a gente não vai usar
00:05:14
aquela ideia do eh in time que tá
00:05:17
ganhando não se mexe né o software pode
00:05:19
estar funcionando bem do ponto de vista
00:05:21
pro usuário mas ainda assim eu posso
00:05:23
querer mexer nele sim
00:05:25
eh assumindo que ele vai continuar
00:05:28
funcionando da mesma forma pro Us clo
00:05:30
Mas vou deixar ele com uma estrutura
00:05:31
interna melhor ainda pra hora que for
00:05:34
precisar de fazer uma manutenção nele
00:05:36
certo então eu vou tornar o o software
00:05:39
mais fácil de
00:05:40
entender e consequentemente ajudar a
00:05:43
encontrar defeitos e falhas na verdade
00:05:46
além de eu pensar no futuro enquanto eu
00:05:48
estou refatorando eu posso acabar
00:05:50
encontrando defeitos e falhas eh como e
00:05:53
por tabela né como um efeito colateral
00:05:55
eu estou mexendo só pensando em
00:05:58
reestruturar e eu começo a olhar uma
00:06:01
coisa e falo Nossa mas isso aqui tá com
00:06:03
uma cara estranha e como é que Ninguém
00:06:05
percebeu usando o software que acontece
00:06:07
dessa forma e aí eu acabo percebendo e
00:06:09
obviamente eu corrijo não é o objetivo
00:06:12
principal mas acaba sendo eh um um
00:06:16
efeito colateral bom certo e ajuda a
00:06:19
programar mais rapidamente porque o o
00:06:21
programador que adota a técnica de
00:06:24
refatoração ele acaba desenvolvendo
00:06:26
ainda mais as suas habilidades e
00:06:28
técnicas de programa
00:06:30
bom então Eh com a refat ela permite
00:06:35
pensar em um Ah sim então ela permite
00:06:37
pensar em um projeto e eh se você assume
00:06:40
que você vai fazer refatoração com o
00:06:42
passar do tempo você não precisa ser tão
00:06:45
perfeccionista na primeira vez você não
00:06:47
precisa pensar eu tenho que ter a melhor
00:06:49
arquitetura possível eu tenho que ter A
00:06:51
melhor solução possível porque eu tenho
00:06:53
que acertar de primeira não você se
00:06:56
permite a ter uma solução razo
00:07:00
na primeira vez sabendo que com o passar
00:07:03
do tempo você vai melhorá-la certo isso
00:07:06
é é bem alinhado inclusive com a a as
00:07:09
ideias dos métodos ágeis né que você vai
00:07:12
incrementando melhorando eh por meio de
00:07:15
diferentes iterações
00:07:17
bom então ah é justamente o que eu
00:07:21
acabei de falar e tava a informação
00:07:22
também um pouco aqui embaixo né A medida
00:07:24
que a solução é construída o problema é
00:07:26
melhor compreendido uma solução melhor
00:07:28
diferente da original pode ser percebida
00:07:31
lembrando uma solução de código uma
00:07:34
solução de estrutura interna cujo
00:07:37
resultado pro usuário é o mesmo então
00:07:40
você pode ter um algoritmo de ordenação
00:07:43
diferente mas o resultado é a ordenação
00:07:46
certo então não é que você a ideia aqui
00:07:49
da refatoração não é ter um um uma
00:07:52
funcionalidade diferente é diferentes
00:07:54
formas de implementar a melhor a mesma
00:07:57
funcionalidade mas daí quando você vai
00:08:00
refaturar então eu fiz a primeira
00:08:03
solução sabendo que ela não é a perfeita
00:08:05
não é a melhor possível Quando é que eu
00:08:07
vou pensar em refaturar Bom na verdade é
00:08:10
uma coisa que a gente deveria fazer o
00:08:11
tempo todo em pequenas quantidades
00:08:14
sempre que possível vai lá e
00:08:17
refatorar um tempinho refatorações
00:08:30
vez tá não ficou tão contente voltou do
00:08:33
código para fazer uma consulta olhou e
00:08:37
falou assim nossa isso aqui não ficou
00:08:39
legal né bom paciência voltou nele de
00:08:43
novo para fazer uma outra consulta ou
00:08:45
até para corrigir um defeito que alguém
00:08:46
pegou ah não terceira vez que eu tô
00:08:49
vendo esse código não tô contente com
00:08:51
ele vou refaturar isso é a lei das três
00:08:55
vezes e você refat a terceira vez que
00:08:57
você olhou pro código e sabe que ele não
00:09:00
é a melhor solução possível e que tem
00:09:02
uma solução melhor você refat então é
00:09:05
uma dica uma boa prática refatorar na
00:09:07
terceira vez que você revisita na
00:09:10
verdade eh na terceira vez que você tem
00:09:12
contato com o código considerando que a
00:09:14
primeira vez é quando você fez ele ou
00:09:16
que alguém fez né porque você não é o
00:09:18
dono do código você pode
00:09:20
eh refaturar o código que uma outra
00:09:23
pessoa fez obviamente aliás Esse é um
00:09:25
dos princípios dos métodos ágeis a
00:09:29
se você tiver acrescentando uma função
00:09:32
você pode aproveitar para refaturar
00:09:34
aquela parte do código aquele componente
00:09:37
eh quando você tiver consertando um
00:09:39
defeito na verdade foram os dois
00:09:41
exemplos de quando do três vezes e você
00:09:43
refat né porque você estaria trabalhando
00:09:46
naquela parte do código novamente porque
00:09:48
você tá acrescentando uma função porque
00:09:49
você tá precisando consertar um defeito
00:09:51
Eh Ou quando você tiver trabalhando com
00:09:54
revisão de código
00:09:55
ah alguém eh fez um código e um outro
00:09:59
alguém vai lá revisar aquele código E aí
00:10:03
essa pessoa já tá revisando Por que não
00:10:05
refaturar se ela perceber possibilidade
00:10:08
de
00:10:10
refaturar tem limitações por exemplo eh
00:10:13
é difícil refaturar o banco de dados tá
00:10:15
porque quando eu falo aqui em
00:10:18
refaturar do software Lembra daquela
00:10:20
definição que software é tudo software
00:10:23
não é apenas o código programado na
00:10:26
linguagem Java por exemplo software é
00:10:28
tudo inclus inclusive requisitos o
00:10:30
projeto da arquitetura então você pode
00:10:32
refaturar até o a especificação de
00:10:34
requisitos melhorar até a especificação
00:10:36
de requisitos se você achar apropriado
00:10:38
você poderia refaturar o banco de dados
00:10:41
mas é bem difícil refaturar o banco de
00:10:44
dados eh difícil refaturar a interface
00:10:47
entre objetos Então aquela interface lá
00:10:50
da classe que para ser invocado tem que
00:10:53
passar Tais parâmetros e retorna Tais
00:10:55
parâmetros isso aí é difícil porque
00:10:57
normalmente ao refatorar você acaba
00:10:59
criando problemas de interface de
00:11:02
comunicação com outros objetos outros
00:11:04
componentes pode diminuir o desempenho
00:11:06
do software Às vezes você opta por
00:11:10
deixar o software mais fácil de entender
00:11:13
mas para isso você acaba tendo que optar
00:11:15
por uma por uma uma sequência de de
00:11:18
comandos por exemplo que é mais lento
00:11:21
então às vezes isso acontece você se se
00:11:24
depara com e agora eu vou trocar esse
00:11:27
conjunto de comandos que essa sequência
00:11:30
que ninguém entende a hora que tiver que
00:11:31
dar manutenção por essa que é bem mais
00:11:34
fácil de entender mas que deixa o
00:11:36
software mais lento sim ou não
00:11:39
eh bom eh o livro que eu vou eh mostrar
00:11:44
aqui para vocês no final como referência
00:11:46
dessa vez não é o livro que eu tenho
00:11:48
usado nas aulas anteriores e ele mostra
00:11:51
um catálogo de refatoração o que
00:11:54
significa isso ideias sugestões isso que
00:11:58
é o legal esse que é o interessante né
00:12:00
naquela ideia de padrões de de boas
00:12:03
práticas existe um catálogo de
00:12:05
refatoração eh existem diferentes
00:12:07
catálogos de diferentes autores então
00:12:10
pessoas que já T uma experiência de
00:12:13
muitos anos décadas eh e que fazem
00:12:16
refatoração normalmente elas né porque
00:12:19
elas são muito legais elas gostam de de
00:12:21
de de contribuir com a comunidade de
00:12:23
engenharia de software de Engenheiros e
00:12:25
de desenvolvedores elas documentam falam
00:12:28
Olha uma oração que eu costumo fazer é
00:12:30
essa eu procuro por tal tipo de coisa
00:12:33
para alterar aquele tipo de coisa e aí
00:12:36
existe no livro que que tá disponível lá
00:12:38
como material para vocês um catálogo de
00:12:42
Sete Tipos isso aqui são tipos de
00:12:45
refatoração compondo métodos movendo
00:12:48
recursos entre objetos organizando dados
00:12:51
simplificando expressões condicionais
00:12:54
tornando as chamadas de métodos mais
00:12:56
simples lidando com generalização e
00:12:59
refur e e e um grupo que são as
00:13:14
refaturar algumas refatorações para quem
00:13:17
em orientação a sim são todas
00:13:19
refatorações de orientação a objetos é
00:13:23
um um aviso que eu devia ter feito lá no
00:13:24
início da aula mas sim então por exemplo
00:13:28
para quem está lidando com generalização
00:13:30
especialização existe aqui algumas eh
00:13:33
algumas ideias de refatoração específica
00:13:35
para isso E aí
00:13:38
ah agora sim né são as o o o só aqui eu
00:13:43
estou apenas mostrando só estou listando
00:13:45
né E aí
00:13:46
eh Vocês precisam então olhar lá no
00:13:49
material no livro
00:13:51
eh pelo menos uma para vocês entenderem
00:13:54
exatamente como é um a ideia né O que
00:13:57
significa exatamente a a a sugestão
00:14:00
desses autores aqui para fazer a
00:14:02
refatoração eh mas por exemplo em termos
00:14:06
de eh compor métodos que é o que era o
00:14:09
primeiro daqui né olha primeiro aqui era
00:14:12
compor métodos o primeiro de sete é um
00:14:15
grupo que tem na verdade
00:14:17
eh nove sugestões para refatoração um
00:14:22
deles é internalizar Método então quando
00:14:25
é que você deveria identificar métodos
00:14:28
que você deveria considerar a
00:14:30
possibilidade de internalizar essa esses
00:14:34
métodos Quando que você deveria pensar
00:14:36
em dividir variável temporária quando
00:14:39
você deveria substituir variável
00:14:41
temporária por consulta quando você
00:14:44
deveria eh substituir um método por um
00:14:47
objeto método
00:14:49
ah enfim o catálogo ele traz a a a a
00:14:55
descrição de cada um desses né e você
00:14:59
conhecendo e entendendo você fica com
00:15:02
aquilo na sua mente e quando você se
00:15:03
depara com uma situação daquela você
00:15:06
pode então considerar fazer essa
00:15:07
refatoração
00:15:10
Ah aqui oito sobre o segundo grupo que é
00:15:14
movendo recursos entre
00:15:16
objetos organizando dados então por
00:15:18
exemplo
00:15:21
eh substituir vetor por objeto ah
00:15:25
transformar a associação unidirecional
00:15:28
em direcional ou o contrário
00:15:31
Eh claro que ele vai explicar lá olha
00:15:34
uma associação unidirecional é mais
00:15:37
usada para isso a bidirecional O melhor
00:15:39
é que ela seja usada para isso então se
00:15:41
você tá usando errado considere
00:15:43
eh trocar né
00:15:46
Ah esse aqui é super grande tem 16
00:15:49
ideias né sobre organização de dados
00:15:52
ah simplificando expressões
00:15:55
eh condicionais são oito ideias
00:15:59
no total né Eu acho que são por voltas
00:16:02
de 60 ou 70 ideias de refatoração neste
00:16:07
catálogo aqui do livro que eh eu estou
00:16:11
me baseando para para apresentar essa
00:16:13
aula para vocês certo tornando as
00:16:16
chamadas de métodos mais simples Tem um
00:16:18
aqui que é simplesmente renomear o
00:16:20
método então considere renomear o método
00:16:25
claro que também como nos outros casos o
00:16:28
o autor é aqui explica né quando você
00:16:30
deveria considerar renomear o método e
00:16:32
que tipo de padrão seria bom você pensar
00:16:35
em adotar Ah também é um bom é um bom
00:16:39
conjunto de de ideias aqui de sugestões
00:16:41
são 15 temos também lidando com
00:16:45
generalização que é aquele que eu tinha
00:16:46
destacado lá atrás né então subir Campo
00:16:49
na hierarquia subir método na hierarquia
00:16:52
descer método na hierarquia descer Campo
00:16:54
na hierarquia como a gente tá
00:16:56
trabalhando com generalização e
00:16:57
especialização subir e descer na
00:16:59
hierarquia por exemplo e por fim é um
00:17:03
grupo aqui pequeno de
00:17:12
refaturar O que é né quando cada uma
00:17:15
deve ser usada mas é um catálogo
00:17:17
bastante grande e eh é para ser um livro
00:17:20
de cabeceira né para quem gosta de
00:17:22
engenheira de software e quer se tornar
00:17:24
um engenheiro de software bastante
00:17:26
produtivo eh e melhorar idade do seu
00:17:29
código A ideia é que vocês conheçam
00:17:32
esses esses padrões não mas sim essas eh
00:17:36
esse catálogo de ideias para refatoração
00:17:40
Ah bom então aqui sim a refat a
00:17:44
referência é o livro
00:17:58
é por essa aula é isso
00:18:01
[Música]
00:18:27
obrigado h
00:18:33
[Música]