27
Bab III
Usulan Metode dan Rekayasa Domain Penjadwalan
III.1
Usulan Metode Pembangunan Framework
ANALISIS DOMAIN DOMAIN PERSOALAN PERANCANGAN DOMAIN IMPLEMENTASI DOMAIN MODEL FITUR : 1. Diagram Fitur
2. Kesamaan dan keberagaman 3. Aspek konfigurasi
ARSITEKTUR FRAMEWORK : 1. Frozen spot
2. Hot-spot
3. Domain Specific Language
IMPLEMENTASI FRAMEWORK : 1. Implementasi frozen dan hot
spot.
2. Implementasi DSL. 3. Implementasi
komponen-komponen emplementer.
Gambar III.1 Usulan metode pembangunan framework
Usulan metode pembangunan framework yang diajukan yaitu dengan menggunakan rekayasa domain (domain engineering). Rekayasa domain berbeda dengan rekayasa aplikasi dimana rekayasa aplikasi ditujukan hanya untuk membangun aplikasi tunggal sedangkan rekayasa domain ditujukan untuk pembangunan keluarga sistem (family of system) dalam suatu domain. Framework adalah aplikasi setengah jadi yang dapat digunaulang dan dikhususkan untuk
28
menghasilkan bermacam-macam aplikasi dalam suatu domain. Karena itu framework tidak dibangun dengan rekayasa yang spesifik untuk satu jenis aplikasi melainkan framework mencakup sebuah domain dan diperlukan rekayasa domain untuk membangun framework tersebut.
Rekayasa domain untuk pembangunan framework ditujukan untuk menghasilkan framework yang memenuhi kebutuhan domain dan dapat digunaulang dalam lingkup domain tersebut. Rekayasa domain untuk membangun framework terdiri dari tahapan berikut :
1. Analisis domain
Analisis domain dalam pembangunan framework menggunakan pemodelan fitur, pemodelan fitur dipilih dengan alasan berikut :
a) Pemodelan fitur menggambarkan konsep. Konsep disini tidak memiliki semantik yang didefinisikan sehingga konsep bisa berupa apapun. Karena itu sangat cocok menggunakan pemodelan fitur untuk menggambarkan elemen-elemen dan struktur-struktur yang terdapat dalam domain, dan bukan hanya objek-objek.
b) Model fitur yang dihasilkan oleh pemodelan fitur akan menggambarkan kesamaan (commonalities) dan keberagaman (variabilities) dari sebuah domain sehingga akan memudahkan dalam mengidentifikasi hot-spot pada langkah selanjutnya.
c) Pemodelan fitur tidak memerlukan semantik seperti halnya model objek sehingga lebih mudah bagi seorang pakar domain yang tidak memahami mengenai kelas, objek, pewarisan, design pattern dsb. Hasil utama dari tahap analisis domain adalah model fitur yang menyatakan kesamaan dan keberagaman serta aspek konfigurasi yang ada dalam sebuah domain, kesamaan dan keberagaman ini diekspresikan menggunakan diagram fitur.
2. Perancangan domain
Setelah model fitur di dapatkan dari hasil analisis domain, maka model fitur tersebut digunakan untuk membentuk frozen/hot spot dalam framework, dengan bantuan kartu hot-spot (hot spot card). Selain itu
29
dalam tahap ini dihasilkan bahasa spesifik domain (Domain Specific Language /DSL) dari domain tersebut. DSL ini adalah bahasa yang digunakan untuk mengkonfigurasi framework. Dengan DSL maka penggunaan framework menjadi lebih mudah dan cepat
3. Implementasi domain
Pada tahap ini dilakukan implementasi terhadap frozen/hot spot dalam framework serta mengimplementasi DSL. Selain itu komponen-komponen implementer dari framework juga diimplemetasikan.
III.2
Rekayasa Domain Penjadwalan
Pada tahap ini akan dilakukan rekayasa domain terhadap domain penjadwalan. Rekayasa domain akan terdiri dari tiga tahap yaitu analisis domain, perancangan domain dan implementasi domain.
III.2.1
Analisis Domain
Analisis domain melibatkan penetapan lingkup, menganalisis kesamaan, keberagaman, dan kebergantungan di dalam satu keluarga sistem, dan pengembangan kebutuhan-kebutuhan yang dapat dikonfigurasi dan digunaulang. Analisis domain akan dilakukan dengan menggunakan pemodelan fitur, dimana konsep penjadwalan akan di dekomposisi menjadi fitur-fitur dan digambarkan kedalam diagram fitur.
1. Job
Job adalah fitur yang terdapat pada konsep penjadwalan, Job adalah entitas yang akan dijadwalkan. Sebuah Job dapat terdiri dari satu atau lebih Operation. Job dengan satu Operation dinamakan Mono Operation Job dan Job yang terdiridari lebih dari satu Operation di sebut Multi Operation Job. Job merupakan fitur mandatory pada konsep penjadwalan. Berikut adalah diagram fitur Job :
Tabel III.1 Tabel Fitur Job
No Fitur Deskripsi
1. Job Job adalah entitas yang akan dijadwalkan yang terdiri dari Operation. 2. Operation Operation adalah entitas yang terdapat dalam Job yang mempunyai
30
31 Tabel III.1 Tabel Fitur Job (lanjutan)
No Nama Fitur Deskripsi 4. Multi Operation Job
Multi-Operation Job adalah Job yang memiliki lebih dari satu Operation yang akan dijadwalkan.
5. Preemptable Operation
Preemptable Operation adalah Operation yang dapat di interupsi oleh Operationyang lain saat di jalankan.
6. Non-Preemptable Operation
Non-Preemptable Operation adalah Operation yang tidak dapat di interupsi oleh Operation yang lain saat di jalankan.
7. Cost Cost adalah nilai beban dari Operation
8. Benefit Benefit adalah nilai keuntungan dari Operation jika mempertimbangkan faktor Precendence.
9. Deadline
time Deadline time adalah batas waktu penyelesaian dari Operation 10. Release time Release time adalah waktu Operation diselesaikan
11. Start time Start time adalah waktu Operation dimulai
12. Due date Due date adalah waktu yang ditujukan selesainya Operation. 13. Processing
time duration
Processing time duration adalah jumlah waktu untuk penyelesaian Operation
14. Setup time duration
Processing time duration adalah jumlah waktu untuk menyiapkan Operation sebelum di proses.
Tabel III.1 menunjukkan daftar fitur-fitur dan subfitur-subfitur yang terdapat pada Job.
2. Model Penjadwalan.
Model Penjadwalan adalah properti-properti yang mendefinisikan penjadwalan itu sendiri. Perilaku sebuah instan dari penjadwalan akan bergantung dari Model Penjadwalan yang dimilikinya. Sebuah instan dari penjadwaan harus memiliki fitur Model Penjadawalan ini. Model Penjadwalan dapat dibagi lagi menjadi tiga subfitur yaitu Alpha, Beta, dan Gamma.
1. Alpha
Alpha adalah fitur yang mendefinisikan tipe dari penjadwalan. Tipe penjadwalan dapat berupa penjadwalan dengan single machine, multiple machine, flowshop, openshop dan sebagainya. Alpha adalah fitur yang sifatnya mandatory.
2. Beta
Beta adalah fitur yang mendefinisikan konstrain-konstrain yang ada pada penjadwalan.Konstrain-konstrain dalam penjadwalan terbagi atas dua
32
bagian yaitu konstrain mengenai ada urutan (precedence) yang harus ditaati pada Operation, serta konstrain mengenai kumpulan (batch) yang mungkin ada pada Operation.
3. Gamma
Gamma adalah fitur yang mendefinisikan kriteria-kriteria optimasi pada penjadwalan. Terdapat beberapa kriteria optimasi pada penjadwalan antara lain :
a. Meminimasi completion time b. Meminimasi maksimum lateness. c. Meminimasi maksimum earliness.
d. Meminimasi maksimum promptness, dan sebagainya. Gamma adalah fitur yang sifatnya mandatory.
Tabel III.2 Tabel fitur Model Penjadwalan Alpha No Nama
Fitur
Deskripsi
1. Model
Penjadwalan Model penjadwalan adalah properti-properti yang mendefinisikan masalah penjadwalan. 2. Alpha Alpha adalah properti yang mendefisikan tipe penjadwalan
3 Jumlah Maksimum Mesin
Jumlah Maksimum Mesin adalah jumlah maksimum mesin yang akan digunakan.
4. Single
Machine Single Machine mendefinisikan tipe penjadwalan dengan mesin tunggal 5. Identical
Parallel machine
Identical Parallel Machine mendefinisikan tipe penjadwalan dengan beberapa mesin identik dengan susunan paralel.
6. Uniform Parallel machine
Uniform Parallel Machine mendefinisikan tipe penjadwalan dengan beberapa mesin seragam dengan susunan paralel.
7. Unrelated Parallel machine
Unrelated Parallel Machine mendefinisikan tipe penjadwalan dengan beberapa mesin yang tidak saling berhubungan dengan susunan paralel. 8. Flow Shop Flow Shop adalah pengaturan dimana terdapat sejumlah mesin di shop,
dan job menggunakan mesin dengan urutan sama, job mempunyai
routing yang sama
9. Job shop Job Shop adalah pengaturan dimana beberapa mesin tersedia di shop dan masing-masing job mempunyai route nya sendiri.
10. Open shop Open Shop adalah pengaturan dimana beberapa mesin tersedia di shop.
Job-job tidak mempunyai routing yang tetap. Job-job dapat
menggunakan mesin-mesin dengan sembarang urutan.
11. Mixed Shop Job Shop adalah pengaturan dimana beberapa mesin tersedia di shop. Beberapa job mempunyai routing sendiri dan lainnya tidak.
33
Model Penjadwalan
Penjadwalan
Alpha Beta Gamma
Single Machine Identical Parallel Machine Flow Shop Job Shop Open Shop Mixed Shop Proportional Parallel Machine Unrelated Parallel Machine …... …... Maximum Machine Sequencer Job Algortima Penjadwalan …... …... …...
34
35
36
Tabel III.3 Tabel fitur Model Penjadwalan Beta No Nama
Fitur
Deskripsi
1. Beta Beta adalah konstrain-konstrain dari masalah penjadwalan.
2. Precedence Precedence adalah konstrain pada operasi yang menyatakan pengurutan operasi berdasarkan kepentingan atau rangkaian.
3. Chain Chain adalah konstrain precendence antara operation yang membentuk sekumpulan rantai (chain).
4. Tree Tree adalah konstrain precendence antara operation yang membentuk sekumpulan pohon (tree).
5. In-Tree In-tree adalah konstrain precendence antara operation yang membentuk sekumpulan in-tree
6. Out-tree Out-tree adalah konstrain precendence antara operation yang membentuk sekumpulan out-tree
7. Serial Parallel Graph
Serial Parallel Graph adalah konstrain precendence antara operation yang membentuk sekumpulan serial parallel graph.
8. Batch Batch adalah konstrain yang menyatakan pengelompokan sejumlah operasi dalam sebuah grup eksekusi (batch).
9. Serial Batch Serial batch adalah pengelompokan operasi kedalam batch-batch yang nantinya diproses secara serial dalam setiap batch.
10. Parallel Batch
Parallel batch adalah pengelompokan operasi kedalam batch-batch yang nantinya diproses secara parallel dalam setiap batch.
Tabel III.4 Tabel fitur Model Penjadwalan Gamma No Nama
Fitur
Deskripsi
1. Gamma Gamma adalah kriteria yang dioptimasi dalam penjadwalan. 2. Make Span Make span adalah optimasi dengan meminimasi completion time. 3. Minimax
Lateness
Minimax Lateness adalah optimasi dengan meminimasi maksimum lateness dari job.
4. Minimax Earliness
Minimax Earliness adalah optimasi dengan meminimasi maksimum earliness dari job.
5.
Minimax Flowtime Minimax Flowtime adalah optimasi dengan meminimasi maksimum flowtime dari job. 6 Minimax
Promptness Minimax Promptness adalah optimasi dengan meminimasi maksimum promptness dari job. 7. Minisum
Average Completion
Minisum Average Completion adalah optimasi dengan meminimasi hasil penjulmlahan (sum) dari average completion.
8. Minisum Average Weighted Completion
Minisum Average Weighted Completion adalah optimasi dengan meminimasi hasil penjulmlahan dari average weighted completion. 9. Minisum
Total completion
Minisum Total completion adalah optimasi dengan meminimasi hasil penjulmlahan dari total completion.
10. Minisum Average Tardiness
Minisum Average Tardiness adalah optimasi dengan meminimasi hasil penjulmlahan dari average tardiness.
11. Minisum Average Earliness
Minisum Average Earliness adalah optimasi dengan meminimasi hasil penjulmlahan dari average earliness.
37
Tabel III.2, tabel III.3, dan tabel III.4 menunjukkan daftar fitur-fitur dan subfitur-subfitur yang terdapat pada Model Penjadwalan.
3. Algoritma Penjadwalan.
Model Penjadwalan mendefinisikan algortima yang digunakan dalam melakukan penjadwalan terhadap Job yang ada. Ada beberapa algortima yang umum digunakan dalam penjadwalan seperti Lawler Algorithm, Moore Algorithm, Johnson Algorithm, dan sebagainya.
Tabel III.5 Tabel fitur Algoritma Penjadwalan No Nama
Fitur
Deskripsi
1. Algortima
Penjadwalan Algortima Penjadwalan adalah algortima yang digunakan untuk menjadwalkan operasi-operasi pada Job. 3. Lawler
Algorithm Algortima Lawler untuk menyelesaikan masalah 1|prec|fmax 4. Moore
Algorithm Algortima Moore untuk menyelesaikan masalah 1|du|U 5. Johnson
Algorithm Algortima Johnson untuk menyelesaikan masalah F2|prmu|Cmax 6. Campbell
Algorithm Algortima Campbell untuk menyelesaikan masalah F|prmu|Cmax 7. Nawaz
Algorithm
Algortima Nawaz untuk menyelesaikan masalah F|prmu|Cmax
8. Sahni
Algorithm Algortima Sahni untuk menyelesaikan masalah P|pmtn,di|fmax 9. Algortima
Custom Algoritma Custom adalah algortima dengan implementasi custom.
Tabel III.5 menunjukkan daftar fitur-fitur dan subfitur-subfitur yang terdapat pada Algoritma Penjadwalan.
4. Sequencer.
Sequencer adalah pengurutan Operation pada sebuah Job berdasarkan nilai dari suatu attribut tertentu. Sequencer dapat didasarkan atas nilai due date, release time, start time, deadline time pada suatu Operation.
38
39
40 Tabel III.6 Tabel fitur Sequencer
No Nama Fitur
Deskripsi
1. Sequencer Sequencer adalah pengurutan operasi dalam sebuah job berdasarkan nilai tertentu.
3. Due date
sequencer Due date sequencer mengurutkan operasi berdasarkan nilai due date nya. 4. Release time
sequencer Due date sequencer mengurutkan operasi berdasarkan nilai release time nya. 5. Start time
sequencer Due date sequencer mengurutkan operasi berdasarkan nilai start time nya. 6. Deadline
time sequencer
Due date sequencer mengurutkan operasi berdasarkan nilai deadline nya.
7. Processing time
duration sequencer
Due date sequencer mengurutkan operasi berdasarkan nilai processing time nya.
8. Setup time duration sequencer
Due date sequencer mengurutkan operasi berdasarkan nilai setup time nya.
9. Benefit weight sequencer
Due date sequencer mengurutkan operasi berdasarkan nilai benefit nya. 10. Sequencer
Custom Sequencer Custom adalah sequencer dengan implementasi custom.
Tabel III.6 menunjukkan daftar fitur-fitur dan subfitur-subfitur yang terdapat pada Sequencer.
III.2.2 Perancangan domain
Untuk tahap perancangan domain akan dilakukan identifikasi hot-spot, perancangan framework , dan perancangan DSL untuk framework.
III.2.2.1 Identifikasi Hot-Spot
Berdasarkan diagram fitur pada tahap analisis domain dapat di tentukan kesamaan dan keberagaman yang ada pada domain Penjadwalan. Hot-spot merupakan titik-titik variabilitas dari sebuah sistem. Sebuah fitur yang memiliki subfitur alternatif adalah kandidat hot-spot karena subfitur alternatif mencerminkan variabilitas sistem.
41 1. Job
Nama : Job
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Job adalah entitas yang akan dijadwalkan yang terdiri dari operation.
Variabilitas:
Job dapat dibagi menjadi 2 jenis yaitu : 1. Mono Operation Job 2. Multi Operation Job.
Gambar III.8 Kartu hot-spot Job
2. Operation
Nama : Operation
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Operation adalah entitas yang terdapat dalam job yang mempunyai properti-properti yang akan dijadwalkan.
Variabilitas:
Operation memiliki properti ini yang akan menjadi dasar dalam penjadwalan operation tersebut, antara lain:
1. Cost 2. Benefit 3. Deadline Time 4. Release Time 5. Start Time 6. Due date
7. Processing Time Duration 8. Setup Time Duration
Operation dapat dibagi menjadi dua bagian yaitu : 1. Preemptable operation
2. Non-preempatble operation
42 3. Alpha
Nama : Alpha
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Alpha adalah properti yang mendefisikan tipe penjadwalan
Variabilitas:
Alpha memiliki alternatif tipe sebagai berikut : 1. Single Machine
2. Parallel Machine
a. Identical Parallel Machine b. Uniform Parallel Machine c. Unrelated Parallel Machine 3. Flow Shop
4. Job Shop 5. Open Shop 6. Mixed Shop
Alpha juga memiliki properti Jumlah Maksimum Mesin yang harus ditetapkan.
Gambar III.10 Kartu hot-spot Alpha 4. Beta
Nama : Beta
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Beta adalah konstrain-konstrain dari masalah penjadwalan.
Variabilitas :
Beta memiliki properti :
1. Precedence, dengan alternatif a. Chain
b. Tree i. In-Tree ii. Out-tree c. Serial Parallel Graph 2. Batch, dengan alternatif
a. Serial Batch b. Parallel Batch
43 5. Gamma
Nama : Gamma
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Gamma adalah kriteria yang dioptimasi dalam penjadwalan.
Variabilitas:
Gamma memiliki properti sebagai berikut : 1. Make Span
2. Minimax Lateness 3. Minimax Earliness 4. Minimax Flowtime 5. Minimax Promptness
6. Minisum Average Completion
7. Minisum Average Weighted Completion 8. Minisum Total completion
9. Minisum Average Tardiness 10. Minisum Average Earliness
Gambar III.12 Kartu hot-spot Gamma
6. Precedence
Nama : Precedence
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Precedence adalah konstrain pada operasi yang menyatakan pengurutan operasi berdasarkan kepentingan atau rangkaian.
Variabilitas:
Precedence memiliki alternatif tipe sebagai berikut : 1. Chain
2. Tree a. In-Tree b. Out-tree 3. Serial Parallel Graph
44 7. Batch
Nama : Batch
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Batch adalah konstrain yang menyatakan pengelompokan sejumlah operasi dalam sebuah grup eksekusi (batch).
Variabilitas :
Batch memiliki alternatif : 1. Serial batch 2. Parallel batch
Batch terdiri dari beberapa batch elemen yang harus didefinisikan.
Gambar III.14 Kartu hot-spot Batch
8. Batch Element
Nama : Batch Element
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Batch elemen adalah sekumpulan operation yang dikelompokan.
Variabilitas :
Batch elemen mendifinisikan operation yang termasuk di dalamnya baik itu penambahan, pengurangan, penghapusan dsb.
Gambar III.15 Kartu hot-spot Batch Element 9. Algoritma
Nama : Algortima
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Algortima Penjadawalan adalah algortima yang digunakan untuk menjadwalkan operasi-operasi pada Job.
45 Variabilitas:
Algortima mempunyai alternatif sebagai berikut : 1. Lawler Algorithm 2. Moore Algorithm 3. Johnson Algorithm 4. Campbell Algorithm 5. Nawaz Algorithm 6. Sahni Algorithm
Algoritma juga dapat diimplementasi dengan custom.
Gambar III.16 Kartu hot-spot Algoritma
10. Sequencer
Nama : Sequencer
derajat fleksibilitas adaptasi tanpa restart adaptasi oleh end-user
Deskripsi :
Sequencer adalah pengurutan operasi dalam sebuah job berdasarkan nilai tertentu.
Variabilitas :
Sequencer mempunya alternatif sebagai berikut : 1. Due date sequencer
2. Release time sequencer 3. Start time sequencer 4. Deadline time sequencer
5. Processing time duration sequencer 6. Setup time duration sequencer 7. Benefit weight sequencer
Sequencer juga dapat diimplementasi dengan custom.
Gambar III.17 Kartu hot-spot Sequencer
III.2.2.2 Perancangan Framework
Setiap hot-spot yang diidentifikasi pada kartu hot-spot akan dirancang model objeknya dalam sebuah diagram kelas mengikuti FCP. Derajat fleksibilitas adaptasi tanpa restart akan menunjukkan hook method yang diimplementasi pada kelas terpisah (separation principle) sedangkan adaptasi oleh end-user akan menunjukkan bahwa hot-spot tersebut dapat dikonfigurasi menggunakan kakas eksternal dalam DSL domain Penjadwalan. Implementasinya akan berupa file XML (Extensible Markup Language) dengan skema tertentu.
46
III.2.2.2.1 Perancangan Frozen-spot
Frozen-spot atau kernel adalah bagian yang relatif tetap dan tidak berubah pada framework. Frozen-spot ini nantinya akan memanggil hot-spot yang didefinisikan oleh pengguna framework. Berikut ini adalah diagram kelas dari frozen-spot.
Beberapa kelas utama dalam frozen-spot ini adalah : 1. Kelas SchedulingFramework
Kelas SchedulingFramework ini adalah inti dari framework Penjadwalan. Pengguna akan menggunakan kelas ini untuk menjalankan framework. Kelas ini mempunyai konstruktor dengan parameter nama file XML yang akan digunakan sebagai DSL dari framework ini.
2. Kelas DSLParser
Kelas DSLParser ini adalah kelas yang berfungsi untuk melakukan parsing terhadap file XML yang diberikan. Kelas ini akan memeriksa keabsahan sintaks dan semantik dari XML yang diberikan dengan membandingkannya dengan skema XML dari framework Penjadwalan.
3. Kelas Weaver
Kelas Weaver ini adalah kelas yang berfungsi untuk melakukan proses perajutan kelas-kelas dari framework. Perajutan adalah proses dimana sebuah kelas akan diinjeksikan kedalam kelas lain dengan teknologi reflection yang dimiliki oleh bahasa pemrograman Java yang memungkinkan untuk memodifikasi kelas pada saat runtime. Dengan melakukan perajutan kelas maka kelas-kelas pada framework akan terangkai sesuai dengan DSL yang dispesifikasikan oleh pengguna.
4. Kelas Executor
Kelas Executor ini adalah kelas yang berfungsi untuk mengeksekusi framework setelah dilakukan proses perajutan. Kelas ini akan memanggil metode-metode pada kelas koordinator masing-masing hot-spot.
47
Gambar III.18 Diagram Kelas Frozen-Spot
5. Kelas JobCoordinator
Kelas JobCoordinator ini adalah kelas template dari hot-spot Job. Kelas ini mengandung metode template processJob() yang akan memanggil metode hook assignOperation() dan assignOperations() pada hot-spot.
6. Kelas ModelCoordinator
Kelas ModelCoordinator ini adalah kelas template dari hot-spot Alpha, Beta, dan Gamma. Kelas ini mengandung metode template processModel() yang akan memanggil metode-metode hook pada hot-spot.
48 7. Kelas AlgorithmCoordinator
Kelas AlgorithmCoordinator ini adalah kelas koordinator dari hot-spot Algortihm. Kelas ini mengandung metode template processAlgortihm() yang akan memanggil metode hook executeAlgorithm() pada hot-spot. 8. Kelas SequencerCoordinator
Kelas SequencerCoordinator ini adalah kelas koordinator dari hot-spot Sequencer. Kelas ini mengandung metode template processSequencer() yang akan memanggil metode hook executeSequencer() pada hot-spot.
Gambar III.19 adalah diagram sekuen dari frozen-spot. Pengguna menginisiasi framework melalui kelas SchedulingFramework dengan memasukkan parameter file DSL dalam bentuk XML. File DSL ini kemudian akan di baca oleh kelas DSLParser. Oleh DSLParser file ini akan di parsing berdasarkan file schema yang ada. Jika proses parsing berhasil maka SchedulingFramework akan melakukan proses weave yang akan dilakukan oleh kelas Weaver. Kelas Weaver ini akan merajut kelas-kelas framework termasuk kelas-kelas hot-spot yang didefinisikan oleh pengguna, dan juga akan meng-generate kelas-kelas yang diperlukan pada saat runtime. Setelah proses weaving selesai maka ScedulingFramework akan memanggil Executor yang akan melakukan eksekusi kelas-kelas framework sesuai dengan konfigurasi. Executor akan memanggil JobCoordinator, ModelCoordinator, Algortihm Coordinator, dan Sequence Coordinator. Masing-masing kelas ini akan memanggil implementasi hot-spot dari pengguna. Kemudian pengguna dapat mengakses hasi dari eksekusi berupa daftar dari Operation yang telah dijadwalkan.
III.2.2.2.2 Perancangan Hot-spot
1. JobDalam framework Penjadwalan Job akan di definisikan ke dalam design pattern Strategy (separation principle) dimana terdapat kelas-kelas yaitu JobCoordinator, interface Job dan interface MonoOperation dan MultiOperation. JobCoordinator adalah kelas dimana pemrosesan Job akan dilakukan, kelas ini memiliki template method yaitu processJob().
49
50
Metode processJob()ini akan memanggil hook method pada attribut job atau dimana atribut ini adalah interface Job. Attribut job bisa bertipe MonoOperation ataupun MultiOperation . Interface ini memiliki hook method assignOperation() atau assignOperations(). Metode-metode ini nantinya akan diimplementasikan oleh kelas yang mengimplementasi interface tersebut.
2. Operation
Operation adalah part of dari Job. Dalam framework Job dapat diimplementasikan menjadi beberapa cara. Diagram kelas dibawah menunjukkan bahwa Operation didefinisikan sebagai interface yang nantinya akan diimplementasikan beserta metode-metode nya. Umumnya dalam instan framework jumlah objek Operation ini jumlahnya banyak karena itu mengimplementasikan setiap Operation kedalam kelas tersendiri tidak cocok, karena itu framework juga dapat menyediakan implementasi default dari Operation ini yang nantinya tinggal digunakan oleh pengguna.
3. Alpha
Dalam framework Alpha diimplementasikan menggunakan design pattern Strategy (separation principle). Template method ditempatkan pada kelas ModelCoordinator yaitu processModel(), metode ini nantinya akan memanggil hook method pada interface Alpha yaitu getSchedulingType() dan getMaximumMachine(). Kelas yang mengimplementasikan interface ini akan mengimplementasikan hook method ini. Karena implementasi Alpha dalam framework terbilang sangat sederhana dan hook method yang dimiliki tidak membutuhkan proses yang rumit maka implementasi dalam framework nya dapat digantikan dengan cara deklaratif yaitu mendefinisikan properti-properti Alpha ini pada DSL yang dimiliki oleh framework.
51
52
Gambar III.21 Diagram Kelas Operation
+processModel() -alpha : Alpha -beta : Beta -gamma : Gamma ModelCoordinator +getSchedulingType() +getMaximumMachine() : Integer «implementation class» Alpha 1 1 ... SchedulingTypeEnum.SINGLE_MACHINE ... ... alpha.getSchedulingType() ... +getSchedulingType() +getMaximumMachine() : Integer «interface» Alpha
53 4. Beta
Dalam framework Beta mempunyai implementasi yang mirip dengan Alpha. Beta diimplementasikan menggunakan design pattern Strategy (separation principle). Template method ditempatkan pada kelas ModelCoordinator yaitu processModel(), metode ini nantinya akan memanggil hook method pada interface Beta yaitu isSingleCriterion(), isStaticScheduling() dan beberapa metode lain. Kelas yang mengimplementasikan interface ini akan mengimplementasikan hook method ini. Berbeda dengan Alpha, Beta memiliki implementasi yang rumit karena di dalamnya terdapat dua spot lain yaitu Precedence dan Batch, kedua hot-spot ini harus dideklarasikan dalam Beta, atau di deklarasikan pada DSL yang ada.
Gambar III.23 Diagram Kelas Beta
5. Gamma
Gamma juga memiliki behavior yang mirip dengan Alpha dan Beta. Gamma diimplementasikan menggunakan design pattern Strategy (separation principle). Template method ditempatkan pada kelas ModelCoordinator
54
yaitu processModel(). Metode ini nantinya akan memanggil hook method pada interface Gamma yaitu isMakeSpan(), isMinimaxLateness(), isMinimaxTardiness() dan beberapa metode lain Kelas yang mengimplementasikan interface ini akan mengimplementasikan hook method ini. Implementasi Gamma juga sangat sederhana dan hook method yang dimiliki tidak membutuhkan proses yang rumit sehingga implementasi nya dapat digantikan secara deklaratif yang di definisikan pada DSL pada framework.
Gambar III.24 Diagram Kelas Gamma
6. Precedence
Implementasi Precedence dalam framework menggunakan design pattern Strategy (separation principle). Precedence merupakan bagian dari hot-spot Beta dan template method dari hot-spot ini terdapat di kelas ModelCoordinator yaitu pada metode processModel() mendeklerasikan Precedence kedalam DSL sangat rumit sehingga Precedence
55
dibuat hot-spot tersendiri sehingga dapat dideklarasikan programatically. Hot-spot ini memiliki dua dua hook method yaitu getPrecedenceType() dan processPrecedence()
Gambar III.25 Diagram Kelas Precedence
7. Batch
Implementasi Bacth dalam framework menggunakan design pattern Strategy (separation principle). Seperti halnya pada Precedence hot-spot ini adalah bagian dari Beta dan template method hot-spot ini terdapat pada kelas ModelCoordinator yaitu metode processModel(). Metode ini nantinya akan memanggil hook method pada attribut beta yaitu getBatch(). Kemudian dari Batch ini terdapat hook method yaitu getBatchElements(). Batch juga sulit dideklarasikan dengan DSL
56
karena itu dibentuk hot-spot tersendiri untuk mendeklarasikannya secara programatically.
Gambar III.26 Diagram Kelas Batch
8. Batch Element
Batch Element memiliki behavior yang sama dengan Operation, Batch Element adalah part of dari Batch. Batch Element dapat diimplementasikan dalam beberapa cara yaitu:
1. Setiap objek Batch Element dapat diimplementasikan dari interface BacthElement tapi karena terdapat banyak objek Batch Element pada framework, maka cara ini kurang baik.
2. Framework menyediakan implementasi default untuk Batch Element ini sehingga pengguna tinggal menggunakan implementasi tersebut.
57
Gambar III.27 Diagram Kelas Batch Element
9. Algoritma
Implementasi Algoritma dalam framework menggunakan design pattern Strategy (separation principle). Template method terdapat pada kelas AlgorithmCoordinator yaitu metode processAlgorithm(). Metode ini nantinya akan memanggil hook method pada attribut algorithm yang merupakan tipe interface Algorithm. Kelas yang mengimplementasi interface Algorithm akan mengimplementasikan hook method tersebut yaitu executeAlgorithm ().
10. Sequencer
Implementasi Sequencer dalam framework menggunakan design pattern Strategy (separation principle). Template method terdapat pada kelas SequencerCoordinator yaitu metode processSequencer(). Metode ini nantinya akan memanggil hook method pada attribut sequencer yang merupakan tipe interface Sequencer. Kelas yang mengimplementasi interface Sequencer akan mengimplementasikan hook method tersebut yaitu executeSequencer().
58
Gambar III.28 Diagram Kelas Algoritma
59
III.2.2.3 DSL Penjadwalan
Bahasa spesifikasi penjadwalan merupakan meta model penjadwalan untuk menspesifikasi model persoalan proses penjadwalan. Model persoalan penjadwalan dapat dispesifikasi menggunakan bahasa ini. Bahasa spesifikasi berbentuk blok-blok pernyataan berikut: (1) blok informasi dokumentasi pembuat, tanggal pembuatan dan sebagainya (2) blok informasi umum teknis seperti mono-operation, dan sebagainya. (3) field , (4) field , (5) field , (6) data instan persoalan, dan (7) algoritma-algoritma penyelesaian. Bahasa ini merupakan titik awal bahasa spesifikasi persoalan penjadwalan. Bahasa ini telah dapat mencakup hampir semua persoalan penjadwalan single, openshop, jobshop, mixed shop serta banyak konstrain dan banyak fungsi obyektif. Berikut ini adalah DSL untuk penjadwalan dalam bentuk pasangan <attribute>=<value>
Penjadwalan {
// 1. Blok informasi umum dokumentasi
model-id <string> [versi <string>] [deskripsi <string>] [author <string>] [tanggal_pembuatan <date>] [catatan<string>]
// job yang akan dijadwalkan
2. Job {
job {
job-id <integer> [nama <string>] [deskripsi <string>] mono-operation [false | true] operations {
operation {
operation-id <integerr> preemptable [false | true] [cost-weight <integer>] [benefit-weight <integer>] [release-time <integer>] [start-time <integer>] [due-date <integer>] [deadline <integer>] processing-time <integer > [setup-time <integer>] } operation { operation-id <integerr>
60
preemptable [false | true] [cost-weight <integer>] [benefit-weight <integer>] [release-time <integer>] [start-time <integer>] [due-date <integer>] [deadline <integer>] processing-time <integer > [setup-time <integer>] } ….. } } } //Job 3. Operation { operation-id <integer> preemptable [false | true] [cost-weight <integer>] [benefit-weight <integer>] [release-time <integer>] [start-time <integer>] [due-date <integer>] [deadline <integer>] processing-time <integer > [setup-time <integer>] } // Operation // 4. Alpha Tipe-penjadwalan { tipe [ single-machine | identical-parallel-machines | propotional-parallel-machine | unrelated-parallel-machine |
flowshop | jobshop | openshop | mixedshop | ]
jumlah-mesin-maksimal <integer>
} // Tipe-penjadwalan // 5. Beta
Konstrain {
single-criterion [false | true] static-scheduling [false | true] deterministic-scheduling [true | false]
precedence [ not-exists | chains | tree | in-tree | out-tree | sp-graph ] precedence-part { operation { predecessor { operation-id<integer> operation-id<integer> ….. } successor { operation-id<integer> operation-id<integer> …..
61
} }
}
batch [not-exist | serial batch | parallel batch] batch-elements-list { batch-element { batch-element-id<integer> [nama<string>] operations { operation-id<integer> operation-id<integer> ….. } } batch-element { batch-element -id<integer> [nama<string>] operations { operation-id<integer> operation-id<integer> ….. } } …… } } //Konstrain // 5. Gamma Kriteria-optimasi { // Criterion
[makespan-criterion [exists | not-exists]] [minimax-tardiness-criterion [exists | not-exists]] [minimax-lateness-criterion [exists | not-exists]] [minimax-earliness-criterion [exists | not-exists]] [minimax-flow-time-criterion [exists | not-exists]] [minimax-promptness-criterion [exists | not-exists]]
[min-of-average-completion-time-criterion [exists | not-exists]]
[min-of-average-weighted-completion-time-criterion [exists | not-exists]] [min-of-total-completion-time-criterion [exists | not-exists]]
[min-of-total-average-tardiness [exists | not-exists]] [min-of-total-average-earliness [exists | not-exists]]
} // Kriteria-optimasi // 6. Algoritma Algoritma {
// Kelas Algortima – dependency injection [kelas-algortima <string>]
// Pilihan Algortima
[algoritma-predifined [Lawler-algorithm| Moore-algorithm | Campbell-algorithm]]
62 // 7. Sequencer
Sequencer {
// Kelas Sequencer – dependency injection [kelas-sequencer <string>] // Pilihan Sequencer [sequencer-predifined [Due-date-sequencer|Release-time-sequencer|Start-time-sequencer]] } // Sequencer } //Penjadwalan
Gambar III.30 DSL Penjadwalan
III.3
Teknik Implementasi
Framework adalah aplikasi setengah jadi yang ditujukan untuk digunakan dalam berbagai macam aplikasi di dalam sebuah domain, karena itu framework harus dibangun dengan sefleksibel mungkin.
Untuk membangun aplikasi yang fleksibel dibutuhkan teknik implementasi tertentu seperti metaprogramming, bytecode manipulation, dan XML untuk implementasi DSL.
III.3.1 XML dan XML Schema.
XML (Extensible Markup Language) adalah bahasa markup serbaguna untuk mendeskripsikan berbagai macam data. [9] XML menggunakan markup tags seperti halnya HTML. XML disebut extensible karena pengguna dapat mendefinisikan sendiri elemen-elemen markup dari XML yang diinginkan. Dalam framework ini XML digunakan untuk mendefinisikan DSL dari framework.
Untuk mendeskripsikan struktur dari sebuah dokumen XML, digunakan XML Schema. XML schema adalah dokumen yang berisi definisi struktur, konten, semantik dan konstrain dari sebuah dokumen XML. [10] Sebuah dokumen XML yang mengacu ke suatu XML schema harus mengikuti aturan dalam XML schema tersebut. Dalam framework yang dibangun digunakan XML schema sebagai acuan dari semua DSL yang didefinisikan oleh pengguna framework. Dengan adanya XML schema maka dimudahkan untuk melakukan parsing dan validasi terhadap
63
XML yang diberikan pengguna. XML schema yang digunakan dalam framework ini adalah XML schema dari W3C.
Untuk mengekstrak data dari sebuah dokumen XML dibutuhkan teknik-teknik tertentu. Ada banyak teknik yang dapat digunakan untuk memproses dokumen XML antara lain SAX, DOM, transformasi, pull parsing dan data binding. [10] Dalam framework ini digunakan teknik data binding. Data binding adalah teknik pemrosesan XML yang sangat memudahkan pemrogram untuk melakukan penelusuran elemen-elemen XML karena elemen-elemen tersebut dikonversi kedalam hirarki kelas-kelas yang strogly typed sehingga pemrosesan menjadi XML sangat mudah seperti halnya melakukan navigasi objek. [11]
Kakas yang digunakan yaitu XMLBeans. Kakas ini akan mengkompilasi XML schema kedalam kelas-kelas Java, dan melakukan binding elemen-elemen sebuah dokumen XML kedalam kelas-kelas Java tersebut.
III.3.2 Metaprogramming
Metaprogramming adalah mengenai merepresentasi dan memanipulasi komponen-komponen yang mengimplementasi fungsionalitas dasar sistem. Pada metaprogramming, pemrogram membuat program yang merepresentasi dan memanipulasi program lain atau diri sendiri. Program yang merepresentasi dan memanipulasi program lain atau diri sendiri disebut metaprogram [3]
Salah satu tipe dari metaprogramming adalah reflection. Reflection adalah kemampuan program untuk memanipulasi sebagai data sesuatu yang merepresentasi state program selama eksekusinya [11]. Terdapat dua aspek manipulasi pada reflection yaitu (1) introspection, kemampuan program mengobservasi dan dengan demikian menalar mengenai state nya. (2) Intercession, kemampuan program memodifikasi state eksekusi atau mengubah interpretasi atau artinya.
Dalam framework ini metaprogramming digunakan yaitu untuk melakukan late binding. Late binding yang dimaksudkan yaitu mengubah struktur program pada saat runtime dengan melakukan pemuatan (loading) dan menginstanisasi sebuah kelas tertentu kemudian melakukan binding/injeksi kelas tersebut ke tempat yang
64
diinginkan. Kelas yang dimaksud tersebut dideklarasikan di DSL framework kemudian akan di binding pada saat runtime.
Kakas yang digunakan yaitu Java reflection, dengan Java reflection kita dimungkinkan untuk meload sebuah kelas kedalam JVM, dan dimungkinkan untuk mengubah struktur sebuah kelas dengan menambah dan mengurangi field dan meng-invoke sebuah method.
III.3.3 Bytecode manipulation
Bytecode manipulation adalah teknik yang digunakan untuk melakukan manipulasi bytecode.[12] Bytecode adalah bahasa intermidiate yang berisi sekumpulan instruction set yang dimengerti oleh interpreter dari sebuah bahasa pemrograman. Interpreter ini umunya disebut dengan virtual machine. Virtual machine ini nantinya akan menerjemahkan bytecode menjadi instruksi-intruksi mesin yang sebenarnya sesuai platform yang ditujukan. Java dan Smalltalk adalah contoh bahasa pemrograman yang menggunakan pendekatan bytecode ini.
Dalam bahasa pemrograman Java, bytecode adalah hasil dari proses kompilasi yang disimpan dalam file berekstensi class. Pada saat runtime, virtual machine pada Java yang bernama JVM (Java Virtual Machine), akan me-load stream bytecode tersebut untuk diproses. Karena representasi kelas-kelas pada saat runtime berbentuk bytecode, maka diperlukan teknik bytecode manipulation untuk memanipulasi kelas-kelas tersebut. Dengan bytecode manipulation dimungkinkan untuk melakukan manipulasi kelas dengan bebas, seperti mengganti nama kelas, menambahkan field, menambahkan method, manipulasi isi method. Dengan bytecode manipulation kita juga dimungkinkan untuk menulis source code, mengkompilasi dan menambahkannya kedalam bytecode pada saat runtime, hal ini sangat penting untuk program yang meng-generate source code pada saat runtime.
Framework ini memerlukan bytecode manipulation karena framework akan meng-generate source code untuk DSL yang tidak didefiniskan kelasnya oleh pengguna. Misalnya pengguna framework hanya mendefisikan elemen penjadwalan Job pada DSL maka framework akan meng-generate sebuah kelas Job untuk DSL tersebut agar dapat dieksekusi. Source code kelas yang di generate
65
akan dikompilasi menjadi bytecode dan di load kedalam JVM pada runtime dengan memanfaatkan teknik bytecode manipulation.
Kakas yang digunakan adalah Javassist. Javaassist adalah kakas yang bagus untuk melakukan bytecode manipulation karena memiliki abstraksi pada level source code sehingga pengguna tidak perlu memahami instruksi-instruksi bytecode cukup memanipulasi pada level source dan Javassist akan mengkompilasinya kedalam bytecode.