26
Como trabalhar com código legado

Como trabalhar com código legado

Embed Size (px)

DESCRIPTION

Apresentação realizada para a equipe do Reserve, sobre como trabalhar com código legado

Citation preview

Page 1: Como trabalhar com código legado

Como trabalhar com código legado

Page 2: Como trabalhar com código legado

Velho desenvolvimento. Novos paradigmas.

Será que sabemos realmente o que

estamos fazendo?

Page 3: Como trabalhar com código legado

Vou contar um pouco do que funcionou para mim e que pode

funcionar para você também!

Page 4: Como trabalhar com código legado

Ah é só botar breakpoint e tentar descobrir porque está falhando!

Page 5: Como trabalhar com código legado

Refatorar é como soltar um cordão trançado

Page 6: Como trabalhar com código legado

O objetivo ao refatorar um código super-acoplado é

sempre e a todo custo buscar a criação de teste unitários.

Page 7: Como trabalhar com código legado

Se não fizer isso.

Page 8: Como trabalhar com código legado

Se não fizer isso.

Page 9: Como trabalhar com código legado
Page 10: Como trabalhar com código legado

Crie Regionspublic int RotinaAcoplada(boolean teste){ if (! teste){ var dao = new UsuarioDAO(); ... ... ... return dao.listarUsuarios().Count; } return 0;}

Page 11: Como trabalhar com código legado

Crie Regionspublic int RotinaAcoplada(boolean teste){ if (! teste){ var dao = new UsuarioDAO(); #region Quantidade de Usuarios ... #endregion return dao.listarUsuarios().Count; } return 0;}

Page 12: Como trabalhar com código legado

Crie um metodo vazio com o nome da Region

public int QuantidadeUsuarios(){ var dao = new UsuarioDAO(); return dao.listarUsuarios().Count;

}

Page 13: Como trabalhar com código legado

Copie o código da Region para o Método

public int QuantidadeUsuarios(){ var dao = new UsuarioDAO(); return dao.listarUsuarios().Count;

}

Page 14: Como trabalhar com código legado

Neste momento o código não compila e isso agora é bom.

Porque?

Page 15: Como trabalhar com código legado

Chame o novo metodo no lugarpublic int RotinaAcoplada(boolean teste){ if (! teste){ var dao = new UsuarioDAO(); #region Quantidade de Usuarios ... #endregion return dao.listarUsuarios().Count; } return 0;}

Page 16: Como trabalhar com código legado

Chame o novo metodo no lugarpublic int RotinaAcoplada(bool teste){ if (!teste) { return QuantidadeUsuarios();

return 0;}

Page 17: Como trabalhar com código legado

Agora sim está pronto.

Obrigado!

Page 18: Como trabalhar com código legado

O método anterior continua acoplado e não dá

para testar, resolva isso.

Page 19: Como trabalhar com código legado

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.

Page 20: Como trabalhar com código legado

Desacoplando o códigopublic int RotinaAcoplada(bool teste){

if (!teste) { return QuantidadeUsuarios();

return 0;}

RotinaAcoplada(false);

Page 21: Como trabalhar com código legado

Desacoplando o códigopublic int RotinaAcoplada(bool teste, Func<int> query){ if (!teste) { return query();

return 0;}

RotinaAcoplada(false, QuantidadeUsuarios);

Page 22: Como trabalhar com código legado

Testando o códigovoid TesteChamandoTrueRetornaZero (){ Assert.True(RotinaAcoplada(true, null), 0);}

void TesteChamandoFalseChamaFuncao (){ Assert.True(RotinaAcoplada(false, ()=>27), 27);}

Page 23: Como trabalhar com código legado

O código pode não funcionar, se acontecer não tente descobrir o que houve, dá revert e começa

novamente. É mais seguro.

Page 24: Como trabalhar com código legado

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.

Page 25: Como trabalhar com código legado

“Desenvolver software é a arte de fazer maquinas calcularem,

escrevendo poesias!”

Page 26: Como trabalhar com código legado

Obrigado!