Como trabalhar
com código legado
Velho desenvolvimento.
Novos paradigmas.
Será que sabemos
realmente o que
estamos fazendo?
Vou contar um pouco do que
funcionou para mim e que pode
funcionar para você também!
Ah é só botar breakpoint e tentar
descobrir porque está falhando!
Refatorar é como soltar um
cordão trançado
O objetivo ao refatorar um
código super-acoplado é
sempre e a todo custo buscar
a criação de teste unitários.
Se não fizer isso.
Se não fizer isso.
Como trabalhar com código legado
Crie Regions
public int RotinaAcoplada(boolean teste){
if (! teste){
var dao = new UsuarioDAO();
...
...
...
return dao.listarUsuarios().Count;
}
return 0;
}
Crie Regions
public int RotinaAcoplada(boolean teste){
if (! teste){
var dao = new UsuarioDAO();
#region Quantidade de Usuarios
...
#endregion
return dao.listarUsuarios().Count;
}
return 0;
}
Crie um metodo vazio com o nome da Region
public int QuantidadeUsuarios(){
var dao = new UsuarioDAO();
return dao.listarUsuarios().Count;
}
Copie o código da Region para o Método
public int QuantidadeUsuarios(){
var dao = new UsuarioDAO();
return dao.listarUsuarios().Count;
}
Neste momento o código não
compila e isso agora é bom.
Porque?
Chame o novo metodo no lugar
public int RotinaAcoplada(boolean teste){
if (! teste){
var dao = new UsuarioDAO();
#region Quantidade de Usuarios
...
#endregion
return dao.listarUsuarios().Count;
}
return 0;
}
Chame o novo metodo no lugar
public int RotinaAcoplada(bool teste){
if (!teste) {
return QuantidadeUsuarios();
return 0;
}
Agora sim está pronto.
Obrigado!
O método
anterior continua
acoplado e não dá
para testar,
resolva isso.
Como o Tiago não tá vendo vou
dar uma dica.
Passe as necessidades do código
como parametro da função, o
codigo fica mais limpo inclusive.
Desacoplando o código
public int RotinaAcoplada(bool teste){
if (!teste) {
return QuantidadeUsuarios();
return 0;
}
RotinaAcoplada(false);
Desacoplando o código
public int RotinaAcoplada(bool teste,
Func<int> query){
if (!teste) {
return query();
return 0;
}
RotinaAcoplada(false, QuantidadeUsuarios);
Testando o código
void TesteChamandoTrueRetornaZero (){
Assert.True(RotinaAcoplada(true, null), 0);
}
void TesteChamandoFalseChamaFuncao (){
Assert.True(RotinaAcoplada(false, ()=>27), 27);
}
O código pode não funcionar, se
acontecer não tente descobrir o
que houve, dá revert e começa
novamente. É mais seguro.
Código legado é aquele que não
tem testes, neste caso é como uma
rocha, que deve ser quebrada em
pedaços até ser possível testar,
caso ainda não consiga fazer
testes, continue quebrando até
conseguir.
“Desenvolver software é a arte de
fazer maquinas calcularem,
escrevendo poesias!”
Obrigado!

Mais conteúdo relacionado

PDF
Frameworks para C 3º DeSif
PDF
Fábrica Simples - Padrões de Projeto
PPTX
PPT
Testes com JUnit
PPTX
Curso lógica de programação
PPT
Introdução a linguagem c 2_97_2003
PPTX
Estruturas de dados com C++ e STL
PPTX
Light Talk sobre JavaScript Funcional
Frameworks para C 3º DeSif
Fábrica Simples - Padrões de Projeto
Testes com JUnit
Curso lógica de programação
Introdução a linguagem c 2_97_2003
Estruturas de dados com C++ e STL
Light Talk sobre JavaScript Funcional

Destaque (9)

PPT
Complexidade Ciclomatica
PPT
Truck Factor
PPTX
Art History TDH Final Presentation
PPTX
Slides - O que é Legado? - QCon Rio
PDF
[QConSP] Estrangulando o Legado na SoundCloud
ODP
TDD - Algumas lições aprendidas com o livro GOOS
PDF
Codigo legado fisl
PDF
Is this how you hate unit testing?
PDF
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Complexidade Ciclomatica
Truck Factor
Art History TDH Final Presentation
Slides - O que é Legado? - QCon Rio
[QConSP] Estrangulando o Legado na SoundCloud
TDD - Algumas lições aprendidas com o livro GOOS
Codigo legado fisl
Is this how you hate unit testing?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Anúncio

Como trabalhar com código legado

  • 2. Velho desenvolvimento. Novos paradigmas. Será que sabemos realmente o que estamos fazendo?
  • 3. Vou contar um pouco do que funcionou para mim e que pode funcionar para você também!
  • 4. Ah é só botar breakpoint e tentar descobrir porque está falhando!
  • 5. Refatorar é como soltar um cordão trançado
  • 6. O objetivo ao refatorar um código super-acoplado é sempre e a todo custo buscar a criação de teste unitários.
  • 10. Crie Regions public int RotinaAcoplada(boolean teste){ if (! teste){ var dao = new UsuarioDAO(); ... ... ... return dao.listarUsuarios().Count; } return 0; }
  • 11. Crie Regions public int RotinaAcoplada(boolean teste){ if (! teste){ var dao = new UsuarioDAO(); #region Quantidade de Usuarios ... #endregion return dao.listarUsuarios().Count; } return 0; }
  • 12. Crie um metodo vazio com o nome da Region public int QuantidadeUsuarios(){ var dao = new UsuarioDAO(); return dao.listarUsuarios().Count; }
  • 13. Copie o código da Region para o Método public int QuantidadeUsuarios(){ var dao = new UsuarioDAO(); return dao.listarUsuarios().Count; }
  • 14. Neste momento o código não compila e isso agora é bom. Porque?
  • 15. Chame o novo metodo no lugar public int RotinaAcoplada(boolean teste){ if (! teste){ var dao = new UsuarioDAO(); #region Quantidade de Usuarios ... #endregion return dao.listarUsuarios().Count; } return 0; }
  • 16. Chame o novo metodo no lugar public int RotinaAcoplada(bool teste){ if (!teste) { return QuantidadeUsuarios(); return 0; }
  • 17. Agora sim está pronto. Obrigado!
  • 18. O método anterior continua acoplado e não dá para testar, resolva isso.
  • 19. Como o Tiago não tá vendo vou dar uma dica. Passe as necessidades do código como parametro da função, o codigo fica mais limpo inclusive.
  • 20. Desacoplando o código public int RotinaAcoplada(bool teste){ if (!teste) { return QuantidadeUsuarios(); return 0; } RotinaAcoplada(false);
  • 21. Desacoplando o código public int RotinaAcoplada(bool teste, Func<int> query){ if (!teste) { return query(); return 0; } RotinaAcoplada(false, QuantidadeUsuarios);
  • 22. Testando o código void TesteChamandoTrueRetornaZero (){ Assert.True(RotinaAcoplada(true, null), 0); } void TesteChamandoFalseChamaFuncao (){ Assert.True(RotinaAcoplada(false, ()=>27), 27); }
  • 23. O código pode não funcionar, se acontecer não tente descobrir o que houve, dá revert e começa novamente. É mais seguro.
  • 24. Código legado é aquele que não tem testes, neste caso é como uma rocha, que deve ser quebrada em pedaços até ser possível testar, caso ainda não consiga fazer testes, continue quebrando até conseguir.
  • 25. “Desenvolver software é a arte de fazer maquinas calcularem, escrevendo poesias!”