🔑 Kunci Jawaban & Rubrik Penilaian
Assesmen Sumatif Informatika Kelas XII
📊 Distribusi Jawaban Pilihan Ganda
45
Total Soal Objektif
15
Soal Ringan
15
Soal Sedang
15
Soal HOTS
✅ Bagian I: Kunci Jawaban Objektif (Skor @2 = Total 90)
📦 Topik 1: Manajemen Memori Komputer (Soal 1–15)
| No. | Jawaban | Tingkat | Konsep Kunci |
|---|---|---|---|
| 1 | B | Ringan | Fase Compile-Time |
| 2 | C | Ringan | Variabel Lokal |
| 3 | B | Ringan | Stack (LIFO) |
| 4 | B | Ringan | Fungsi Garbage Collection |
| 5 | C | Ringan | Tipe Data Dinamik |
| 6 | B | Sedang | Masalah Variabel Global |
| 7 | B | Sedang | Stack Overflow |
| 8 | B | Sedang | Bottleneck String Concatenation |
| 9 | C | Sedang | Perbedaan Stack vs Heap |
| 10 | C | Sedang | Aksi Garbage Collector |
| 11 | B | HOTS | Memory Leak pada Game |
| 12 | B | HOTS | Inefisiensi += pada String |
| 13 | B | HOTS | Risiko Matriks Besar di Stack |
| 14 | C | HOTS | Manual Memory Management |
| 15 | B | HOTS | Diagnosis Akumulasi Memory Leak |
🔄 Topik 2: Perulangan & Fungsi Python (Soal 16–30)
| No. | Jawaban | Tingkat | Konsep Kunci |
|---|---|---|---|
| 16 | C | Ringan | Perulangan for |
| 17 | B | Ringan | Fungsi range() |
| 18 | C | Ringan | Statement break |
| 19 | C | Ringan | Keyword def |
| 20 | B | Ringan | Scope Lokal |
| 21 | B | Sedang | Statement continue |
| 22 | B | Sedang | Loop-else Python |
| 23 | B | Sedang | Parameter *args |
| 24 | C | Sedang | Default Parameter |
| 25 | C | Sedang | Fungsi Lambda |
| 26 | C | HOTS | Rekursi tanpa Base Case |
| 27 | B | HOTS | Keyword global |
| 28 | A | HOTS | List Comprehension Efisien |
| 29 | C | Ringan | Return Value Fungsi |
| 30 | C | HOTS | Multiple Return (Tuple) |
🤖 Topik 3: Fondasi Aplikasi AI – InfoTerms Bot (Soal 31–45)
| No. | Jawaban | Tingkat | Konsep Kunci |
|---|---|---|---|
| 31 | C | Ringan | Rule-Based AI |
| 32 | D | Ringan | Struktur Dictionary |
| 33 | B | Ringan | Metode .lower() |
| 34 | B | Ringan | While Loop sebagai Saklar |
| 35 | C | Ringan | Kelemahan Rule-Based |
| 36 | B | Sedang | Alur if-elif-else |
| 37 | B | Sedang | Exact Matching Problem |
| 38 | B | Sedang | Fuzzy Matching Solution |
| 39 | C | Sedang | Keunggulan Rule-Based |
| 40 | A | Sedang | Penambahan elif |
| 41 | B | HOTS | Celah Logika “keluar” |
| 42 | B | HOTS | Analogi Mark-and-Sweep |
| 43 | B | HOTS | NLP & Intent Recognition |
| 44 | B | HOTS | Risiko Dictionary Dinamis |
| 45 | A | HOTS | Keterbatasan Empati AI |
⚡ Ringkasan Jawaban Cepat (Untuk Koreksi Cepat)
1–15: B C B B C | B B B C B | B B B C B
16–30: C B C C B | B B B C C | C B A C C
31–45: C D B B C | B B B C A | B B B B A
16–30: C B C C B | B B B C C | C B A C C
31–45: C D B B C | B B B C A | B B B B A
📝 Bagian II: Rubrik Penilaian Esai (Skor Maksimal 100)
Setiap soal esai memiliki bobot 20 poin. Penilaian didasarkan pada kelengkapan konsep, ketepatan analisis, dan kualitas argumentasi.
Esai 1: Analisis Manajemen Memori & Bottleneck 20 Poin
Jelaskan perbedaan mendasar antara penyimpanan data di area Stack dan Heap! Berikan satu contoh situasi nyata dalam pengembangan aplikasi di mana penggunaan Heap yang tidak dikelola dengan baik dapat menyebabkan Memory Leak, dan jelaskan bagaimana mekanisme Garbage Collection membantu (atau gagal membantu) mengatasi masalah tersebut!
🔑 Poin Kunci Jawaban:
- Perbedaan Stack vs Heap (6 poin):
- Stack: LIFO, ukuran terbatas, otomatis dibersihkan saat fungsi selesai, cepat, untuk variabel lokal.
- Heap: Luas & fleksibel, akses lebih lambat, rentan memory leak, untuk data besar/dinamis (objek, list, dictionary).
- Contoh Nyata Memory Leak (6 poin):
- Contoh: Game yang menyimpan objek musuh yang sudah dikalahkan tetapi referensinya tidak dihapus → menumpuk di Heap.
- Contoh lain: Listener/event handler yang tidak dilepas, cache tanpa batas, atau variabel global yang menampung data terus-menerus.
- Peran Garbage Collection (8 poin):
- GC bekerja dengan mekanisme Mark-and-Sweep: menandai objek yang masih direferensi, lalu menyapu objek yang tidak lagi terhubung.
- GC gagal jika masih ada referensi “sampel” (misal: objek disimpan di list global) → objek tetap dianggap “hidup” dan tidak dibersihkan.
- Solusi: programmer harus secara eksplisit menghapus referensi (misal:
delatau setNone).
📊 Rubrik Penilaian:
| Kriteria | Skor Maksimal | Indikator |
|---|---|---|
| Penjelasan Stack vs Heap | 6 | Kedua konsep dijelaskan dengan tepat dan kontras yang jelas |
| Contoh Memory Leak | 6 | Contoh konkret, relevan, dan logis |
| Analisis Garbage Collection | 8 | Menjelaskan mekanisme GC + kondisi gagal dengan tepat |
Esai 2: Evaluasi Kode & Optimasi (HOTS) 20 Poin
Analisislah mengapa kode berikut dianggap sebagai bottleneck! Tuliskan ulang kode tersebut menjadi lebih optimal menggunakan list, dan jelaskan secara teknis mengapa kode baru lebih efisien!
data = “”
for i in range(100000):
data += str(i) + ” “
for i in range(100000):
data += str(i) + ” “
🔑 Poin Kunci Jawaban:
- Analisis Bottleneck (6 poin):
- String di Python bersifat immutable (tidak bisa diubah).
- Setiap
+=membuat objek string baru di Heap, menyalin seluruh konten lama + konten baru. - 100.000 iterasi = 100.000 alokasi + penyalinan → kompleksitas O(n²), boros memori & CPU.
- Kode Optimal (6 poin):
data_list = [str(i) for i in range(100000)]Atau menggunakan list comprehension + join.
data = ” “.join(data_list) - Penjelasan Efisiensi (8 poin):
listbersifat mutable →appendatau list comprehension hanya menambah pointer, bukan menyalin seluruh data."".join()melakukan alokasi memori sekali di awal dengan ukuran total yang sudah diketahui → kompleksitas O(n).- Hasil: jauh lebih cepat (bisa 10–100x) dan hemat memori Heap.
📊 Rubrik Penilaian:
| Kriteria | Skor Maksimal | Indikator |
|---|---|---|
| Analisis penyebab bottleneck | 6 | Menyebutkan immutability string & alokasi berulang |
| Kode optimasi benar | 6 | Menggunakan list + join dengan sintaks valid |
| Penjelasan teknis efisiensi | 8 | Menyebutkan O(n) vs O(n²), alokasi sekali, mutable list |
Esai 3: Analisis Logika AI & Celah Keamanan (HOTS) 20 Poin
Analisislah kelemahan logika
if "keluar" in input_user.lower(): berjalan = False jika pengguna memasukkan kalimat: “Saya ingin melihat gambar bunga matahari yang sedang mekar keluar dari kuncupnya”. Usulkan perbaikan logika!
🔑 Poin Kunci Jawaban:
- Analisis Kelemahan (6 poin):
- Operator
inpada string melakukan substring matching, bukan pencocokan kata utuh. - Kalimat di atas mengandung substring “keluar” → bot akan berhenti meskipun pengguna tidak bermaksud keluar.
- Ini adalah false positive / celah logika kontekstual.
- Operator
- Perbaikan Logika (14 poin) — beberapa solusi diterima:
- Solusi 1 — Exact Match:
if input_user.lower().strip() in [“keluar”, “bye”, “exit”]:
berjalan = False - Solusi 2 — Tokenisasi Kata:
kata = input_user.lower().split()
if “keluar” in kata or “bye” in kata:
berjalan = False - Solusi 3 — Konfirmasi: Tanyakan ulang “Apakah Anda yakin ingin keluar? (ya/tidak)” sebelum menutup.
- Solusi 1 — Exact Match:
📊 Rubrik Penilaian:
| Kriteria | Skor Maksimal | Indikator |
|---|---|---|
| Identifikasi celah logika | 6 | Menjelaskan substring matching vs konteks |
| Kualitas solusi perbaikan | 10 | Kode/logika solusi valid dan menyelesaikan masalah |
| Kedalaman analisis | 4 | Menyebutkan konsep NLP/tokenisasi/UX |
Esai 4: Perbandingan Arsitektur AI 20 Poin
Buatlah analisis perbandingan mendalam antara Rule-Based AI (InfoTerms Bot) dan Large Language Model (LLM) seperti ChatGPT! Sertakan minimal 3 aspek perbandingan, serta jelaskan kapan pengembang sebaiknya memilih Rule-Based AI daripada LLM!
🔑 Poin Kunci Jawaban:
- Minimal 3 Aspek Perbandingan (12 poin):
Aspek Rule-Based AI LLM (ChatGPT) Cara Kerja Pencocokan pola & aturan statis (dictionary, if-elif) Generasi teks berbasis probabilitas & transformer Kebutuhan Resource Ringan, bisa di PC biasa, tanpa GPU Butuh GPU, memori besar, komputasi tinggi Pemahaman Konteks Tidak ada, kaku Baik, memahami nuansa & konteks percakapan Fleksibilitas Terbatas pada database Adaptif, bisa menjawab hal baru Kecepatan Respons Sangat cepat (milidetik) Relatif lebih lambat (detik) Empati & Kreativitas Tidak ada Bisa menunjukkan empati & narasi kreatif - Kapan Memilih Rule-Based AI (8 poin):
- Sistem dengan domain terbatas & terdefinisi jelas (kamus istilah, FAQ perusahaan, IVR bank).
- Kebutuhan respons deterministik (tidak boleh “berhalusinasi”) — misal: sistem medis, hukum, keuangan.
- Kendala resource terbatas (perangkat embedded, offline, tanpa internet).
- Kebutuhan audit trail — setiap jawaban bisa ditelusuri ke aturan tertentu.
- Prototipe cepat dengan biaya rendah sebelum investasi ke LLM.
📊 Rubrik Penilaian:
| Kriteria | Skor Maksimal | Indikator |
|---|---|---|
| Kedalaman perbandingan (≥3 aspek) | 12 | Setiap aspek dijelaskan dengan kontras yang jelas |
| Argumentasi kapan memilih Rule-Based | 8 | Minimal 2 situasi konkret dengan alasan logis |
Esai 5: Desain Sistem & Scope Variabel (HOTS) 20 Poin
Rancang fungsi kalkulator statistik yang menerima jumlah data tidak pasti menggunakan
*args! Jelaskan mengapa variabel total dan rata-rata sebaiknya bersifat lokal daripada global, ditinjau dari keamanan data dan efisiensi memori!
🔑 Poin Kunci Jawaban:
- Implementasi *args (8 poin):
def kalkulator_statistik(*data):*args menerima argumen positional tak terbatas sebagai tuple.
if not data:
return None
total = sum(data)
rata_rata = total / len(data)
return {“total”: total, “rata_rata”: rata_rata, “jumlah_data”: len(data)}
print(kalkulator_statistik(10, 20, 30, 40)) - Alasan Variabel Lokal (12 poin):
- Keamanan Data (4 poin): Variabel lokal terisolasi di dalam fungsi → tidak bisa diubah/dibaca oleh bagian program lain secara tidak sengaja (mencegah side effect dan race condition).
- Efisiensi Memori (4 poin): Variabel lokal otomatis dihancurkan dari Stack saat fungsi selesai → tidak membebani Heap atau mengikat RAM terus-menerus seperti variabel global.
- Reusability & Testing (4 poin): Fungsi menjadi pure function → mudah diuji, dipanggil berulang dengan input berbeda tanpa khawatir state global tercemar.
- Prinsip Clean Code: Menghindari variabel global = mengurangi coupling, meningkatkan maintainability.
📊 Rubrik Penilaian:
| Kriteria | Skor Maksimal | Indikator |
|---|---|---|
| Kode fungsi dengan *args benar | 8 | Sintaks valid, menangani kasus kosong, mengembalikan hasil |
| Penjelasan keamanan data | 4 | Menyebutkan isolasi scope & pencegahan side effect |
| Penjelasan efisiensi memori | 4 | Menyebutkan Stack deallocation otomatis |
| Argumentasi tambahan (clean code) | 4 | Menyebutkan reusability, testing, maintainability |
🧮 Formula Perhitungan Nilai Akhir
📐 Rumus Nilai Akhir (Skala 0–100):
# Bobot: Objektif 60% + Esai 40%
nilai_objektif = (jumlah_benar / 45) × 100
nilai_esai = (total_skor_esai / 100) × 100
nilai_akhir = (nilai_objektif × 0.60) + (nilai_esai × 0.40)
# Contoh: Siswa benar 36 soal objektif & mendapat 75 poin esai
# nilai_objektif = (36/45) × 100 = 80
# nilai_esai = 75
# nilai_akhir = (80 × 0.60) + (75 × 0.40) = 48 + 30 = 78
nilai_objektif = (jumlah_benar / 45) × 100
nilai_esai = (total_skor_esai / 100) × 100
nilai_akhir = (nilai_objektif × 0.60) + (nilai_esai × 0.40)
# Contoh: Siswa benar 36 soal objektif & mendapat 75 poin esai
# nilai_objektif = (36/45) × 100 = 80
# nilai_esai = 75
# nilai_akhir = (80 × 0.60) + (75 × 0.40) = 48 + 30 = 78
📊 Predikat Nilai:
- 90 – 100: A (Sangat Baik / Mahir)
- 80 – 89: B (Baik)
- 70 – 79: C (Cukup)
- 60 – 69: D (Kurang / Perlu Remedial)
- < 60: E (Sangat Kurang)