Professional Documents
Culture Documents
PENDAHULUAN
1.1 PENGENALAN
Pengaturcaraan adalah satu kursus yang sangat penting dalam bidang sains komputer atau
teknologi maklumat. Antara bahasa-bahasa pengaturcaraan yang digunakan untuk
menerapkan konsep-konsep pengaturcaraan ialah C, C++, Java, Pascal, dan Basic.
Dalam subjek ini pelajar perlu mempelajari sintaks dan had keupayaan sesuatu
bahasa komputer dan dalam masa yang sama, untuk membangunkan proses kerja yang
boleh digunakan untuk menyelesaikan masalah. Ia adalah satu mata pelajaran yang
memerlukan pelbagai lapisan hierarki kemahiran diaktifkan dalam masa yang sama (Bloom,
1956).
Memandangkan pelajar perlu membuat latihan yang banyak untuk subjek ini,
pensyarah perlu mengambil inisiatif untuk menyediakan soalan dan masalah yang pelbagai.
Pensyarah tidak boleh menyerahkan kepada pelajar untuk membuat latihan sendiri secara
sukarela. Membuat latihan secara sukarela kurang diamalkan dikalangan pelajar. Ini kerana
pelajar perlu menyiapkan banyak tugasan daripada subjek yang lain (Ala-Mutka et al.,
2004). Semakin banyak latihan yang diberi, semakin banyak pula beban yang terpaksa
2
dipikul oleh pensyarah untuk memeriksa, memberi markah dan juga memberi timbal balas
(komen) kepada latihan-latihan yang dihantar oleh pelajar. Walau bagaimana pun, beban
pensyarah boleh dikurangkan sekiranya mereka dibekalkan dengan alatan atau sistem yang
boleh membantu mereka menyemak latihan pelajar secara automatik. Di sini kita akan
nampak kepentingan sistem penyemak automatik latihan aturcara.
Banyak cara penilaian yang dilakukan untuk menilai sejauh mana tahap kemajuan
pelajar dalam subjek ini. Antaranya soalan objektif, betul salah, betulkan program, dapatkan
output dan tugasan penyelesaian masalah dengan membangunkan aturcara. Tugasan
membangunkan aturcara adalah tugasan yang paling memakan masa untuk disemak dan
diberi markah. Lagi pula ia adalah rutin yang membosankan, berulang kali dilakukan dan
juga mengambil masa yang panjang (Venables dan Haywood, 2001).
Walaupun terdapat banyak sistem penyemak aturcara automatik yang telah dikaji
dan digunakan, tetapi kebanyakan sistem tersebut menjurus kepada penyemakan melalui
pendekatan dinamik. Pendekatan ini memerlukan kod aturcara pelajar dilaksanakan dan
3
diuji dengan set data ujian tertentu untuk menentukan kebetul-salahan aturcara. Kaedah ini
akan menambahkan beban pelayan yang mana boleh menyebabkan sistem tergendala dan
risiko kepada keselamatan sistem. Menurut Chu et al. (1997), penentuan kebetul-salahan
aturcara dengan menggunakan set data ujian adalah kaedah yang sangat mahal dan sukar
dilakukan.
Kajian ini akan menghasilkan aplikasi web yang mampu membandingkan satu jawapan
latihan aturcara C pelajar dengan beberapa model penyelesaian (skema) yang disediakan
oleh pengajar, dan akhirnya memberikan markah untuk latihan tersebut berdasarkan peratus
persamaan antara jawapan pelajar dengan model penyelesaian.
Skop fungsi aturcara C yang dicadangkan dalam pembangunan prototaip pentaksir aturcara
automatik ini meliputi fungsi-fungsi yang terkandung di dalam bahagian kawalan program
aturcara C. Ianya meliputi perkara-perkara seperti jenis data (int, long, short, float dan
char), pembolehubah, pengisytiharan pembolehubah, umpukan, operator, rentetan, struktur
kawalan, dan pernyataan printf, scanf dan getch.
Terdapat tiga kategori jenis yang disokong oleh aplikasi ini. Jenis data tersebut merupakan
jenis data asas dalam bahasa C. Memandangkan rentetan dalam C dikendalikan oleh
tatasusunan, maka ia tidak disenaraikan dalam jenis data asas. Berikut adalah jenis data
yang disokong oleh aplikasi.
4
Terdapat dua aspek pembolehubah yang terdapat dalam spesifikasi iaitu nama dan
pengisytiharan pembolehubah.
b) Pengisytiharan pembolehubah.
Pembolehubah mesti diisytiharkan dalam bahasa C dengan jenis data yang tetap.
Contohnya :
int noPendaftaran;
Pengisytiharan ini menyatakan bahawa pembolehubah noPendaftaran adalah
pemboleh ubah yang akan hanya menyimpan nombor integer.
Sekiranya pengaturcara ingin mengisytiharkan banyak pemboleubah dalam baris
yang sama, ia boleh dilakukan dengan menggunakan koma sebagai pemisah.
5
Contohnya :
int noPendaftaran, noIC, pemandu1;
Untuk mengumpukkan suatu nilai kepada pemboleh ubah, lakukan dengan menggunakan
tanda (=) sebagai simbol operasi tersebut.
Contoh:
int nombor1, nombor2;
nombor1=5;
nombor2=nombor1;
float PI, jejari, isipadu;
PI=3.142;
char hurufVokal;
hurufVokal=’a’;
Perhatikan pengisytiharan untuk pemboleh ubah jenis aksara memerlukan tanda kutip
tunggal sebagai pengurung kepada nilai lateral.
1.4.4 Komen
1.4.5 Operator
a) Aritmetik - Operator aritmetik yang disokong dalam aplikasi ini ialah operator
tambah (+), tolak (-), darab (*), bahagi (/), modulo (%), dan pembuka dan penutup
kurungan ( ).
b) Tokok dan Susut (seperti i++ , i-- , --i dan ++i).
c) Hubungan/Perbandingan – Operator yang bertindak sebagai operator perbandingan
seperti sama dengan (==), tak sama dengan(!=), lebih kecil (<), lebih besar (>),
lebih kecil atau sama dengan (<=), lebih besar atau sama dengan (>=).
6
Sekiranya terdapat sebarang ralat semasa analisis leksikal dan analisis tatabahasa analisis
akan dihentikan. Aplikasi kemudian akan memberitahu kepada pengguna bahawa terdapat
ralat di dalam aturcara dan meminta ralat tersebut dinormalkan untuk meneruskan proses
seterusnya.
1.5 METODOLOGI
Kajian ini dimulakan dengan membuat tinjauan perpustakaan untuk melihat sejauh mana
penyelidikan seperti ini telah dibuat oleh penyelidik-penyelidik bidang pentaksir automatik
tugasan pengaturcaraan (PATP).
Dariapada kajian tersebut, penulis dapat mengenalpasti dua pendekatan utama yang
diguna pakai dalam PATP iaitu dinamik dan statik. Penulis mendapati kurang kajian dibuat
kepada pendekatan statik. Menyedari hakikat ini penulis cuba untuk mendalami teknik-
teknik yang digunakan dalam pendekatan statik. Penulis mengambil keputusan untuk
menyelidik lebih lanjut teknik perbandingan bukan-struktur yang dikategorikan dalam
pendekatan statik PATP.
Terdapat dua pengguna utama yang perlu memasukkan aturcara masing-masing.. Pelajar
memasukkan jawapan aturcara untuk soalan yang diberi. Sebelum itu pengajar memasukkan
beberapa aturcara skema (untuk tujuan prototaip, aplikasi ini akan menerima hanya tiga
skema jawapan sahaja).
Aturcara jawapan pelajar akan melalui proses analisis leksikal, dan penjanaan kod
pseudo untuk menghasilkan kod pseudo bagi jawapan pelajar. Begitu juga yang berlaku
skema jawapan aturcara pengajar. Cuma proses analisis leksikal dan penjanaan kod pseudo
akan berlaku berulang-kali untuk kesemua skema jawapan yang telah disediakan.
Seterusnya kod pseudo jawapan pelajar akan dibandingkan dengan satu daripada
kod pseudo skema. Perbandingan ini akan menghasilkan peratus kesamaan antara kod
pseudo pelajar dengan satu kod pseudo skema. Peratus persamaan ini akan disimpan
sementara. Proses perbandingan kod pseudo pelajar dengan kod pseudo skema akan
berulang sehingga kod pseudo pelajar dibandingkan dengan kesemua kod pseudo skema.
Setiap proses perbandingan akan menghasilkan peratus kesamaan yang mungkin berbeza.
Kajian ini akan menghasilkan beberapa sumbangan kepada bidang yang dikaji. Antara hasil
kajian tersebut ialah;
juga akan mencari peratus persamaan yang tertinggi, sebagai markah kepada
jawapan pelajar tersebut.
b) Satu lagi kaedah dalam penyemakan automatik tugasan pengaturcaraan (PATP)
melalui pendekatan analisis statik dapat dicadangkan.
Tesis ini mempunyai lima bab perbincangan yang berkesinambungan antara satu dengan
yang lain. Setiap bab membincangkan topik-topik yang berkaitan dengan kajian yang
dibuat. Bab I merangkumi pengenalan kajian, pernyataan masalah, metodologi, objektif,
hasil dan sumbangan kajian. Bab ini merupakan ringkasan kepada keseluruhan kajian.
Bab III pula menerangkan reka bentuk terperinci aplikasi yang dibangunkan. Tiga
modul utama akan diperjelaskan dengan lebih terperinci. Modul-modul tersebut ialah
penganalisis leksikal, penjana kod pseudo dan pembanding kod pseudo. Perwakilan yang
digunakan ialah rajah UML untuk menerangkan hubungan antara kelas yang terlibat dalam
aplikasi. Manakala kod pseudo pula adalah perwakilan untuk menerangkan algoritma-
algoritma utama.
Bab VI adalah penjelasan mengenai implementasi dan pengujian. Dalam bab ini
penulis akan menerangkan bagaimana reka bentuk yang telah dirancang diimplementasikan
dalam pembangunan aplikasi. Aplikasi yang dibangunkan akan diuji dengan pelbagai
contoh aturcara untuk menentukan ketepatan perbandingan yang dibuat.
9
BAB II
2.1 PENGENALAN
Penyemak automatik tugasan pengaturcaraan (PATP) adalah kaedah yang semakin popular
untuk menyemak, menilai dan memberi markah latihan aturcara pelajar. Seperti yang
dicadangkan oleh namanya, kaedah ini akan membuat penyemakan dan penilaian secara
automatik dengan berbantukan sistem komputer. Dengan ini dapat membantu (walaupun
bukan 100 peratus) pensyarah daripada melakukan kerja-kerja penyemakan latihan secara
manual.
Bidang ini telah lama dikaji semenjak 1960 lagi oleh Hollingsworth (1960). Dalam
kajiannya, beliau telah membangunkan PATP untuk menyemak dan menilai latihan aturcara
penghimpun pada kad tebuk. Semenjak itu, banyak penyemak automatik tugasan
pengaturcaraan dibangunkan untuk menyokong bahasa pengaturcaraan yang lain.
Bab ini akan membincangkan serba sedikit tentang pembangunan beberapa PATP
yang telah dibangunkan di dalam dan juga luar negara. Perbincangan meliputi sejarah,
kelebihan dan kelemahan PATP, dan juga pendekatan yang digunakan dalam PATP yang
terdahulu. Fokus diberikan kepada PATP yang menggunakan kaedah-kaedah yang
dikategorikan dalam pendekatan analisis statik. kaedah-kaedah tersebut ialah penentuan
gaya pengaturcaraan, pengesanan ralat aturcara (sintaksis atau semantik), penilaian metrik
perisian, penilaian struktur aturcara, penilaian bukan-struktur, penilaian dengan kata kunci,
pengesanan plagiarisme dan penilaian diagram.
11
a) Menjimatkan masa dan mengurangkan beban pengajar (Truong et. al., 2005).
Dengan menggunakan sistem ini, pensyarah tidak perlu menguntukkan masa yang
banyak untuk menyemak semua jawapan pelajar. Mereka hanya perlu
menguntukkan masa yang minimal untuk membuat pengesahan dan membaca
laporan yang dijana oleh sistem. Dengan ini mereka boleh memberikan lebih
perhatian kepada pelajar yang mendapat markah yang rendah daripada latihan yang
diberikan. Pengajar secara kebiasaannya terlibat dengan persediaan mengajar,
memberi kuliah, mengendali tutorial, menguruskan jabatan atau fakulti, membuat
penyelidikan, menulis artikel atau buku dan sebagainya. Ini menyukarkan mereka
untuk memberi tumpuan kepada aktiviti menyemak latihan yang banyak dan
berulang.
c) Maklum balas yang lebih cepat (Truong et. al., 2005). Pelajar pengaturcaraan
perlukan maklum balas yang cepat dalam usaha untuk mengetahui kelemahan
mereka dan di mana kesilapan yang telah dilakukan. Dengan ini mereka boleh
memperbetulkan kesilapan tersebut dan tidak diulangi untuk latihan yang akan
datang. Memandangkan beban pensyarah yang sangat banyak, mereka mungkin
tidak dapat menyemak dan menilai latihan dengan kadar yang segera. Ini
menyebabkan pelajar tidak mendapat maklumat tentang setakat mana keupayaan
mereka dalam subjek pengaturcaraan tersebut.
12
d) Mampu mengesan plagiat dengan lebih mudah (Wise, 1993). Terdapat sistem yang
mampu mengesan plagiarisme di dalam jawapan pelajar. Sekiranya plagiat dapat
dikesan dengan lebih awal, pensyarah berkesempatan untuk memanggil pelajar-
pelajar yang terlibat dan memberikan konsultasi.
e) Tugasan pelajar dapat diurus dengan lebih cekap (Ala-Mutka, 2005). Sekiranya
kaedah manual digunakan, pengajar perlu mengumpulkan jawapan dalam bentuk
cetakan pada kertas, atau ada pelajar yang menghantar dalam e-mel, mungkin
dalam bentuk salinan lembut dalam cakera keras atau disket. Medium yang
pelbagai ini sangat sukar untuk diselenggara dan sangat mudah untuk tersilap letak
atau tercicir. Dengan penggunaan sistem ini pengajar boleh mencapai semua
jawapan pelajar melalui satu medium sahaja.
Walau apa jua bahasa pengaturcaraan yang disokong oleh sistem tersebut, dua pendekatan
yang biasanya diguna pakai; sama ada penyemakan secara dinamik atau statik.
Memandangkan tiada pendekatan tunggal yang mampu memuaskan penyemakan aturcara
secara menyeluruh, biasanya sistem penyemak automatik tugasan pengaturcaraan
menggabungkan beberapa pendekatan atau peralatan yang menyemak aturcara daripada
pelbagai aspek (Rohaida, 2003).
13
Penilaian menggunakan pendekatan analisis statik adalah satu kaedah untuk mengumpulkan
maklumat mengenai kod aturcara tanpa perlu melaksanakannya (Ala-Mutka, 2005). Ini
adalah antara kaedah yang digunakan untuk mengesan ralat semantik dan sintaksis. Kaedah
ini juga berguna untuk mengesan gelung tak berpenghujung, pernyataan yang mungkin
tidak akan dilaksanakan, mengesan indentasi dalam aturcara, menilai gaya pengaturcaraan
dan sebagainya.
Kebanyakan sistem PATP menggunakan pendekatan dinamik dengan menggunakan set data
ujian untuk menentukan kebolehan program berfungsi dengan betul. Namun terdapat
beberapa ciri-ciri dalam penilaian aturcara yang hanya memerlukan implementasi
14
Terdapat keperluan untuk penulis aturcara menulis dengan gaya tertentu untuk memastikan
aturcara mudah dibaca dan diselenggara. Aturcara yang berkualiti mestilah mempunyai
indentasi supaya mudah dibaca. Pembolehubah dan pengecam yang digunakan mestilah
mempunyai maksud yang memudahkan orang lain untuk memahami apa yang dilakukan
oleh aturcara (Marini et. al. 2002). Faktor-faktor tersebut perlu diambil kira untuk
menentukan aturcara yang berkualiti. Antara sistem yang dibangunkan untuk menangani
keperluan penyemakan gaya pengaturcaraan ini ialah Style++ (Ala-Mutka et. al., 2004).
Semakan Style++ tertumpu kepada penggunaan komen, baris kosong, penerangan mengenai
program, penamaan pembolehubah, struktur program, skop pembolehubah, layout program
dan penggunaan pemalar.
Ralat sintaksis atau semantik boleh dikesan sebelum aturcara dihantar untuk proses
seterusnya. Kebiasaannya proses ini mampu dilakukan dengan berkesan menggunakan
pengkompil. Pengkompil masa kini sangat maju dan mampu menunjukkan di mana ralat
berlaku. Terdapat juga pengkompil yang mampu memberikan cadangan untuk
membetulkan ralat sintaksis atau semantik yang terdapat dalam aturcara.
Daripada segi semantik pula, terdapat PATP yang mampu mengesan struktur
aturcara yang mencurigakan seperti pengesan gelung yang tidak berkesudahan, dalam
Ceilidh (Foxley et. al., 1996).
Aplikasi seperti CAP (Code Analyzer for Pascal) dibangunkan oleh Schorsch (1995)
mampu mengesan ralat sintaksis, ralat logik dan juga ralat daripada segi gaya (style error)
untuk Pascal. Apa yang menarik dalam aplikasi ini ialah kedudukan ralat dan apa kesalahan
yang berlaku dinyatakan dengan terperinci. Terdapat juga cadangan pembetulan yang
sangat komprehensif untuk membantu pelajar. Aplikasi ini mempunyai objektif yang sangat
15
besar iaitu ia cuba menggantikan pengajar atau tutor dalam usaha pelajar membuat latihan
aturcara.
Banyak sistem PATP telah dibangunkan untuk mengendali skop ini, Ceilidh, BOSS (Joy
dan Luck, 1998), Style++ (Ala-Mutka et. al., 2004), CAP dan banyak lagi. Terdapat
beberapa metrik perisian yang diimplementasikan dalam sistem mereka. Antaranya ialah
McCabe (1976) yang mencadangkan kekompleksan cyclomatic yang digunakan dalam
Assyst (Jackson dan Usher, 1997), ELP (Truong et. al., 2004) dan Verilog Logiscope
WinViewer (Mengel dan Yerramilli, 1999).
bersambung ...
16
... sambungan
3 NOC (Number Menyukat bilangan kelas dalam aturcara Tegarden et. al.
of Classes) (1995).
Melalui kaedah ini, kod aturcara yang dihantar akan ditentukan sama ada struktur program
menepati kehendak atau tidak. Cara yang biasa dilakukan adalah membandingkan kod
aturcara pelajar dengan model penyelesaian yang disediakan oleh pengajar.
Dalam kajian Truong et. al. (2004), kod aturcara pelajar diterjemahkan kepada
pohon sintaksis abstrak (Abstract Syntax Tree, AST) dalam bentuk perwakilan XML
(Badros, 2000). Struktur abstrak yang telah terhasil akan dibandingkan dengan struktur
abstrak model melalui kaedah analisis persamaan struktur (structural similarity analysis).
Daripada kaedah ini, aturcara pelajar akan ditentukan sama ada ia sepadan dengan abstrak
model atau tidak.
Norshuhani et. al. (2006) pula mencadangkan kaedah analisis kesamaan bukan-struktur
(non-structural similarity analysis) untuk mencari persamaan antara aturcara pelajar dengan
aturcara model daripada pengajar. Kaedah ini mampu dilakukan dengan bantuan algoritma
pemetaan teks (text mapping) dan juga algoritma pencarian teks (text searching).
untuk masalah yang lebih rumit. Jadi dua kaedah ini hanya sesuai untuk permasalahan
aturcara untuk peringkat permulaan sahaja, (Thruong et. al., 2004).
Penilaian menerusi kaedah ini memerlukan sistem untuk mencari pernyataan dengan kata
kunci tertentu. Saikkonen (2001) telah membangunkan Scheme-robo untuk menilai latihan
aturcara yang ditulis dalam satu pengaturcaraan fungsian, Scheme. Terdapat latihan tertentu
yang tidak membenarkan pelajar menggunakan beberapa kata kunci dalam jawapan mereka.
Pengesan plagiarisme adalah aplikasi yang mampu untuk menentukan dua atau lebih kod
aturcara ditiru daripada satu aturcara lain. Plague adalah antara aplikasi yang awal yang
mampu mengesan plagiarisme yang berlaku pada kod aturcara menggunakan perbandingan
token menggunakan satu varian daripada kaedah Longest Common Subsequence (LCS). Ia
dibangunkan oleh Whale (1986) untuk menyokong bahasa Pascal, Prolog, Bourne Shell dan
Llama. Namun aplikasi ini dianggap tidak popular kerana terdapat kerumitan untuk
diimplementasi kepada bahasa pengaturcaraan yang lain (Granville 2002).
YAP (Yet Another Plague) adalah satu aplikasi pemadanan kod aturcara untuk
mengesan plagiat (Wise, 1994) yang menggunakan kaedah pemadanan metrik struktur
(Donaldson et. al., 1981). Dalam versi yang terkini, YAP3 menggunakan algoritma
pemadanan teks Running-Karp-Rabin Greedy-String-Tiling (RKR-GST). Algoritma ini
mampu untuk melakukan pemadanan teks dengan lebih berkesan dan cepat.
Terdapat juga beberapa PATP yang mampu melakukan fungsi-fungsi khas yang lain seperti
menyemak rajah carta alir, reka bentuk berasaskan objek dan juga menjalankan simulasi
18
untuk rajah litar elektronik (Symeonidis, 1998). Semua peralatan penyemakan tersebut
terdapat di dalam sistem CourseMaster dan ia dilakukan secara analisis statik. Penyemak
carta alir tersebut akan menterjemah carta alir pelajar kepada bahasa BASIC sebelum
dihantar kepada peralatan penyemakan dinamik untuk dinilai. Penyemak reka bentuk objek
akan menilai reka bentuk yang dihasilkan pelajar. Pengujian akan menentukan
kesempurnaan, kebetulsalahan, ketepatan dan hubungan antara objek yang betul. Litar logik
elektronik juga boleh direka dan dihantar kepada sistem penyemak, CircuitSim. CircuitSim
akan melakukan simulasi untuk menentukan penggunaan komponen elektonik yang betul,
pendawaian yang sempurna dan juga pengaliran arus yang tepat. Sebarang penggunaan
komponen yang tidak diperlukan dan juga pendawaian yang tidak sempurna akan
menyebabkan markah dikurangkan.
Bahagian 2.5.1 merupakan ringkasan kelebihan dan bahagian 2.5.2 merupakan ringkasan
kelemahan dalam pendekatan analisis statistik.
2.5.1 Kelebihan
a) Implementasi yang lebih mudah dan murah (Truong et. al. , 2004) kerana tidak
memerlukan pengkompil dan pelaksana aturcara.
b) Kurang membebankan pelayan (Truong et. al., 2004) dengan ketiadaan
pengkompil dan pelaksana.
c) Boleh dijalankan walaupun terdapat ralat dalam aturcara (Rohaida, 2003).
d) Tidak memerlukan input ujian (Rohaida, 2003).
e) Memberikan lebih fleksibiliti kepada jawapan pelajar (Norshuhaini et. al., 2006).
2.5.2 Kelemahan
2.6.1 Ceilidh/CourseMaster
Sistem ini pada asalnya dibangunkan oleh Universiti Nottingham sejak 1988 untuk
menyokong bahasa C (Foxley et. al., 1996). Sekarang sistem ini dinamakan CourseMaster
dan diubahsuai supaya mampu menyokong penulisan aturcara melalui pendekatan
berasaskan objek. Sistem ini telah mengalami evolusi dengan penyertaan beberapa
universiti yang lain sehingga mampu menyokong bahasa C++, SQL, Pascal, SML, Fortran
dan lain-lain lagi.
Sistem ini menggunakan kedua-dua pendekatan, statik dan dinamik. Apa yang
dilakukan oleh sistem ini untuk penilaian statik ialah;
a) penilaian susunan(layout) dan struktur aturcara,
b) pengesanan indentasi,
c) pemilihan pengecam,
d) mudah dibaca,
e) metrik kompleksiti,
f) penggunaan denotasi,
g) amaran keserabutan (penggunaan goto yang merumitkan aturcara)
h) pengesan struktur yang mencurigakan (untuk mengelakkan gelung yang tak
berkesudahan – infinite loop).
2.6.2 ELP
Truong et. al., (2004), telah membangunkan satu sistem ELP (Environment to Learning
Programming) untuk menyokong bahasa pengaturcaraan Java can C#. Beliau menggunakan
20
pendekatan analisis dinamik dan juga statik. Untuk bahagian analisis statik, perkara-perkara
berikut telah diambil kira dalam pembangunan sistem tersebut. Perkara-perkara tersebut
ialah analisis metrik kejuruteraan perisian dan analisis kesamaan struktur.
Dalam analisis metrik kejuruteraan perisian, perkara-perkara yang diambil kira oleh
penulis adalah seperti dalam Jadual 2.2.
Item Keterangan
Statistik program Mengira bilangan pembolehubah, kenyataan dan
ungkapan.
Pembolehubah bayangan Menentukan kehadiran pembolehubah yang sama
diisytihar dalam skop kelas dan skop metod.
Kerumitan cyclomatic Mengira bilangan keputusan logik dalam aturcara
Parameter tidak digunakan Memeriksa parameter yang tidak digunakan dalam
metod.
Ungkapan logik berganda Mengesan ungkapan logik berganda seperti
“X==true”
Pembolehubah yang tidak Mengesan pembolehubah yang diisytihar tetapi
digunakan tidak digunakan.
Nombor ajaib Pastikan penyelesaian pelajar tidak terlalu
bergantung pada nilai literal.
Had capaian Menentukan pembolehubah dan metod
menggunakan had capaian yang betul.
Pernyataan switch Memastikan pernyataan switch yang digunakan
mengandungi default, dan setiap case diakhiri
dengan break.
Bilangan aksara dalam baris Mengira bilangan aksara dalam satu baris
(maksimum 80).
Tiada tab Memastikan ruang kosong (space) digunakan
menggantikan tab sebagai indentasi.
kemungkinan terdapat banyak kaedah penyelesaian yang mungkin tidak terfikir oleh
pengajar dalam menyediakan skema. Ini akan merumitkan proses perbandingan kod pseudo
(Rich dan Wills, 1990).
Kaedah yang diimplementasikan dalam sistem ini adalah penjanaan AST (Abstract
Syntax Tree) yang diwakilkan dalam format XML, seperti contoh dalam Rajah 2.1. Kaedah
ini dicadangkan oleh Parr (2006) dalam perisian yang dibangunkannya, ANTLR (boleh
diperoleh dari http://antlr.org/). AST aturcara pelajar akan dibandingkan dengan AST yang
dibekalkan oleh pengajar. Dengan membandingkan kedua-dua AST, sistem ini dapat
mengesan sekiranya aturcara pelajar ada kesamaan dengan jawapan pengajar atau pun tidak.
Tetapi sistem ini hanya dapat memberi salah satu daripada dua keputusan, struktur yang
dibandingkan sama atau tidak sahaja.
<gap>
<statements>
<assignment>1</assignment>
<methodCall>1</methodCall>
<loop>
<condition>
<trueBranch>
<methodCall>1</methodCall>
</trueBranch>
<falseBranch>
<methodCall>1</methodCall>
</falseBranch>
</condition>
<assignment>1</assignment>
<methodCall>1</methodCall>
</loop>
</statements>
</gap>
Rajah 2.1 AST dalam format XML yang dicadangkan oleh Parr (2006)
Antara kelemahan perbandingan menggunakan AST ialah struktur yang dijana oleh
sistem terlalu ringkas. Struktur AST yang terlalu ringkas ini tidak dapat digunakan untuk
menilai kod, operator dan sintaksis yang terdapat dalam aturcara yang disemak.
2.6.3 WAGS
WAGS adalah antara PATP yang menggunakan sepenuhnya penilaian melalui pendekatan
analisis statik. Produk ini dibangunkan oleh sekumpulan penyelidik di Universiti Teknologi
22
Petronas. Sistem ini mampu menyokong beberapa bahasa pengaturcaraan seperti Visual
Basic, C dan Java. Keistimewaan sistem ini ialah ia mampu membandingkan kod aturcara
yang dihantar oleh pelajar dengan kod aturcara skema, iaitu skema jawapan kepada latihan
tersebut. Untuk kes tugasan dengan kemungkinan jawapan yang lebih daripada satu,
pengajar perlu menyediakan beberapa skema jawapan. Aturcara pelajar akan dibandingkan
dengan semua skema yang dibekalkan, dan markah yang tertinggi akan diambil sebagai
markah akhir tugasan tersebut.
Kaedah di atas mampu dilakukan dengan algoritma dalam Rajah 2.2 yang
dicadangkan oleh pembangun sistem tersebut.
i=N
Markah dan analisis
Rajah 2.2 Algoritma yang dicadangkan oleh Norshuhani et. al. (2005)
sepanjang proses pembandingan, terdapat struktur atau baris kod yang sama, markah akan
diberikan. Jika baris aturcara tidak sama dengan model penyelesaian, bahagian tersebut
akan ditandakan sebagai ralat, dan akan ditolak daripada markah terkumpul.
Untuk menangani kemungkinan model penyelesaian yang pelbagai, sistem ini akan
membandingkan aturcara jawapan pelajar dengan semua model penyelesaian yang
dibekalkan. Markah yang tertinggi daripada perbandingan untuk setiap model penyelesaian
akan dikira sebagai markah tugasan tersebut.
Antara kelemahan WAGS yang dapat dikenal pasti ialah ia tidak mengambil kira
tentang kedudukan pengisytiharan pembolehubah yang mungkin bertabur dalam kod
aturcara. Sekiranya pengisytiharan pembolehubah dapat dikumpulkan dan dilakukan
analisis yang berbeza, ketepatan perbandingan akan meningkat.
Ceilidh/CourseMaster, ELP dan WAGS adalah antara contoh-contoh aplikasi sedia ada
yang menggunakan pendekatan statik dalam mentaksir kod aturcara. Ceilidh/CourseMaster
memfokus kepada pengukuran metrik perisian, ELP lebih kepada struktur aturcara
keseluruhan dan WAGS terus kepada penilaian betul/salah kod aturcara. Aplikasi yang
dibangunkan ini cuba untuk meninjau pendekatan statik dengan menggunakan kod pseudo
sebagai fokus kajian.
2.7 RUMUSAN
Terdapat dua pendekatan utama dalam penilaian aturcara, dinamik dan statik. Penulis
mendapati bahawa pendekatan statik banyak digunakan untuk mengukur metrik perisian
tetapi kurang kepada matlamat untuk menentukan kebetul-salahan aturcara. Fokus
ditumpukan kepada pendekatan statik dengan membandingkan persamaan aturcara melalui
analisis perbandingan kesamaan bukan-struktur.
Motivasi di sebalik pemilihan ini ialah untuk memberi fleksibiliti kepada para
pelajar untuk menulis aturcara yang memungkinkan pelbagai jalan penyelesaian. Kaedah
yang dipilih ini dapat mengurangkan beban kepada pelayan dan dalam masa yang sama
24
BAB III
3.1 PENDAHULUAN
Bab ini akan menerangkan skop, keperluan perkakasan dan perisian dan reka bentuk
keseluruhan aplikasi ini dengan lengkap. Memandangkan pembangunan aplikasi ini adalah
menggunakan pendekatan berorientasikan objek, maka perwakilan reka bentuk akan
menggunakan UML (Unified Modeling Language). Dengan menggunakan perwakilan ini
hubungan antara kelas-kelas yang terlibat akan dapat diperjelaskan secara lebih berkesan.
Bab ini akan memfokus kepada reka bentuk keseluruhan aplikasi yang mengandungi
tiga kelas; iaitu kelas penganalisis leksikal, penjana kod-pseudo dan pembanding kod-
pseudo.
Bab ini akan menerangkan secara terperinci tentang rekabentuk apliksi yang dibangunkan.
Penulis memilih untuk menggunakan UML (Unified Modelling Language) untuk
menerangkan rekabentuk aplikasi, memandangkan pendekatan pengaturcaraan yang diguna
pakai dalam aplikasi ini adalah berasaskan objek. Penjelasan untuk algoritma penting yang
terdapat dalam aplikasi akan dijelaskan secara terperinci menggunakan kod pseudo dalam
bahagian 3.3.
Reka bentuk dalam UML dipersembahkan dalam dua rajah iaitu melalui rajah kes
penggunaan (use case diagram), Rajah 3.1 dan juga rajah hubungan kelas yang
digambarkan melalui Rajah 3.2.
26
Rajah kes penggunaan adalah ilustrasi yang digunakan untuk menunjukkan partisi sistem
dan juga pengguna pada peringkat analisis keperluan (Booch et. al., 1999). Rajah kes
penggunaan untuk aplikasi ini digambarkan seperti dalam Rajah 3.1.
Terdapat lima kelas utama dalam aplikasi ini iaitu kelas antara muka, kelas penganalisis
leksikal, kelas penjana kod pseudo, dan kelas pembanding kodpseudo. Penerangan lanjut
tentang kelas penganalisis leksikal terdapat dalam kod pseudo pada Rajah 3.10 – 3.29, kelas
penjana kodpseudo Rajah 3.30 – 3.46 dan kelas pembanding kodpseudo Rajah 3.47 – 3.51
Kelas-kelas yang lain merupakan kelas-kelas sokongan untuk membantu kelas-kelas utama.
Rujuk Rajah 3.2 untuk rajah hubungan kelas.
Setiap kelas mempunyai beberapa atribut dan metod yang setiap satunya dijelaskan
secara terperinci dalam Lampiran A. Penerangan dalam bahagian ini menjurus kepada
peranan setiap kelas dan hubungan antara kelas-kelas yang terdapat dalam aplikasi ini.
Kelas AntaramukaInput merupakan kelas yang menjadi perantara antara pengguna (pelajar
dan pengajar) dengan aplikasi ini. Pengajar boleh memasukkan semua skema jawapan
aturcara untuk setiap soalan yang dikemukakan. Manakala pelajar akan memasukkan
jawapan aturcara masing-masing. Kesemua aturcara ini kemudiannya dihantar kepada kelas
PenganalisisLeksikal untuk proses yang seterusnya.
Kelas penganalisis leksikal (atau penjana token) terdiri daripada kelas PenganalisisLeksikal
yang mana dibantu oleh kelas SenaraiToken (yang dibantu oleh kelas Token) dan kelas
KataKunci. Kelas PenganalisisLeksikal adalah kelas utama yang pertama dalam proses
keseluruhan. Ia menerima input rentetan kod aturcara, dan akan menghasilkan senarai
token. Kelas ini berfungsi untuk menjana senarai token yang dikenal pasti daripada kod
aturcara seperti yang digambarkan pada Rajah 3.3.
main(){ main
float salary,tax; (
scanf("%f",&salary); )
if(salary<=1000){ {
tax=salary*0.04; float
} salary
Penganalisis
else{ ,
Leksikal
tax=salary*0.08; tax
} ...
printf("Your tax is : )
RM.2%f\n",tax); ;
} }
Rajah 3.3 Kod sumber diproses menjadi senarai token melalui kelas PenganalisisLeksikal
Manakala spesifikasi token dalam format Backus-Naur untuk analisis leksikal yang
dilakukan oleh kelas ini terdapat dalam Rajah 3.4. Spesifikasi token ini diubah suai daripada
29
spesifikasi token bahasa C yang dicadangkan oleh Dennis Ritchie (1975) berdasarkan skop
yang telah ditetapkan oleh penulis pada Bab I, bahagian 1.4.
Rajah 3.4: Spesifikasi token (sintak leksikal) dalam format Backus-Naur yang dicadangkan
oleh penulis
30
Kelas ini merupakan kelas yang kedua dalam keseluruhan proses. Apa yang dilakukan oleh
kelas ini adalah menjana kod pseudo daripada senarai berjujukan token yang terhasil
daripada kelas PenganalisisLeksikal seperti yang digambarkan pada Rajah 3.5. Spesifikasi
kod pseudo yang digunakan adalah seperti yang dicadangkan oleh Robertson (2002)
terdapat dalam Jadual 3.2. Rajah 3.6 merupakan senarai peraturan-peraturan yang telah
ditetapkan oleh penulis dalam penukaran kod aturcara C kepada kod pseudo.
Kelas ini mengandungi metod-metod yang akan menukar kod aturcara sumber
kepada kod pseudo. Pernyataan-pernyataan seperti pengisytiharan pembolehubah,
umpukan, struktur kawalan pilihan dan pengulangan diproses oleh metod masing-masing.
32
main(){ START
int i=1; declare v1 as integer
float salary,tax; v1=1
declare v2 as float
do{ declare v3 as float
printf("Staff no : DO
%d\n",i); display value of v1
printf("Key in the display "text"
salary\n"); Penjana get user data for v2
scanf("%f",&salary); Kodpseudo IF v2 < 1000
calculate v3 =
if(salary<=1000){ v2*0.04
tax=salary*0.04; ELSE
} calculate v3 =
else{ v2*0.08
tax=salary*0.08; ENDIF
} display the value of v2
printf("Your tax is : display the value of v3
RM.2%f\n",tax); i=+1
i++; WHILE i < 5
}while (i<=5); END
}
Rajah 3.6 Kod aturcara C diterjemah kepada kod pseudo melalui kelas penjana kod pseudo
… sambungan
Rajah 3.7: Spesifikasi tatabahasa dalam format Backus-Naur yang dicadangkan oleh penulis
... sambungan
Kelas ini adalah kelas yang ketiga, di mana kodpseudo daripada aturcara pelajar dan
juga kod pseudo daripada aturcara model penyelesaian dibandingkan untuk mendapatkan
peratus kesamaan. Terdapat dua proses yang diwakili oleh dua kelas. Proses pertama ialah
proses memisahkan pengisytiharan pemboleh ubah daripada kod pseudo yang lain (berlaku
dalam kelas PemisahPembolehubah). Sebelum proses perbandingan, semua pengisytiharan
pembolehubah dalam kod pseudo akan dipisahkan. Proses ini berlaku kepada kesemua kod
pseudo jawapan pelajar dan juga skema.
a. Perbandingan Pembolehubah
Persamaan pembolehubah = Nb x 5
Nt
Di mana Nb adalah bilangan kategori yang betul, dan Nt adalah bilangan kategori yang
terlibat.
Berdasarkan contoh dalam Jadual 3.3, berikut adalah pengiraan kesamaan pengisytiharan
pembolehubah.
= Nb x 5
Nt
= (1/2) x 5 = 2.5
37
b. Perbandingan Proses
Setiap proses yang berlaku dalam kelas pembanding kod pseudo ini akan berlaku
berulang-kali untuk perbandingan kod pseudo pelajar dengan kod pseudo skema yang
berikutnya, sehingga kesemua kod pseudo skema dibandingkan. Ringkasan dalam bentuk
visual mengenai proses pembandingan tersebut terdapat dalam Rajah 3.5.
Kod pseudo
% kesamaan 1
skema 1
skema 2
%kesamaan
tertinggi
Rajah 3.8 Proses pembandingan kod pseudo pelajar dengan kod skema
38
c. Fungsi similar_text
Fungsi similar_text adalah antara fungsi piawai yang terdapat dalam pustaka PHP. Ia telah
dibangunkan oleh salah seorang penyumbang untuk bahasa PHP menggunakan kaedah
perbandingan rentetan aksara demi aksara (php.net, 2007). Fungsi ini menerima dua
rentetan dan mengembalikan peratus aksara yang sama berdasarkan algoritma yang
dicadangakan oleh Oliver (1993). Kompleksiti algortima ini adalah O(N3) di mana N ialah
saiz rentetan yang terpanjang.
Terdapat juga satu fungsi lain dalam pustaka PHP yang mampu mendapatkan
persamaan antara dua rentetan, iaitu levenshtein. Fungsi ini mengira bilangan aksara yang
minimum untuk ditukar, dimasukkan atau dibuang untuk menukarkan rentetan pertam
kepada rentetan kedua (php.net, 2008), berdasarkan algoritma yang dicadangkan oleh
Levenshtein (1966). Kompleksiti algoritma fungsi ini ialah O(M*N), yang mana lebih baik
daripada fungsi similar_text. Walaubagaimanapun, fungsi ini hanya mampu memproses
rentetan yang saiznya adalah tidak kurang daripada 255 aksara (php.net, 2008). Sekiranya
salah satu rentetan bersaiz lebih daripada 255 aksara, fungsi akan mengembalikan -1.
Berdasarkan kekangan ini, maka penulis memilih untuk menggunakan similar_text. Ini
kerana besar kemungkinan kod pseudo yang dihasilkan daripada kod sumber nanti akan
bersaiz lebih besar daripada 255 aksara.
Jadual 3.4 Perbandingan kualitatif antara fungsi similar_text dengan levenshtein yang
terdapat dalam pustaka PHP
Kelas ini menyediakan antara muka untuk memaparkan senarai peratus persamaan yang
diperoleh daripada perbandingan aturcara pelajar dengan setiap satu aturcara skema. Nilai-
nilai tersebut diperoleh daripada kelas PembandingKodPseudo. Antara muka juga akan
memaparkan nilai peratus yang tertinggi.
39
Berikut adalah algoritma yang terlibat dalam pelaksanaan aplikasi ini. Penulis hanya akan
memfokus kepada tiga proses penting; penganalisa leksikal, penjanaan kod pseudo dan
perbandingan kod pseudo.
Kod pseudo dalam Rajah 3.6 adalah ringkasan proses yang berlaku dalam
perbandingan kod sumber pelajar dengan kod sumber instruktor.
Bagi setiap perkataan yang disendengkan dalam kod pseudo Rajah 3.10-3.29, sila rujuk
kepada sintak leksikal (Rajah 3.4) untuk penjelasan lanjut.
Fungsi PENGANALISISLEKSIKAL
Dapatkan rentetan kodSumber
Dapatkan panjang rentetan kodSumber, bilanganAksaraKodSumber
Set pembilang sebagai 0
Selagi pembilang < bilanganAksaraKodSumber
Dapatkan satu aksara dari kodSumber, sebagai aksaraSemasa
Jika aksara tak nampak, atau WhiteSpace
Abaikan aksaraSemasa
Proses aksara seterusnya
Jika aksaraSemasa adalah Letter, mungkin Variable atau Keyword
Pergi ke fungsi Katakunci
bersambung ...
...sambungan
40
Fungsi Katakunci
Tambah aksaraSemasa kepada tokenSementara
41
Fungsi Pembolehubah
Hantar tokenSementara kepada fungsi PenamaanSemulaPembolehubah
Tambah namaPembolehubah kepada senaraiToken, kategori Variable
Tamat Fungsi Pembolehubah
Fungsi Nombor
aksaraSemasa adalah Digit
42
Fungsi NilaiLiteralAksara
Nilai aksaraSemasa adalah “ ‘ ”
Set tokenSementara sebagai aksaraSemasa
Dapatkan aksara seterusnya
Selagi aksaraSemasa bukan “ ‘ ”
Tambah aksaraSemasa kepada tokenSementara
Dapatkan aksara seterusnya
Tambah tokenSementara kepada senaraiToken, kategori Character
Tamat Fungsi NilaiLiteralAksara
Fungsi NilaiLiteralRentetan
Nilai aksaraSemasa adalah “ “ ”
Set tokenSementara sebagai aksaraSemasa
Dapatkan aksara seterusnya
Selagi aksaraSemasa bukan “ “ ”
Tambah aksaraSemasa kepada tokenSementara
Dapatkan aksara seterusnya
Tambah tokenSementara kepada senaraiToken, kategori String
Tamat Fungsi NilaiLiteralRentetan
Fungsi ProsesOperatorBahagi
Jika aksara seterusnya adalah “/”
43
Fungsi ProsesOperatorDarab
Set tokenSementara sebagai “*”
Jika aksara seterusnya adalah “=”
Dapatkan aksara seterusnya sebagai aksaraSemasa
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara ialah “*=”
Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX
Dapatkan aksara seterusnya
Selain daripada itu
Nilai token sementara adalah “*”
Tambah tokenSementara kepada senaraiToken, kategori
ArithmeticOperator
Tamat Fungsi ProsesOperatorDarab
Fungsi ProsesOperatorModulo
Set tokenSementara sebagai “%”
Jika aksara seterusnya adalah “=”
Dapatkan aksara seterusnya sebagai aksaraSemasa
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara ialah “%=”
Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX
Dapatkan aksara seterusnya
Selain daripada itu
Nilai token sementara adalah “%”
Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperator
Tamat Fungsi ProsesOperatorModulo
Fungsi ProsesOperatorTambah
Set tokenSementara sebagai “+”
Jika aksara seterusnya adalah “=”
Dapatkan aksara seterusnya sebagai aksaraSemasa
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara ialah “+=”
Tambah tokenSementara kepada senaraiToken, kategori AssignOperatorX
Jika aksara seterusnya adalah “+”
Dapatkan aksara seterusnya sebagai aksaraSemasa
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “++”
Tambah tokenSementara kepada senaraiToken, kategori
CompoundOperator
Selain daripada itu
Nilai token sementara adalah “+”
Tambah tokenSementara kepada senaraiToken, kategori ArithmeticOperator
Tamat Fungsi ProsesOperatorTambah
Rajah 3.20 Kod pseudo bagi fungsi ProsesOperatorTambah
Fungsi ProsesOperatorTolak
Set tokenSementara sebagai “-”
Jika aksara seterusnya adalah “=”
Dapatkan aksara seterusnya sebagai aksaraSemasa
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara ialah “-=”
Tambah tokenSementara kepada senaraiToken, …
kategori ArithmeticOperatorX
Jika aksara seterusnya adalah “-”
Dapatkan aksara seterusnya sebagai aksaraSemasa
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “--”
Tambah tokenSementara kepada senaraiToken, …
kategori CompoundOperator
Selain daripada itu
Nilai tokenSementara adalah “-”
Tambah tokenSementara kepada senaraiToken, …
kategori ArithmeticOperator
Tamat Fungsi ProsesOperatorTolak
Fungsi KomenBaris
Selagi aksaraSemasa bukan “\n”, iaitu baris baru
Dapatkan aksara seterusnya
Tiada token dijana daripada fungsi ini
Semua aksara yang diproses akan diabaikan
Tamat Fungsi KomenBaris
Fungsi KomenBlok
Selagi aksaraSemasa bukan “*” dan diikuti oleh “\”
Dapatkan aksara seterusnya
Tiada token dijana daripada fungsi ini
Semua aksara yang diproses akan diabaikan
Tamat Fungsi KomenBlok
Fungsi ProsesOperatorSama
Set tokenSementara sebagai “=”
Dapatkan token seterusnya
Jika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “==”
Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperator
Selain daripada itu
Nilai tokenSementara adalah “=”
Tambah tokenSementara kepada senaraiToken, …
kategori AssignOperator
Tamat Fungsi ProsesOperatorSama
Fungsi ProsesOperatorBesar
Set tokenSementara sebagai “>”
Dapatkan token seterusnya
Jika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “>=”
Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperator
Selain daripada itu
Nilai tokenSementara adalah “>”
Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperator
Tamat Fungsi ProsesOperatorBesar
Fungsi ProsesOperatorKecil
Set tokenSementara sebagai “<”
Dapatkan token seterusnya
Jika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “<=”
Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperator
Selain daripada itu
Nilai tokenSementara adalah “<”
Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperator
Tamat Fungsi ProsesOperatorKecil
Fungsi ProsesOperatorTak
Set tokenSementara sebagai “!”
Dapatkan token seterusnya
Jika aksaraSemasa adalah “=”
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “<=”
Tambah tokenSementara kepada senaraiToken, …
kategori RelationalOperator
Selain daripada itu
Nilai tokenSementara adalah “!”
Tambah tokenSementara kepada senaraiToken, …
kategori UnaryOperator
Tamat Fungsi ProsesOperatorTak
Fungsi ProsesOperatorDan
Set tokenSementara sebagai “&”
Dapatkan token seterusnya
Jika aksaraSemasa adalah “&”
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “&&”
Tambah tokenSementara kepada senaraiToken, …
kategori LogicalOperator
Selain daripada itu
Nilai tokenSementara adalah “&”
Tambah tokenSementara kepada senaraiToken, …
kategori AddressOperator
Tamat Fungsi ProsesOperatorDan
Fungsi ProsesOperatorAtau
Set tokenSementara sebagai “|”
Dapatkan token seterusnya
Jika aksaraSemasa adalah “|”
Tambah aksaraSemasa kepada tokenSementara
Nilai tokenSementara adalah “||”
Tambah tokenSementara kepada senaraiToken, …
kategori LogicalOperator
Selain daripada itu
Nilai tokenSementara adalah “|”
Tambah tokenSementara kepada senaraiToken, …
kategori UnknownToken
Tamat Fungsi ProsesOperatorAtau
Bagi setiap perkataan yang disendengkan dalam kod pseudo Rajah 3.30-3.46, sila rujuk
kepada spesifikasi tatabahasa (Rajah 3.7) untuk penjelasan lanjut.
Fungsi PENJANAKODPSEUDO
Selagi terdapat token dalam senarai
Jika jumpa ‘main’ dalam senarai token
Buang kepala fungsi ‘main’ beserta simbol-simbol ‘(’, ‘)’ dan ‘{’
Set “START” dalam senaraiKodPesudo
Set blokSemasa sebagai “main”
Proses token seterusnya
Selain itu, jika token adalah DataType, sama ada int, char,float atau double
Pergi ke fungsi DeclarationStatement
Selain itu, jika token adalah pembolehubah
Dapatkan token seterusnya
Jika token adalah ‘=’
Pergi ke fungsi AssignmentOperation
Jika token adalah AssignOperatorX
Pergi ke fungsi AssignmentOperationX
Selain itu, jika token adalah CompoundOperator
Pergi ke fungsi CompoundExpression
Selain itu, jika token adalah “printf”
Pergi ke fungsi PrintfStatement
Selain itu, jika token adalah “scanf”
Pergi ke fungsi ScanfStatement
Selain itu, jika token adalah “else”
Jika token seterusnya adalah “if”
Pergi ke fungsi IfElseStatement
bersambung ...
48
... sambungan
Selain itu
Pergi ke fungsi ElseStatement
Selain itu, jika token adalah “switch”
Pergi ke fungsi SwitchStatement
Selain itu, jika token adalah “case”
Pergi ke fungsi CaseStatement
Selain itu, jika token adalah “default”
Pergi ke fungsi DefaultStatement
Selain itu, jika token adalah “do”
Pergi ke fungsi DoWhileStatement
Selain itu, jika token adalah “while”
Pergi ke fungsi WhileStatement
Selain itu, jika token adalah “for”
Pergi ke fungsi ForStatement
Selain itu, jika token adalah CompoundOperator
Pergi ke fungsi CompoundExpression
Selain itu, jika token adalah “}”
Jika blokSemasa = “main”
Tambah “END”dalam senaraiKodPesudo
Keluarkan “main” daripada timbunan blokSemasa
Jika blokSemasa = “switch”
Tambah “ENDIF”dalam senaraiKodPesudo
Keluarkan “switch” daripada timbunan blokSemasa
Jika blokSemasa = “if”
Tambah “ENDIF”dalam senaraiKodPesudo
Keluarkan “if” daripada timbunan blokSemasa
Selain daripada itu,
Token tidak di ketahui
Paparkan mesej kod sumber ada ralat
Dapatkan token seterusnya
Senarai token tamat
Tamat Fungsi PENJANAKODPSEUDO
Fungsi DeclarationStatement
Set jenisDataSemasa
Pergi ke token seterusnya
Selagi token bukan “;”
Dapatkan nama pembolehubah pada token
Tambah “DECLARE Variable AS jenisDataSemasa” ...
... kepada senaraiKodPesudo
Dapatkan token seterusnya
Jika token adalah “=”
Pergi ke fungsi DirectAssignment
Dapatkan token seterusnya
bersambung ...
49
... sambungan
Fungsi AssignmentOperation
Dapatkan token seterusnya
Jika tokenSemasa adalah nilai Literal
Jika fungsi dipanggil dari ForStatement
Tamat Fungsi AssignmentOperation
Tambah “Variable = Literal” kepada senaraiKodPesudo
Selain itu, jika tokenSemasa adalah Variable
Set “Variable = “ ke dalam kodpseudoAssign
Dapatkan token seterusnya
Selagi tokenSemasa bukan “;” , atau “)” yang diikuti oleh “{”
Tambah tokenSemasa kepada kodpseudoAssign
Proses token seterusnya
Fungsi DirectAssignment
Selagi token bukan “,” atau “;”
Tambah token kepada senaraiKodPesudo
Tamat Fungsi DirectAssignment
Fungsi CompoundStatement
Jika token adalah “++”
Jika fungsi dipanggil dari ForStatement
Kembalikan “Variable = Variable + 1”
Tamat Fungsi CompoundStatement
Selain itu
Tambah “Variable = Variable + 1” kepada senaraiKodPesudo
Jika token adalah “--”
Jika fungsi dipanggil dari ForStatement
Kembalikan “Variable = Variable - 1”
Tamat Fungsi CompoundStatement
Selain itu
Tambah “Variable = Variable - 1” kepada senaraiKodPesudo
Tamat Fungsi CompoundStatement
Fungsi AssignmentOperationX
Jika token adalah “+=”
Sediakan kodpseudoX “Variable=Variable+”
Jika token adalah “-=”
Sediakan kodpseudoX “Variable=Variable-”
Jika token adalah “*=”
Sediakan kodpseudoX “Variable=Variable*”
Jika token adalah “/=”
Sediakan kodpseudoX “Variable=Variable/”
Jika token adalah “%=”
Sediakan kodpseudoX “Variable=Variable%”
Dapatkan token seterusnya
Selagi token bukan “;” , atau “)” yang diikuti oleh “{”
Sambung kodpseudoX dengan token semasa
Dapatkan token seterusnya
Tamat gelung
Jika fungsi dipanggil dari ForStatement
Kembalikan kodpseudoX
Jika tidak
Tambah kodpseudoX kepada senaraiKodPesudo
Tamat Fungsi AssignmentOperationX
Fungsi PrintfStatement
Set kodpseudoPrintf sebagai “DISPLAY ”
Dapatkan token seterusnya, abaikan token “(”
Dapatkan token seterusnya
Jika ada Variable
Tambah “the value of ” kepada kodpseudoPrintf
Selagi token bukan “)”
Tambah token semasa kepada kodpseudoPrintf
Jika tiada Variable
Tambah token semasa kepada kodpseudoPrintf
//contoh “DISPLAY ‘text’”,
//kerana sebarang rentetan akan ditukar kepada ‘text’
Tambah kodpseudoPrintf kepada senaraiKodPesudo
Tamat Fungsi PrintfStatement
Fungsi ScanfStatement
Set kodpseudoScanf sebagai “INPUT ”
Selagi token bukan “)”
Jika token adalah Variable
Tambah token semasa kepada kodpseudoScanf
Jika token adalah “,”
Tambah token semasa kepada kodpseudoScanf
Dapatkan token seterusnya
Tambah kodpseudoScanf kepada senaraiKodPesudo
Tamat Fungsi ScanfStatement
Fungsi IfStatement
Tambah “if” kepada timbunan blokSemasa
Set kodpseudoUngkapanIf sebagai “IF”
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “(”
Selagi token bukan “)” dan diikuti “{”, untuk proses ungkapan if
Tambah token semasa kepada kodpseudoUngkapanIf
Dapatkan token seterusnya
Tambah kodpseudoUngkapanIf kepada senaraiKodPesudo
Pergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK
Tamat Fungsi IfStatement
Fungsi IfElseStatement
Set blokSemasa sebagai “elseif”
Set kodpseudoUngkapanElseIf sebagai “ELSEIF”
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “else”
Selagi token bukan “)” dan diikuti “{”, untuk proses ungkapan else ... if
Tambah token semasa kepada kodpseudoUngkapanElseIf
Dapatkan token seterusnya
Tambah kodpseudoUngkapanElseIf kepada senaraiKodPesudo
Pergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK
Tamat Fungsi IfElseStatement
Fungsi ElseStatement
Tambah “else” kepada timbunan blokSemasa
Tambah “ELSE” kepada senaraiKodPesudo
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “{”
Pergi ke fungsi PENJANAKODPSEUDO, untuk pemprosesan BLOCK
Tamat Fungsi ElseStatement
Fungsi SwitchStatement
Tambah “switch” kepada timbunan blokSemasa
Set ungkapanSwitch kepada “”
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “(”
Selagi token bukan “)” dan dikuti “{”
Tambah token kepada ungkapanSwitch
Dapatkan token seterusnya
Dapatkan token seterusnya
Tamat Fungsi SwitchStatement
Fungsi CaseStatement
Tambah “case” kepada timbunan blokSemasa
Dapatkan nilai ungkapanSwitch
Selagi benar
Dapatkan nilai Literal selepas “case :”
Set kodpseudoSyarat ungkapanSwitch = Literal
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “:”
bersambung ...
53
... sambungan
Jika token semasa adalah “case”
Tambah “OR” kepada kodpseudoSyarat
Selain daripada itu
Henti ulangan, untuk proses “case” seterusnya
Fungsi DefaultStatement
Tambah “ELSE” senaraiKodPseudo
Dapatkan token seterusnya, abaikan “:”
Pergi ke fungsi PENJANAKODPSEUDO
Tamat Fungsi DefaultStatement
Fungsi DoWhileStatement
Tambah “do” kepada timbunan blokSemasa
Tambahkan “DO ” kepada senaraikodPseudo
Dapatkan token seterusnya, abaikan “{”
Pergi ke fungsi PENJANAKODPSEUDO, untuk memproses Block
Selepas kembali dari fungsi PENJANAKODPSEUDO, ...
dapatkan token seterusnya
Set ungkapanWhile kepada “WHILE”
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “(”
Selagi token bukan “)” dan diikuti oleh “;”
Tambah nilai token kepada ungkapanWhile
Dapatkan token seterusnya
Tambahkan ungkapanWhile kepada senaraikodPseudo
Tamat Fungsi DoWhileStatement
Fungsi WhileStatement
Tambah “while” kepada timbunan blokSemasa
Tambah “WHILE ” kepada senaraiKodPseudo
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “(”
Set ungkapanWhile sebagai “”
Selagi token bukan “)” diikuti oleh “{”
Tambah nilai token kepada ungkapanWhile
Dapatkan token seterusnya
Tambah ungkapanWhile kepada senaraiKodPseudo
Pergi ke fungsi PENJANAKODPSEUDO
Tamat Fungsi WhileStatement
Fungsi ForStatement dalam Rajah 3.43 menukarkan arahan for kepada bentuk
do...while. for mempunyai format berikut;
for (nilaiMula; syarat; langkah){
Statements;
}
Arahan for di atas akan ditukar kepada bentuk do...while, seperti berikut
nilaiMula
do {
Statements;
langkah
}while (syarat);
Fungsi ForStatement
Dapatkan token seterusnya
Dapatkan token seterusnya, abaikan “(”
bersambung ...
55
... sambungan
Fungsi ini menerima dua kod pseudo iaitu satu kod pseudo jawapan instruktor dan satu lagi
kod pseudo skema pengajar. Dalam algoritma ini, input adalah dalam bentuk satu rentetan
panjang. Rajah 3.47 hingga 3.51 merupakan kod pseudo yang menerangkan proses-proses
yang berlaku dalam kelas Perbandingan Kod Pseudo.
... sambungan
Penerangan tentang fungsi similar_text boleh diperolehi dari bahagian 3.2.6 (c).
3.4 RUMUSAN
Objektif utama bab ini adalah untuk menerangkan tentang reka bentuk aplikasi yang
menyeluruh supaya memudahkan penyelidik untuk melakukan proses seterusnya; iaitu
implementasi dan pengujian aplikasi. Pendekatan pengaturcaraan berasaskan objek dipilih
supaya penyenggaraan kod dapat dibuat dengan lebih mudah pada masa hadapan. Rajah
perhubungan kelas dengan menggunakan UML dapat menerangkan kaitan antara satu kelas
dengan kelas yang lain dengan lebih jelas. Reka bentuk yang baik akan menghasilkan
aplikasi yang lebih mudah untuk dibangun dan disenggarakan.
58
BAB VI
1.6 PENDAHULUAN
Bab VI menerangkan tentang hasil implementasi daripada reka bentuk yang dibincangkan
dalam bab sebelum ini. Juga menerangkan kaedah pengujian yang telah dibuat, serta
keputusan yang diperolehi.
Memandangkan aplikasi ini dibangunkan dalam persekitaran web, jadi terdapat dua
keperluan yang perlu dipenuhi oleh dua belah pihak; iaitu pihak pengguna (klien) dan pihak
pelayan (server).
a) Keperluan Pelayan
a) Komputer dengan keperluan minimum ingatan primer sebanyak 256MB sekurang-
kurangnya.
b) Ruang ingatan sekunder sekurang-kurangnya 5MB untuk menyimpan fail-fail
aplikasi dan fail-fail aturcara.
c) Hubungan kepada Internet ataupun Intranet (rangkaian setempat). Supaya pengguna
daripada komputer/terminal yang lain dapat mengakses aplikasi.
d) Sebarang sistem pengoperasi (Windows/Unix/Linux/MacOS).
e) Sebarang pelayan web yang boleh berinteraksi dengan penterjemah PHP boleh
digunakan. Contohnya IIS atau Apache.
f) Penterjemah PHP (versi 5 ke atas).
59
Aplikasi ini difokuskan kepada pembangunan algoritma dan enjin untuk membuat
perbandingan antara kod pseudo. Tiada sistem pangkalan data yang menguruskan
keseluruhan sistem termasuk interaksi pengguna mahupun penyimpanan maklumat
pengguna dan soalan-soalan latihan serta jawapan. Fail-fail aturcara dimuat-naik secara
manual untuk tujuan pengujian.
Berikut adalah antara muka untuk memuat naik fail-fail jawapan pelajar dan juga
model-model penyelesaian.
a) Antaramuka Input.
Antara muka dalam Rajah 4.1 merupakan antara muka yang akan digunakan oleh pengajar
untuk memilih fail-fail aturcara jawapan pelajar dan juga aturcara skema. Satu fail jawapan
aturcara pelajar dipilih dan tiga (maksimum) aturcara skema dipilih. Di sebelah kanan
antara muka tersebut terdapat kemudahan untuk memaparkan kandungan yang terdapat
dalam setiap fail aturcara yang dipilih. Selepas memilih semua fail-fail yang terlibat,
pengendali perlu mengklik butang ‘Compare’.
60
b) Antaramuka Output.
Rajah 4.2 adalah contoh output keputusan yang dipaparkan kepada pengajar. Halaman ini
memaparkan kod pseudo yang telah diterjemahkan oleh aplikasi daripada kod aturcara.
Sebelah kiri adalah senarai keputusan peratus kesamaan untuk semua perbandingan yang
telah dibuat. Markah akhir yang akan diambil kira adalah markah yang tertinggi.
61
1.9 PENGUJIAN
a) Objektif Pengujian
b) Kaedah Pengujian
i) Ujian dilakukan ke atas aplikasi dan markah yang ditentukan oleh aplikasi dengan
markah yang ditentukan secara manual oleh pengajar dibandingkan. Perbandingan
dilakukan menggunakan kaedah seperti yang dicadangkan oleh Norshuhani et. al.
(2006).
Berikut adalah soalan-soalan yang telah dikemukakan kepada pelajar yang terbabit.
Terdapat enam soalan kesemuanya.
Jadual 4.1 Panduan gred untuk markah yang diperolehi bagi soalan 2
Markah Gred
80-100 A
60-79 B
50-59 C
40-49 D
0-39 F
Nombor Bulan
1 Januari
2 Februari
3 Mac
4 April
5 May
6 Jun
7 Julai
8 Ogos
9 September
10 Oktober
11 November
12 Disember
65
d) Keputusan Pengujian.
Rujuk Jadual 4.3 hingga 4.5, persamaan markah yang ditentukan oleh aplikasi dengan
markah yang diberi oleh pengajar dikira dibandingkan dan diberi peratus persamaan.
Kaedah pengiraan adalah seperti berikut;
Dimana Mi adalah markah yang diberi instruktor/pengajar dan Ma adalah markah yang
dikira oleh aplikasi.
Jadual 4.3 merujuk kepada markah yang diperolehi untuk jawapan pelajar yang
dikategorikan sebagai sempurna (penyemak memberi markah secara manual 100%). Secara
purata persamaan markah yang dihasilkan oleh aplikasi dan pengajar adalah 97.3 peratus.
Pengujian untuk pelajar pertama ini menghasilkan keputusan yang sangat baik.
Jadual 4.4 merujuk kepada markah untuk jawapan latihan daripada pelajar yang
dikategorikan sebagai baik (markah purata lebih 9 markah), cuma terdapat kesilapan minor
pada beberapa jawapan. Secara purata persamaan markah yang dihasilkan oleh aplikasi dan
pengajar adalah 95 peratus. Pengujian untuk pelajar kedua menghasilkan keputusan yang
baik.
Jadual 4.5 merujuk kepada markah jawapan latihan daripada pelajar yang
dikategorikan sebagai lemah (markah purata kurang daripada 5). Secara purata persamaan
markah yang dihasilkan oleh aplikasi dan pengajar adalah 65 peratus. Terdapat perbezaan
markah yang agak jauh pada soalan 3, 4, 5 dan 6. Pengujian untuk pelajar yang ketiga
menghasilkan keputusan kurang yang baik.
e) Rumusan Pengujian.
Daripada keputusan dalam Jadual 4.3, didapati aplikasi dapat berfungsi dengan baik bagi
jawapan aturcara pelajar yang betul atau pun dengan kesalahan minor (Jadual 4.4).
Memandangkan konsep asal yang diguna-pakai oleh aplikasi ialah perbandingan
persamaan, maka ia mampu memberi markah yang hampir sama dengan pengajar.
Walau bagaimana pun untuk jawapan pelajar yang bermasalah (mendapat markah
daripada pengajar yang sedikit) penilaian yang dilakukan oleh aplikasi kurang tepat, iaitu
hanya mendapat purata kesamaan 65%. Ini terjadi kerana pengajar memberi markah
berdasarkan kepada beberapa pernyataan yang boleh diambil kira berbanding dengan skema
yang diberi. Manakala aplikasi hanya mencari peratus kesamaan antara jawapan pelajar
dengan model-model penyelesaian. Masalah ini mungkin dapat diatasi sekiranya aplikasi
mampu untuk menilai aturcara pelajar dengan membandingkan jawapan pelajar dengan
68
model-model penyelesaian secara token demi token, berbanding apa yang dilakukan pada
masa ini, perbandingan aksara demi aksara.
Boleh disimpulkan bahawa aplikasi tidak mampu berfungsi dengan baik sekirannya
terdapat kesalahan yang major pada jawapan pelajar. Contoh kesalahan major adalah seperti
dalam Rajah 4.3. Contoh dalam Rajah 4.3 adalah jawapan yang diambil untuk soalan 4,
iaitu soalan yang berkaitan dengan penggunaan gelung do...while. Jika diperhatikan
jawapan pelajar pada sebelah kanan, pelajar tidak menggunakan struktur gelung do...while
yang sepaptutnya, tetapi hanya mengulangi arahan printf yang memang akan menghasilkan
output yang sama. Walaubagaimanapun, jawapan pelajar adalah tidak bertepatan sama
sekali dengan arahan dalam soalan 4.
//jawapan pelajar
#include <stdio.h>
//skema jawapan #include <conio.h>
int main()
#include <stdio.h> {
#include <conio.h> printf ("10\n");
printf ("9\n");
main(){ printf ("8\n");
int i=10; printf ("7\n");
do{ printf ("6\n");
printf("%d\n",i); printf ("5\n");
i--; printf ("4\n");
}while(i>=1); printf ("3\n");
getch(); printf ("2\n");
} printf ("1\n");
getch ();
return 0;
}
1.10 KESIMPULAN
Aplikasi ini telah dibangunkan dan telah diuji dengan contoh-contoh aturcara yang dibina
oleh para pelajar, berdasarkan soalan-soalan yang disediakan. Terdapat beberapa kelemahan
dalam perbandingan kod pseudo, terutama perbandingan dengan jawapan pelajar yang
69
terdapat kesalahan major. Tetapi secara keseluruhan, aplikasi ini dapat berfungsi
berdasarkan skop yang telah ditentukan. Ia mampu menerima input aturcara pelajar dan
model-model penyelesaian pengajar seterusnya dapat melakukan perbandingan kod pseudo
sehingga terhasilnya markah yang diperolehi untuk setiap latihan pelajar.
70
BAB V
KESIMPULAN
1.11 PENDAHULUAN
Sistem yang dibangunkan ini adalah satu eksperimen untuk mengenal pasti keupayaan
perbandingan kod pseudo dalam menyemak latihan aturcara pelajar subjek bahasa
pengaturcaraan C. Bab ini membincangkan tentang dapatan dan sumbangan kajian kepada
bidang penyemakan automatik aturcara. Di samping itu ia juga membincangkan tentang
kelemahan aplikasi yang dicadangkan, dan juga perkara-perkara yang boleh diperluaskan
pada masa akan datang.
a) Menghasilkan satu kaedah untuk menterjemah kod aturcara C kepada kod pseudo.
b) Menghasilkan kaedah untuk membuat penyemakan latihan aturcara C pelajar secara
automatik menggunakan kaedah perbandingan kod pseudo.
c) Menghasilkan aplikasi untuk menerima aturcara C pelajar dan beberapa model
penyelesaian untuk dibuat perbandingan. Aplikasi tersebut dapat menentukan
peratus kesamaan aturcara pelajar dengan model penyelesaian dan memaparkan
markah yang diperoleh.
a) Kod aturcara C pelajar dapat disemak secara automatik menggunakan aplikasi yang
dibina.
71
b) Menambahkan satu lagi kaedah iaitu perbandingan kod pseudo dalam penyemakan
automatik aturcara yang menggunakan pendekatan analisis statik.
c) Satu kertas kerja berkenaan kajian ini telah dibentangkan dalam satu seminar
(Khirulnizam et. al., 2007). Perkongsian ini diharap dapat membantu penyelidik lain
yang mengkaji bidang yang sama seperti ini.
Penyelidik mengenal pasti beberapa kelemahan dalam aplikasi yang dibangunkan, serta
penambahbaikan yang boleh dilakukan pada masa hadapan. Antaranya ialah:
1.15 RUMUSAN
Melalui pemerhatian penulis walaupun terjemahan kod aturcara kepada kod pseudo dapat
memudahkan penambahbaikan aplikasi ini untuk menyokong bahasa aturcara lain, namun
terdapat juga kelemahan lain. Antaranya ialah, aturcara yang ingin disemak tidak boleh
mempunyai ralat sintaksis mahupun semantik. Ini kerana semasa proses penukaran kod
aturcara kepada kod pseudo, ia mesti dilakukan dengan menggunakan nahu bahasa
pengaturcaraan C yang betul. Sekiranya berlaku ralat sintaksis atau semantik, proses itu
72
akan mengalami gangguan dan tidak akan berfungsi dengan baik. Ia juga boleh
menyebabkan proses tergendala. Untuk mengelakkan keadaan ini (pada masa akan datang),
penyelidik mencadangkan bahawa proses pemetaan teks yang digunakan oleh Norshuhani
et. al., (2006) merupakan proses yang lebih baik untuk perbandingan aturcara melalui
kesamaan bukan-struktur.
Walaupun begitu, kaedah yang dicadangkan oleh penyelidik, iaitu menukarkan kod
aturcara kepada kod-pseudo adalah lebih baik untuk mengurangkan model penyelesaian
yang perlu disediakan. Ini kerana pernyataan yang fungsinya lebih kurang sama (seperti
while…do dengan for, switch…case dengan if…elseif…else) dapat diseragamkan dengan
menterjemahkan kepada kod-pseudo.
Kajian ini mencadangkan satu lagi kaedah dalam pendekatan analisis statik dalam
penyemakan automatik tugasan pengaturcaraan. Ia telah berjaya membuktikan bahawa kod
aturcara boleh diterjemahkan kepada kod pseudo dan perbandingan antara kod pseudo
pelajar dengan kod pseudo model penyelesaian boleh dilakukan.
73
RUJUKAN
Badros, Greg. 2000. JavaML : An XML-based Source Code Representation for Java
Programs. Proceedings of the 9th International World Wide Web Conference. http://
www9.org/w9cdrom/342/342.html [24 Jun 2007]
Botev C., Chao H., Chao T., Cheng Y., Doyle R., Grankin S., Guarino J., Guha S, Lee P.
C., Perry D., Re C, Rifkin I., Yuan T., Abdullah D., Carpenter K., Gries D., Kozen
D., Myers A., Schwartz D., Shanmugasundaram J.. 2005. Supporting Workflow In
A Course Management System. ACM SIGCSE Bulletin 37(1), hlm. 262-266.
Chen, J. Y. and Lu, J. F. 1993. A New Metric for Object-oriented Design. Journal of
Information Software Technology 35 (April 1993): 232–240.
Coleman M., Pratt S. 1989. Software Engineering for Students: Chartwell-Bratt Ltd.
Donaldson, John L., Ann-Marie Lancaster and, and Paula H. Sposato. 1981. A Plagiarism
Detection System. Proceedings of 12th SIGCSE Technical Symposium, hlm. 21-25.
Foxley, E. Higgins, C, & Gibbon, C. 1996. The Ceilidh System : A General Overview.
http://www.cs.nott.ac.uk/CourseMarker/more_info/html/Overview96.htm [24 Jun
2007]
Booch, G., Rubargh, J., Jacobson, I. 1999. The Unified Modeling Language User Guide:
Addison Wesley.
Granville, A. 2002. Detecting Plagiarism in Java Code, Tesis Sarjanamuda Sains Komputer,
University of Sheffield.
Chu H. D., Dobson, J. E. and Liu, I.C.. 1997. FAST-A Framework for Automating Statistic-
based Testing. http://citeseer.nj.com/73306.html [30 Jun 2006]
Jackson, D. & Usher, M. 1997. Grading Student Programs Using ASSYST. ACM SIGCSE
Bulletin29(1), hlm. 335-339.
Joy M & Luck M. 1998. The BOSS System for On-line Submission and Assessment.
http://www.ulster.ac.uk/cticomp/joy.html [24 Jun 2007]
Khirulnizam Abd Rahman, Md Jan Nordin, Che Wan Shamsul Bahri Che Wan Ahmad,
Juzlinda Mohd Ghazali. 2007. Development of an Automated Assessment for C
Programming Exercises using Pseudocodes Comparison Technique. Proceedings of
Conference on IT Research & Application 2007, hlm. 119-126.
Levenstein , V. I.. 1966. Binary Codes Capable of Correcting Deletions, Insertions and
Reversals. Soviet Physics Doklady, Vol. 10, hlm.707-710.
Marini Abu Bakar, Norleyza Jailani, Sufian Idris. 2002. Pengaturcaraan C. Kuala Lumpur:
Prentice Hall.
Parr, Terence, & Klaren, Ric. ANTLR - Complete Language Translation Solutions.
http://www.antlr.org/ [01 Jun 2006]
Truong, N., Roe, P., Bancroft, P.. 2003. A Web Based Environment for Learning to
Program. Proceedings of the 26th Australasian Computer Science Conference, hlm.
255-264.
Truong, N., Roe, P., Bancroft, P.. 2004. Static Analysis of Students’ Java Programs.
Proceedings of 6th Australian Computing Education Conference (ACE2004), hlm.
317-325.
Truong, N., Roe, P., Bancroft, P. 2005. Automated Feedback for “Fill in the Gap”
Programming Exercises. Proceedings of 7th Australasian Computing Education,
hlm. 117-126.
Norshuhani Zamin, Emy Elyanee Mustapha, Savita K.Sugathan, Mazlina Mehat, Ellia, and
Anuar. 2006. Development Of A Web-Based Automated Grading System For
Programming Assignments Using Static Analysis Approach. Proceedings of
International Conference on Electrical and Informatics, Bandung, Indonesia.
Norshuhani Zamin, Savita K.Sugathan, Mazlina Mehat, Emy Elyanee Mustapha, Ellia
Anuar. 2006. WAGS: A Web-Based Automated Grading System For Programming
Assignments From Users’ Perspectives. Proceedings of International Conference on
Science & Technology: Application in Industry & Education (2006).
Prechelt L, Malpohl G., Philippsen M. 2000. Finding plagiarisms among a set of programs
with JPlag. Journal of Universal Computer Science. 8(11), hlm. 1016 - 1038.
Rohaida Romli, Mazni Omar, Cik Fazilah Hibadullah. 2004. Automatic Correctness
Assessment Program for Java Programming Assignment. M2USIC 2004, Malaysia.
http://m2usic.mmu.edu.my/main/Proceeding2004/Paper%20276.pdf [24 Jun 2007]
Rohaida Romli. 2003. Penjanaan Data Ujian untuk Penaksiran Automatik Tugasan Aturcara
C, Tesis Sarjana Teknologi Maklumat, Universiti Kebangsaan Malaysia.
Saikkonen, R., Malmi, L., and Korhonen A., 2001. Fully Automatic Assessment of
Programming Exercises. Proceedings of the 6th Annual Conference on Innovation
and Technology in Computer Science Education, hlm. 133-136.
Wei Li, Sallie Henry. 1993. Object-oriented Metrics that Predict Maintainability. Journal
of Systems and Software 23, hlm. 111-122.
Whale, Geoff. 1986. Detection of Plagiarism in Student Programs. 9th Australian Computer
Science Conference, Canberra.
Wise, M. J. 1993. String Similarity via Greedy String Tiling and Running-Karp-Rabin
Matching. ftp://ftp.cs.su.oz.au/michaelw/doc/RKR_GST.ps [24 Jun 2007].
76
Yerramilli, Susan, Mengel A., Vinay. 1999. A Case Study Of The Static Analysis Of
The Quality Of Novice Student Programs. ACM SIGCSE Bulletin. 31(1), hlm.
78-82.
Zin, A.M. and Foxley, E. 1991. Automatic Program Quality Assessment System.
Proceedings of the IFIP Conference on Software Quality, S P University,
Vidyanagarm India, March 1991.
LAMPIRAN A
a) Kelas Token
Token
-typeE
-tokenE
-next
-previous
+Token
+setDataType
+getDataType
+getType
+getToken
+getValue
+getLine
+changeValue
+goNext
b) Kelas KataKunci
KataKunci
-listkw
-wordToMatch
+Keyword
+findMatchKeyword
c) Kelas SenaraiToken
SenaraiToken
-firstNode
-currentNode
-lastNode
-head
-currentToken
+ListToken
+isEmpty
+getCurrentToken
+insertNode
+goNext
+goFirst
+setHead
+getHead
+traverse
d) Kelas PenganalisisLeksikal
PenganalisisLeksikal
-input
-tempToken
-lineno
-inputlength
-c
-charC
-tokenList
-keys
+Lexer
+isSeparator
+isBeginOperator
+lexList
+traverseLexList
+returnHeadTokenList
79
a) Kelas PenjanaKodPseudo
PenjanaKodPseudo
-pseudolist
-indentation
-nod
-tokenList
-block
-forStepStack
-forConditionStack
-currentDataType
-switchLeftStmt
-evaluation
-firstCase
+PseudoCodeGenerator
+pseudocodegen
+getPseudolist
+getArrayLastItem
+isDataType
+isLiteralValue
+printPseudoList
+stringPseudoList
-printIndentation
+goNextNod
+isSemicolonOrComa
+isExpressionOps
-directAssignment
-declarationStatements
-assignmentOperations
-printfStatement
-scanfStatement
-ifStatement
-ifElseStatement
-elseStatement
-compoundStatement
-switchStatement
-caseStatement
-defaultStatement
-doWhileStatement
-whileStatement
-forStatement
cadangan Norshuhaini et. al. (2006) yang mana setiap pembolehubah yang
dijumpai akan diganti dengan perkataan ”var”.
assignmentOperations – memproses operasi umpukan di mana pernyataan di
sebelah kanan mengandungi operasi arithmetik. Aliran proses akan masuk ke
metod ini sekiranya token yang diproses ialah “=” dan diikuti dengan operasi
arithmetik.
printfStatement – menukar arahan printf() yang terdapat dalam C kepada
pernyataan DISPLAY. Rentetan yang terdapat dalam kurungan “??????” akan
diubah kepada “teks”, seperti yang dicadangkan oleh Norshuhaini et. al. (2006).
Ini dilakukan untuk menambahkan kesamaan dengan model penyelesaian.
Memandangkan mesej yang cuba disampaikan dalam arahan printf() adalah
pelbagai, maka penulis mencadangkan supaya rentetan mesej diseragamkan
kepada “teks”.
scanfStatement – menukar arahan scanf() kepada INPUT diikuti dengan senarai
pemboleh ubah yang terbabit.
ifStatement – metod ini akan mengendalikan penukaran pernyataan if kepada
format yang dicadangkan oleh Robertson (2002).
ifElseStatement – metod menukarkan if…else kepada IF…ELSE.
elseStatement – metod menukarkan pernyataan else kepada ELSE.
compoundStatement – pernyataan kompaun merujuk kepada
switchStatement – metod akan menukarkan pernyataan switch yang dijumpai
dalam atur cara sumber kepada IF.
caseStatement – metod menukarkan pernyataan case kepada IF atau IF…ELSE
bergantung pada kes yang ke berapa.
defaultStatement – metod menukarkan pernyataan default dalam switch…case
kepada ELSE.
doWhileStatement – metod menukarkan pernyataan do…while kepada DO…
WHILE.
whileStatement – metod menukarkan pernyataan while kepada WHILE.
forStatement – metod menukarkan pernyataan for kepada WHILE.
pseudocodegen – metod utama dalam kelas ini. Metod ini mengawal penelusuran
senarai jujukan token dan menentukan metod yang akan dipanggil untuk
menentukan aliran proses.
b) Kelas PemisahPembolehubah
PemisahPembolehubah
-pseudocodelist
-listVarDeclaration
-listflow
-variableTable
+VarDeclarationSeparator
-separateVarDecFromCode
+getVarDecList
+getFlowList
+stringVarDecList
+stringFlowList
+stringVariableTable
Maklumat yang disimpan dalam kelas ini ialah;
pseudocodelist – senarai kod pseudo dalam tatasusunan. Setiap satu baris kod
pseudo merupakan satu item dalam tatasusunan ini.
83
c) Kelas PembandingKodPseudo
PembandingKodPseudo
-pseudostudent
-pseudoschema
-pseudostudentArray
-pseudoschemaArray
-markvardec
-markflow
-totalmark
-vdsStudent
-vdsSchema
-flowStudent
-flowSchema
-stdVarTable
-schemaVarTable
-highest
+ComparePseudocodes
-pseudocodeToArrayLine
-compareDeclaration
-compareFlow
-analyseVar
-calculateHighestMark
+getTotalMark
+getFlowMark
+getVariableMark
+getStringFlowStudent
+ getStringFlowSchema
+getHighestMark
84