Codificação de Katas para praticar a refatoração de código legado

123

Fiquei bastante interessado em codificar katas nos últimos meses. Acredito que eles são uma ótima maneira de aprimorar minhas habilidades de programação e melhorar a qualidade do código que escrevo no trabalho.

Existem vários lugares onde Katas pode ser encontrado. gostar..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

Eu achei esses excelentes repositórios de Katas ... minhas tentativas em alguns deles foram imensamente recompensadoras.

No entanto, sinto que todos os Kata que vi até agora têm uma breve vinda. Nenhum deles parece me permitir praticar a refatoração de códigos ruins. É ótimo aprender a escrever código limpo da primeira vez ... mas no meu trabalho atual, não tenho muitas oportunidades para escrever um novo código. Em vez disso, estou frequentemente lutando contra o código legado e tentando descobrir como refatorar módulos, eliminar dependências e reduzir o acoplamento.

Como tal, estou atento a alguns Katas que posso usar para aprimorar minhas habilidades de refatorar o código legado e transformá-lo em código limpo.

Alguém sabe de algum que já existe? Sei que tenho muita prática enquanto estou no trabalho ... mas gostaria de aprimorar minhas habilidades a ponto de poder ver rapidamente como separar dependências e separar preocupações em classes que faça demais.

mezoid
fonte
+1 boa pergunta, com informações úteis fornecidas
KLE
Eu gostaria de poder dar mais do que +1 :) Ótima pergunta. Eu nunca pensei sobre esse tipo de prática de programação ...
FallenAvatar 30/09/09
Eu adoraria ver alguém realmente postar um pequeno sistema especificamente para refatoração de código legado ... algo que tem partes em que as refatorações de Michael Feathers brilhariam. Estou procurando algo assim há mais de uma semana. qualquer um? qualquer um? :)
Derick Bailey
Boa pergunta. Você pode praticar o que @Ryan mencionou em sua resposta. Sugiro bifurcar um repositório do giithub: github.com/garora/TDD-Katas Você pode entrar no histórico e verificar como esses Katas são refatorados.
Gaurav Aroraa

Respostas:

92

Não conheço um site que os catalogue diretamente, mas uma estratégia que usei ocasionalmente é a seguinte:

  1. Encontre um projeto de código aberto antigo, pequeno e não mantido no sourceforge
  2. Faça o download, faça-o compilar / construir / executar
  3. Leia a documentação, veja o código
  4. Use as técnicas em Trabalhando Efetivamente com Código Legado para testá-lo em parte
  5. Refatorar essa peça, talvez corrigindo bugs e adicionando recursos ao longo do caminho
  6. Repita as etapas 4 a 6

Quando você encontrar uma parte que foi especialmente desafiadora, jogue fora seu trabalho e repita-o algumas vezes para reforçar suas habilidades.

Isso não apenas pratica a refatoração, mas outras habilidades, como leitura de código, teste e tratamento de processos de construção.

O problema mais difícil é encontrar um projeto no qual você esteja interessado o suficiente para continuar trabalhando. O último em que trabalhei foi uma biblioteca python para programação genética, e o atual em que estou trabalhando é uma biblioteca IRC para Java.

Ryan
fonte
4
+1 sugestão muito interessante. Como você disse, o mais complicado é encontrar um projeto apropriado. Vou dar muita consideração a este. Talvez se eu, ou outros, encontrar alguns que são muito úteis que poderiam ser salvas e documentado em algum lugar como um Kata ...
mezoid
3
"Lidando com o código legado" - você quer dizer "Trabalhando efetivamente com o código legado"? amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/…
TrueWill
1
Sim, quero dizer "Trabalhando efetivamente com o código herdado". Obrigado pela captura!
Ryan Ryan
21

Sinto-me como um necromante respondendo a um tópico tão antigo, mas há uma coisa que faria uma adição digna - Retiro de Código Legado .

A idéia é fazer um Retiro de Código com código legado e tentar praticar as próprias técnicas para lidar com isso, mas não vejo nada que possa proibi-lo de simplesmente usar o código preparado e praticar sozinho. Apenas usá-lo para criar um Golden Master resulta em uma hora de trabalho e você pode fazer muito mais. Se seu kata geralmente dura cerca de duas horas, eu diria que apenas dividir o que geralmente acontece no LCR em kata fornece quatro coisas diferentes para você trabalhar.

Existe um repositório GitHub do autor da idéia, JB Rainsberger, que contém um sistema legado simples com o qual você deve trabalhar, Trivia Game.

Pela minha experiência como organizador / participante, as pessoas realmente gostaram disso e foi esclarecedor ver o que pode ser um problema em um código legado e onde sua refatoração pode levar você a se desviar (e como!). Aqui está mais um relato de como é, por Andreas Leidig .

LAFK diz Restabelecer Monica
fonte
20

O Emily Bache possui um repositório no github com alguns katas de refatoração: o Reata do Kata de refatoração de Emily Bache . Existem variantes do KataYahtzee e do KataTennis para refatorar. Além disso, ela tem uma variante do Kata da Rosa Dourada, que foi projetado como um kata de refatoração.

Além disso, ela tem o Racing Car Katas em seu repo: Racing Car Kata . O Race Car Katas também inclui bons exercícios para refatoração.

Esses kata têm o código em vários idiomas:

  • C ++
  • C #
  • Java
  • Javascript
  • Pitão
  • Rubi
Steve Clanton
fonte
4
Emily também publicou o livro The Coding Dojo Handbook, que lista os Katas e descreve como iniciar e executar seus próprios dojos de codificação. Eu recomendo o livro: leanpub.com/codingdojohandbook
Christian Maslen
1
Eu usei o livro dela para executar dojos e concordo que é um excelente recurso. Emily também tem um curso relacionado no pluralsight.com/courses/the-coding-dojo.
Steve Clanton