Bab III Usulan Metode dan Rekayasa Domain Penjadwalan
III.1
Usulan Metode Pembangunan Framework
DOMAIN PERSOALAN
MODEL FITUR : 1. Diagram Fitur 2. Kesamaan dan keberagaman 3. Aspek konfigurasi
ANALISIS DOMAIN
PERANCANGAN DOMAIN
ARSITEKTUR FRAMEWORK : 1. Frozen spot 2. Hot-spot 3. Domain Specific Language
IMPLEMENTASI DOMAIN
IMPLEMENTASI FRAMEWORK : 1. Implementasi frozen dan hot spot. 2. Implementasi DSL. 3. Implementasi komponenkomponen 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
27
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
menggambarkan
dihasilkan
kesamaan
oleh
pemodelan
(commonalities)
dan
fitur
akan
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
28
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.
Rekayasa Domain Penjadwalan
III.2
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 1. 2.
Fitur Job Operation
Deskripsi Job adalah entitas yang akan dijadwalkan yang terdiri dari Operation. Operation adalah entitas yang terdapat dalam Job yang mempunyai properti-properti yang akan dijadwalkan.
29
Gambar III.2 Diagram fitur Job
30
Tabel III.1 Tabel Fitur Job (lanjutan) No 4. 5. 6. 7. 8. 9.
Nama Fitur
Deskripsi
Multi Operation Job Preemptable Operation NonPreemptable Operation Cost Benefit
Multi-Operation Job adalah Job yang memiliki lebih dari satu Operation yang akan dijadwalkan.
Deadline time Release time Start time Due date Processing time duration Setup time duration
10. 11. 12. 13. 14.
Preemptable Operation adalah Operation yang dapat di interupsi oleh Operationyang lain saat di jalankan. Non-Preemptable Operation adalah Operation yang tidak dapat di interupsi oleh Operation yang lain saat di jalankan. Cost adalah nilai beban dari Operation Benefit adalah nilai keuntungan dari Operation jika mempertimbangkan faktor Precendence. Deadline time adalah batas waktu penyelesaian dari Operation Release time adalah waktu Operation diselesaikan Start time adalah waktu Operation dimulai Due date adalah waktu yang ditujukan selesainya Operation. Processing time duration adalah jumlah waktu untuk penyelesaian Operation 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
31
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 Model penjadwalan adalah properti-properti yang mendefinisikan masalah penjadwalan. Alpha adalah properti yang mendefisikan tipe penjadwalan Jumlah Maksimum Mesin adalah jumlah maksimum mesin yang akan digunakan.
8.
Model Penjadwalan Alpha Jumlah Maksimum Mesin Single Machine Identical Parallel machine Uniform Parallel machine Unrelated Parallel machine Flow Shop
9.
Job shop
10.
Open shop
11.
Mixed Shop
1. 2. 3 4. 5. 6. 7.
Single Machine mendefinisikan tipe penjadwalan dengan mesin tunggal Identical Parallel Machine mendefinisikan tipe penjadwalan dengan beberapa mesin identik dengan susunan paralel. Uniform Parallel Machine mendefinisikan tipe penjadwalan dengan beberapa mesin seragam dengan susunan paralel. Unrelated Parallel Machine mendefinisikan tipe penjadwalan dengan beberapa mesin yang tidak saling berhubungan dengan susunan paralel. Flow Shop adalah pengaturan dimana terdapat sejumlah mesin di shop, dan job menggunakan mesin dengan urutan sama, job mempunyai routing yang sama Job Shop adalah pengaturan dimana beberapa mesin tersedia di shop dan masing-masing job mempunyai route nya sendiri. 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. Job Shop adalah pengaturan dimana beberapa mesin tersedia di shop. Beberapa job mempunyai routing sendiri dan lainnya tidak.
32
Penjadwalan
Model Penjadwalan
Job
…...
Alpha
Maximum Machine
Single Machine
Identical Parallel Machine
Proportional Parallel Machine
Unrelated Parallel Machine
Sequencer
…...
…...
Beta
Gamma
…...
…...
Flow Shop
Gambar III.3 Diagram fitur Alpha
33
Algortima Penjadwalan
Job Shop
Open Shop
Mixed Shop
Gambar III.4 Diagram fitur Beta
34
Gambar III.5 Diagram fitur Gamma
35
Tabel III.3 Tabel fitur Model Penjadwalan Beta No
Nama Fitur
1. 2.
Beta Precedence
3.
Chain
4.
Tree
5.
In-Tree
6.
Out-tree
7. 8.
Serial Parallel Graph Batch
9.
Serial Batch
10.
Parallel Batch
Deskripsi Beta adalah konstrain-konstrain dari masalah penjadwalan. Precedence adalah konstrain pada operasi yang menyatakan pengurutan operasi berdasarkan kepentingan atau rangkaian. Chain adalah konstrain precendence antara operation yang membentuk sekumpulan rantai (chain). Tree adalah konstrain precendence antara operation yang membentuk sekumpulan pohon (tree). In-tree adalah konstrain precendence antara operation yang membentuk sekumpulan in-tree Out-tree adalah konstrain precendence antara operation yang membentuk sekumpulan out-tree Serial Parallel Graph adalah konstrain precendence antara operation yang membentuk sekumpulan serial parallel graph. Batch adalah konstrain yang menyatakan pengelompokan sejumlah operasi dalam sebuah grup eksekusi (batch). Serial batch adalah pengelompokan operasi kedalam batch-batch yang nantinya diproses secara serial dalam setiap 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 1. 2. 3. 4. 5. 6 7. 8.
9. 10. 11.
Nama Fitur
Deskripsi
Gamma Make Span Minimax Lateness Minimax Earliness Minimax Flowtime Minimax Promptness Minisum Average Completion Minisum Average Weighted Completion Minisum Total completion Minisum Average Tardiness Minisum Average Earliness
Gamma adalah kriteria yang dioptimasi dalam penjadwalan. Make span adalah optimasi dengan meminimasi completion time. Minimax Lateness adalah optimasi dengan meminimasi maksimum lateness dari job. Minimax Earliness adalah optimasi dengan meminimasi maksimum earliness dari job. Minimax Flowtime adalah optimasi dengan meminimasi maksimum flowtime dari job. Minimax Promptness adalah optimasi dengan meminimasi maksimum promptness dari job. Minisum Average Completion adalah optimasi dengan meminimasi hasil penjulmlahan (sum) dari average completion. Minisum Average Weighted Completion adalah optimasi dengan meminimasi hasil penjulmlahan dari average weighted completion. Minisum Total completion adalah optimasi dengan meminimasi hasil penjulmlahan dari total completion. Minisum Average Tardiness adalah optimasi dengan meminimasi hasil penjulmlahan dari average tardiness. Minisum Average Earliness adalah optimasi dengan meminimasi hasil penjulmlahan dari average earliness.
36
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 1. 3. 4. 5. 6. 7. 8. 9.
Nama Fitur
Deskripsi
Algortima Penjadwalan Lawler Algorithm Moore Algorithm Johnson Algorithm Campbell Algorithm Nawaz Algorithm Sahni Algorithm Algortima Custom
Algortima Penjadwalan adalah algortima yang digunakan untuk menjadwalkan operasi-operasi pada Job. Algortima Lawler untuk menyelesaikan masalah 1|prec|fmax Algortima Moore untuk menyelesaikan masalah 1|du|U Algortima Johnson untuk menyelesaikan masalah F2|prmu|Cmax Algortima Campbell untuk menyelesaikan masalah F|prmu|Cmax Algortima Nawaz untuk menyelesaikan masalah F|prmu|Cmax Algortima Sahni untuk menyelesaikan masalah P|pmtn,di|fmax 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.
37
Gambar III.6 Diagram fitur Algoritma
38
Gambar III.7 Diagram fitur Sequencer
39
Tabel III.6 Tabel fitur Sequencer No
Nama Fitur
1.
Sequencer
3.
Due date sequencer Release time sequencer Start time sequencer Deadline time sequencer Processing time duration sequencer Setup time duration sequencer Benefit weight sequencer Sequencer Custom
4. 5. 6. 7.
8. 9. 10.
Deskripsi Sequencer adalah pengurutan operasi dalam sebuah job berdasarkan nilai tertentu. Due date sequencer mengurutkan operasi berdasarkan nilai due date nya. Due date sequencer mengurutkan operasi berdasarkan nilai release time nya. Due date sequencer mengurutkan operasi berdasarkan nilai start time nya. Due date sequencer mengurutkan operasi berdasarkan nilai deadline nya. Due date sequencer mengurutkan operasi berdasarkan nilai processing time nya. Due date sequencer mengurutkan operasi berdasarkan nilai setup time nya. Due date sequencer mengurutkan operasi berdasarkan nilai benefit nya. 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. Berikut beberapa hot-spot yang teridentifikasi adalah sebagai berikut :
40
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
Gambar III.9 Kartu hot-spot Operation
41
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
Gambar III.11 Kartu hot-spot Beta
42
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
Gambar III.13 Kartu hot-spot Precedence
43
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.
44
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. 45
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.
46
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 hotspot. 47
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
ModelCoordinator,
akan
Algortihm
memanggil
Coordinator,
JobCoordinator, 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. Job Dalam framework Penjadwalan Job akan di definisikan ke dalam design pattern Strategy
(separation
dimana
principle)
JobCoordinator, interface Job
terdapat
kelas-kelas
dan interface MonoOperation
yaitu dan
MultiOperation. JobCoordinator adalah kelas dimana pemrosesan Job akan dilakukan, kelas ini memiliki template method yaitu processJob(). 48
Gambar III.19 Diagram Sequence Frozen-Spot
49
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.
50
Gambar III.20 Diagram Kelas Job
51
Gambar III.21 Diagram Kelas Operation
ModelCoordinator
-alpha : Alpha -beta : Beta -gamma : Gamma +processModel()
1
1
... alpha.getSchedulingType() ...
«interface» Alpha +getSchedulingType() +getMaximumMachine() : Integer
«implementation class» Alpha +getSchedulingType() +getMaximumMachine() : Integer
... SchedulingTypeEnum.SINGLE_MACHINE ...
Gambar III.22 Diagram Kelas Alpha
52
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 hot-spot lain yaitu Precedence dan Batch, kedua hotspot 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
53
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
ModelCoordinator
method yaitu
dari
hot-spot
pada
ini
metode
terdapat
di
kelas
processModel()
mendeklerasikan Precedence kedalam DSL sangat rumit sehingga Precedence
54
dibuat hot-spot tersendiri sehingga dapat dideklarasikan programatically. Hotspot 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
55
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.
56
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(). 57
Gambar III.28 Diagram Kelas Algoritma
Gambar III.29 Diagram Kelas Sequencer
58
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 monooperation, 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
=
Penjadwalan { // 1. Blok informasi umum dokumentasi model-id <string> [versi <string>] [deskripsi <string>] [author <string>] [tanggal_pembuatan ] [catatan<string>] // job yang akan dijadwalkan 2. Job { job { job-id [nama <string>] [deskripsi <string>] mono-operation [false | true] operations { operation { operation-id preemptable [false | true] [cost-weight ] [benefit-weight ] [release-time ] [start-time ] [due-date ] [deadline ] processing-time [setup-time ] } operation { operation-id
59
preemptable [false | true] [cost-weight ] [benefit-weight ] [release-time ] [start-time ] [due-date ] [deadline ] processing-time [setup-time ] } ….. } } } //Job 3. Operation { operation-id preemptable [false | true] [cost-weight ] [benefit-weight ] [release-time ] [start-time ] [due-date ] [deadline ] processing-time [setup-time ] } // Operation
// 4. Alpha Tipe-penjadwalan { tipe [ single-machine | identical-parallel-machines | propotional-parallel-machine | unrelated-parallel-machine | flowshop | jobshop | openshop | mixedshop | ] jumlah-mesin-maksimal } // 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 operation-id ….. } successor { operation-id operation-id …..
60
} } } batch [not-exist | serial batch | parallel batch] batch-elements-list { batch-element { batch-element-id [nama<string>] operations { operation-id operation-id ….. } } batch-element { batch-element -id [nama<string>] operations { operation-id operation-id ….. } } …… }
} //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 | Campbellalgorithm]] } // Algoritma
61
// 7. Sequencer Sequencer { // Kelas Sequencer – dependency injection [kelas-sequencer <string>] // Pilihan Sequencer [sequencer-predifined [Due-date-sequencer|Release-time-sequencer|Starttime-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
62
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
63
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 menggenerate source code untuk pengguna.
Misalnya
DSL yang tidak didefiniskan kelasnya oleh
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
64
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.
65