BAB 03

03 - AI untuk Testing dan Quality Assurance

Estimasi Waktu: 35-45 menit Prasyarat: 01-ai-assisted-coding.md


Apa Itu Materi Ini?

Materi ini membahas bagaimana menggunakan AI untuk membuat, meningkatkan, dan mengelola tests - unit test, integration test, dan end-to-end test. AI sangat efektif untuk testing karena bisa dengan cepat menghasilkan berbagai test cases, termasuk edge cases yang sering terlewat.


Tujuan Pembelajaran

Setelah mempelajari materi ini, kamu akan mampu:


1. Mengapa AI Bagus untuk Testing?

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          KEUNGGULAN AI UNTUK TESTING                  β”‚
β”‚                                                      β”‚
β”‚  1. KOMPREHENSIF                                     β”‚
β”‚     β†’ AI bisa generate banyak test cases sekaligus   β”‚
β”‚     β†’ Termasuk edge cases yang sering terlewat       β”‚
β”‚                                                      β”‚
β”‚  2. KONSISTEN                                        β”‚
β”‚     β†’ Pola test yang konsisten                       β”‚
β”‚     β†’ Naming convention yang seragam                 β”‚
β”‚                                                      β”‚
β”‚  3. CEPAT                                            β”‚
β”‚     β†’ Generate test dalam hitungan detik             β”‚
β”‚     β†’ Jauh lebih cepat dari menulis manual           β”‚
β”‚                                                      β”‚
β”‚  4. PERSPEKTIF BARU                                  β”‚
β”‚     β†’ AI berpikir dari sudut "apa yang bisa salah?"  β”‚
β”‚     β†’ Menemukan cases yang developer tidak pikirkan  β”‚
β”‚                                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Template Prompt untuk Test Generation

Template: Unit Test Generation

Buat unit test yang komprehensif untuk fungsi berikut:

```[bahasa]
// Fungsi yang akan ditest
function validateEmail(email: string): { valid: boolean; error?: string } {
  // ... implementation
}

Framework test: [Jest / pytest / JUnit / dll] Coverage yang diharapkan: 100%

Harus mencakup:

  1. Happy path cases
  2. Edge cases (null, undefined, empty string, very long string)
  3. Invalid formats
  4. Boundary conditions
  5. Type mismatches

Untuk setiap test:


### Template: Integration Test

Buat integration test untuk API endpoint berikut:

Endpoint: POST /api/users Framework: Express.js + Supertest

Test cases yang diperlukan:

  1. Success scenarios:

    • Create user dengan data lengkap β†’ 201
    • Response body sesuai schema
  2. Validation errors:

    • Email duplikat β†’ 409
    • Field required kosong β†’ 400
    • Format email salah β†’ 400
    • Password terlalu pendek β†’ 400
  3. Auth errors:

    • Tanpa token β†’ 401
    • Token expired β†’ 401
    • Role tidak sesuai β†’ 403
  4. Edge cases:

    • Database connection error β†’ 500
    • Concurrent creation β†’ tidak ada duplicate

Setup: gunakan database test yang di-reset sebelum setiap test suite.


### Template: Test dari Requirement

Berdasarkan requirement berikut:

β€œUser bisa mengupload file gambar (JPG, PNG, max 5MB). File di-resize ke max 1024x1024. Thumbnail (200x200) juga dibuat. Metadata (filename, size, dimensions) disimpan ke database. Jika gagal, user mendapat pesan error yang jelas.”

Buat test suite yang komprehensif. Identifikasi dulu:

  1. Apa saja yang perlu ditest?
  2. Apa edge cases yang mungkin?
  3. Apa error scenarios yang mungkin?

Lalu tulis test-nya menggunakan [framework].


---

## 3. Strategi Test Generation

### Strategi 1: TDD dengan AI

Alur kerja:

  1. Tulis requirement dalam bahasa natural
  2. Minta AI generate test cases dari requirement
  3. Review dan sesuaikan test cases
  4. Jalankan test (semua harus fail - RED)
  5. Minta AI implement kode yang pass semua test
  6. Jalankan test (semua harus pass - GREEN)
  7. Refactor dengan bantuan AI (REFACTOR)
  8. Test tetap pass

### Strategi 2: Test Existing Code

Alur kerja:

  1. Paste kode yang belum punya test
  2. Minta AI identifikasi semua testable behaviors
  3. Generate test cases untuk setiap behavior
  4. Review: apakah ada case yang terlewat?
  5. Jalankan dan verifikasi
  6. Perbaiki test yang gagal

### Strategi 3: Improve Existing Tests

Prompt:

β€œIni kode dan test yang sudah ada:

Kode: [kode]

Test: [test yang ada]

Analisis:

  1. Apa yang belum tercover oleh test yang ada?
  2. Edge cases apa yang terlewat?
  3. Apakah ada test yang tidak assert apa-apa?
  4. Apakah ada test yang terlalu fragile?
  5. Berikan test tambahan yang diperlukan.”

---

## 4. Jenis-Jenis Test dan AI

### Unit Tests

AI sangat efektif. Setiap fungsi/method bisa ditest secara terpisah.

Prompt: β€œBuat unit test untuk [fungsi], cover semua edge cases” Tips: Berikan signature dan expected behavior yang jelas


### Integration Tests

AI cukup efektif. Perlu konteks tentang komponen yang diintegrasikan.

Prompt: β€œBuat integration test untuk [endpoint/flow], mock [external dependencies]” Tips: Jelaskan dependencies dan cara mock-nya


### E2E Tests

AI bisa membantu menulis script tapi perlu info detail tentang UI flow.

Prompt: β€œBuat Playwright/Cypress test untuk flow: login β†’ buka dashboard β†’ buat item baru β†’ verifikasi item ada” Tips: Berikan selector atau data-testid jika ada


### Property-Based Tests

AI sangat bagus untuk mengidentifikasi properties yang harus selalu benar.

Prompt: β€œIdentifikasi properties yang bisa ditest untuk fungsi sort: - Hasil selalu sama panjang dengan input - Hasil selalu sorted - Setiap elemen input ada di output Lalu buat property-based tests-nya.”


---

## 5. Kualitas Test: Apa yang Perlu Di-review

### Checklist Review Test dari AI

CORRECTNESS β–‘ Test benar-benar mengetes apa yang seharusnya? β–‘ Assertion cukup spesifik? β–‘ Tidak ada false positive (pass padahal seharusnya fail)?

COMPLETENESS β–‘ Happy path tercover? β–‘ Error path tercover? β–‘ Edge cases tercover? β–‘ Boundary values tercover?

MAINTAINABILITY β–‘ Test tidak terlalu coupled dengan implementation? β–‘ Setup/teardown yang proper? β–‘ Mock yang reasonable (tidak over-mocking)?

READABILITY β–‘ Nama test deskriptif? β–‘ Arrange-Act-Assert pattern jelas? β–‘ Tidak ada magic numbers tanpa penjelasan?

SPEED β–‘ Tidak ada sleep/wait yang tidak perlu? β–‘ Test berjalan cepat (< 1 detik per unit test)?


---

## 6. Anti-Pattern Testing dengan AI

### Anti-Pattern 1: Over-Testing Implementation Detail

BURUK: Test internal state yang seharusnya private β€œTest bahwa function menggunakan bubble sort”

BAGUS: Test behavior yang observable β€œTest bahwa function menghasilkan array yang sorted”


### Anti-Pattern 2: Test yang Tidak Assert Apa-apa

BURUK: test(β€˜function works’, () => { const result = myFunction(input); // tidak ada assertion });

BAGUS: test(β€˜should return uppercase for valid input’, () => { const result = myFunction(β€˜hello’); expect(result).toBe(β€˜HELLO’); });


### Anti-Pattern 3: Test Terlalu Fragile

BURUK: Test bergantung pada format string persis expect(result).toBe(β€œUser Budi created at 2024-01-15 10:30:00 WIB”)

BAGUS: Test pada struktur/semantic expect(result.name).toBe(β€œBudi”) expect(result.createdAt).toBeInstanceOf(Date)


---

## Latihan (~15 menit)

### Tugas
Pilih salah satu:

### Pilihan A: Generate Test untuk Kode Baru
Tulis fungsi sederhana (misal: password validator, date formatter), lalu minta AI generate test komprehensif. Review dan jalankan.

### Pilihan B: TDD dari Scratch
Tentukan requirement untuk fungsi kecil, minta AI buat test dulu, lalu implement.

### Pilihan C: Improve Test Coverage
Ambil kode yang sudah ada, minta AI identifikasi gap dalam test coverage dan tambahkan test yang diperlukan.

---

## Poin-Poin Utama

1. **AI sangat efektif** untuk generate test cases yang komprehensif
2. **Selalu review** test yang dihasilkan - pastikan benar-benar mengetes apa yang seharusnya
3. **TDD + AI** adalah kombinasi yang sangat powerful
4. **Edge cases** adalah keunggulan utama AI - dia bisa "berpikir" tentang kasus yang kita lewatkan
5. **Jangan over-mock** - test sebaiknya mengetes behavior, bukan implementation
6. **Test quality** tetap perlu review manusia
7. **Property-based testing** cocok untuk AI karena bisa mengidentifikasi invariants

---

## Informasi Materi

- **Lisensi:** CC BY-NC-SA 4.0