Apa pendekatan yang baik untuk membersihkan proyek-proyek lama?

11

Saya punya beberapa perangkat lunak yang saya tulis sekitar 2 tahun yang lalu dan perlu beberapa fitur ditambahkan padanya. Saya telah menyadari bahwa itu dalam kekacauan yang mengerikan, dan saya memiliki keinginan untuk memindahkan semuanya, merapikan, dll. Saya telah membaca artikel Joel pada Perangkat Lunak tentang tidak memulai lagi , jadi bagaimana cara terbaik ke depan?

billy.bob
sumber
Keputusan mana dari saat itu yang tidak Anda setujui hari ini?

Jawaban:

21

Anda memiliki tiga opsi dasar:

  1. Jika aplikasi ini sangat kecil dan berantakan , mulai lagi mungkin actuall menjadi taruhan terbaik Anda.

  2. Refactor .

  3. Hidup dengan kekacauan dan retas dalam fitur tambahan.

Biasanya, opsi (2) adalah taruhan terbaik Anda.

Berapa banyak refactoring yang sebenarnya Anda lakukan tergantung pada sumber daya yang Anda masukkan vs nilai yang Anda dapatkan. Pertanyaan yang akan diajukan meliputi:

  1. Waktu / anggaran apa yang tersedia?
  2. Seberapa banyak modifikasi yang Anda antisipasi di masa depan?
  3. Siapa lagi yang akan melihat kode? (mis. apakah kode yang rusak akan merusak reputasi Anda?)
  4. Apakah ada orang lain yang diharapkan memelihara kode itu?
  5. Alat refactoring apa yang tersedia untuk membantu Anda?
  6. Apa pengalaman Anda tentang refactoring?
  7. Pengalaman apa yang akan Anda dapatkan dari refactoring?
  8. Apa jenis refactoring yang akan memberi Anda manfaat paling banyak?
  9. Tes otomatis apa yang sudah ada? Perlu ditulis?
  10. Berapa banyak pengujian manual yang akan dibutuhkan?
  11. Bagaimana perasaan Anda jika Anda meninggalkan kode apa adanya?

Dalam pengalaman saya, sangat mudah untuk masuk ke kekacauan yang tepat selama sesi refactoring. Pelajaran paling penting yang saya pelajari adalah:

  1. Lakukan satu per satu.
  2. Ambil langkah kecil.
  3. Manfaatkan kontrol sumber Anda dengan baik (sering masuk + sertakan komentar).
  4. Manfaatkan alat refactoring otomatis.
  5. Ketahui IDE.
Kramii
sumber
6
Saya juga ingin menambahkan untuk menghindari kondisi yang rusak terlalu lama. Saya telah melihat banyak proyek open source mati dengan cepat selama penulisan ulang / desain ulang yang ambisius. Proyek non-fungsional membunuh motivasi dengan cepat.
LennyProgrammers
2
Benar. Mengenai penulisan ulang / desain yang ambisius, saya telah melakukan kesalahan ini lebih dari sekali. Sekarang, saya mencoba mengambil langkah-langkah kecil. Saya telah menambahkan saran ini ke jawaban saya.
Kramii
Saya juga menambahkan bahwa Anda tidak boleh memperbaiki apa pun yang tidak memiliki tes tertulis untuk itu. Tahan keinginan untuk memperbaiki semuanya dan hanya fokus pada area yang perlu diubah untuk menambahkan fitur baru. Setelah Anda selesai melakukannya, maka putuskan berapa banyak upaya tambahan yang ingin Anda lakukan untuk memperbaiki sisanya.
TMN
1
@ TMN: Idealnya, ya. Namun, Anda tidak selalu memerlukan tes otomatis. (1) Jika kode telah dikembangkan tanpa tes otomatis maka mungkin tidak mudah / tidak mungkin untuk melakukan tes unit retro-fit sampai Anda sudah melakukan beberapa refactoring (2) Mungkin mahal untuk menulis tes sebelum membuat perubahan lokal yang sepele. (3) Alat refactoring otomatis + fitur IDE dapat membantu mencegah pemecahan kode akibat refactoring.
Kramii
2
Saya akan menambahkan - di kontrol sumber Anda, letakkan semua refactoring pada CABANG terpisah. Ini membantu melakukan langkah bertahap yang masuk akal serta pembandingan blok besar. Ini bisa sangat berharga jika segalanya berubah menjadi custard (YANG AKAN MEREKA).
quick_now
5

Yah, setidaknya cukup refactor sehingga fitur baru dapat ditambahkan dengan aman. Yaitu jangan membuatnya lebih buruk. Sisanya tergantung pada motivasi, anggaran, dan batasan waktu - tetapi waspada untuk sepenuhnya membereskan kekacauan bisa memakan waktu lebih lama daripada membuatnya semula.

pengguna281377
sumber
1
Ini tentu saja Aturan Boyscout yang terkenal: selalu meninggalkan kode dalam keadaan yang lebih baik daripada yang Anda temukan.
Jörg W Mittag
2

Kali ini sambil memperbaiki hal-hal yang pastikan untuk mendokumentasikannya. Lain kali Anda akan melihat kode itu akan jauh lebih mudah untuk mengingat hal-hal itu.

Manoj R
sumber
1

Itu tergantung, apakah akan membutuhkan lebih banyak waktu untuk mempertahankannya karena berantakan, atau menulis ulang sehingga tidak berantakan dan mudah dirawat. Saya pribadi akan melalui ini sekarang, saya mengonversi situs intranet ke ASP.Net MVC3 karena kode lama adalah tumpukan omong kosong (yang saya tulis) karena seharusnya dibuang (ya, saya harus tahu lebih baik ). Tumpukan tua masih ada di sini, dan itu sakit kepala menambahkan fitur dan memperbaiki bug. MVC itu indah dan membuatnya bekerja benar-benar menyenangkan, jadi itu menulis ulang.

Es hitam
sumber