AI dapat merevolusi pengembangan aplikasi dengan menghasilkan, mengoptimalkan, dan menerjemahkan kode di seluruh siklus pengembangan perangkat lunak. Adopsi AI generatif dapat menghasilkan pembuatan perangkat lunak yang konsisten, pemanfaatan kreativitas pengembang yang optimal, dan peningkatan keterampilan pengembang. Sebagai contoh:
Menerapkan AI generatif untuk pengembangan aplikasi memiliki manfaat potensial utama:
Menerapkan AI generatif untuk meninjau, merefaktor, dan menerapkan standar pengodean perusahaan pada perangkat lunak menghasilkan software yang lebih konsisten, misalnya, dalam penggunaan pendekatan yang sama untuk menyelesaikan masalah berulang, struktur kode yang seragam, serta kode yang mudah dipahami, dll., terlepas dari siapa pengembang yang menulisnya. Hal ini pada akhirnya membuat aplikasi yang dihasilkan lebih mudah ditelusuri kesalahannya dan dipelihara, karena pemelihara tidak perlu terlebih dahulu memahami struktur serta keunikan dari berbagai bagian kode yang berbeda.
Seperti domain lain, AI generatif memiliki potensi untuk membebaskan pengembang aplikasi dari berbagai tugas bernilai rendah seperti menulis kode sederhana/rote, atau mengidentifikasi sumber bug yang merepotkan. Dengan lebih banyak waktu untuk fokus pada tugas bernilai tinggi, pengembang dapat mempercepat siklus pengembangan, menghadirkan lebih banyak fitur dalam setiap rilis perangkat lunak, serta melakukan perubahan yang lebih kecil namun lebih sering.
Akhirnya, menerapkan AI generatif untuk pengembangan aplikasi dapat memperkuat keterampilan pengembang, memungkinkan pengembang junior untuk tampil di tingkat senior atau bahkan pakar. Pengembang senior dapat mengintegrasikan proses pelatihan model ke dalam siklus rilis, sehingga praktik unggulan dapat disertakan ketika kode terus disempurnakan. AI generatif dapat berperan sebagai mentor pakar bagi staf junior, sehingga pengembang senior dapat lebih fokus pada tugas lain sekaligus meningkatkan tingkat keterampilan seluruh tim pengembangan.
AI generatif dapat diterapkan pada pengembangan aplikasi dalam beberapa contoh penggunaan yang luas. Banyak model umum, seperti Llama 2, dilatih pada kode aplikasi yang ditulis dalam beberapa bahasa pemrograman kontemporer, dan model yang disetel untuk pembuatan kode juga tersedia.
Contoh penggunaan yang kami lihat mendapat manfaat dari AI generatif meliputi:
Setiap contoh penggunaan ini dijelaskan di bawah ini.
Kemampuan pembuatan teks asli dari Model Bahasa Besar (LLM) dapat digunakan untuk menghasilkan kode baru dari prompt bahasa alami. Contoh, pengembang dapat mengirim prompt, "Tulis SQL query untuk mengambil nama depan dan belakang pelanggan dari tabel pelanggan," dan menerima SQL query sebagai gantinya.
Penggunaan LLM untuk menghasilkan kode dapat secara signifikan meningkatkan kemampuan pengembangan aplikasi bagi pengembang junior atau bahkan non-developer. Namun, manfaatnya dapat cepat mencapai titik pengembalian yang menurun ketika output yang dibutuhkan menjadi semakin kompleks atau ketika tingkat detail dalam prompt hampir menyamai kode yang akan dihasilkan.
Pengoptimalan kode dan pemfaktoran ulang, proses peningkatan kode agar lebih berkinerja dan terstruktur lebih baik, dapat dianggap sebagai kombinasi dari dua kemampuan LLM: pembuatan teks dan ringkasan teks. Dengan menggunakan LLM umum atau yang telah diselaraskan, pengembang dapat memberikan prompt untuk mengoptimalkan atau menyusun ulang bagian kode agar lebih efisien dan/atau menghilangkan kode yang duplikat.
Model LLM sangat cocok untuk optimasi dan refactor potongan kode kecil yang sesuai dengan kapasitas context window-nya. Namun, ketika menangani kode yang lebih besar atau sistem perangkat lunak lengkap, diperlukan pendekatan yang lebih komprehensif yang menyimpan metadata seluruh aplikasi agar hasilnya tetap baik.
Serupa dengan pengoptimalan kode, LLM dapat digunakan untuk menerapkan dan memastikan standar pengodean perusahaan, seperti penamaan fungsi dan variabel, struktur kode, serta konvensi pengodean yang berlaku di organisasi. Umumnya digunakan pada level repositori dalam proses code review dan commit, LLM yang dilatih berdasarkan standar pengodean perusahaan dapat mengubah kode yang dikirimkan agar sesuai dengan aturan yang berlaku di organisasi. Standar-standar ini juga dapat mencakup konvensi pengerasan yang membantu perusahaan mematuhi standar peraturan.
Karena bahasa pemrograman memiliki karakteristik seperti bahasa pada umumnya, kemampuan LLM dalam menerjemahkan teks memungkinkan perangkat lunak yang ditulis dalam satu bahasa pemrograman diterjemahkan ke bahasa lain, misalnya mengubah C# menjadi Java.
Seperti pada pengoptimalan kode, LLM saja bekerja dengan baik untuk mengonversi potongan kode kecil yang masih berada dalam batas context window model, namun untuk mengonversi kode yang lebih besar atau seluruh sistem perangkat lunak, diperlukan solusi yang lebih komprehensif yang dapat mempertahankan metadata serta informasi konteks penting lainnya.
Melalui kemampuan konversi kode, gen AI juga dapat memfasilitasi terjemahan kode antara bahasa pemrograman yang berbeda, seperti menerjemahkan kode COBOL ke Java. Ini bisa sangat berguna di lingkungan multi-bahasa atau selama migrasi sistem, menghemat waktu dan upaya pengembang untuk menulis ulang kode secara manual.
Pemahaman kode adalah analog dari pembuatan kode. Berbeda dengan proses yang menerjemahkan prompt bahasa alami menjadi kode, penjelasan kode menggunakan potongan kode sebagai input lalu menghasilkan penjelasan dalam bahasa manusia tentang bagaimana kode tersebut bekerja. Sebagai contoh, prompt seperti "Jelaskan fungsi dari potongan kode Python ini" yang diikuti dengan bagian kode Python dapat menghasilkan penjelasan baris demi baris sekaligus ringkasan umum mengenai tujuan kode tersebut.
Kemampuan ini juga dapat digunakan untuk deteksi kesalahan dalam kode, juga dikenal sebagai perburuan bug, dengan meminta model untuk "Identifikasi mengapa potongan kode ini gagal."
Pemilihan API dan Pustaka adalah aplikasi Retrieval-Augmented Generation (RAG) untuk manajemen API perusahaan dan perpustakaan perangkat lunak. Pengembang yang membutuhkan API untuk aplikasinya dapat menggunakan prompt RAG untuk menanyakan basis data API perusahaan yang berisi nama API, deskripsi, titik akhir, dan informasi lainnya, sehingga dapat menjawab pertanyaan seperti, “Apakah ada API yang bisa melakukan xyz?” Selama deskripsi API dan pustaka kode dipelihara dengan kualitas tinggi serta dilengkapi kata kunci yang tepat, aplikasi semacam ini dapat diselaraskan untuk memberikan respons yang konsisten, sehingga mempercepat pengembangan aplikasi sekaligus proses orientasi pengembang.
Arsitek harus membuat sejumlah keputusan arsitektur yang signifikan ketika merancang solusi pengembangan aplikasi menggunakan LLM.
Apakah model ini menyediakan indemnifikasi atau perlindungan hak cipta, dan bagaimana cara mengidentifikasi apakah kode yang dihasilkan terikat oleh ketentuan lisensi tertentu? Bahkan model yang dilatih menggunakan lisensi permisif sekalipun masih dapat terikat oleh ketentuan lisensi tertentu, seperti kewajiban memberikan atribusi kepada pemegang hak cipta asli.
Arsitek yang merancang solusi untuk menerapkan dan menegakkan standar pengodean perusahaan perlu mempertimbangkan upaya yang dibutuhkan untuk menyesuaikan LLM agar 'memahami' standar tersebut, serta membuat keputusan yang tepat apakah metode lain, seperti alat linting, lebih efektif untuk mencapai kemampuan serupa.
Fitur bantuan kode otomatis harus merespons dengan cepat agar tidak mengganggu melatih pengembang. Arsitek perlu mempertimbangkan penempatan dan konektivitas model bantuan pengembang agar dukungan yang diberikan benar-benar bermanfaat dan tidak mengganggu proses kerja pengembang.
Model bahasa besar tidak menjamin akan menghasilkan kode yang sepenuhnya benar secara fungsional, terutama jika kode yang dihasilkan atau direvisi harus terintegrasi dengan sistem perangkat lunak yang lebih besar. Meski belum terdapat solusi langsung untuk isu ini (dan masalahnya semakin berkurang seiring kemajuan LLM), arsitek harus memahami bahwa kode yang dihasilkan oleh LLM tetap perlu melalui pengujian kualitas serta kontrol keamanan yang sama seperti kode yang dibuat oleh developer manusia.
LLM yang tersedia secara umum biasanya dilatih pada sejumlah kecil bahasa pemrograman kontemporer seperti Python, Javascript, C #, dan lain-lain. Arsitek solusi yang perlu mendukung bahasa pemrograman lama atau yang bersifat khusus mungkin hanya memiliki sedikit pilihan model yang tersedia, atau perlu melakukan penyesuaian secara intensif pada model umum agar sesuai dengan kebutuhan spesifik mereka.