Pemilihan proyek

Memilih masalah yang padat teks dan data serta cocok untuk Perl, mendefinisikan lingkup, dan menetapkan kriteria selesai.

Daftar isi

Topik ini membuka modul pengerjaan proyek dengan tiga keputusan yang menentukan jalannya seluruh proyek, yaitu pemilihan masalah, penetapan lingkup, dan penulisan kriteria selesai. Pembahasannya menggunakan satu proyek yang menjadi benang merah modul ini, yakni program rekap nilai ujian. Setelah topik ini diikuti, alasan proyek tersebut cocok untuk Perl dapat dijelaskan, batas-batasnya terdefinisi secara tertulis, dan kemajuannya dapat diperiksa melalui daftar kriteria yang terukur.

Masalah yang cocok untuk Perl#

Perl dirancang untuk mengolah teks, sehingga proyek yang tepat adalah proyek yang padat teks dan data. Masalah semacam ini memiliki ciri yang dapat dikenali sebelum kode ditulis. Masukannya berupa berkas teks seperti log, laporan sistem, atau tabel sederhana. Pengolahannya bekerja baris demi baris, misalnya memilah, memvalidasi, lalu merangkum isi baris. Pola yang perlu dikenali dari teks dinyatakan dengan ekspresi reguler. Keluarannya juga berupa teks, umumnya berupa ringkasan atau laporan.

Proyek yang memenuhi keempat ciri tersebut lazim selesai dengan kode yang relatif pendek, karena kekuatan inti Perl, yaitu penguraian teks dan agregasi data, langsung terpakai. Sebaliknya, masalah yang menuntut antarmuka grafis, pemrosesan waktu nyata, atau komputasi numerik berat bukan ranah terkuatnya, sehingga biaya pengerjaannya jauh lebih besar daripada keuntungannya. Kecocokan masalah dengan bahasa inilah keputusan pertama yang perlu diambil, sebelum pertimbangan tentang desain dan kode dimulai. Pemilihan yang salah pada tahap ini tidak dapat diperbaiki oleh kedisiplinan menulis kode di tahap berikutnya.

Proyek terpilih: rekap nilai ujian#

Proyek yang menjadi benang merah modul ini adalah program rekap nilai ujian. Masukannya berupa berkas teks yang setiap barisnya memuat nama siswa dan satu nilai yang dipisahkan tanda titik koma. Satu siswa boleh muncul pada beberapa baris karena setiap baris mewakili tugas atau sesi penilaian yang berbeda. Tugas programnya adalah mengelompokkan nilai per siswa, menghitung rata-rata setiap siswa, lalu menyusun statistik kelas berupa nilai tertinggi, nilai terendah, rata-rata keseluruhan, dan jumlah nilai.

Berkas contoh berikut menjadi acuan format masukan sepanjang modul ini.

text Contoh: isi berkas data
Ali;80
Budi;75
Ali;90
Citra;88
Budi;65
Dewi;79

Berkas di atas memuat enam baris untuk empat siswa, dan Ali memiliki dua nilai yang kelak dirata-ratakan. Masalah ini memenuhi seluruh ciri pada bagian sebelumnya, yaitu masukan berupa teks, aturan penguraian yang sederhana, pengolahan berupa agregasi baris, dan keluaran berupa laporan teks. Angka pada contoh sengaja dipilih kecil agar setiap hasil perhitungan dapat diperiksa ulang dengan hitungan tangan, sehingga kebenaran program dapat dibuktikan dan bukan sekadar diasumsikan.

Menjaga lingkup tetap kecil#

Lingkup proyek menyatakan batas pekerjaan yang dijanjikan kepada penggunanya. Lingkup yang kecil dan tertulis membedakan proyek yang selesai dari proyek yang terus bertambah, karena setiap ide baru dapat diuji dengan satu pertanyaan, yaitu apakah ide itu termasuk janji yang sudah dibuat. Untuk proyek rekap nilai ujian, lingkupnya dinyatakan sebagai tabel berikut.

Masuk lingkupDi luar lingkup
Format baris nama;nilaiFormat CSV dengan koma di dalam tanda kutip
Nilai 0 sampai 100, baris tidak valid dilaporkanKoreksi nilai secara manual
Rata-rata per siswa dan statistik kelasPeringkat siswa dan prediksi nilai
Laporan teks ke layarGrafik, basis data, dan antarmuka web

Kedua kolom sama pentingnya. Kolom kiri menahan pekerjaan tetap terarah, sedangkan kolom kanan menjaga ide yang baik agar tidak hilang, sebab ide di luar lingkup dicatat sebagai daftar lanjutan dan bukan dibuang begitu saja. Keputusan menambah fitur baru tetap dapat diambil kemudian, tetapi keputusan itu diambil secara sadar setelah lingkup yang ada tuntas, bukan di tengah jalan ketika kode sedang ditulis.

Prototipe kecil sebagai uji kelayakan#

Prototipe adalah versi terkecil dari program yang sudah membaca data dan menghasilkan keluaran. Tujuannya bukan menjadi bagian akhir proyek, melainkan membuktikan bahwa aturan penguraian dan pengelompokan data benar sebelum arsitektur dirancang. Berkas berikut membaca data dari bagian __DATA__, yaitu baris-baris di akhir skrip yang dapat dibaca program melalui filehandle DATA, sehingga prototipe ini tidak memerlukan berkas lain sama sekali.

perl prototipe.pl
use strict;
use warnings;

# prototipe kecil: membaca baris nama;nilai lalu menghitung rata-rata per siswa
my %nilai_per_siswa;

while ( my $baris = <DATA> ) {
    chomp $baris;
    next unless $baris =~ /\S/;

    my ( $nama, $nilai ) = split /;/, $baris;
    push @{ $nilai_per_siswa{$nama} }, $nilai;
}

for my $nama ( sort keys %nilai_per_siswa ) {
    my @nilai  = @{ $nilai_per_siswa{$nama} };
    my $jumlah = 0;
    foreach my $n (@nilai) {
        $jumlah += $n;
    }
    printf "%s: %s (rata-rata %.2f)\n",
        $nama, join(', ', @nilai), $jumlah / @nilai;
}

__DATA__
Ali;80
Budi;75
Ali;90
Citra;88
text Keluaran
Ali: 80, 90 (rata-rata 85.00)
Budi: 75 (rata-rata 75.00)
Citra: 88 (rata-rata 88.00)

Keluaran memperlihatkan dua hal yang dicari oleh prototipe, yaitu keberhasilan mengurai baris menjadi nama dan nilai serta keberhasilan mengumpulkan nilai siswa yang sama dalam satu kelompok. Dengan terbuktinya kedua mekanisme ini, risiko terbesar proyek sudah dihilangkan, dan sisa pekerjaannya berupa perapian struktur, penanganan data yang tidak valid, serta penyusunan laporan. Kode prototipe tidak disalin mentah ke proyek, melainkan digunakan sebagai acuan perilaku ketika subrutin modul ditulis.

Kriteria selesai yang terukur#

Kriteria selesai adalah daftar pernyataan yang dapat diperiksa dengan menjalankan perintah, bukan dengan penilaian rasa. Rumusan yang terukur mengubah pertanyaan tentang kesiapan proyek menjadi pemeriksaan yang objektif. Untuk proyek ini, kriterianya dinyatakan sebagai berikut.

  1. Perintah perl rekap.pl tanpa argumen membaca nilaipercobaan.txt dan mencetak laporan yang memuat rata-rata per siswa beserta statistik kelas.
  2. Setiap baris tidak valid dilaporkan ke STDERR, dilompati, dan dihitung jumlahnya, sehingga program tetap menghasilkan laporan dari data yang tersisa.
  3. Berkas data yang tidak ada menghentikan program dengan pesan yang menjelaskan penyebabnya dan kode keluar bukan nol.
  4. Perintah perl nilai-uji.t lulus seluruh pengujian tanpa peringatan dari use warnings.
  5. Seluruh angka pada laporan berasal dari perhitungan, tanpa satu pun yang ditulis langsung dalam kode.

Setiap butir berbentuk perintah dan hasil yang dapat diperiksa, sehingga status proyek tidak pernah menjadi perkiraan. Butir keempat penting untuk dicermati, karena kriteria itu menuntut adanya pengujian otomatis. Dengan demikian pengujian menjadi bagian dari lingkup proyek sejak awal, dan bukan tambahan yang dikerjakan apabila ada sisa waktu.

Kesalahan umum#

  1. Lingkup melebar saat proyek berjalan, misalnya tiba-tiba menambah grafik atau format berkas kedua, sehingga pekerjaan tidak pernah mencapai titik selesai. Perbaikannya adalah mencatat permintaan baru pada daftar ide lanjutan dan menuntaskan kriteria selesai yang sudah ada lebih dahulu.
  2. Kriteria dirumuskan tanpa ukuran, misalnya “laporan harus rapi”, sehingga status selesai tidak pernah dapat dipastikan. Perbaikannya adalah merumuskan ulang setiap kriteria menjadi perintah dan hasil yang dapat diperiksa.
  3. Data diasumsikan selalu bersih, sehingga kebijakan untuk baris yang tidak valid baru dipikirkan ketika program hampir selesai. Perbaikannya adalah menyiapkan berkas data bermasalah sejak awal sebagai bagian dari lingkup.

Ringkasan#

  • Masalah yang cocok untuk Perl padat teks dan data, diolah baris demi baris, dan berujung pada laporan teks.
  • Lingkup kecil yang tertulis, lengkap dengan daftar “di luar lingkup”, menjaga proyek tetap bergerak menuju selesai.
  • Prototipe terkecil, misalnya dengan data dari __DATA__, membuktikan aturan penguraian sebelum arsitektur dirancang.
  • Kriteria selesai dinyatakan sebagai perintah dan hasil yang dapat diperiksa, termasuk lulusnya pengujian otomatis.

Referensi#