Praktik Terbaik untuk Mengganti Nama, Refactoring, dan Mematahkan Perubahan dengan Tim


10

Apa saja Praktik Terbaik untuk refactoring dan penggantian nama di lingkungan tim? Saya membawa ini dengan beberapa skenario dalam pikiran:

  1. Jika pustaka yang umumnya direferensikan dihidupkan kembali untuk memperkenalkan perubahan pada perpustakaan atau proyek apa pun yang merujuknya. Misalnya mengubah sewenang-wenang nama metode.

  2. Jika proyek diganti nama dan solusinya harus dibangun kembali dengan referensi yang diperbarui.

  3. Jika struktur proyek diubah menjadi "lebih teratur" dengan memperkenalkan folder dan memindahkan proyek atau solusi yang ada ke lokasi baru.

Beberapa pemikiran / pertanyaan tambahan:

  1. Haruskah perubahan seperti ini atau apakah rasa sakit yang dihasilkan indikasi struktur menjadi serba salah?

  2. Siapa yang harus bertanggung jawab untuk memperbaiki kesalahan terkait dengan perubahan yang melanggar? Jika pengembang membuat perubahan besar, apakah mereka harus bertanggung jawab untuk masuk ke proyek yang terkena dampak dan memperbaruinya atau haruskah mereka memberi tahu pengembang lain dan meminta mereka untuk mengubah sesuatu?

  3. Apakah ini sesuatu yang dapat dilakukan berdasarkan jadwal atau itu sesuatu yang harus dilakukan sesering mungkin? Jika refactoring ditunda terlalu lama, semakin sulit untuk melakukan rekonsiliasi tetapi pada saat yang sama menghabiskan 1 jam peningkatan memperbaiki bangunan karena perubahan yang terjadi di tempat lain.

  4. Apakah ini masalah proses komunikasi formal atau dapatkah itu organik?


1
Biaya setiap orang $ 1 untuk setiap kali mereka melanggar bangunan ... Anda akan terkejut betapa banyak itu membatasi kesalahan ceroboh.
Berin Loritsch

Memberi +1 karena komentar Anda menginspirasi 3 jawaban luar biasa - dan berbeda - beda.
Carl Manaster

Jawaban:


13

Setiap skenario yang Anda daftarkan berada di bawah kategori "API / kode yang dipublikasikan". Ini sulit untuk refactor, jadi orang tidak boleh mengubah apa pun dengan enteng. Sebaliknya, ia harus menegosiasikan perubahan yang direncanakan sebelumnya dengan semua pihak yang terlibat. Setidaknya masalah politik dan teknis.

Jadi saran utama mengenai hal ini dari Martin Fowler adalah jangan mempublikasikan antarmuka Anda (nama proyek dan struktur) sebelum waktunya .

Namun, jika sudah dilakukan dan perlu diperbaiki, mungkin lebih baik untuk mencoba melakukan perubahan yang diperlukan dalam langkah sesedikit mungkin, untuk meminimalkan gangguan dari pihak lain. Yang menyimpang cukup jauh dari konsep asli refactoring, tetapi untuk alasan yang bagus.

Juga, jika mungkin, pertimbangkan untuk menambahkan metode baru (sambil mencela yang sudah ada) alih-alih mengganti nama yang sudah ada. Ini memastikan bahwa kode klien tidak rusak, dan menyediakan masa transisi bagi mereka untuk memperbarui kode mereka untuk mematuhi API terbaru. Kekurangannya adalah itu mempersulit API Anda. Meskipun keadaan ini hanya sementara, namun mungkin butuh waktu yang cukup lama sebelum Anda dapat menghapus metode API yang usang secara aman (dalam kasus perpustakaan kelas Java, bertahun-tahun).


Tidak dapat menggunakan saran Martin Fowler (jika tidak baik) ketika Anda refactoring kode yang ditulis oleh orang lain. Juga, saya kira pengembang yang tidak lagi menggunakan metode ini harus mengingatkan rekan-rekannya untuk menggunakan metode baru dari waktu ke waktu tanpa terlalu mengganggu untuk mempercepat transisi. Saya mendapat kesan bahwa metode usang di perpustakaan kelas Java akan selalu ada untuk kompatibilitas mundur, tapi saya mungkin salah.
blizpasta

@blizpasta, tergantung pada berapa banyak klien yang dimiliki API. Jika Anda memiliki setengah lusin, semua dalam departemen yang sama, mungkin perlu beberapa diskusi dan argumen, dan beberapa bulan untuk menyelesaikan transisi dalam keadaan normal. Jika Anda memiliki jutaan pengguna dan miliaran LOC kode klien di seluruh dunia, maka ya, Anda kemungkinan besar tidak akan pernah menghapus metode yang sudah usang itu.
Péter Török

5

Anda hampir selalu dapat menghindari masalah ini dengan melakukan refactoring dalam dua langkah. Pada langkah pertama, perkenalkan kode baru, dan buang kode lama. Ketika semua tim telah bermigrasi ke kode baru, hapus kode lama. Saya juga menggunakan teknik ini untuk secara bertahap refactor satu modul. Dengan cara ini saya dapat membatasi jumlah kode yang harus diubah antara tes berjalan.


2
Ketika saya telah melakukan ini, saya sering dapat mengubah kode lama untuk memanggil kode baru. Ini memungkinkannya untuk menjadi metode rintisan, dan memberikan kode yang (semoga) ditingkatkan untuk klien dari metode lama.
BillThor

4

Perhatikan bahwa ini adalah salah satu alasan utama untuk memiliki server bangun, yang menjalankan tes.

Jika terjadi sesuatu yang akan merusak program yang diberikan, Anda diberitahu secepat mungkin dan dapat memburu pelakunya dan menyelesaikan masalah sementara detailnya masih segar.

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.