Topik ini menjelaskan konsep dan klasifikasi kode warisan serta memberikan strategi untuk berbagai jenis kode warisan. Selain itu, topik ini berfokus pada bagaimana Coding Assistant dapat mendukung Anda dalam mempertahankan kode warisan.
Kode warisan
Kode terkait teknologi usang:
Kode yang terkait dengan sistem operasi atau pustaka perangkat lunak yang tidak lagi didukung.
Kode yang bergantung pada tumpukan teknologi atau bahasa pemrograman yang sudah usang.
Kode yang disimpan untuk kompatibilitas dengan fitur warisan:
Segmen kode yang disimpan untuk kompatibilitas dengan versi lama fitur dalam perangkat lunak modern.
Kode yang harus dipertahankan untuk kompatibilitas mundur.
Kode yang tidak memiliki dokumentasi yang sesuai dan tidak dipelihara:
Kode lama yang tidak memiliki dokumentasi yang sesuai.
Kode yang kekurangan praktik pengembangan modern seperti unit test dan tinjauan kode.
Solusi untuk kode warisan
Anda dapat menggunakan salah satu strategi berikut untuk mengatasi masalah kode warisan:
Strategi | Kelebihan dan kekurangan |
Tulis ulang kode | Biaya tinggi dan sistem yang ada dapat terus berjalan seperti yang diharapkan, yang menghasilkan risiko kode. |
Refaktor kode | |
Tambahkan unit test | Unit test digunakan untuk mengidentifikasi masalah dalam kode dan memberikan jaminan kualitas untuk kemungkinan perubahan kode. |
Tabel sebelumnya menunjukkan bahwa menambahkan unit test adalah metode efektif untuk menyelesaikan masalah kode warisan. Namun, tantangan berikut masih ada dengan metode ini:
Sejumlah besar kode warisan kekurangan unit test, dan biaya pengujian sangat tinggi karena ketergantungan kompleks antar kode.
Metrik spesifik tidak jelas untuk menentukan unit test yang memadai.
Kode yang memerlukan unit test tidak diidentifikasi dengan jelas.
Kesalahan umum dalam unit test
Unit test palsu yang kekurangan asersi: Pengembang mungkin memanggil fungsi tanpa asersi untuk meningkatkan cakupan kode, yang menghasilkan banyak unit test yang tidak valid.
Unit test yang dianggap sebagai tes kotak putih: Beberapa pandangan mengklasifikasikan unit test sebagai tes kotak putih. Namun, unit test sebenarnya adalah tes kotak hitam yang spesifik untuk tanda tangan fungsi.
Unit test yang bergantung pada lingkungan aktual: Faktor utama yang menghambat unit test termasuk kemalasan dan konfigurasi yang bergantung pada lingkungan. Jika Anda tidak menggunakan Stub atau Mock untuk menghilangkan ketergantungan pada lingkungan eksternal seperti alamat IP atau database, unit test tidak dapat memenuhi prinsip FIRST (cepat, independen, dapat diulang, otomatis divalidasi, dan tepat waktu).
Pilih secara selektif melakukan unit test
Selain manfaat, unit test juga menghasilkan biaya. Jika Anda menganalisis kode warisan dari perspektif manfaat dan biaya, Anda dapat menambahkan unit test untuk kode warisan. Ini berarti Anda dapat secara selektif melakukan unit test. Bagaimana cara membedakan biaya dan manfaat?
Klasifikasi kuadran biaya-manfaat unit test untuk kode warisan
Unit test yang spesifik untuk kode warisan dapat dikategorikan dalam kuadran berdasarkan biaya dan manfaat mereka. Gambar berikut menunjukkan kriteria klasifikasi dan kuadran unit test.

Kriteria klasifikasi
Sumbu X (Biaya): Ketergantungan kode yang lebih tinggi menyebabkan biaya pengujian yang lebih besar.
Sumbu Y (Manfaat): Kompleksitas kode yang lebih tinggi menyebabkan peningkatan kualitas yang lebih besar.
Empat kuadran
Klasifikasi kode | Karakteristik | Deskripsi | Manfaat | Biaya |
Kode algoritma | Kompleksitas siklomatik tinggi dan fan-In tinggi | Ini mencakup banyak pernyataan penilaian kondisional dan loop dan bergantung pada sejumlah kecil kode, tetapi banyak kode bergantung padanya. | Tinggi | Rendah |
Kode trivial Kode trivial | Kompleksitas siklomatik rendah dan fan-In tinggi | Ini menggunakan logika sederhana dan hanya mencakup satu atau dua baris kode. | Rendah | Rendah |
Kode koordinator | Kompleksitas siklomatik rendah dan fan-In tinggi | Ini berada di lapisan atas hubungan pemanggilan dan mencerminkan skenario bisnis tertentu dengan memanggil kode lain. | Rendah | Tinggi |
Kode terlalu rumit | Kompleksitas siklomatik tinggi dan fan-In tinggi | Ini menggunakan logika kompleks, memiliki banyak dependensi, mencakup banyak fungsi dan parameter. Ini adalah contoh tipikal dari bau kode. | Tinggi | Tinggi |
Pemahaman tentang kompleksitas siklomatik dan dependensi
Kompleksitas siklomatik: jumlah cabang logis dalam kode.
Fan-in: jumlah modul induk yang langsung memanggil modul tersebut. Fan-in yang besar menunjukkan tingkat penggunaan ulang modul yang tinggi.
Fan-out: jumlah modul yang dipanggil langsung oleh sebuah modul. Fan-out yang besar menunjukkan bahwa modul tersebut bergantung pada banyak modul.
Strategi untuk berbagai jenis kode
Strategi berikut berlaku untuk kode warisan berdasarkan analisis sebelumnya:
Untuk kode algoritma, Anda dapat membuat unit test.
Untuk kode koordinator, Anda dapat melakukan pengujian API.
Untuk kode yang terlalu rumit, Anda dapat mencari kesempatan yang tepat untuk merefaktor kode.
Untuk kode trivial, Anda tidak perlu memproses kode.

Gunakan Coding Assistant untuk memproses kode warisan
1. Pahami sebuah proyek
Ketika Anda memelihara kode warisan dari sebuah proyek, Anda dapat menggunakan fitur @workspace untuk memahami tujuan seluruh proyek dan modul yang terlibat dalam proyek tersebut.

2. Proses berbagai jenis kode
Buat unit test untuk kode algoritma
Pilih bagian yang ingin Anda hasilkan berdasarkan kode produksi. Selama pembuatan, Anda dapat fokus pada informasi dependensi seperti kerangka kerja yang diperlukan dan Mock. Anda dapat menambahkan informasi relevan setelah perintah unit test dihasilkan. Sebagai contoh, /generate unit testingCppUTest.

Secara umum, jumlah kasus uji unit yang dihasilkan dari kode yang ada biasanya terbatas. Jika Anda memiliki persyaratan khusus untuk jumlah skenario pengujian dan kasus penggunaan unit test, Anda dapat menghasilkan lebih banyak unit test dengan melanjutkan fungsi pengujian dalam file unit test yang baru dibuat. Selama kelanjutan, Coding Assistant mengikuti kasus penggunaan yang ada sebanyak mungkin dan menggunakannya sebagai referensi konteks.

Lakukan pengujian API pada kode koordinator
Pengujian unit bukanlah solusi ideal untuk kode koordinator, dan biaya pengujian meningkat secara signifikan karena jumlah dependensi yang berlebihan. Kami sarankan Anda melakukan pengujian API atau fitur pada kode semacam itu. Namun, pengembang sering menghadapi masalah saat menulis kasus uji otomatis. Oleh karena itu, Anda dapat menggunakan Coding Assistant untuk dengan cepat menguasai dan memahami kerangka pengujian.

Untuk menulis kasus penggunaan, Anda dapat memilih fungsi yang diuji dari kasus penggunaan dan mengajukan pertanyaan langsung di jendela percakapan AI Coding Assistant. Sebagai contoh, Anda dapat bertanya kepada AI Coding Assistant tentang kasus uji yang dihasilkan untuk kode berikut berdasarkan Robot Framework. Dengan cara ini, Anda dapat mengembangkan kata kunci yang sesuai.
Refaktor kode yang terlalu rumit pada waktu yang tepat
Untuk kode yang terlalu rumit, Anda dapat menggunakan perintah /generate optimization dari AI Coding Assistant untuk mendapatkan saran optimasi untuk kode yang dipilih. Tinjauan dan optimasi kode memberikan saran optimasi dari beberapa dimensi seperti masalah sintaksis, peningkatan pengecualian, kebersihan kode, keamanan, dan risiko.

Untuk optimasi kode warisan yang kompleks, kami sarankan agar pengembang tidak melakukan optimasi dan refaktor secara komprehensif secara membabi buta. Perubahan pada kode warisan dapat menimbulkan risiko yang signifikan. Oleh karena itu, pengembang harus merefaktor dan mengoptimalkan kode pada waktu yang tepat berdasarkan situasi tertentu dan mengikuti Boy Scout Rule. Dalam proses ini, Coding Assistant juga memberikan dukungan kuat untuk Anda.
Ringkasan
Konten sebelumnya memberikan praktik terbaik yang dapat Anda gunakan sebagai referensi saat memproses kode warisan. Untuk memproses kode warisan secara efektif, Anda harus menyelami struktur kompleks dari kode dan melacak setiap node cabang yang mungkin secara rinci. Dalam proses ini, selain mengidentifikasi dan memperbaiki potensi cacat, Anda harus menyelesaikan semua tugas dalam waktu yang terbatas. Untuk meminimalkan waktu yang diperlukan untuk memproses kode warisan, kami sarankan agar pengembang mencegah korupsi kode, memanfaatkan alat dengan baik, dan mengikuti prinsip pemrograman yang baik di tahap awal penulisan.