Pertemuan 6 Operating System

1601221420 – Fendy Chandra

Pertemuan 6

Pertemuan 5 kemaren kebetulan jadwalnya bentrok sama IdeaFest BiNus, jadi jadwal OS kelima ini dijadiin GSLC. Kelar GSLC seminggu kita balik lagi ke perkuliahan normal, dan dipertemuan 6 ini materi yang kita pelajarin adalah tentang virtual memory. Nah virtual memory ini termasuk fitur yang lumayan berguna buat kita-kita yang PC/laptopnya punya RAM minimalis (alias kecil), soalnya dengan make VM ini, kita jadi bisa seolah-olah nambahin ukuran RAM yang kita punya. Dari mana kapasitasnya diambil? Jawabannya dari memory harddisk device kita. Jadi prinsipnya dengan make VM, kita ngalokasiin sebagian dari memory hardisk kita buat dijadiin tambahan RAM kita. Cara ini lumayan efektif buat ngebantu komputer kita ngelakuin multi tasking, tapi sayangnya metode ini cenderung bikin pemrosesan di komputer kita jadi lambat (yeah, cara yang ngirit emang ga pernah sesukses yang musti keluar duit; kalo mau yang lebih cepet emang musti beli RAM baru yang lebih gede ;V). Selain 2 cara itu (VM sama beli RAM baru), sekarang juga ada fitur ReadyBoost. Sebenernya hampir sama kayak VM sih, Cuma si ReadyBoost ini ngambil space tambahan buat RAMnya dari flashdisk.

Nah pembahasan minggu ini ga jauh-jauh dari urusan VM management ini. Bahasan pertama yang didapet minggu ini adalah tentang paging, yang artinya proses dimana kita motong-motong memory menjadi bagian yang lebih kecil. Nah bagian yang lebih kecil ini disebut frame.

Kira-kira secara sederhana proses paging bisa digambarin jadi begini:

601

Kalau isi page udah penuh da nada isi baru yang mau masuk, maka kita musti ngelakuin yang namanya page replacement.

Nah didalam memory management ini ada beberapa algoritma yang biasa dipake, kalo di pertemuan minggu ini ada 3 algoritma yang kita pelajarin, yaitu: Algoritma Optimal (Belady’s anomaly), algoritma first in first out (FIFO), sama algoritma least recently used (LRU).

  1. Algoritma Optimal (Belady’s anomaly)

 

Kalo di algoritma ini, page yang bakal di-replace adalah yang datanya paling lama ga dipake.

Contohnya, misalnya kita punya frame yang muat 3 data dan ada inputan data:

70120304230

 

Kalo kita pake algoritma Optimal ini, hasilnya bakalan jadi begini:

 

Input 7 0 1 2 0 3 0 4 2 3 0
Frame 1 7 7 7 2 2 2 2 2 2 2 2
Frame 2 0 0 0 0 0 0 4 4 4 4
Frame 3 1 1 1 3 3 3 3 3 3

 

Penjelasan:

  • Kalo di algoritma ini, waktu framenya masih kosong dan ada data baru yang mo dimasukin, kita tinggal taro data itu diframe yang kosong.
  • Kalo semua frame udah keisi dan ada data baru yang masuk:
    • Kalo datanya = data yang ada didalem frame, ga ada yang direplace
    • Kalo datanya beda sama yang ada didalem frame, maka data yang bakal direplace adalah data yang paling jauh di kanan.
      • Misal: buat contoh masuk data 4, kita liat 2 ada di kolom sebelahnya, 3 ada di 2 kolom setelahnya, 0 ada di 3 kolom sebelah kanannya, jadi yang direplace adalah si 0.
      • Kalo buat contohmasukin data 2 (kolom ke 4),kita bandingin posisi 7, 0, 1 disebelah kanan. 0 ada di kolom setelahnya tapi 7 sama 1 ga ada di sebelah kanan (bisa diasumsiin jaraknya tak hingga di kanan). Nah karena kita gatau yang mana yang paling jauh di kanan antara 7 sama 1, jadi kita liat diantara mereka siapa yang paling lama berada di frame (paling jauh disebelah kiri). 7 ada di kolom pertama, 1 di kolom ke 3, jadi yang kita replace adalah 7.

Hint: jawaban akhirnya pasti isinya variasi dari n angka terakhir dari inputan yang masuk (n = jumlah framenya).

  1. Algoritma FIFO

Kalo algoritma FIFO ini prinsipnya sama kayak Queue, jadi data yang pertama masuk bakal keluar pertama juga. Misalnya framenya 3 dan inputannya kayak gini:

70120304230

 

Kalo pake algoritma FIFO, hasilnya bakal begini:

 

Input 7 0 1 2 0 3 0 4
Frame 1 7 7 7 2 2 2 2 4
Frame 2 0 0 0 0 0 0 0
Frame 3 1 1 1 3 3 3

 

Hint: jawaban akhirnya pasti isinya variasi dari n angka terakhir dari inputan yang masuk (n = jumlah framenya).

 

  1. Algoritma Least Recently Used (RLU)

Kalo algoritma ini prinsipnya data yang bakal direplace adalah data yang paling lama ga dipake. Sebenernya prinsip algoritma RLU ini hampir sama kayak algoritma Queue.

 

Misalnya kalo ada 3 frame dan data yang diinput begini:

70120304230

 

Hasilnya bakal jadi begini:

 

Input 7 0 1 2 0 3 0 4
Frame 1 7 7 7 2 2 2 2 4
Frame 2 0 0 0 0 0 0 0
Frame 3 1 1 1 3 3 3

 

Penjelasan:

 

  • Kalo di algoritma ini, waktu framenya masih kosong dan ada data baru yang mo dimasukin, kita tinggal taro data itu diframe yang kosong.
  • Kalo frame udah penuh dan data yang mau masuk = yang ada didalem frame, maka ga ada data yang direplace.
  • Kalo frame udah penuh dan data yang mau masuk beda sama yang ada didalem frame, maka data yang bakal direplace adalah data yang paling jauh di kiri.

 

Hint: jawaban akhirnya pasti isinya variasi dari n angka terakhir dari inputan yang masuk (n = jumlah framenya).

Oh iya, sekedar ngingetin, denger-denger materi ini termasuk yang bakal keluar di UTS, jadi kudu disiapin baik-baik.

BINUS (www.binus.ac.id) | www.skyconnectiva.com

 

 

 

 

 

You can edit this ad by going editing the index.php file or opening /images/exampleAd.gif

Pertemuan 4 Operating System

Fendy Chandra – 1601221420

Di pertemuan ini, kita belajar yang namanya concurrency. Apa itu concurrency? Simpelnya, concurrency bisa diartiin sebagai komunikasi antar beberapa process yang saling berbagi resources yang sama. Di dalam komunikasi ini, ada sinkronisasi dari beberapa proses yang sama-sama memakai resource tertentu. Nah supaya proses-proses ini dapat berjalan dengan baik, perlu dilakuin yang namanya alokasi processor time. Nah contoh penerapan concurrency ini bisa dalam multiprogramming (penggunaan beberapa aplikasi pada saat yang sama), dalam aplikasi terstruktur (structured application, aplikasi ini disusun dari berbagai perintah yang concurrent), dan di dalam struktur sistem operasi (karena OS itu adalah sekumpulan proses/thread).

Nah walopun sebenernya concurrency ini adalah metode yang bagus buat meningkatkan efisiensi komputer, tapi ada beberapa permasalahan yang sering muncul kalo menerapkan concurrency:

  1. Sharing global resources
  2. Pengelolaan alokasi resources
  3. Kesalahan-kesalahan yang terjadi sewaktu programming susah ditemukan (di-debug) setelah dieksekusi.

 

Permasalahan tentang concurrency bisa diliat di contoh codingan ini:

 

void echo (

{

chin = getchar();

chout = chin;

putchar(chout);

}

 

Proses 1 Proses 2
. .
in = getchar(); .
. in = getchar();
chout = chin; chout = chin;
putchar(chout) .
. putchar(chout)

 

Kalo kita liat contoh diatas, bisa terjadi masalah buat proses 1 kalo nilai yang ditampung sama in di proses 1 ke-overwrite sama in di proses 2, sehingga hasilnya bisa ga reliable. Untuk mengatasi masalah-masalah semacem ini, ada beberapa cara yang bisa kita lakuin (bakal dibahas selanjutnya).

Nah, berhubungan sama concurrency ini, O/S punya beberapa concern, diantaranya:

  1. Mentrack proses-proses yang sedang aktif
  2. Mengalokasi dan mendealokasi resource-resource semacem processor time, memory, file, dan I/O devices
  3. Melindungi data dan resource
  4. Hasil dari proses harus independen terhadap kecepatan eksekusi dari proses-proses lain yang concurrent.

Nah, dalam konkurensi ini, ga jarang terjadi yang namanya kompetisi antar proses yang konkuren. Nah dalam kompetisi ini ada istilah mutual exclusion (berkaitan sama critical sections, yaitu cuma ada 1 program yang boleh berada dalam critical sections, contohnya Cuma ada 1 proses yang boleh ngasih perintah ke printer dalam 1 waktu). Masalahnya akibat mutual exclusion ini bisa aja terjadi yang namanya deadlock dan starvation. Deadlock maksudnya ada 2 proses yang musti tunggu-tungguan buat melakukan 1 eksekusi tertentu. Karena saling tunggu, yang ada akhirnya malah kedua-duanya ga ada yang jalan. Kalo starvation itu adalah situasi dimana 1 proses nunggu terlalu lama buat memakai 1 resource/eksekusi tertentu.

Selain kompetisi, ada juga yang namanya kooperasi. Nah kooperasi ini dibagi jadi 2 macem:

  1. By sharing, nah dalam kooperasi ini, writing harus dilakuin secara mutually exclusive. Supaya integritas datanya terjaga, maka perlu dipake yang namanya critical sections.
  2. By communication, nah dalam kooperasi ini, pesan-pesan yang ada dioper antar 1 proses ke proses yang lain (jadi tidak harus ada mutual exclusion). Karena itu, dalam kooperasi ini ada kemungkinan terjadinya deadlock dan starvation).

Nah tadi kan udah disinggung sedikit soal mutual exclusion. Sekarang bakal dijelasin secara lebih lengkap tentang mutual exclusion. Jadi, mutual exclusion itu adalah Suatu metode yang memungkinkan supaya Cuma ada 1 proses dalam 1 waktu yang berhak berada dalam critical section dari suatu resource. Sebuah proses yang berhenti di non-critical section dari suatu proses harus melakukannya tanpa mengganggu proses-proses yang lain. Karena itu, dalam mutual exclusion ga ada yang namanya deadlock atopun starvation. Dengan metode ini, suatu proses ga boleh terhambat dalam memasuki critical section dari suatu resource kalo critical section itu lagi kosong, tapi setelah ada didalemnya, proses itu terbatas berada disana dalam satu waktu tertentu.

Nah supaya bisa mencapai mutual exclusion ini, ada beberapa cara yang bisa dilakukan:

  1. Dengan men-disable interrupts.

Umumnya, suatu proses berjalan sampai dia memanggil suatu layanan OS ato sampai diinterupsi. Dengan metode ini, kita mencegah munculnya interupsi, sehingga bisa menjamin mutual exclusion. Selain itu, metode ini juga dibatasi kemampuannya dalam meng-interleave program. Tetapi jika kita menggunakan multiprocessing, men-disable interrupt di 1 prosesor ga bakal menjamin mutual exclusion.

 

  1. Memakai lock variable

Dengan metode ini, kita menggunakan suatu variable yang berperan sebagai kunci (lock). Variable ini diinisialisasi dengan nilai 0. Jika lock = 0, maka proses boleh memasuki critical section, lalu nilai lock diubah menjadi 1. Setelah proses keluar, maka lock akan kembali diberi nilai 0. Jika ada proses yang ingin masuk tapi nilai lock = 1, maka proses itu harus menunggu samapi lock = 0. Permasalahan yang bisa timbul dari metode ini adalah race condition, dimana 2 proses mencapai critical section pada waktu yang hampir bersamaan.

 

  1. Menggunakan strict alteration
  2. Menggunakan Peterson’s solution
  3. Memakai instruksi TSL

 

Nah selain memakai metode mutual exclusion, permasalahan-permasalahan concurrency bisa dicegah dengan memakai semaphore. Semaphore adalah suatu variable khusus yang digunakan untuk signaling. Jika sebuah proses menunggu sinyal, maka proses itu akan di-suspend sampai sinyalnya terkirim. Wait dan operasi-operasi sinyal ini tidak bisa diinterupsi. Untuk menampung proses-proses yang menunggu semaphore ini kita perlu memakai queue.

 

Semaphore sendiri adalah variable khusus yang memiliki nilai integer:

  • Semaphore ini bisa diinisialisasi dengan nilai negative.
  • Operasi wait akan men-decrement nilai semaphore
  • Operasi signal akan meng-increment nilai semaphore.

Nah berkaitan sama concurrency ini ada permasalahan yang namanya Producer-Consumer’s problem. Nah dalam permasalahan ini, ada 1 atau lebih producer yang men-generate dan menemoatkan data-data ini kedalam buffer, sedangkan ada 1 consumer yang mengambil item-item keluar dari buffer sebanyak 1 di setiap waktu. Permasalahannya adalah hanya ada 1 consumer/producer yang boleh mengakses buffer dalam satu waktu.

Selain producer-consumer, ada juga permasalahan yang namanya dining philosopher’s problem dan readers’ writer problem. Kalo dalam masalah ini, reader dalam jumlah berapapun boleh membaca file secara simultan, tetapi hanya ada 1 writer yang boleh menulis file tersebut dalam 1 waktu. Ketika writer sedang menulis file, tidak boleh ada reader yang boleh membaca file.

Berikut ini adalah solusi dari producer-consumer problem:

 

42

Berikut ini adalah salah satu solusi yang dapat digunakan untuk mengatasi Reader’s Writer Problem:

43

Solusi lainnya dari permasalahan ini jika menggunakan semaphore adalah sebagai berikut:

44

 

Kalo yang ini adalah solusi Dining Philosopher’s Problem:

45

46

Nah kalodalem prakteknya, kita bisa menggunakan keyword mutex lock dan mutex unlock buat menjalankan concurrency. Nah dalam mutex ini, kita perlu memakai yang namanya pthread kayak dibawah ini:

47

Nah kalo kita make pthread buat mengatasi masalah producer-consumer kita bisa juga, contohnya kayak dibawah ini:

48

49

410

Selain itu, dipertemuan minggu kemaren kita juga ngebahas tentang monitor, yaitu suatu konstruksi bahasa pemrograman yang mendukung akses terkontrol ke shared data. Jadi dengan adanya monitor, compiler menambahkan sinkronisasi secara otomatis dan di-enforce pada saat runtime. Dalam monitor, Cuma boleh ada 1 proses yang berada didalamnya dalam 1 waktu (hal ini dikarenakan setiap procedurenya adalah bagian dari critical section).

Jadi, monitor ini mendukung mutual exclusion, karena Cuma ada 1 proses yang bisa mengeksekusi didalam monitor pada 1 waktu, dan proses-proses lain yang ingin memakai monitor tersebut harus meunggu sampai proses yang ada didalamnya selesai mengeksekusi. Saat berada didalam monitor, sebuah proses bisa saja menemukan dirinya tidak dapat berlanjut, hal ini salah satunya disebabkan karena didalam monitor terdapat conditional variables yang bisa diakses dengan fungsi wait dan signal.

Nah untuk memungkinkan sebuah proses untuk menunggu didalam monitor, kita perlu membuat sebuah variable condition, misalnya condition x;

Nah variable ini Cuma bisa diakses dengan 2 operasi/fungsi, yaitu wait dan signal.

  • Wait (x) berarti proses yang meng-invoke operasi ini (x) akan di-suspend sampai proses lain meng-invoke.
  • Signal (x) akan melanjutkan tepat 1 proses yang sudah di-suspend. Jika tidak ada proses yang di-suspend, maka operasi ini tidak punya efek apapun.

Terakhir, di pertemuan kemaren kita juga belajar tentang message passing. Message passing adalah suatu cara untuk mengkomunikasikan operasi dari 1 proses ke proses lainnya dengan operasi send dan receive. Receiver bisa menspesifikasikan apapun, memilih untuk mem-blok ataupun tidak. Metode message passing ini bisa diterapkan dalam single-processing system, multi-processing system, dan distributed system. Metode ini tidak memerlukan shared address spaces.

Operasi send() dapat bersifat synchronous ataupun asynchronous. Synchronous send akan me-return setelah data dikirm dan memblok jika buffernya penuh, sedangkan asynchronous send akan me-return segera setelah I/O dimulai dan akan memblok jika buffer dianggap penuh.

Operasi receive() juga dapat bersifat synchronous ataupun asynchronous. Synchronous receive akan me-return jika ada pesan dan akan memblok jika tidak ada pesan, sedangkan asynchronous receive akan mereturn pesan pertama jika ada 1 pesan dan meretun indikasi jika tidak ada pesan.

Message passing juga bisa dilakukan secara indirect dengan menggunakan mailbox. Jadi, sebuah pesan akan dikirim ke suatu area tertentu yang diberi nama (mailbox). Proses-proses akan membaca pesan dari mailbox, jadi mailbox ini harus dibuat dan dikelola. Sender akan memblok jika mailboxnya sudah penuh. Keuntungan dari penggunaan mailbox adalah metode ini memungkinkan komunikasi many-to-many.

Dalam message passing, jika sebuah pesan dikirim balik ke sender berarti pesan aslinya sudah diterima dengan tepat. Pesan ini juga bisa dikirm secara piggy-back ke pesan lain baik secara implisit maupun eksplisit. Message passing juga bisa synchronous ataupun asynchronous dan positif ataupun negative.

Berikut ini adalah penggunaan message passing untuk menyelesaikan permasalahan producer-consumer :

411

412

 

Walopun metode ini keliatan bagus, tapi message passing juga punya beberapa masalah yang perlu dipertimbangkan:

  1. Scrambled messages (checksum)
  2. Lost messages (acknowledgements)
  3. Lost acknowledgements (sequence no.)
  4. Destination unreachable (down, terminates) -> karena mailbox penuh
  5. Naming
  6. Authentication
  7. Performance (copying, message building)

BINUS (www.binus.ac.id) | www.skyconnectiva.com

 

Pertemuan 3 Operating System

Pertemuan 3

Di pertemuan kali ini, yang kita materi yang kita pelajarin masih seputaran process&thread, tapi  sekarang focus kita lebih ke tentang process scheduling. Kayak yang kita, komputer bisa ngejalanin lebih dari 1 proses di waktu yang sama, artinya komputer bakal mengalokasikan resourcenya seoptimal mungkin supaya proses-proses yang ada tetep bisa jalan dengan baik. Nah supaya proses-proses yang banyak ntu bisa optimal, perlu ada metode penjadwalan proses-proses tersebut. Nah disesi ini kita ngebahas soal metode-metodenya….

  1. First Come First Served (FCFS)

Di metode ini, proses-proses dijadwalin sesuai sama urutan masuknya, siapa yang masuk duluan bakalan dijalanin duluan. Contohnya begini nih:

 

Proses Burst Time
P1 24
P2 3
P3 3

 

Jadi berdasarkan metode FCFS, proses yang bakal dijalanin duluan adalah P1, baru kemudian P2, dan terakhirnya P3. Kalo dibikin dalam bentuk diagram process time jadinya begini:

 

P1 P2 P3

0                                                                                                                                                24         27     30

 

Cara baca diagram process time (PT) diatas kira-kira begini: P1 dijalankan duluan, jadi dari detik ke-0 sampe ke-24 komputer bakal jalanin P1, abis P1 kelar dijalanin, komputer bakal jalanin P2 selama 3 detik dari detik ke-24 sampe detik ke-27, baru habis itu komputer jalanin P3 dari detik ke-27 sampe 30. Jadi buat jalanin proses-proses tersebut komputer butuh waktu PT1 + PT2 + PT3 = 30 detik.

 

Selain diagram PT, di scheduling ada 1 diagram lagi, namanya diagram waiting time (WT). Nah kalo yang ini ngegambarin waktu tunggu setiap proses sampe akhirnya proses tersebut dijalanin. Kalo buat contoh diatas, diagram WT-nya kira-kira begini :

 

P2 P3 P1

0       3       6                                                                                                                                                                30

Cara baca diagram WT diatas kira-kira begini: Pertama, kita anggap P1 langsung dijalanin dan udah kelar, jadi WT1 = 0. Abis P1 kelar, giliran P2 dijalanin. Karena eksekusi P2 butuh waktu 3 detik, jadi P3 butuh waktu 3 detik buat nunggu P2, jadi WT2 = 3 detik. Kalo P1 mau dijalanin lagi, dia perlu nunggu P3 selese dijalanin dulu, yaitu selama 3 detik. Jadi WT3 = 3 detik (di diagram ditulis 6 soalnya ditambahin lagi sama 3 detiknya WT2).

Kelebihannya FCFS adalah metode ini gampang dimengerti dan (katanya) gampang buat dibikin programnya, tapi kekurangannya adalah metode ini ga bisa ngasih prioritas buat proses-proses yang bakal dijalanin, jadi bisa aja proses yang waktu eksekusinya relative sebentar justru harus nunggu proses yang eksekusinya lebih lama.

  1. Shortest Job First (SJF)

 

Metode ini relative lebih pinter dibandingin sama metode FCFS. Sesuai sama namanya, metode ini bakal ngurutin proses-proses yang bakal dijalanin dari yang waktu prosesnya paling sebentar dulu, sebelon proses-prosesnya dijalankan. Kita pake contoh yang ada di poin 1 ya….

 

Proses Burst Time
P1 24
P2 3
P3 3

 

Nah, di metode SJF, komputer bakal ngurutin proses-proses berdasarkan waktu eksekusinya, kalo ada beberapa proses yang waktu eksekusinya sama, maka bakal didahulukan yang masuk duluan. Jadi kalo dari contoh diatas urutan prosesnya bakal jadi begini:

 

Proses Burst Time
P2 3
P3 3
P1 24

Kalo dibikin dalam bentuk diagram PT, hasilnya bakalan jadi begini….

 

P2 P3 P1

0       3       6                                                                                                                                                                30

 

Diagram WT-nya bakalan jadi begini….

 

P3 P1 P2

0       3                                                                                                                                                      27   30

 

  1. Shortest Remaining Time First (SRTF)

 

Sebenernya metode ini masih  pengembangan dari SJF, cuma disini udah lebih canggih lagi, soalnya dia bakalan ngurutin eksekusi proses bukan cuma berdasarkan waktu prosesnya, tapi juga berdasarkan sisa waktu eksekusi  proses tersebut. Jadi setiap ada proses baru yang di-request, komputer bakal bandingin sisa waktu proses yang lagi jalan sama yang baru masuk: kalo ternyata proses yang baru itu lebih singkat, proses yang sekarang lagi jalan bakal di-suspend (ditunda). Supaya lebih jelas kita pake contoh ini yaa….

Proses Arrival Time Burst Time
P1 0 8
P2 1 4
P3 2 9
P4 3 5

 

Jadi dari table diatas, kita tahu kalo ada 4 proses yang bakal dijalankan sama komputer, yaitu P1, P2, P3, sama P4, dimana tiap-tiap proses ini bakal diba dalam waktu yang beda-beda. Waktu detik ke-0, Cuma ada proses P1 yang siap dijalankan, jadi P1 bakal dijalankan. Masuk detik ke-1, masuk proses P2. Disini berarti ada 2 proses yang bakal dibandingin, yaitu P1 (sisa 7 detik) sama P2 (selama 4 detik). Nah karena P2 punya sisa waktu eksekusi yang lebih pendek, jadi P1 bakal disuspend dulu, dan komputer bakal jalanin P2.

 

Masuk detik ke-2, masuk lagi proses P3. Berarti sekarang komputer punya 3 proses buat dibandingin, yaitu P1 (sisa 7 detik), P2 (sisa 3 detik), sama P3 (selama 9 detik). Karena P2 punya sisa waktu eksekusi yang masih paling pendek, maka P2 tetep lanjut.

 

Masuk detik ke-3, masuk lagi proses P4. Sekarang kita punya 4 proses buat dibandingin, yaitu P1 (sisa 7 detik), P2 (sisa 2 detik), P3 (selama 9 detik), sama P4 (selama 5 detik). Karena P2 masih paling pendek sisa waktu eksekusinya, jadi P2 tetep dilanjutin eksekusinya.

 

Di detik ke-5, eksekusi P2 udah selesai. Sekarang masih ada sisa 3 proses lagi buat dijalanin, yaitu P1 (sisa 7 detik), P3 (selama 9 detik), sama P4 (selama 5 detik). Karena P4 punya sisa waktu eksekusi yang paling pendek, jadi P4 bakalan dijalanin duluan.
Di detik ke-10, eksekusi P4 udah selesai. Sekarang tinggal 2 proses lagi yang perlu dijalanin: P1 (sisa 7 detik) sama P3 (selama 9 detik). Karena P1 punya sisa waktu yang lebih pendek, maka P1 bakal dijalanin duluan. Baru setelah P1 selesai, P3 bakal dijalanin. Jadi total waktu yang diperluin buat ngejalanin ke-4 proses diatas adalah 8+4+9+5 = 26 detik.

 

Kalo dalam bentuk diagram PT, hasil soal diatas bakalan jadi begini:

 

P1 P2 P4 P1 P3

0       1                     5                                    10                                       17                                                  26

 

  1. Priority Scheduling

Di metode ini, proses-proses yang masuk punya prioritasnya masing-masing. Buat nentuin proses mana yang dijalanin duluan, kita tinggal liat aja dari prioritynya. Proses yang bakal dijalanin duluan adalah proses yang prioritynya paling kecil. Kalo ada beberapa proses yang prioritynya sama, proses yang waktu eksekusinya paling lama bakal didahuluin.

 

Buat contoh kita pake kasus ini:

Proses Priority Burst Time
P1 1 6
P2 2 3
P3 1 10

 

Nah buat contoh diatas, pertama-tama kita perlu ngurutin proses-proses ditas dari yang prioritynya terkecil. Dari yang kita liat, jelas kalo P2 bakal dijalanin terakhir, soalnya prioritasnya paling gede (2). Nah masalahnya, mana diantara P1 sama P3 yang harus dijalanin duluan? Sesuai aturan yang ditulis diatas, proses yang waktu eksekusinya lebih lama bakal dijalanin duluan. Jadi urutan eksekusinya adalah P3 > P1 > P2. Kalo digambar diagram PT-nya bakalan jadi begini

 

P3 P1 P2

0                                                                                     10                           13                                                             19

 

  1. Round Robin

 

Ini metode terakhir yang kita bahas di sesi kemarin. Kalo dimetode ini, prinsipnya kayak orang lagi giliran ngeronda kampung. Jadi setiap proses bakalan dijalanin selama waktu tertentu (disebutnya kuantum), dimana setiap proses bakal memiliki alokasi waktu dalam kuantum-kuantum tersebut. Misalnya kita ambil contoh begini…

 

Proses Burst Time
P1 3
P2 4
P3 6
P4 2
P5 1

 

Kita anggap kuantum di kasus di atas = 2, berarti alokasi waktu buat setiap proses dibagi dalam blok-blok yang masa aktifnya masing-masing 2 detik. Maka hasilnya bakalan jadi begini:

 

P1 P1 P2 P2 P3 P3 P3 P4 P5

0                  2                   4                  6                       8                    10               12                    14              16       18

Kalo diitung-itung, mustinya total waktu proses buat P1 sampe P5 = 3+4+6+2+1 detik = 16 detik, tapi kenapa di diagram diatas malah butuh waktu 18 detik? Jawabannya adalah soalnya dalam metode round robin, setiap blok udah pasti dialokasikan untuk 1 proses (gabisa ada 2 proses dalam 1 blok), jadi walopun P2 sama P5 waktu prosesnya ganjil (blok kedua P1 sama bloknya P5 masih punya space buat diisi sama proses lain) tetep aja blok tersebut ga dipake buat ngisi space lain. Bisa dibilang ini salah satu bedanya metode Round Robin dibandingin sama metode-metode yang lainnya.

Nah disini gw mau post juga soal latihan yang dikasih di pertemuan ini sama ko Sky….

Diketahui table seperti berikut:

Proses Arrival Time Burst Time
P1 0 1
P2 1 12
P3 2 7
P4 3 15

 

Buatlah diagram PT dan WT (kecuali untuk SRTF) diatas jika penjadwalannya dilakukan dengan metode FCFS, SJF, dan SRTF!

Pertama, kita kerjain pake metode FCFS ya. Sesuai sama yang udah dibahas diatas, kalo pake metode ini, penjadwalannya dilakuin berdasarkan sama urutan masuknya proses-proses ini, Jadi urutannya P1, P2, P3, P4. Kalo dibikin diagram PT-nya jadi begini:

P1 P2 P3 P4

0     1                                                             13                          20                                                                              35

Dari data diatas kita bisa bikin diagram WT-nya kayak dibawah ini:

P2 P3 P4 P1

0                                                          12                          19                                                                   34      35

Nah, sekarang kita bikin pake cara SJF. Kalo pake cara ini, berarti kita perlu ngurutin data di table               atas sesuai burst timenya (ascending). Jadi urutannya begini:

Proses Arrival Time Burst Time
P1 0 1
P3 2 7
P2 1 12
P4 3 15

 

Dari data diatas, diagram PT-nya begini:

P1 P3 P2 P4

0     1                           8                                                       20                                                                      35

Dan diagram WT-nya begini:

P3 P2 P4 P1

0                           7                                                 19                                                                       34       35

Terakhir, kita coba kerjain soal ini pake metode SRTF. Dari table kita tau kalo:

  1. Waktu detik ke-0, cuma ada P1 yang diterima, jadi kita jalanin P1.
  2. Waktu detik ke-1, P1 selesai dijalanin dan P2 masuk, jadi kita jalanin P2.
  3. Waktu detik ke-2, masuk P3. Ternyata sisa waktu yang dibutuhin buat jalanin P3 (7 detik) lebih kecil daripada P2 (11 detik), jadi kita jalanin P3 dulu.
  4. Waktu detik ke-3, masuk P4. Kalo dibandingin, sisa waktu P3 (6 detik) masih paling kecll dibandingin sama P2 (11 detik) ato P4 (15 detik), jadi P3 tetep dilanjutin.
  5. Waktu detik ke-9, P3 selesai. Proses yang masih nunggu ada P2 (sisa 11 detik) sama P3 (15 detik). Karena sisa waktu P2 lebih sedikit jadi kita jalanin P2 dulu.
  6. Waktu detik ke-20, P2 selesai. Karena yang masih nunggu cuma P4, jadi kita jalanin P4.

 

Dari data diatas, kita bisa bikin diagram PT-nya:

 

P1 P2 P3 P2 P4

0       1         2                                             9                                                   20                                                           35

Selaen latihan diatas, kita juga diminta nampilin kodingan C buat FCFS :

#include<stdio.h>

#include<conio.h>

#include<process.h>

void main()

{

char p[10][5];

int tot=0,wt[10],i,n;

float avg=0;

clrscr();

printf(“enter no of processes:”);

scanf(“%d”,&n);

 

for(i=0;i<n;i++)

{

printf(“enter process%d name:\n“,i+1);

scanf(“%s”,&p[i]);

printf(“enter process time”);

scanf(“%d”,&pt[i]);

}

 

wt[0]=0;

for(i=1;i<n;i++)

{

wt[i]=wt[i-1]+et[i-1];

tot=tot+wt[i];

}

 

BINUS (www.binus.ac.id) | www.skyconnectiva.com

Pertemuan 2 Operating System

Fendy Chandra – 1601221420

Pertemuan 2-1

Oke, ini minggu kedua gw belajar OS di kelasnya ko Sky. Materi hari ini ada File System sama Process and Threads. Pertama yang kita bahas File System dulu ya…

Nah sebenernya file system itu apa sih?
File system (FS) itu semacem sistem yang gunanya buat mengorganisir dan me-manage akses dari komputer (hardware) ke data, nah bagian komputer yang diatur sama si FS itu adalah secondary storage. FS sendiri punya metadata yang isinya:

  1. Owner & Group invitation
  2. Time
  3. Permission (isinya semacem hak akses dari User (yang punya file), Group (sekumpulan user), sama Other)

Di FS, permission buat setiap komponen UGO (User-Group-Other) ada 3, yaitu buat Read, Write, sama Execute (disingkat RWX).

Ada beberapa FS yang terkenal, misalnya UFS, NTFS, HFS, sama FAT32.

Nah yang bakal dibahas lebih lanjut disini cuma 1, yaitu si UFS (Unix File System). Di UFS, semua isinya file, ga ada file exenya. Nah didalemnya ada 5 tipe file dasar, yaitu:

  1. Regular
  2. Directory (buat folder)
  3. Link (buat shortcut, ada hardlink sama softlink, bakal dibahas belakangan)
  4. Special File
  5. Named pipes (buat komunikasi data dari 1 tempat ke tempat lain)

Regular file ntu maksudnya dia semacem file biasa (oke, ini cuma translate-an namanya doang). Biasanya sih beberapa OS make ekstensi khusus buat interpret filenya. Isinya Regular file bisa ASCII ato binary.

Kalo special file ntu maksudnya dia semacem file yang punya fungsi khusus. Special file dibagi dua: Block Special (berasosiasi sama disk), sama Character Special (buat komunikasi dengan device tertentu, misalnya konsol, printer, dll.)

Soft link ntu maksudnya semacem shortcut yang gunanya buat menghubungkan file system yang berbeda, kalo Hard link kebalikannya, dia menghubungkan file system yang sama.

Operasi file di FS sendiri ada beberapa:

  • Create, buat bikin file baru
  • Delete, buat ngapus file
  • Open, buat buka file
  • Set attribute, buat nge-set attribute file
  • Close, buat nutup file
  • Read, buat baca file
  • Write, buat nulis (ngedit) file
  • Rename, buat namain ulang file
  • Append, buat nambah isi file
  • Seek, buat nyari file
  • Get attributes, buat dapetin attribute file

Kalo di directory ada juga beberapa operasi:

  • Create, buat bikin directory baru
  • Delete, buat apus directory
  • Opendir, buat buka directory
  • Closedir, buat nutup directory
  • Rename, buat namain ulang directory
  • Link, buat ngehubungin beberapa directory
  • Unlink, buat mutusin hubungan beberapa directory
  • Readdir, buat baca directory

Kira-kira ini yang dibahas di sesi pertama kemaren. Oh iya, abis materi ini kita ada semacem diskusi kelompok soal materi OS juga, disini kita dibagi jadi 9 kelompok. Pertanyaannya kira-kira ini:

  1. Sebutkan OS yang kamu ketahui!
  2. Sebutkan FS yang disupport oleh OS yang kamu sebut di no 1!
  3. Jelasin yang kamu tahu soal dual booting!
  4. Apa yang dimaksud thread dan process?
  5. Kalo kamu bisa bikin OS sendiri, inovasi apa yang mau kamu tambahin dari OS-OS yang sekarang udah ada?

Pertemuan 2-2

Kelar diskusi sama break, kita lanjut bahas thread sama process…

Pertama, kita belajar tentang bedanya program sama process. Program ntu adalah sekumpulan instruksi buat ngelakuin suatu task tertentu, nah kalo process ntu adalah eksekusi dari sebuah process. Jadi beda ya mereka J

Nah sebuah process ntu muncul ga langsung begitu aja, ada beberapa event yang bisa bikin terjadinya process:

  • Inisialisasi system
  • Eksekusi dari process creation system call (fork())
  • User request buat ngebikin process baru
  • Inisisasi batch job

Nah di dalem process ini ada yang namanya 5-state process model, kira-kira bentuknya mirip sama cara kerja Android. Gambarnya bisa diliat dibawah:

11

Nah dalam Process ada juga yang namanya suspended process, maksudnya dia semacem proses yang disuspend/dikirim ke background. Penyebab process bisa disuspend ada beberapa macem, misalnya swapping, other OS reason, Interactive user request, timing, sama parent process request.

Selain ntu, ada juga yang namanya process table, yaitu tempat process dilakuin. Process table punya beberapa atribut, kayak process ID (PID), process state, sama lokasi di memory.

Eksekusi program sendiri dibagi 2, yaitu user mode sama system mode. User mode punya priviledge yang lebih rendah, biasanya user program jalannya pake mode ini. Kalo system mode punya lebih banyak priviledge, dan biasanya terletak di Kernelnya OS.

Nah process ini pada akhirnya bakal mati (terminated). Process termination sendiri ada 4 macem:

  1. Normal exit
  2. Eror exit
  3. Fatal error
  4. Killed by another process

2 tipe yang pertama sifatnya volunterm 2 sisanya involunter.

Termination sendiri ada beberapa penyebabnya:

  • Normal completion
  • Time limit exceeded
  • Memory unavailable
  • Bounds violation
  • Protection error
  • Arithmetic error
  • Time overrun
  • I/O failure
  • Invalid instruction
  • Priviledged instruction
  • Data misuse
  • OS intervention
  • Parentnya udah terminate, jadi child processnya ikut keterminate
  • Parent request

Kira-kira kemaren itu yang kita bahas. Sama kalo gasalah kita belajar sedikit tentang fork() sama system().

BINUS (www.binus.ac.id) | www.skyconnectiva.com

Pertemuan 1 Operating System

Fendy Chandra – 1601221420

 

Pertemuan 1-1: Computer System Overview

Di sesi ini, intinya yang kita pelajari adalah tentang garis besar sistem komputer, kayak elemen-elemen dasarnya, instruction cycle, interupsi, memory, sama I/O types.  Entah kenapa rasanya beberapa materi yang dipelajari disini udah pernah dipelajarin waktu semester awal dulu, tapi ya sudah lah ya :v

Bahasan pertama di pertemuan pertama kemaren adalah tentang Operating System (OS), yang semacem Windows, iOS, Android dan semua kawannya itu lah. Kalau secara teori, OS itu tugasnya buat ngelola resource yang ada didalam komputer, nyediain User Interface (UI), sama ngatur semua memory sekunder dan semua hardware input/output yang dipasang ke komputer.

Nah didalam sistem komputer ini ada 4 elemen dasar, yaitu prosesor, main memory, I/O modules, sama system bus.

Ada juga yang namanya arsitektur komputer, yang kira-kira bisa diliat di gambar ini:

01

Nah didalam sistem komputer ini, ada yang namanya instruction cycle, isinya ngegambarin apa-apa aja yang dikerjain komputer waktu ada instruksi (inputan) yang diterima dari user. Instruction Cycle yang paling simpel tahapannya cuma:

  1. START, jadi komputernya baru mulai nerima instruksi
  2. FETCH NEXT INSTRUCTION, komputer ngambil instruksi berikutnya dari memori
  3. EXECUTE INSTRUCTION, inputan yang udah diterima dari user dieksekusi
  4. HALT, komputernya selesai ngelakuin apa yang diperintahkan user.

Tipe-tipe instruksi yang bisa diterima komputer ada processor-memory (buat transfer data antara prosesor sama memori), processor-I/O (data ditransfer dari/ke peripheral), data processing (bisa berupa perhitungan aritmatika atau logika), dan control (mengubah urutan eksekusi).

Untuk bagannya bisa diliat di sini:

02

Nah di dalam eksekusi instruksi, ada juga siklusnya sendiri. Ada 2 macam siklus eksekusi, yaitu pipelining dan Superscalar. Siklus pipelining punya 3 tahapan, yaitu Fetch (ngambil perintah), Decode (baca perintahnya), sama Execute (lakukan perintahnya). Siklus superscalar sebenernya hampir sama kayak pipelining, cuma ada holding buffer buat nampung instruksi-instruksi yang udah di-decode. Bagan buat 2 siklus ini bisa diliat di bawah:

03

Nah, kelar bahas eksekusi, lanjut ke interrupt. Simpelnya, interupsi itu prinsipnya sama kayak interupsi yang ada di rapat-rapat itu (yang ada orang nyela pembicaraan pas lagi ada bahasan tertentu), jadi ada semacam event tertentu di luar proses yang lagi jalan yang ngaruh ke urutan eksekusi instruksi. Nah, kalo dalam eksekusi komputer, ada 4 macem interupsi, yaitu:

  1. Program
  2. Timer
  3. I/O
  4. Hardware failure

Sebenernya interupsi ini bagus buat meningkatkan efisiensi pemrosesan, soalnya dia memungkinkan prosesor buat ngelakuin instruksi lain selama operasi input/output lagi diproses. Nah supaya ini bisa terjadi, ada program yang namanya interrupt handler. Kalau butuh gambar soal interupsi ini bisa diliat dibawah:

05                                                   04

Interupsi udah, sekarang lanjut ke memory. Memory sendiri ada beberapa tingkatan berdasarkan kecepatannya (bisa diliat di gambar dibawah, makin keatas makin cepet). Intinya, makin cepet sebuah memori, makin berkurang tingkat keamanannya, jadi makin lambat memorinya makin aman juga memorinya. Jadi pilih memori yang mau dipakai sesuai sama kebutuhan juga, jangan asal ngincer cepetnya aja :v

 

10

Nah didalam main memory, ada bagian yang namanya cache (entah cara bacanya gimana, ada yang bilangnya “cas”, ada juga yang bilangnya “kech”, gatau mana yang bener, tapi yaa kira-kira ga jauh-jauh dari situ lah). Nah cache ini mempercepat kecepatan memori. Yang paling sering dialamin sih pas lagi browsing, biasanya website yang sering kita buka bakalan lebih cepet loadnya daripada yang baru pertama kali dibuka, nah ini gara-gara kita udah nyimpen cache dari web yang pernah kita buka.

Cache sendiri ada 3 macem, yaitu L1, L2, sama L3.

Pertemuan 1-2: Operating System Overview

Kayak matkul 4 SKS yang lain, di OS ada 2 slide tiap pertemuannya (entah musti senang ato sedih :v). Jadi abis kelar slide yang pertama tadi, kita lanjut bahas tentang OS.

OS ini sebenernya adalah program yang gunanya ngatur jalannya aplikasi/program lain dan sebagai interface antara aplikasi sama hardware. Jadi, kalo ga ada OS kita ga bisa jalanin program/aplikasi lain.

OS ini punya 3 tujuan utama:

  1. Convenience, soalnya kalo ada OS komputer jadi lebih enak buat dipake
  2. Efficiency, soalnya OS ngatur penggunaan resource secara seefisien mungkin
  3. Ability to evolve, jadi OS ini bisa terus-terusan dikembangin tanpa ngaruhin fungsi-fungsi yang udah ada.

Di dalam OS ini ada juga 7 konsep dasar:

  1. Proses
  2. Space alamat
  3. File
  4. Input/Output
  5. Proteksi
  6. Shell
  7. Harus punya memori yang gede, hardware buat proteksi, disks, sama virtual memory.

OS ini punya beberapa struktur, tapi buat pertemuan kemaren baru 1 yang dibahas (yang “katanya” paling basic), namanya struktur monolitik. Di struktur ini, ada main program yang manggil prosedur yang dibutuhkan, service procedure yang ngerjain system call, sama utility procedure yang ngebantuin service procedure.

Gambar struktur monolitik bisa diliat di bawah:

06

OS juga bisa dianggap sebagai sistem berlapis (layered), yang urutannya dari layer 5 sampe layer 0, yang punya tugas masing-masing.

07

Di dalam OS, ada bagian inti yang “kata ko Sky” paling susah dibikin, namanya Kernel. Isinya si Kernel  ini kebanyakan fungsi-fungsi yang paling sering dipake sama OS. Intinya kalo ga ada Kernel ini gabakal jadi dah OSnya :v

OS sendiri udah ngalamin perkembangan yang jauh dibandingin waktu masih jaman awal-awalnya dulu. Kira-kira begini garis besar perkembangannya:

  1. Sebelon ada OS, yang dipake namanya Serial Processing. Disini mesinnya masih dikendaliin pake konsol.
  2. Simple Batch System, disini ada software yang namanya monitor, fungsinya buat ngelompokin proses-proses tertentu ke dalam batch-batch tertentu. Supaya kita bisa ngasih instruksi ke monitor, kita perlu make bahasa special yang namanya Job Control Language (JCL).

 

Nah dalam OS ada prinsip uniprogramming dan multi programming (gambarnya bisa diliat dibawah). Kalo pake uniprogramming, artinya kita Cuma ngejalanin 1 program aja, nah sebaliknya kalo pake multiprogramming, kita bisa ngejalanin beberapa program dalam 1 komputer (tapi pakenya ganti-gantian juga yaa). Nah prinsip multi programming ini dipake kalo kita perlu ngehandle beberapa tugas yang interaktif, supaya bisa jalan dengan bener kita pake time sharing.

09

08

Nah disini ada juga istilah process, artinya program yang lagi dijalanin (bisa diliat juga kok kalo kita buka Task Manager di Windows). Nah process ini bakal makan memory yang ada di dalam RAM. Jadi kalo komputer/laptop kita kecil otomatis kita ga bisa buka terlalu banyak program sekaligus (ato yang kegedean juga gabisa dibuka sih). Nah, buat ngatasin ini kita bisa beli RAM baru (kalo ada duit), ato cara hematnya bisa pake yang namanya Virtual Memory. Prinsipnya VM adalah ngambil sebagian dari memori Hardisk buat dipake sebagai ‘RAM’ tambahan. Walopun cara ini lebih hemat dibandingin beli RAM baru, tapi bisa dibilang pake VM lebih lambat daripada pake RAM beneran.

Pertemuan pertama kemaren “cuma” 2 materi ini “aja” yang dibahas, jadi kita cukupkan sampai sekian dulu yaa. Minggu depan bakal dipost lagi materi buat pertemuan kedua.

BINUS (www.binus.ac.id) | www.skyconnectiva.com

Jawaban Exercise E-Book Software Engineering Chapter 12

Berikut adalah jawaban exercise chapter 12 e-book Software Engineering:

Fendy Chandra – 1601221420 – 44 PFT

Fernando Giovanni – 1601221723 – 44 PFT

1. Discuss the three “parts” of a design pattern and provide a concrete example of each from some field other than software.

Jawab:

Tiga “bagian” dari sebuah design pattern adalah context, problem, dan solution. Context dapat diartikan sebagai suatu bagian (konteks) yang memungkinkan seorang pembaca design pattern untuk memahami lingkungan tempat keberadaan suatu permasalahan dan solusi apa yang cocok untuk diterapkan didalam lingkungan tersebut. Sementara itu, problem yang dimaksud adalah berbagai permasalahan yang mungkin dialami dalam context yang sudah ditentukan tersebut, yang akan dicari penyelesaiannya melalui solution yang kita rancang.

Sebagai contoh, misalnya kita ingin pindah rumah dari daerah perkotaan ke pedesaan. Context dalam permasalahan suatu perpindahan dari wilayah yang padat dan lebih maju (perkotaan) ke wilayah yang belum terlalu terjamah teknologi tetapi lebih sepi (pedesaan). Hal-hal yang akan mempengaruhi bagaimana permasalahan ini akan diselesaikan antara lain: apakah orang ini ingin pindah sendiri atau bersama keluarganya, apakah dia akan berpindah pekerjaan pula atau tetap dengan karirnya sekarang, apakah ia akan pindah tempat kerja, dan apakah ia akan langsung pindah sekarang atau tahun depan, dan sebagainya.

Dari context tersebut, beberapa permasalahan yang mungkin timbul adalah ia menjadi repot untuk pergi ke tempat kerjanya yang sekarang karena jaraknya lebih jauh, dengan solusi yang mungkin diambil adalah dia berpindah kantor, berganti pekerjaan, atau tetap bertahan ditempat kerja yang sekarang dan berangkat kerja lebih awal setiap harinya.

2. What is the difference between a nongenerative pattern and a generative pattern?

Jawab:

Suatu design pattern yang nongenerative adalah design pattern yang menjelaskan sebuah context dan permasalahan yang terdapat pada context tersebut, tetapi tidak menghasilkan sebuah solusi yang memuaskan (solusinya tidak menyelesaikan permasalahan yang ada). Sementara itu, generative design pattern adalah sebuah design pattern yang mendeskripsikan suatu context dan permasalahan yang ada didalamnya, serta didesain sedemikian rupa sehingga dapat beradaptasi terhadap berbagai variasi yang mungkin timbul dalam permasalahan tersebut dan memberikan solusi sesuai dengan permasalahan yang ada. Jadi, secara sederhana, dapat dikatakan bahwa nongenerative design pattern tidak memberikan solusi yang menyelesaikan permasalahan yang ada didalam context, sedangkan generative design pattern memberikan solusi yang dapat menyelesaiakn permasalahan yang ada didalam context.

3. How do architectural pattern differ from component pattern?

Jawab:

Architectural pattern adalah sebuah pattern yang mendeskripsikan suatu briad-based design problem yang dapat diselesaikan dengan sebuah pendekatan structural, sedangkan component pattern adalah suatu jenis pattern yang berurusan dengan permasalahan-permasalahan yang berkaitan dengan pengembangan dari suatu subsystem/component, bagaimana mereka saling berkomunikasi satu sama lainnya, dan penempatannya dalam arsitektur yang lebih luas.

Secara sederhana, kita dapat mengatakan bahwa architectural pattern lebih berkaitan dengan suatu permasalahan sebagai satu kesatuan (structural, pendekatannya lebih dekat dengan structured programming), sedangkan component pattern lebih focus kepada bagan-bagian yang menyusun suatu program besar (pendekatannya lebih dekat dengan object-oriented programming).

4. What is a framework ad how does it differ from a pattern? What is an idiom and how does it differ from a pattern?

Jawab:

Framework adalah sebuah infrasturktur skeletal yang bersifat implementation-specific, yang biasanya berupa sebuah reusable mini-architecture yang menyediakan sebuah struktur dan behavior generic untuk sekelompok abstraksi software yang berkaitan, yang menspesifikasikan keterkaitan diantara mereka dan penggunaannya didalam suatu domain tertentu. Berikut adalah beberapa perbedaaan antara framework dan design pattern:

  1. Design pattern lebih abstrak daripada framework. Maksudnya, framework dapat dituliskan dalam bentuk code, sedangkan hanya “contoh” dari pattern yang dapat dituliskan dalam suatu code tertentu.
  2. Design pattern lebih kecil daripada framework dari segi ukuran architectural elements. Framework dapat terdiri dari beberapa design pattern, tapi tidak sebaliknya.
  3. Design pattern lebih general (kurang terspesialisasi) daripada framework.

Sementara itu, idiom adalah suatu bagian yang mendeskripsikan bagaimana untuk mengimplementasikan sebagian atau keseluruhan dari sebuah algoritma yang spesifik atau struktur data untuk sebuah komponen software didalam context dari sebuah bahasa pemrograman tertentu. Jadi, perbedaan antara idiom dan pattern adalah idiom bersifat lebih spesifik ketimbang design pattern dan berada pada level abstraksi yang lebih rendah daripada design pattern.

5. Using the design pattern template presented in Section 12.1.3, develop a complete pattern description for a pattern suggested by your instructor.

Jawab:

 

Berhubung belum ada instrusi spesifik tentang deskripsi apa yang harus dibuat, maka bagian ini saya skip dulu sampai ada instruksi lebih lanjut.

6. Develop a skeletal pattern language for a sport with which you are familiar. You can begin by addressing the context, the system of forces, and the broad problems that a coach and a team must solve. You need only specify pattern names and provide a one-sentence description for each pattern.

Jawab:

 

To be updated

7. Find five patterns repositories and present an abbreviated description of the types of patterns contained in each.

Jawab:

 

Saat ini saya sedang dalam tahap mencari repository yang sesuai. Jawaban akan saya update setelah saya mendapatkan 5 repository tersebut.

8. When Christopher Alexander says “good design cannot be achieved by simply adding together performing parts”, what do you think he means?

Jawab:

Menurut saya, maksud dari pernyataan tersebut adalah, kita sebagai seorang software developer tidak bisa sekedar menggabungkan berbagai bagian yang saling bekerja bersamaan untuk membuat sebuah desain yang baik. Misalnya, jika kita ingin membuat desain software pengolah kata. Kita tidak dapat membuat sebuah desain yang baik hanya dengan memasukkan berbagai fungsi yang berguna untuk mengolah kata, seperti bullets, numbering, header, footer, dll. Untuk menghasilkan yang baik, kita juga perlu memperhatikan factor-faktor lainnya seperti kenyamanan user, interface, resource yang digunakan oleh software tersebut, dll.

9. Using pattern-based design tasks noted in Section 12.2.3, develop a skeletal design for the “interior design system” described in Section 11.3.2.

Jawab:

 

To be updated

10. Build a pattern-organizing table for the patterns you used in Problem 12.9.

Jawab:

 

To be updated

11. Using the design pattern template presented in Section 12.1.3, develop a complete pattern description for the Kitchen pattern mentioned ni Section 12.3.

Jawab:

 

To be updated

12. The gang of four [Gam95] have proposed a variety of component patterns that are applicable to object-oriented systems. Select one (these are available on the Web) and discuss it.

Jawab:

 

To be updated

13. Find three patterns repositories for user interface patterns. Select one from each and present an abbreviated description of it.

Jawab:

Saat ini saya sedang dalam tahap mencari repository yang sesuai. Jawaban akan saya update setelah saya mendapatkan 3 repository tersebut.

14. Find three patterns repositories for user WebApp patterns. Select one from each and present an abbreviated description of it.

Jawab:

Saat ini saya sedang dalam tahap mencari repository yang sesuai. Jawaban akan saya update setelah saya mendapatkan 3 repository tersebut.

Jawaban Exercise Chapter 10 E-book Software Engineering

Berikut adalah jawaban untuk exercise chapter 10 e-book Software Engineering:

Fendy Chandra – 1601221420 – 44PFT

Fernando Giovanni – 1601221723 – 44PFT

1. The term component is sometimes a difficult one to define. First provide a generic definition, and then provide more explicit definitions for object-oriented and traditional software. Finally, pick three programming languages with which you are familiar and illustrate how each defines a component.

Jawab:

Secara umum, komponen dapat diartikan sebagai suatu blok modular yang berguna dalam membentuk sebuah software computer. Lebih detilnya, OMG Unified Modeling Language Specification mendefinisikan komponen sebagai bagian dari suatu sistem yang bersifat modular, bisa di-deploy, dan bisa di-replace yang mengenkapsulasi implementasi dan mengekspos interface-interface yang ada.

Jika kita menggunakan pendekatan berorientasi objek, sebuah komponen dapat disusun oleh berbagai class yang saling berkolaborasi. Setiap class yang ada pada komponen sudaj dielaborasikan untuk mencakup semua atribut dan operasi yang relevan dalam implementasinya. Sebagai bagian dari elaborasi desain, semua interface yang memungkinkan suatu class berkomunikasi dengan design class lainnya juga harus didefinisikan. Untuk bisa mencapai hal ini, kita sebagai seorang developer perlu memulai dengan requirement model dan mengelaborasi class-class analysis, serta class-class infrastructure.

Sementara itu, jika kita menggunakan pendekatan tradisional, maka suatu komponen dapat diartikan sebagai sebuah elemen fungsional dari sebuah program yang mencakup logika pemrosesan, struktur data internal yang dibutuhkan untuk mengimplementasikan logika pemrosesan, serta sebuah interface yang memungkinkan komponen itu untuk dipanggil dan data dapat dikirimkan kepadanya. Secara tradisional, komponen juga dapat disebut sebagai modul, yang terdiri dari 3 peran utama, yakni control component, problem domain component, dan infrastructure component.

Dari 3 bahasa pemrograman yang pernah saya pelajari (Java, C dan C++), konsep komponen diimplementasikan dalam fungsi-fungsi yang dibuat oleh user, dimana fungsi ini memampukan program untuk membuat program yang dibuat menjadi lebih modular dan juga menjadi salah satu fitur terpenting yang menyusun aplikasi yang dibuat dari ketiga bahasa pemrograman tersebut.

2. Why are control components necessary in traditional software and generally not required n object-oriented software?

Jawab:

Pada pemrograman software tradisional, control components berguna untuk mengkoordinasikan pemanggilan problem domain component yang ada didalam program tersebut. Hal ini diperlukan karena dalam pemrograman tradisional tidak ada konsep enkapsulasi, sehingga berbagai fungsi-fungsi yang secara logis bekerja terhadap struktur data yang sama terpisah-pisah satu sama lainnya, sehingga membentuk apa yang disebut oleh problem domain component (yang dipanggil oleh control component). Control component sangat diperlukan untuk memanggil fungsi-fungsi ini sehingga program dapat melayani permintaan user secara baik dan optimal.

Disisi lain, pemrograman berorientasi objek sudah mempunyai konsep enkapsulasi, sehingga semua struktur data yang berkaitan dan fungsi-fungsi yang bekerja terhadapnya sudah berada pada satu kesatuan, sehingga untuk melakukan pemanggilan terhadap fungsi-fungsi tersebut dapat langsung dilakukan dengan cara-cara biasa, sehingga developer tidak perlu menyediakan control component untuk memanggil fungsi-fungsi tersebut.

3. Descibe the OCP in your own words. Why is it important to create abstractions that serve an interface between components?

Jawab:

 

Open-Closed Principle (OCP) adalah salah satu prinsip dasar dalam mendesain program pada component-level design yang menganjurkan bahwa sebuah model harus bersifat terbuka (open) untuk perluasan (ekstensi) tetapi tertutup (closed) terhadap modifikasi. Maksudnya, kita harus menspesifikasikan komponen yang akan kita buat sedemikian rupa sehingga kita dapat mengestensifikasinya tanpa harus melakukan modifikasi-modifikasi internal terhadap kode itu sendiri. Ekstensifikasi yang perlu dilakukan sendiri harusnya masih berada pada domain fungsional yang sama dengan rencana awalnya. Untuk itum kita perlu membuat sebuah abstraksi.

Kita perlu membuat sebuah abstraksi sebai interface antar komponen karena kita ingin memenuhi prinsip OCP, dan untuk memudahkan kita dalam memenuhi prinsip ini, kita perlu membuat sebuah abstraksi. Dengan abstraksi, kita dapat mengetahui hubungan antar komponen yang ada, sehingga memudahkan kita mengeksten komponen-komponen yang ada tanpa harus melakukan modifikasi-modifikasi yang mendasar terhadap komponen yang sudah ada.

4. Describe DIP in your own words. What might happen if a designer depends too heavily on concretions?

Jawab:

 

Dependency Inversion Principle (DIP) adalah salah satu prinsip dasar dalam mendesain program pada component-level design yang menganjurkan bahwa kita sebagai seorang developer perlu untuk melakukan semua kegiatan pemrograman kita berdasarkan abstraksi yang sudah dibuat, tidak berdasarkan konkresi. Jika kita terlalu bergantung kepada konkresi (komponen lain yang sudah ada/konkrit), maka kita akan sulit mengekstensifikasikan program kita, karena kita hanya terpaku pada satu komponen, bukan kepada keseluruhan sistem yang akan kita bangun.

5. Select three components that you have developed recently and assess the types of cohesion that each exhibits. If you had to define the primary benefit of high cohesion, what would it be?

Jawab:

 

Berhubung saya belum pernah melakukan pemrograman aplikasi yang bersifat konkret (sejauh ini hanya pemrograman untuk pertanyaan-pertanyaan yang ada di lab/kelas), maka saya tidak dapat memberikan contoh pemrograman tersebut. Sebagai gantinya saya akan mencoba menjelaskan mengenai cohesion.

Cohesion dapat diartikan sebagai aspek “single-minded” dari sebuah komponen. Semakin tinggi tingkatan cohesion dalam suatu komponen, artinya setiap aspek penyusun dari komponen ini dapat bekerja bersama-sama untuk mencapai satu tujuan tunggal (tidak bekerja sendiri-sendiri untuk tujuan yang berbeda-beda).

Dengan adanya high cohesion cenderung mudah diimplementasikan, di tes, serta di-maintain karena setiap komponen sudah mempunyai tujuan yang jelas dan kita akan dapat mudah men-debug program jika terjadi error terhadap task tertentu (karena kita sudah tahu pasti komponen mana yang berperan melakukan task tersebut).

6. Select three components that you have developed recently and assess the type of coupling that each exhibits. If you had to define the primary benefit of low coupling, what would it be?

Jawab:

Berhubung saya belum pernah melakukan pemrograman aplikasi yang bersifat konkret (sejauh ini hanya pemrograman untuk pertanyaan-pertanyaan yang ada di lab/kelas), maka saya tidak dapat memberikan contoh pemrograman tersebut. Sebagai gantinya saya akan mencoba menjelaskan mengenai coupling.

Couping adalah suatu ukuran kuantitatif mengenai derajat keterhubungan suatu class dengan class lainnya. Jika suatu class/component semakin terhubung dengan class/component lainnya, maka dapat dikatakan bahwa coupling diantara kedua class/komponen tersebut semakin meningkat. Program yang baik seharusnya memiliki coupling yang rendah.

Salah satu keuntungan dari membuat program dengan low coupling adalah komponen-komponen yang ada didalamnya menjadi semakin independen satu sama lainnya, sehingga jika terjadi error dalam suatu task, kita tidak terlalu repot mengecek beberapa class yang berhubungan dengan task tersebut, melainkan hanya perlu memperhatikan beberapa/hanya satu komponen saja.

7. Is it reasonable to say that problem domain components should never exhibit external coupling? If you agree, what types of component would exhibit external coupling?

Jawab:

External coupling terjadi ketika sebuah komponen berkomunikasi/berkolaborasi dengan komponen infrastruktur. Coupling ini sebaiknya dibatasi pemakaiannya meskipun sebenarnya cukup perlu digunakan.

Menurut saya, untuk beranggapan bahwa sebuah problem domain component tidak boleh melakukan external coupling sama sekali kurang bijaksana, karena adakalanya kita perlu memberikan akses kepada problem domain component untuk bisa mengakses infrastructure component, terutama untuk menjalankan task-task yang bersifat vital. Meski begitu, penggunaan external coupling memang perlu sangat dibatasi karena dapat sangat berpengaruh terhadap reliabilitas software yang kita buat.

8. Develop (1) an elaborated design class, (2) interface description, (3) activity diagram for one of the operation within the class, and (4) a detailed statechart diagram for one of the SafeHome classes that we have discussed in earlier chapters.

Jawab:

 

To be updated

9. Are stepwise refinement and refactoring the same thing? If not, how do they differ?

Jawab:

Stepwise refinement adalah sebuah strategi desain top-down yang diusulkan oleh Niklaus Wirth, yang berisi usulan bahwa sebuah program dikembangkan dengan cara me-refine level dari procedural detail yang ada secara berkelanjutan (suksesif). Sementara itu, refactoring adalah sebuah teknik reorganisasi yang menyederhanakan kode dari suatu komponen tanpa mengubah fungsi/behaviornya. Jadi, pada dasarnya stepwise refinement dan refactoring sama-sama berperan untuk mempermudah seorang developer dalam mengembangkan program yang sedang dibuatnya, tetapi keduanya memiliki cara pandang yang berbeda dalam mencapainya. Stepwise refinement memungkinkan seorang developer untuk meningkatkan kualitas program yang dibuatnya dengan cara memperbaiki sedikit demi sedikit setiap kali kita selesai meng-update sebuah komponen, sementara refactoring lebih focus untuk melakukan suatu perubahan terhadap sistem software secara lebih mendasar, meskipun sama-sama tidak mengakibatkan perubahan behavior external dari suatu program.

10. What is a WebApp component?

Jawab:

 

WebApp component adalah bagian dari suatu sistem WebApp yang bersifat modular, bisa di-deploy, dan bisa di-replace yang mengenkapsulasi implementasi dan mengekspos interface-interface yang ada. Adapun WebApp component design berfokus pada 2 hal yang penting yakni content dan fungsionalitas dari suatu Web-based system. Dalam mendesain komponen dari WebApps, kita juga perlu menerapkan prinsip-prinsip dan guideline-guideline dalam component-level design.

11. Select a small portion of an existing program (approximately 50-75 source lines). Isolate the structured programming constructs by drawing boxes around them in the source code. Does the program excerpt have constructs that violate the structured programming philosophy? If so, redesign the code to make it conform to structured programming constructs. If not, what do you notice about the boxes that you have drawn?

Jawab:

 

To be updated

 

12. All modern programming languages implement the structured programming constructs. Provide example of three programming languages.

Jawab:

 

To be updated

13. Select a small coded component and represent it using (1) an activity diagram, (2) a flowchart, (3) a decision table, and (4) PDL.

Jawab:

 

To be updated

14. Why is “chunking“ important during the component-level design review process?

Jawab:

 

Chunking adalah sebuah cara dimana seorang developer me-review komponen yang sudah di-desainnya dengan menggunakan sejumlah tertentu konstruksi-konstruksi logis yang juga berperan terhadap proses pemahaman manusia. Pada proses ini, seorang developer tidak membaca kode yang ada secara mentah-mentah (line by line), melainkan memperhatikan pola-pola (chunks of codes) berupa elemen procedural dari suatu modul.

Dengan ditemukannya pola-pola seperti ini, maka pemahaman yang diperoleh oleh developer yang me-review akan meningkat karena dia sudah siap menemui pola-pola logis tersebut. Inilah mengapa chunking menjadi penting dalam melakukan review pada component-level design.

 

Backlink:

BINUS

Jawaban Exercise Chapter 6 E-Book Software Engineering

Pada pertemuan kelas besar tanggal 11 Maret 2014 lalu, kami diberi tugas untuk mengerjakan soal chapter 5 atau 6 e-book Software Engineering Presmann (sesuai NIM). Berhubung NIM saya genap, maka saya mengerjakan soal chapter 6. Beginilah kira-kira hasilnya:

Fendy Chandra-1601221420-44PFT

6.1. Is it possible to begin coding immediately after an analysis model has been created? Explain your answer and then argue the counterpoint.

Jawab:

Jika ditanya apakah mungkin bagi seseorang untuk langsung memulai tahapan coding setelah dia membuat suatu model analisis (terhadap user requirement dari aplikasi yang akan dibuat) sebenarnya mungkin saja untuk dilakukan, tetapi tentu saja code yang dihasilkan akan bersifat buruk. Buruk disini dapat diartikan bahwa code yang dihasilkan tidak sesuai dengan apa yang diharapkan oleh customer, bahkan memiliki banyak bug dan error. Mengapa hal ini bisa terjadi?

Seperti yang kita ketahui, dalam tahapan software engineering secara umum (communication – planning – modeling – construction – deployment), proses pembuatan analysis model terdapat dalam proses communication (atau lebih detilnya requirement gathering). Secara teoritis, tentunya setelah memperoleh user requirement mengenai aplikasi yang akan dibuat, seorang developer akan melanjutkan ke tahapan planning dan modeling, baru kemudian mulai melakukan proses coding (pada tahapan construction).

Seorang developer yang baik dan professional tentunya perlu melakukan perencanaan yang baik mengenai aplikasi yang akan dibuatnya, seperti desain dari aplikasi tersebut, resource yang sesuai untuk pembuatan aplikasi tersebut, serta biaya-biaya yang diperlukan untuk pembuatan aplikasi harus direncanakan dengan matang. Perencanaan yang baik akan menjadi suatu langkah awal yang menguntungkan dalam proses software engineering, karena dengan demikian semua proses selanjutnya akan dilakukan dengan lebih terstruktur dan terorganisir. Selain itu, dengan adanya perencanaan, maka kegiatan-kegiatan yang akan dilakukan selanjutnya akan lebih terfokus dan jelas (tidak meraba-raba maupun mengalami miss).

Setelah dilakukan suatu perencanaan, maka seorang developer akan membuat suatu model (prototype) dari aplikasi yang akan dibuat. Di tahapan ini, developer bisa mengecek kembali apakah prototype yang dibuatnya sudah sesuai dengan requirement yang sudah dikumpulkan pada tahap awal. Jika terdapat beberapa hal yang belum sesuai maupun perlu perbaikan, maka developer dapat melakukan revisi dengan lebih baik dan optimal.

Jika seorang developer melompati 2 tahapan tersebut (planning dan modeling) dn langsung melakukan coding, maka bisa dipastikan aplikasi yang dia buat akan bersifat berantakan (tidak terstruktur) dan bukan tidak mungkin menjadi tidak sesuai dengan requirement yang sudah dikumpulkan. Dengan demikian, maka yang akan terjadi adalah ketidakpuasan dari customer dan semakin banyak resource (waktu dan biaya) yang terbuang dalam memperbaiki aplikasi tersebut . Dengan demikian, maka reputasi sang developer sendiri yang akan dipertaruhkan.

Jadi, sebenarnya segera melakukan coding setelah mengumpulkan user requirement sebenarnya mungkin saja dilakukan, tetapi sangat tidak dianjurkanuntuk dilakukan karena hasil aplikasi yang dibuat tidak akan sebaik jika kita melakukan secara setahap demi setahap . Oleh karena itu, sebaiknya setelah kita memperoleh suatu analysis model mengenai user requirement kita melakukan planning dan modeling dahulu, baru kemudian dilakukan proses coding.

6.2. An analysis rule of thumb is that the model “should focus on requirements that are visible within the problem or business domain.” What types of requirements are not visible in these domains? Provide a few examples.

Jawab:

Maksud dari “should focus on requirements that are visible within the problem or business domain” adalah pada saat seorang developer memodelkan  suatu requirement, maka dia hanya perlu memfokuskan diri pada hal-hal yang sesuai dengan permasalahan yang akan dibuat solusinya (dalam hal ini solusi yang akan dibuat berupa aplikasi). Dengan demikian, dia tidak perlu mempedulikan hal-hal yang berada diluar scope aplikasi yang akan dibuatnya. Sebagai contoh, jika seorang developer ingin membuat aplikasi nota penjualan (invoice) pada suatu perusahaan, maka developer tersebut tidak perlu mempedulikan permasalahan seperti: “kertas nota itu diisi secara manual”, “persoalan kalau tinta habis”, “apa yang akan dilakukan kalau listrik disana padam”, dan hal-hal lain yang diluar scope aplikasi tersebut: pencetakan invoice yang berisi tanggal penjualan, barang yang dibeli, harga, dan berbagai informasi lain mengenai transaksi yang dilakukan.

Contoh lainnya adalah jika seorang developer diminta untuk membuat suatu aplikasi absensi elektronik dengan menggunakan proses tapping kartu, maka si developer cukup berfokus pada bagaimana cara menyimpan data karyawan kedalam kartu, membacanya, dan mengintegrasikannya ke dalam database absensi karyawan, tanpa perlu memusingkan permasalahan seperti apa yang harus dilakukan kalau ada karyawan yang terlambat dan apa yang harus dilakukan kalau terjadi kerusakan pada kartu absensi.

6.3. What is the purpose of domain analysis? How is it related to the concept of requirements patterns?

Jawab:

Domain analysis adalah suatu proses mengidentifikasi, menganalisis, dan spesifikasi beberapa kebutuhan umum dari suatu domain aplikasi yang spesifik, biasanya berguna dalam melakukan reuse pada beberapa project yang terdapat dalam domain tersebut.

Tujuan dari dilakukannya proses analisis domain adalah untuk menemukan atau membuat berbagai class analisis dan/atau pola-pola analisis yang secara luas dapat dipergunakan kembali pada domain tersebut. Jadi, dengan dilakukannya suatu analisis domain, maka diharapkan kita dapat menemukan pola-pola umum yang dapat berulang dalam projek-projek dalam suatu domain yang sama. Dengan ditemukannya pola-pola tersebut, maka seorang developer dapat me-reuse code yang dibuatnya pada program terdahulu pada projek baru yang dikerjakannya. Dengan demikian, domain analisis dapat meningkatkan efisiensi kerja seorang developer.

Jika dihubungkan dengan konsep requirement patterns, maka suatu domain analysis dapat digunakan bukan hanya untuk menemukan pola-pola umum yang berkaitan dengan code apa saja yang dapat digunakan kembali, melainkan juga membantu developer untuk mengetahui pola-pola requirement dari aplikasi yang berada dalam suatu domain yang sama. Misalnya saja, dalam membuat game online, dapat diketahui bahwa ada pola yang sama dalam pembuatannya, seperti diperlukannya suatu proses log in. Hal ini merupakan salah satu requirement yang bersifat berulang (membentuk requirement pattern). Hal ini dapat dilakukan dengan cara melakukan suatu analisis domain.

Jadi, analisis domain sangat berguna untuk menemukan pola-pola yang berulang (requirement pattern) dalam berbagai projek dalam suatu domain.

6.4. Is it possible to develop an effective analysis model without developing all four elements shown in Figure 6.3? Explain.

 

Jawab:

Menurut saya, mungkin saja seorang developer mampu membuat model analisis tanpa harus mengembangkan keempat elemen yang terdapat pada gambar 6.3 (Scenario-based model – class model – flow model – behavioral model) selama ia dapat memaksimalkan informasi-informasi yang dia dapatkan dengan melakukan pemodelan-pemodelan elemen lainnya.

Sebagai contoh, bisa saja seorang developer membuat suatu model analisis dengan hanya mengandalkan scenario-based model dan behavioral model. Dengan demikian, maka developer tersebut akan mendapatkan gambaran mengenai apa yang diharapkan dapat dilakukan oleh aplikasi yang akan dibuatnya (tentunya melalui informasi dari klien dan calon user) dalam bentuk suatu use case model. Selain itu, developer tersebut juga akan memperoleh suatu pemodelan tentang bagaimana tahapan-tahapan yang kira-kira perlu dilakukan oleh aplikasi tersebut dalam melaksanakan suatu task dan perubahan state dalam aplikasi tersebut pada setiap tahapannya dalam bentuk state diagram dan activity diagram.

Tentunya pemodelan yang diperoleh dari kedua elemen ini cukup menggambarkan tentang bagaimana aplikasi tersebut akan bekerja, tetapi ada beberapa hal yang tidak dapat dimodelkan olehnya jika hanya melalui 2 elemen tersebut, misalnya hubungan antar class/objek dalam aplikasi yang akan dia buat. Jika hanya berbekal scenario-based model dan behavioral model, seorang developer akan kesulitan memodelkan class-class apa yang saliung terkait melakukan suatu task tertentu.

Jadi, dapat dikatakan bahwa untuk membuat suatu model analisis yang efektif, seorang developer tidak bisa hanya bergantung pada beberapa elemen model pada software requirements; developer perlu mengembangkan keempat model (scenario-based, behavioral, class, dan flow model) secara maksimal agar bisa memperoleh suatu model analisis yang efektif.

6.5. You have been asked to build one of the following systems:

a. a network-based course registration system for your university.
b. a Web-based order-processing system for a computer store.
c. a simple invoicing system for a small business.
d. an Internet-based cookbook that is built into an electric range or microwave.

Select the system that is of interest to you and develop an entity-relationship diagram that describes data objects, relationships, and attributes.

Jawab:

Sistem yang saya pilih untuk saya buat adalah poin (b), yaitu suatu sistem pemrosesan pemesanan online dalam suatu toko komputer.

Berikut adalah entity-relationship diagram dari sistem yang akan saya buat:

ERD

 

6.6. The department of public works for a large city has decided to develop a Web-based pot- hole tracking and repair system (PHTRS). A description follows:

Citizens can log onto a website and report the location and severity of potholes. As pot- holes are reported they are logged within a “public works department repair system” and are assigned an identifying number, stored by street address, size (on a scale of 1 to 10), location (middle, curb, etc.), district (determined from street address), and repair priority (determined from the size of the pothole). Work order data are associated with each pothole and include pothole location and size, repair crew identifying number, number of people on crew, equipment assigned, hours applied to repair, hole status (work in progress, repaired, temporary repair, not repaired), amount of filler material used, and cost of repair (computed from hours applied, number of people, material and equipment used). Finally, a damage file is created to hold information about reported damage due to the pothole and includes citizen’s name, address, phone number, type of damage, and dollar amount of damage. PHTRS is an online system; all queries are to be made interactively.

a. Draw a UML use case diagram for the PHTRS system. You’ll have to make a number of assumptions about the manner in which a user interacts with this system.
b. Develop a class model for the PHTRS system.

 

Jawab:

a. Berikut adalah use case diagram untuk sistem PHTRS:

Use case

 

Beberapa asumsi mengenai use case diagram diatas:

  1. Ada 3 aktor yang berinteraksi dengan sistem PHRTS, yakni citizen, repair crew, dan administrator.
  2. Citizen berperan untuk melaporkan keberadaan pothole dan kerusakan yang dialaminya.
  3. Pada task report pothole, citizen hanya memasukkan lokasi pothole dan ukurannya, sedangkan skala prioritas dan IDnya diberikan oleh sistem secara otomatis.
  4. Pada task report damage, user hanya perlu memasukkan nama, alamat, nomor telepon, dan kerusakan, sedangkan biaya yang dikeluarkan untuk ganti rugi akan dihitung oleh sistem.
  5. Pada task view data (hanya dapat diakses oleh repair crew), repair crew perlu memasukkan ID nya dahulu, jika ID tersebut sesuai dengan database, maka sistem akan menampilkan data perbaikan yang harus dilakukan oleh repair crew tersebut. Adapun data ini digenerate oleh sistem. Asumsinya bagian ini tak perlu diakses oleh citizen.
  6. Task Maintain Data digunakan oleh Administrator untuk memaintain data-data yang dimiliki oleh sistem

b. Berikut adalah class diagram sistem PHRTS:

ClassDiagram

 

6.7.Write a template-based use case for the SafeHome home management system described informally in the sidebar following Section 6.5.4.

 

Jawab:

Berikut adalah use case diagram sesuai scenario di akhir bagian 6.5.4  :

UseCase2

 

6.8.Develop a complete set of CRC model index cards on the product or system you chose as part of Problem 6.5.

Jawab:

Berikut adalah CRC Cards untuk produk yang saya pilih pada soal 6.5. :

CRC

 

6.9 . Conduct a review of the CRC index cards with your colleagues. How many additional classes, responsibilities, and collaborators were added as a consequence of the review?

Jawab:

Untuk saat ini, saya sedang melakukan proses review, hasil review (jika ada perubahan) akan saya tampilkan pada update berikutnya.

6.10 What is analysis package and how might it be used?

Jawab:

Analysis package adalah berbagai elemen dari model analisis (seperti use case dan class analysis) yang dikategorikan dalam suatu cara yang memaketkan mereka sebagai suatu kesatuan yang diberikan suatu nama representative. Analysis package dapat digunakan dalam suatu projek yang memiliki banyak class, dimana class-class tersebut dapat dikelompokkan menjadi beberapa kelompok sesuai dengan tugasnya masing-masing. Misalnya class-class yang berkaitan dengan environment dalam game, seperti tree, mountain, sky, dan scene dapat dikelompokkan dalam suatu package.

 

================================

backlink: www.binus.ac.id

Tanggapan terhadap Kuesioner Software Engineering – New Game

Pada sesi pertama kelas besar Software Engineering, kelas 04 PFT dan 04 PGT diberikan tugas untuk membuat sebuah kuesioner untuk mengaplikasikan tahapan Communication dalam pembuatan sebuah software.

Pada kesempatan ini kelompok kami ( Fendy Chandra (1601221420) – Fernando Giovanni (1601221723) – Reinhard Aditta Mintanto(1601221300) ) membuat sebuah kuesioner (info detil disini ) untuk menjaring tanggapan user mengenai requirements, fitur, dan Operating System dari suatu aplikasi game RPG. Kuesioner ini kami sebarkan secara online melalui fasilitas Google Drive.

Berikut adalah hasil tanggapan beberapa partisipan yang telah mengisi kuesioner kami (update terakhir: 7 Maret 2014 jam 14.45 WIB, klik untuk memperbesar gambar) :

tanggapan kuesioner 3 tanggapan kuesioner 1 tanggapan kuesioner 4 tanggapan kuesioner 6 tanggapan kuesioner 5 tanggapan kuesioner 2

backlink :
BINUS UNIVERSITY

Binusmaya vr 3

( Anda dapat turut berpartisipasi dengan mengisi kuesioner kami disini )

Kuesioner Software Engineering – New Game

Pada sesi pertama kelas besar Software Engineering, kelas 04 PFT dan 04 PGT diberikan tugas untuk membuat sebuah kuesioner untuk mengaplikasikan tahapan Communication dalam pembuatan sebuah software.

Pada kesempatan ini kelompok kami ( Fendy Chandra (1601221420) – Fernando Giovanni (1601221723) – Reinhard Aditta Mintanto(1601221300) ) membuat sebuah kuesioner untuk menjaring tanggapan user mengenai requirements, fitur, dan Operating System dari suatu aplikasi game RPG. Kuesioner ini kami sebarkan secara online melalui fasilitas Google Drive. Adapun kuesioner kami adalah sebagai berikut:

Keterangan : * = pertanyaan yang wajib diisi

Jenis kelamin Anda? *
a.
Apakah Pekerjaan Anda? *
a.

b.
c.
d.
e.

Berapakah usia Anda? *

a. 
b. 
c. 
d. 

Gadget apa yang paling sering Anda gunakan untuk bermain game? *

a.
b.
c.
d.

Apakah Anda pernah memainkan game RPG (Role Playing Game) ? *


b.

Jika ya, di platform apakah Anda pernah memainkannya? *


b.
c.
d.
e.

Berapa Sering Anda Memainkan Game RPG dalam 1 Minggu? *

a.
b.
c.
d.
e.

Game RPG dengan tema seperti apa yang Anda sukai? *

a.
b.
c.

Apa yang paling Anda harapkan dari sebuah game RPG? *

a.
b.
c.
d.

Menurut Anda, Unsur Apa yang Paling Penting Dalam Game RPG? *

a.
b.
c.
d.
e.
f.

Menurut Anda Seberapa Besar Pengaruh Story dalam Game RPG? *
Tidak Penting
Pilih sebuah nilai dari rentang 1,Tidak Penting, hingga 5,Sangat Penting,.
Sangat Penting
Game RPG yang menurut Anda paling sesuai? *

a.
b.
c.

backlink :
BINUS UNIVERSITY

( Anda dapat turut berpartisipasi dengan mengisi kuesioner kami disini )