📌 Baca Juga (AI Coding): Menerapkan Prompt Engineering pada IDE untuk Meningkatkan Kualitas Kode AI
Automated Test Generation with Large Language Models: From Prompt to pytest Suite
Dalam era pengembangan perangkat lunak modern, menulis unit test tidak lagi menjadi satu-satunya tugas yang menuntut ketelitian. Dengan kemajuan Large Language Models (LLM) seperti GPT‑4, kita kini dapat mengotomatisasi pembuatan test case secara cepat dan akurat. Artikel ini akan memandu Anda, seorang pengembang Python, melalui proses transformasi prompt sederhana menjadi suite pytest lengkap. Fokusnya adalah pada AI Coding, Pemrograman, dan Otomatisasi AI—topik yang sangat relevan bagi komunitas kodeai.my.id.
Pendahuluan
Unit test adalah fondasi kualitas kode. Namun, menulis test case yang mencakup semua skenario seringkali memakan waktu dan rentan terhadap kesalahan manusia. LLM dapat memahami konteks fungsi, parameter, dan perilaku yang diharapkan, lalu menghasilkan kode test yang bersih dan terstruktur. Dengan integrasi ke dalam workflow CI/CD, pengujian otomatis dapat berjalan tanpa intervensi manual.
Kenapa Memilih LLM untuk Generasi Test?
- Kecepatan: LLM dapat menghasilkan ribuan baris kode dalam hitungan detik.
- Adaptasi Domain: Model dilatih pada ribuan repositori open‑source, sehingga dapat menyesuaikan gaya penulisan dan konvensi yang berbeda.
- Pengurangan Beban Manual: Pengembang dapat fokus pada logika bisnis, sementara LLM menangani boilerplate test.
- Kontinuitas Kualitas: Test yang dihasilkan mengikuti best practice, seperti penggunaan fixtures dan parameterized tests.
Langkah‑Langkah Praktis
1. Persiapkan Lingkungan
- Instalasi
pytestdanopenailibrary (atau SDK LLM lain).pip install pytest openai
- Siapkan API key LLM dan simpan di file
.envatau variabel lingkungan. - Buat folder
tests/di proyek Anda.
2. Tulis Prompt yang Jelas
Prompt harus mencakup:
- Deskripsi fungsi target.
- Parameter dan tipe data.
- Output yang diharapkan.
- Boundary conditions dan edge cases.
Contoh prompt:
Write a pytest test suite for the function
calculate_discount(price: float, discount: float) -> floatthat returns the discounted price. Include tests for normal case, zero discount, 100% discount, negative discount, and non‑numeric input handling.
3. Kirim Prompt ke LLM dan Ambil Respons
Berikut contoh kode Python sederhana:
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create( engine="gpt-4", prompt=prompt, max_tokens=800, temperature=0.0 )
test_code = response.choices[0].text.strip()
4. Validasi dan Refactor
Setelah kode test dihasilkan, jalankan pytest --maxfail=1 -q untuk memastikan tidak ada syntax error. Perhatikan apakah test case mencakup semua skenario yang Anda inginkan. Jika perlu, tambahkan assert atau mock secara manual.
5. Integrasi ke CI/CD
Tambahkan langkah berikut ke pipeline GitHub Actions:
name: Run Tests
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: pip install -r requirements.txt pytest
- name: Run tests
run: pytest
Tips & Trik
- Gunakan Prompt Template: Simpan prompt yang sudah terbukti efektif dan sesuaikan hanya bagian deskripsi fungsi.
- Periksa Konsistensi Nama: LLM terkadang menggunakan nama variabel yang tidak konsisten dengan kode sumber.
- Jangan Lupa Mock: Untuk fungsi yang bergantung pada database atau API eksternal, tambahkan mock secara manual.
- Review Logika Negatif: Pastikan test case juga memeriksa kasus error dan exception.
- Gunakan Parameterized Tests: LLM dapat menghasilkan
@pytest.mark.parametrizeuntuk mengurangi duplikasi.
Studi Kasus: Fungsi Pembulatan
Misalkan kita memiliki fungsi:
def round_to_nearest(value: float, step: int) -> float:
return round(value / step) * step
Prompt yang dikirim:
Generate a pytest suite for round_to_nearest that tests rounding up, rounding down, zero step, negative values, and non‑numeric input.
Respons LLM menghasilkan kode berikut:
import pytest
@pytest.mark.parametrize("value, step, expected", [
(1.2, 0.5, 1.0),
(1.8, 0.5, 2.0),
(0, 1, 0),
(-1.3, 0.5, -1.5)
])
def test_round_to_nearest(value, step, expected):
assert round_to_nearest(value, step) == expected
💡 Baca Juga & Rekomendasi Jaringan AI Network:
- Gunakan racikan prompt profesional di SolusiAI.my.id (Rekomendasi Tools & Otomatisasi AI).
- Pelajari tutorial skrip dan otomatisasi teknis di PromptHack.my.id (Kumpulan AI Prompt & Content Growth).
Posting Komentar