Topik ini menetapkan bentuk proyek akhir modul Pengerjaan Proyek beserta lingkup fungsionalnya. Dua kandidat proyek dibandingkan menurut kriteria yang sama, satu kandidat dipilih beserta alasannya, dan komposisi berkas proyek ditetapkan. Setelah topik ini dibaca, batas lingkup proyek dan peran setiap berkasnya sudah pasti, yaitu data konfigurasi, inti validasi, demonstrasi pemakaian, dan pengujian.
Dua kandidat proyek#
Kandidat pertama adalah mesin konfigurasi tersemat untuk aplikasi host Pencatat, yaitu aplikasi induk catatan teks yang membawa penerjemah Lua di dalam prosesnya. Host menyediakan penyimpanan catatan dan jendela aplikasi, sedangkan lapisan skrip menyediakan aturan yang mengatur perilaku tampilan dan penyimpanan, misalnya nama tema, warna, dan batas panjang catatan. Tugas proyek adalah membangun lapisan skrip tersebut beserta seluruh penopangnya, mulai dari data konfigurasi, mesin validasi, demonstrasi pemakaian, sampai pengujian.
Kandidat kedua adalah gim kecil tebak angka yang berjalan pada terminal, yaitu permainan dengan beberapa ronde tebakan, skor, dan aturan yang berulang setiap rondenya. Gim semacam ini menyentuh pengelolaan masukan dan keadaan permainan, tetapi sebagian besar fungsinya berupa alur kendali sederhana. Kedua kandidat sama-sama dapat dijalankan tanpa pustaka tambahan, sehingga pemilihan memerlukan kriteria yang lebih rinci. Perbandingan menurut kriteria yang sama diperlihatkan pada tabel berikut.
| Kriteria | Mesin konfigurasi tersemat | Gim tebak angka |
|---|---|---|
| Lingkungan eksekusi | penerjemah Lua dan terminal saja | penerjemah Lua dan terminal saja |
| Cakupan siklus perangkat lunak | data, validasi, error, pengujian, dan dokumentasi menyatu pada satu komponen inti | sebagian besar fokusnya pada alur permainan |
| Bentuk hasil yang dapat diperiksa | table konfigurasi final beserta daftar pelanggaran | skor dan riwayat ronde |
| Kaitan dengan tema jalur | memperagakan penyematan Lua pada aplikasi host | tidak menyentuh penyematan |
Kriteria pemilihan#
Kriteria pertama menuntut agar seluruh proyek dapat dieksekusi pada lingkungan latihan murni Lua, yaitu penerjemah Lua dan terminal tanpa pustaka tambahan apa pun. Proyek yang memenuhi kriteria ini dapat dijalankan ulang di mana saja, dan setiap potongan kode pada modul ini dieksekusi sungguhan dengan keluaran aslinya. Sisi host C dalam proyek cukup dijelaskan pada level model dan antarmuka, karena membangun host C lengkap memerlukan kepala pustaka Lua yang tidak tersedia di lingkungan latihan.
Kriteria kedua menuntut lingkup yang kecil tetapi menutup seluruh siklus perangkat lunak, yaitu penyusunan data, validasi, penanganan error, pengujian, dan dokumentasi. Lingkup kecil menjaga perhatian tetap pada mekanisme, sedangkan cakupan penuh membuat setiap tahap siklus benar-benar dikerjakan dan bukan hanya dibicarakan. Proyek yang terlalu besar menyisakan tahap akhir yang dikerjakan asal selesai, sedangkan proyek yang terlalu kecil tidak sempat menyentuh penanganan error dan pengujian. Dua kandidat diuji terhadap kedua kriteria ini, dan kandidat gim tebak angka mulai terpaut pada cakupan siklusnya karena validasi dan dokumentasinya berdiri terpisah dari inti permainan.
Keputusan dan lingkup fungsional#
Kandidat yang dipilih adalah mesin konfigurasi tersemat. Keputusan ini mengikuti kedua kriteria secara langsung, karena mesin konfigurasi berjalan sepenuhnya dengan penerjemah Lua dan siklusnya menutup data hingga dokumentasi. Lingkup fungsional yang dijanjikan terdiri atas empat kelompok aturan berikut.
- tema tampilan, yaitu nama tema, warna, dan ukuran teks antarmuka
- batas panjang catatan, yaitu jumlah karakter maksimum untuk satu catatan
- pola nama berkas, yaitu pola pencocokan Lua yang menentukan nama berkas catatan yang sah
- label antarmuka, yaitu teks label yang ditampilkan aplikasi pada elemen antarmukanya
Bentuk data kandidat yang menjadi sasaran validasi mesin diperlihatkan pada potongan berikut. Kandidat berbentuk table bersarang yang mengikuti kelompok aturan di atas, dan mesin membandingkan setiap kuncinya terhadap skema. Data semacam ini menjadi sasaran seluruh pengolahan pada modul ini.
-- bentuk data kandidat yang menjadi sasaran validasi mesin
local kandidat = {
tema = {
nama = "terang",
warna = "#fafafa",
ukuran_teks = 16,
},
aturan = {
batas_panjang = 2500,
pola_berkas = "catatan%d+",
},
konten = {
label = "Catatan pribadi",
},
}
-- pencetakan dilakukan satu per satu agar urutannya deterministik
print("tema.nama = " .. kandidat.tema.nama)
print("tema.warna = " .. kandidat.tema.warna)
print("tema.ukuran_teks = " .. tostring(kandidat.tema.ukuran_teks))
print("aturan.batas_panjang = " .. tostring(kandidat.aturan.batas_panjang))
print("aturan.pola_berkas = " .. kandidat.aturan.pola_berkas)
print("konten.label = " .. kandidat.konten.label)tema.nama = terang
tema.warna = #fafafa
tema.ukuran_teks = 16
aturan.batas_panjang = 2500
aturan.pola_berkas = catatan%d+
konten.label = Catatan pribadiPola catatan%d+ menerima nama berkas yang diawali kata catatan dan diakhiri deret angka, misalnya catatan1 dan catatan42. Host Pencatat menggunakan pola ini setiap kali menyimpan catatan baru, sehingga nama berkas yang tidak cocok dapat ditolak sebelum berkasnya ditulis. Nilai kandidat yang melanggar aturan, misalnya ukuran teks di bawah 8, diganti nilai bawaannya oleh mesin, sehingga host selalu menerima konfigurasi final yang lengkap. Keempat kelompok aturan di atas menjadi batas lingkup untuk seluruh modul.
Komposisi komponen proyek#
Proyek terdiri atas empat berkas Lua dengan peran sebagai berikut.
konfigurasi.luamenyimpan data konfigurasi dan konten berbentuk table, yaitu tema, aturan, dan label antarmukamesin.luamemuat validasi berbasis skema, penerapan nilai bawaan, dan resolusi konfigurasi finaldemo.luamemperagakan pemakaian mesin pada kandidat konfigurasiuji-mesin.luaberisi test harness, yaitu kerangka pengujian beserta kasus ujinya
Pembagian peran ini menjaga pemisahan data, inti mesin, demonstrasi, dan pengujian. Mesin dibangun secara bertahap, sehingga berkas yang sama dapat muncul di beberapa topik dengan kemampuan yang bertambah, dan setiap topik menyertakan salinan berkas pada versi yang sedang dibahasnya.
Peran lapisan skrip pada aplikasi tersemat layak ditegaskan di sini. Lapisan skrip adalah tempat pengguna menyesuaikan perilaku aplikasi tanpa mengubah kode host, karena host membaca hasil pengolahan skrip pada saat aplikasi berjalan. Mesin konfigurasi memperagakan peran tersebut dengan cara yang paling sederhana, yaitu mengubah table data menjadi konfigurasi final yang sah. Komponen lain pada proyek, mulai dari berkas data sampai pengujian, hanyalah penopang bagi peran itu.
Ringkasan#
- Mesin konfigurasi tersemat dipilih karena memenuhi kedua kriteria, yaitu eksekusi murni Lua dan cakupan siklus perangkat lunak dalam lingkup kecil.
- Lingkup fungsional mencakup empat kelompok aturan, yaitu tema tampilan, batas panjang catatan, pola nama berkas, dan label antarmuka.
- Proyek terdiri atas empat berkas, yaitu
konfigurasi.lua,mesin.lua,demo.lua, danuji-mesin.lua. - Nilai kandidat yang melanggar aturan diganti nilai bawaannya, sehingga host selalu menerima konfigurasi final yang lengkap.
Referensi#
- Manual Referensi Lua 5.4 — Lua.org — Rujukan perilaku table, fungsi dasar, dan pustaka string yang menjadi dasar seluruh komponen proyek.
- Programming in Lua, edisi keempat — Lua.org — Buku rujukan Lua yang menopang pemahaman table dan perancangan lapisan skrip pada proyek ini.