Coding Katas untuk mempraktikkan pemfaktoran ulang kode lama


123

Saya cukup tertarik untuk mengkodekan kata dalam beberapa bulan terakhir. Saya yakin ini adalah cara yang bagus untuk mengasah keterampilan pemrograman saya dan meningkatkan kualitas kode yang saya tulis saat bekerja.

Ada banyak tempat di mana Katas dapat ditemukan. Suka..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

Saya telah menemukan ini sebagai repositori Katas yang sangat baik ... usaha saya pada beberapa di antaranya sangat bermanfaat.

Namun, saya merasa bahwa semua Kata yang saya lihat sejauh ini memiliki satu kekurangan. Tak satu pun dari mereka tampaknya mengizinkan saya untuk mempraktikkan refactoring kode buruk. Sangat menyenangkan mempelajari cara menulis kode yang bersih untuk pertama kalinya ... tetapi dalam pekerjaan saya saat ini, saya tidak memiliki banyak kesempatan untuk menulis kode baru. Sebaliknya saya sering berjuang melawan kode lama dan mencoba mencari cara bagaimana modul refactor, menghilangkan ketergantungan, dan mengurangi kopling.

Karena itu, saya sedang mencari beberapa Katas yang dapat saya gunakan untuk mengasah keterampilan saya dalam memfaktorkan ulang kode lama dan mengubahnya menjadi kode yang bersih.

Apakah ada yang tahu yang sudah ada? Saya tahu saya mendapatkan banyak latihan saat saya sedang bekerja ... tetapi saya ingin mengasah keterampilan saya ke titik di mana saya dapat dengan cepat melihat bagaimana memisahkan ketergantungan dan masalah terpisah di kelas yang melakukan terlalu banyak.


+1 pertanyaan bagus, dengan informasi berguna yang disediakan
KLE

Saya berharap saya bisa memberi lebih dari +1 :) Pertanyaan bagus. Saya tidak pernah berpikir tentang latihan pemrograman semacam ini ...
FallenAvatar

Saya senang melihat seseorang benar-benar memposting sistem kecil khusus untuk refactoring kode warisan ... sesuatu yang memiliki bagian di mana refactorings Michael Feathers akan bersinar. Saya telah mencari sesuatu seperti ini selama lebih dari seminggu sekarang. siapa saja? siapa saja? :)
Derick Bailey

Pertanyaan bagus. Kalian bisa mempraktekkan apa yang @Ryan sebutkan dalam balasannya. Saya menyarankan untuk membuat repositori giithub: github.com/garora/TDD-Katas Anda dapat melihat riwayat dan memeriksa bagaimana Katas ini dapat difaktorisasi ulang .
Gaurav Aroraa

Jawaban:


92

Saya tidak tahu situs yang mengkatalogkannya secara langsung, tetapi satu strategi yang saya gunakan pada kesempatan ini adalah:

  1. Temukan proyek open source lama, kecil, dan tidak terawat di sourceforge
  2. Unduh, dapatkan untuk dikompilasi / dibangun / dijalankan
  3. Baca dokumentasinya, rasakan kodenya
  4. Gunakan teknik dalam Bekerja Secara Efektif dengan Kode Warisan untuk menguji sebagian darinya
  5. Refactor bagian itu, mungkin memperbaiki bug dan menambahkan fitur di sepanjang jalan
  6. Ulangi langkah 4 hingga 6

Ketika Anda menemukan bagian yang sangat menantang, buang pekerjaan Anda dan ulangi beberapa kali untuk memperkuat keterampilan Anda.

Ini tidak hanya melatih pemfaktoran ulang, tetapi keterampilan lain seperti membaca kode, menguji, dan menangani proses pembangunan.

Masalah tersulit adalah menemukan sebuah proyek yang Anda cukup tertarik untuk terus bekerja. Yang terakhir saya kerjakan adalah perpustakaan python untuk pemrograman genetik, dan yang saat ini saya kerjakan adalah perpustakaan IRC untuk Java.


4
+1 saran yang sangat menarik. Seperti yang Anda katakan, hal yang sulit adalah menemukan proyek yang sesuai. Saya akan memberikan banyak pertimbangan. Mungkin jika saya, atau orang lain, menemukan beberapa yang sangat berguna itu dapat disimpan dan didokumentasikan di suatu tempat sebagai Kata ...
mezoid

3
"Berurusan dengan Kode Lama" - maksud Anda "Bekerja Secara Efektif dengan Kode Lama"? amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/…
TrueWill

1
Ya, maksud saya "Bekerja Secara Efektif dengan Kode Lawas". Terima kasih atas tangkapannya!
Ryan

21

Saya merasa seperti ahli nujum membalas utas lama seperti itu, tetapi ada satu hal yang akan membuat tambahan yang layak - Retret Kode Warisan .

Idenya adalah mengadakan Retret Kode dengan kode warisan dan mencoba mempraktikkan teknik-teknik untuk mengatasinya, tetapi saya tidak dapat melihat apa pun yang akan melarang Anda untuk hanya menggunakan kode yang disiapkan dan berlatih dengannya sendiri. Hanya menggunakannya untuk membuat Master Emas menghasilkan satu jam kerja, dan masih banyak lagi yang dapat Anda lakukan. Jika kata Anda biasanya bertahan sekitar 2 jam, saya akan mengatakan hanya dengan membagi apa yang biasanya terjadi di LCR menjadi kata memberi Anda empat hal berbeda untuk dikerjakan.

Ada gudang GitHub oleh penulis ide, JB Rainsberger, yang berisi sistem warisan sederhana yang akan Anda gunakan, Game Trivia.

Dari pengalaman saya sebagai penyelenggara / peserta, orang-orang sangat menyukai ini dan sangat mencerahkan untuk melihat apa yang bisa menjadi masalah dalam kode warisan dan di mana refactoring Anda dapat menyesatkan Anda (dan bagaimana!). Inilah akun lain tentang bagaimana tampilannya, oleh Andreas Leidig .


20

Emily Bache memiliki repositori github dengan beberapa kata refactoring: Kata Repo Refactoring Emily Bache . Ada varian KataYahtzee dan KataTennis untuk refactor. Juga, dia memiliki varian dari Kata Mawar Emas, yang dirancang sebagai kata refactoring.

Juga, dia memiliki Racing Car Katas di reponya: Racing Car Kata . Race Car Katas juga mencakup latihan yang baik untuk refactoring.

Kata-kata tersebut memiliki kode dalam berbagai bahasa:

  • C ++
  • C #
  • Jawa
  • Javascript
  • Python
  • Rubi

4
Emily juga telah menerbitkan buku The Coding Dojo Handbook yang mencantumkan Katas dan menjelaskan bagaimana memulai dan menjalankan dojo pengkodean Anda sendiri. Saya sangat merekomendasikan buku ini: leanpub.com/codingdojohandbook
Christian Maslen

1
Saya telah menggunakan bukunya untuk menjalankan dojo, dan saya setuju bahwa itu adalah sumber yang bagus. Emily juga memiliki kursus terkait di pluralsight.com/courses/the-coding-dojo.
Steve Clanton
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.