Diagram alur dengan berbagai bentuk dan simbol, termasuk gelembung ucapan berwarna biru, tanda tanya, dan tanda centang
Ikhtisar

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:

  • Untuk pengembang Python dan Java, Gen AI dapat meningkatkan kemampuan mereka dengan mengotomatiskan berbagai tugas bernilai rendah seperti pembuatan kode dan perburuan bug. Solusi ini juga dapat meningkatkan pengoptimalan kode, menegakkan standar pengodean, dan membantu dalam pemilihan API dan pustaka, yang mengarah ke aplikasi yang lebih efisien dan kuat.
  • Dalam bahasa tradisional seperti COBOL, Gen AI dapat menghembuskan kehidupan baru ke dalam sistem lama. Dengan memfaktorkan ulang dan mengoptimalkan kode COBOL yang ada, Gen AI dapat meningkatkan kinerja dan pemeliharaan sistem ini. Solusi ini juga dapat membantu dalam mengubah kode COBOL ke bahasa yang lebih modern, seperti Java, menyediakan alat yang berharga dalam upaya modernisasi sistem.
  • Untuk Site Reliability Engineers (SRE) yang bekerja dengan Ansible, Gen AI dapat mengotomatiskan pembuatan buku pedoman, mengoptimalkan skrip yang ada, atau bahkan mengidentifikasi potensi kesalahan. Otomatisasi ini secara signifikan dapat mengurangi waktu yang dihabiskan untuk berbagai tugas rutin, memungkinkan SRE untuk fokus pada tantangan yang lebih kompleks.
Mengapa AI Generatif dalam Pengembangan Aplikasi?

Menerapkan AI generatif untuk pengembangan aplikasi memiliki manfaat potensial utama:

  • Konsistensi: Dengan menerapkan AI generatif untuk meninjau dan memfaktor ulang kode, pengembang dapat menjaga standar pengodean yang konsisten sehingga perangkat lunak lebih mudah ditelusuri kesalahannya dan dipelihara.
  • Optimalisasi Kreativitas: AI Generatif dapat mengotomatiskan tugas bernilai rendah sehingga pengembang dapat lebih fokus pada pekerjaan yang lebih kompleks, yang pada akhirnya mempercepat siklus pengembangan dan memungkinkan perubahan dilakukan lebih sering.
  • Amplifikasi Keterampilan: AI generatif dapat bertindak sebagai mentor bagi pengembang junior, memungkinkan mereka untuk tampil di tingkat senior atau bahkan pakar.

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.

Contoh Penggunaan Pengembangan Aplikasi

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:

  • Pembuatan Kode: AI generatif dapat menghasilkan kode baru dari prompt bahasa alami.
  • Pengoptimalan Kode dan Pemfaktoran Ulang: AI dapat digunakan untuk mengoptimalkan dan merestrukturisasi kode, membuatnya lebih efisien dan menghilangkan duplikasi.
  • Penegakan Standar Pengodean: AI dapat menerapkan standar pengodean dan konvensi pengodean, yang juga dapat membantu mematuhi standar peraturan.
  • Konversi Kode: AI dapat mengonversi kode dari satu bahasa ke bahasa lainnya.
  • Pemahaman Kode/Dokumentasi/Perburuan Bug: AI dapat menafsirkan kode dan menghasilkan penjelasan tentang fungsinya, dan juga mengidentifikasi kesalahan.
  • Pemilihan API dan Perpustakaan: AI dapat membantu pengembang memilih API dan pustaka perangkat lunak yang tepat untuk aplikasi mereka.

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.

Keputusan dan Pertimbangan Arsitektur

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.

Langkah selanjutnya

Diskusikan implementasi pola penerapan hybrid cloud dengan pakar kami.

Kontributor

Pete Nuwayser, Chris Kirby, Mihai Criveti

Diperbarui: 30 November 2023