Apa itu codebase (code base)?
Codebase, atau basis kode, adalah keseluruhan kumpulan kode sumber dari sebuah program komponen, atau sistem perangkat lunak. Ini mencakup semua file sumber yang dibutuhkan untuk mengompilasi perangkat lunak menjadi kode mesin, termasuk file-file konfigurasi. Kode sumber ini biasanya ditulis dalam bahasa yang bisa dibaca manusia, seperti Java, C#, Python, JavaScript, Extensible Markup Language atau teks biasa. Codebase juga sering mencakup file tambahan untuk membantu dalam memahami, menerapkan, atau menggunakan aplikasi. Misalnya, codebase mungkin memuat file readme, skrip contoh, detail lisensi, atau informasi dokumentasi lainnya.
Bagaimana produk perangkat lunak akhir dikompilasi?
Produk akhir perangkat lunak dikompilasi dari kode sumber dalam codebase dan, jika diperlukan, file konfigurasi pendukungnya. Prosesnya dimulai ketika developer menulis kode dan menyimpannya dalam file, yang kemudian diatur dalam folder dan subfolder sesuai dengan kebutuhan proyek. Setelah kode selesai ditulis, langkah selanjutnya adalah mengompilasinya untuk sistem operasi dan arsitektur komputer tertentu, misalnya Windows di atas arsitektur Arm atau Linux di atas arsitektur x86.
Saat proses build aplikasi dimulai, developer memasukkan kode sumber ke dalam compiler. Compiler ini akan menerjemahkan kode sumber menjadi kode assembly. Kemudian, kode assembly ini dikirimkan ke assembler, di mana ia diubah menjadi kode objek. Selanjutnya, linker menggunakan kode objek tersebut, bersama dengan file lainnya, untuk membuat file executable yang bisa dipahami oleh prosesor—namun sangat sulit dipahami oleh manusia.
Setelah kode sumber dikompilasi, tim pengembang akan menyimpan kode tersebut, baik sebagai sekumpulan file atau dalam repositori kontrol versi. Kalau nanti perangkat lunaknya perlu di-update, kode sumbernya tinggal dimodifikasi lalu dikompilasi ulang—dan proses ini akan terus berlangsung selama siklus hidup perangkat lunak tersebut masih aktif.
Screenshot di bawah ini memperlihatkan sebagian dari codebase milik Pytest, sebuah framework open source untuk pengujian fungsional terhadap aplikasi dan library. Para pengembang mengunggah codebase ini ke repositori GitHub publik, yang mencakup kode sumber program yang ditulis dalam Python serta file-file pendukungnya. Branch utama (main branch) saat ini aktif, namun developer bisa mengakses file dari branch lain yang tersedia.

Repositori Pytest saat ini berisi 618 file, yang tersebar di berbagai folder dan subfolder. Jumlah ini relatif kecil dibandingkan dengan banyak proyek pengembangan lain. Sebagai perbandingan, codebase utama milik Google disebut-sebut mencakup sekitar 1 miliar file.
Bagaimana codebase dikategorikan?
Codebase umumnya dikategorikan ke dalam dua jenis berikut:
- Monolitik. Seluruh codebase disimpan dalam satu repositori yang mencakup semua komponen perangkat lunak dan dibagikan kepada semua developer yang mengerjakan proyek. Codebase monolitik menjamin satu sumber kebenaran (single source of truth), meminimalkan masalah dependensi, mendukung perubahan secara atomik, dan menyederhanakan proses refactoring skala besar. Tapi seiring waktu, codebase monolitik bisa tumbuh sangat besar dan jadi sulit untuk dikelola.
- Terdistribusi. Codebase terdistribusi dibagi ke dalam beberapa repositori kecil berdasarkan komponen individual dari perangkat lunak. Repositori ini lebih mudah dikelola dibanding satu codebase besar monolitik, dan perubahan kode pun lebih mudah dilakukan. Tapi, pendekatan ini bikin pengelolaan dependensi dan sinkronisasi perubahan antar komponen jadi lebih rumit.
Bagaimana cara mengelola codebase?
Sebuah codebase harus dikelola dengan hati-hati saat membangun program supaya proses kompilasi bisa berjalan lancar. Developer—terutama yang baru bergabung dalam proyek—harus bisa dengan mudah memahami dan bekerja dengan kode sumber dan file-file pendukungnya. Kualitas pemrograman, kepatuhan terhadap best practices, dan penambahan komentar yang cukup akan sangat membantu dalam membuat codebase lebih mudah dipahami dan dirawat. Banyak tim pengembang juga menerapkan proses review kode untuk memastikan kepatuhan terhadap standar penulisan kode yang baik.
Terlepas dari apakah codebase-nya monolitik atau terdistribusi, mayoritas tim pengembang menyimpan kode sumber mereka di dalam sistem version control. Sistem ini memungkinkan developer untuk menyimpan dan mengambil versi berbeda dari kode sumber, serta berbagi kendali atas versi tersebut. Sistem ini menyimpan satu salinan utama dari codebase beserta catatan perubahan yang terjadi. Saat versi tertentu diminta, sistem akan menyusunnya kembali dari informasi yang tersedia.
Sistem version control juga memungkinkan tim pengembang untuk membuat branch dan menggabungkan kode, yang memudahkan kolaborasi dalam proyek skala besar, termasuk yang melibatkan banyak versi produk yang aktif secara bersamaan. Selain itu, sistem version control juga berperan penting dalam praktik continuous integration/continuous delivery (CI/CD).
Ketika seorang developer mengirimkan (check-in) kode ke dalam repositori, mesin CI secara otomatis menjalankan proses build dan pengujian untuk memverifikasi perubahan. Kalau perubahan tersebut gagal dalam pengujian, maka bisa langsung di-rollback; tapi kalau lolos, maka perubahan akan langsung diintegrasikan ke produk.