ANALISIS DAN PERANCANGAN PROGRAM
3.1 Analisis Sistem
Untuk membuat sistem perlu dilakukan analisa sistem tersebut sehingga dapat diketahui tahapan dan proses yang dibutuhkan sistem agar program (perangkat lunak) dapat mencapai hasil yang diharapkan. Setelah sistem dianalisis, maka langkah selanjutnya adalah design, coding, testing, dan maintance seperti yang sudah dijelaskan pada BAB 2. Proses analisa dilakukan terhadap program aplikasi yang pernah dibuat oleh S. Nancy (2009) dan Andrew Saputra (2010). Kekurangan pada program aplikasi sebelumnya menjadi poin-poin penting untuk pengembangan program aplikasi ini, begitu juga kelebihan pada program aplikasi sebelumnya menjadi poin-poin yang dipertahankan.
3.2 Rancangan Program
Sistem dibuat dan dirancang sedemikian rupa agar menghasilkan sebuah aplikasi program yang efisien dan mudah digunakan oleh pengguna serta dapat memberikan hasil keluaran yang jelas dan mudah dipahami pengguna program aplikasi tersebut.
3.2.1 Rancangan Sistem
Langkah awal yang dilakukan sebelum membuat program (perangkat lunak) adalah merancangnya terlebih dahulu. Menurut Dr. Asep Juarna, perancangan perangkat lunak adalah disiplin manajerial dan teknis yang berkaitan dengan pembuatan dan pemeliharaan produk perangkat lunak secara sistematis, termasuk pengembangan dan modifikasinya, yang dilakukan pada waktu yang tepat dan
dengan pertimbangan faktor biaya. Perancangan diperlukan untuk membentuk dasar dan langkah-langkah yang perlu dilakukan dalam tahapan-tahapan pembuatan aplikasi. Berikut ini gambaran secara umum mengenai tahapan-tahapan program aplikasi pengujian struktur aljabar yang akan dibuat.
Gambar 3.1. Flobal Flowchart Rancangan Sistem
Seperti yang ditunjukan pada gambar, langkah pertama yang perlu dilakukan oleh pengguna adalah memasukkan data dan elemen sistem aljabar yang dibutuhkan program untuk proses pengujian sifat. Pengguna akan memasukkan data dan elemen pada himpunan yang akan diuji. Pengguna dapat memasukkan data untuk satu atau dua buah himpunan sesuai kebutuhan. Jika pengguna ingin menguji sampai sifat grup faktor, homomorfisma, dan subgrup normal, maka pengguna perlu memasukkan data elemen untuk kedua himpunan. Selain itu pengguna juga perlu memasukkan hasil operasi untuk tiap pasang elemen himpunan tersebut ke dalam tabel Cayley yang akan di-generate oleh program.
Setelah data elemen dan hasil operasi dari tiap sistem aljabar selesai dimasukkan pengguna, secara otomatis program melakukan pengolahan data. Hasil dari proses pengolahan data ini adalah berupa sifat-sifat umum dari operasi aljabar yang telah teruji, mulai dari sifat tertutup, asosiatif, ada tidaknya elemen identitas,
ada tidaknya invers bagi setiap elemen dalam sistem aljabar, serta sifat komutatif. Selanjutnya, program akan melakukan pengujian untuk klasifikasi struktur aljabar umum sesuai dengan definisi. Pengujian sifat-sifat umum dan pengujian klasifikasi struktur aljabar umum harus dilakukan terlebih dahulu sebelum pengguna dapat melakukan pengujian untuk klasifikasi bentuk-bentuk struktur aljabar khusus.
Jika pengujian sifat-sifat umum dan pengujian klasifikasi struktur aljabar umum telah membuktikan bahwa sistem aljabar tersebut adalah sebuah grup, maka pengguna dapat melanjutkan instruksi program untuk menguji beberapa bentuk grup khusus, yaitu siklik, berhingga (aperiodik, periodik, dan campuran), faktor, subgrup normal, dan homomorfisma. Pada pengujian homomorfisma pengolahan data akan berjalan jika kedua sistem aljabar yang di-input terbukti sebagai grup. Selain itu pada uji homomorfisma juga akan diuji bentuk derivatif homomorfisma, yakni sifat isomorfisma, monomorfisma, dan epimorfisma. Pada pengujian subgrup normal dan grup faktor pengolahan data akan berjalan jika sistem aljabar terbukti merupakan grup serta sistem aljabar lainnya merupakan subgrup dari grup tersebut.
3.2.2 Rancangan Proses
Ketika program dijalankan pertama kali akan muncul halaman sambutan yang berisi judul dan fungsi utama program. Pada saat ini menu yang dapat dipilih hanya File > Input, yang akan memunculkan form untuk mengisi himpunan yang masih kosong beserta tabel Cayley.
Dalam form tersebut, masing-masing himpunan harus diisi dengan lengkap dan valid sebelum himpunan dapat di-submit. Cara mengisi himpunannya adalah dengan memilih satu operator dari daftar operator yang tersedia dan menuliskan
elemen-elemen yang dipisahkan oleh koma. Jika himpunan tidak kosong, serta tidak memiliki elemen kembar di dalamnya, maka himpunan akan ter-submit dengan sukses. Operator terpilih akan dikunci dan disimpan oleh program dalam bentuk string. Daftar elemen akan dikunci dan disimpan oleh program dalam bentuk array of string 1 dimensi (members[no. of elements]). Setelah pilihan clear tersedia untuk mengosongkan himpunan dan mengganti operator.
Setelah memilih operator dan meng-input elemen, maka tabel Cayley dapat diisi. Sama halnya dengan elemen himpunan, isian tabel Cayley pun akan divalidasi sebelum diterima program. Jika tabel Cayley tidak terisis lengkap, program akan menolak untuk ditutup. Tabel Cayley disimpan program dalam bentuk array of string 2 dimensi ( Cayley[row][column]) dengan ukuran sesuai jumlah elemennya.
Hanya setelah kedua himpunan dan tabel Cayley diisi dengan benar, form input dapat ditutup. Program akan melakukan uji sifat grup umum secara bergantian. Jika himpunan tidak memenuhi suatu sifat grup umum, uji-uji sifat berikutnya tidak akan dilakukan. Setelah itu uji grup umum dan grup khusus juga akan dilakukan.
Sifat Grup Umum yang diuji adalah: 1. Tertutup
2. Asosiatif 3. Unkes 4. Invers 5. Komutatif
Grup Umum yang diuji adalah: 1. Grupoid
3. Monoid 4. Grup
Grup Khusus yang diuji adalah: 1. Grup Komutatif 2. Grup Siklik 3. Grup Berhingga 4. Subgrup Normal 5. Grup Faktor 6. Homomorfisma Grup
Algoritma Uji Sifat Grup Umum 1. Uji Sifat Tertutup
tertutup = true
For Each element in Cayman[row][column] Jika element tidak ada di dalam members[] tertutup = false
End For
2. Uji Sifat Asosiatif
For(i=0;i<members.length;i++)
For(j=0;j<members.length;j++)
For(k=0;k<members.length;k++) { i_j = calc(members[i],members[j]) j_k = calc(members[j],members[k])
Jika calc(i_j,_members[k] != calc(members[i], j_k)) asosiatif = false
End Jika
End For
End For
End For
3. Uji Sifat Unkes
For(i=0;i<members.length;i++) RowIsUnkesKiri = true;
ColumnIsUnkesKanan = true; For(j=0;j<members.length;j++)
Jika Cayman[i][j] != members[j] RowIsUnkesKiri = false Jika Cayman[j][i] != members[j] ColumnIsUnkesKanan = false
End For
Jika (RowIsUnkesKiri) tambahDaftarUnkesKiri(members[i])
Jika (RowIsUnkesKiri && ColumnIsUnkesKanan) indeksIdentitas = i
End For
unkes = (daftarUnkesKiri berisi) && (daftarUnkesKanan berisi) 4. Uji Sifat Invers
For(i=0;i<members.length;i++)
For(j=0;j<members.length;j++)
Jika Cayman[i][j] = Cayman[j][i] && CaymanTable[i][j] = members[indeksIdentitas] inverse[i] = members[j] inverse[j] = members[i] End Jika End For End For For(int i=0;i<inverse.length;i++) {
Jika inverse[i] masih kosong allHasInverse = false
End Jika
End For
5. Uji Sifat Komutatif
For(int i=0;i<members.length;i++) For(int j=0;j<i;j++)
Jika Cayman[i][j] != Cayman[j][i]
komutatif = false;
End Jika
End For
End For
Algoritma Uji Klasifikasi Grup Umum 1. Uji Grupoid
grupoid = tertutup 2. Uji Semigrup
semigrup = tertutup && asosiatif 3. Uji Monoid
monoid = tertutup && asosiatif && punya indeksIdentitas 4. Uji Grup
grup = tertutup && asosiatif dan && indeksIdentitas && allHasInverse Algoritma Uji Grup Khusus
Setelah sistem aljabar terbukti sebagai sebuah grup, maka uji sifat grup khusus dapat dilakukan.
1. Uji Grup Komutatif
2. Uji Grup Siklik
listOfMembers = members maxtry = 999
siklik = false
For Each element in listOfMembers
For(i=0;i<members.length;i++)
result = calc(members[i],members[i]) try = 0
while(try < maxtry && result != element) result = calc(result,members[i])
try++ End While
Jika result = element
listOfMembers.pop(result)
End Jika
End For
End For
End For
Jika listOfMembers kosong siklik = true
End Jika
3. Uji Grup Berhingga
boolean finite = true;
int matchCount = 1; // identity element is counted by default int attempt = 0, maxattempt = 99;
for(i=0;i<members.length;i++) { if(members[i] == identity) continue;
attempt = 0;
do { result = calculate[result][members[i]); }
while(result != identity && ++attempt < maxattempt); if(attempt < maxattempt) matchCount++;
}
isAperiodic = (matchCount == 1); //only identity matches
isMixed = ( (1 < matchCount) && (matchCount < members.length) ); //some match
4. Uji Subgrup Normal
// setup a new set from B's members and operator
Himpunan sub = sub.setupHimpunan(B.members, operator); // test if sub (B) is part of A
isPartOf = (isPart(B.getMembers(), members) if(isPartOf) { for(int i=0;i<sub.getMembers().length;i++) { for(int j=0;j<sub.getMembers().length;j++) { sub.caymantable[i][j] = this.caymanTable[sub.getMembers(i)][sub.getMembers(j)]; } } }
isSubgroup = isPartOf && sub.isTertutup && sub.isAllInverse) if(isSubgroup) {
isNormal = true;
for(int i=0;i<_members.length;i++) {
kosetkiri = calculateKoset(members[i], B.getMembers());
kosetkanan =
calculateKoset(B.getMembers(),members[i]);
if( !(isListSame(kosetkiri, kosetkanan)) isNormal = false; }
}
isNormalSubGroup = isSubgroup && isNormal; }
5. Uji Grup Faktor
boolean isfactorgroup, newElement; isfactorgroup = false;
if(!isNormalSubGroup(B)) isfactorgroup = false;
kosetkiri = calculateKoset(_members[0], B.getMembers()); for(Object e:kosetkiri) if(!(unionlist.contains(e))) unionlist.add(e);
testReportFactor += _name + "=" + calculateKoset(members[0], B.getMembers());
for(int i=1;i<_members.length;i++) {
kosetkiri = calculateKoset(_members[i], B.getMembers(), KOSET_KIRI);
newElement = false;
for(Object e:kosetkiri) if(!(uni onlist.contains(e))) {
unionlist.add(e);
}
if(newElement) testReportFactor += " U " + kosetkiri.toString(); kosetkirilist.add(kosetkiri);
}
isfactorgroup = Unionlist.isGroup
6. Uji Homomorfisma Grup boolean homomorfis = true;
String F[] = new String[members.length]; for(i=0;i<_members.length;i++) {
F[i] = B.getMembers(i%B.getMembers().length); }
int index_a_b, index_Fa, index_Fb; for(i=0;i<_members.length;i++) { for(j=i;j<_members.length;j++) { a_b = caymanTable[i][j]; Fa = B.member(F[i]); Fb = B.member(F[j]); if( !(F[a_b].equals(B.caymanTable(Fa,Fb)))) homomorfis = false; } } 3.2.3 Rancangan Tampilan
Berikut adalah rancangan-rancangan tampilan dari program aplikasi yang akan dibuat, dimulai dari saat pertama kali program dibuka, dijalankan sampai saat program menjelaskan klasifikasi grup khusus.
A. Tampilan Pembuka
Rancangan pertama dari program aplikasi adalah tampilan pembuka berupa pengenalan aplikasi mulai dari nama aplikasi, nama pembuat aplikasi, serta tahun dibuat. Untuk memulai program aplikasi ini, pengguna haruslah memilih ”File” lalu ”Input”.
Gambar 3.2 Tampilan Pembuka B. Tampilan Input Data Elemen
Rancangan kedua dari program aplikasi adalah tampilan input data elemen. Pengguna diminta untuk memasukkan data elemen-elemen dalam himpunan. Setelah itu, program akan men-generate tabel Cayley sesuai dengan data elemen yang telah dimasukkan sebelumnya pada himpunan, dilanjutkan dengan pengguna memasukkan nilai hasil operasi tiap pasangan pada tabel Cayley.
Gambar 3.3 Tampilan Input Data Elemen C. Tampilan Output Hasil Masukan Data Elemen
Rancangan ketiga dari program aplikasi adalah tampilan hasil dari masukan data elemen sebelumnya yang telah diuji. Pada halaman ini pengguna dapat dengan mudah mengetahui apakah data elemen-elemen yang telah dimasukkan sebelumnya dapat menghasilkan grup khusus yaitu dengan melihat aktif atau tidaknya tombol ”Uji Grup Khusus”. Aktif menunjukkan bahwa data elemen-elemen dapat diuji, begitu pula sebaliknya, tidak aktif menunjukan data dan elemen tidak dapat diuji. Tombol ”Detail A” dan ”Detail B” pada halaman ini akan membantu pengguna menuju halaman selanjutnya yang akan menjelaskan secara detail masing-masing data elemen dari himpunan. Sedangkan fungsi tombol ”Edit A” dan ”Edit B” pada halaman ini membantu pengguna kembali menuju halaman Gambar 3.3.
Gambar 3.6 Tampilan Output Hasil Masukan Data Elemen D. Tampilan Detail Himpunan
Rancangan keempat dari program aplikasi adalah tampilan detail dari masing-masing himpunan. Pada halaman ini pengguna dapat mengetahui hasil uji data elemen dari himpunan dengan melihat tanda atau simbol di depan masing-masing sifat-sifat umum. Tanda ”√” menunjukkan bahwa himpunan memiliki sifat umum tersebut. Sedangkan tanda ”X” menunjukkan bahwa himpunan tidak memiliki sifat umum tersebut. Jika pengguna mengarahkan kursor ke salah satu sifat umum maka akan muncul keterangan dalam bentuk balon kecil yang menjelaskan terbentuknya sifat umum tersebut. Setelah diketahui sifat-sifat umum yang dimiliki himpunan maka dapat diketahui pula klasifikasi struktur aljabar secara umum. Dapat diperiksa apakah himpunan tersebut termasuk dalam grupoid, semigrup, monoid, atau grup. Untuk mengetahuinya adalah dengan
melihat aktif atau tidaknya masing-masing label tersebut. Berikut adalah gambar Detail Himpunan A dengan operasi ”+”;
Gambar 3.7 Tampilan Detail Himpunan A E. Tampilan Uji Grup Khusus
Rancangan kelima dari program aplikasi adalah tampilan uji grup khusus. Pada halaman ini, pengguna dapat melakukan pengujian sifat-sifat grup umum sehingga dapat diklasifikasikan ke beberapa grup khusus seperti: grup komutatif (abelian), grup siklik, grup berhingga (aperiodik, periodik, dan campuran), grup faktor, homomorfisma, dan subgrup normal. Setelah program melakukan pengujian, maka detail mengenai klasifikasi akan ditampilkan pada layar di sampingnya. Berikut adalah contoh tampilan layar yang telah didesain.
Gambar 3.8 Tampilan Uji Grup Khusus
3.2.4 Skema Rancangan Sistem
A. Flow Chart Sistem Kontrol Modul
Gambar 3.9 Flow Chart Sistem Kontrol Modul
Gambar di atas menunjukkan alur kontrol berjalannya modul-modul pada program aplikasi secara garis besar beserta dengan kondisi-kondisi yang perlu dipenuhi agar suatu modul spesifik dapat berjalan.
B. Use Cases Diagram
Gambar 3.10 Use Cases Diagram untuk Program Pengujian
Kemungkinan interaksi yang dapat dilakukan oleh pengguna dengan sistem program aplikasi disajikan dalam bentuk Use Cases Diagram seperti gambar di atas.
C. Flow Chart Program Utama
Gambar 3.11 Flow Chart Program Utama
Secara keseluruhan alur kerja program ditunjukan pada gambar di atas. Untuk subrutin pengujian sifat klasifikasi umum dipecah ke dalam beberapa tahapan seperti dijelaskan pada gambar berikut.
Gambar 3.12 Flow Chart Subrutin Uji Sifat Klasifikasi Umum
Jika ada syarat sifat yang tidak dipenuhi dalam proses uji klasifikasi umum sistem aljabar (grupoid, semigrup, monoid, dan grup) maka program tidak melakukan pengujian untuk sifat selanjutnya. Hal ini sesuai dengan syarat untuk masing-masing bentuk.