Catatan Kuliah Catatan Kuliah
Rekayasa Perangkat Lunak Rekayasa Perangkat Lunak
(Software Engineering) (Software Engineering)
Bagian 2 Bagian 2
copyright © 2006
R.S. Pressman & Associates, Inc M. Idham Ananta Timur, S.T., M.Kom.
Hanya digunakan di lingkungan Universtias
Hanya boleh digandakan untuk mahasiswa di lingkungan universitas yang menggunakan buku Software Engineering: A Practitioner's Approach.
Selain itu dilarang keras menggandakan.
Presentasi, slide atau hardcopy tidak boleh digunakan untuk
Software Engineering: A Practitioner’s Approach, 6/e Software Engineering: A Practitioner’s Approach, 6/e
Bab 11 Bab 11
Desain Level Komponen Desain Level Komponen
copyright © 1996, 2001, 2005
R.S. Pressman & Associates, Inc.
For University Use Only
May be reproduced ONLY for student use at the university level
when used in conjunction with Software Engineering: A Practitioner's Approach.
Any other reproduction or use is expressly prohibited.
Apakah Komponen ? Apakah Komponen ?
OMG Unified Modeling Language Specification OMG Unified Modeling Language Specification [OMG01] [OMG01]
mendefinisikan komponen sebagai mendefinisikan komponen sebagai
“… “… a modular, deployable, and replaceable part of a system that a modular, deployable, and replaceable part of a system that encapsulates implementation and exposes a set of interfaces.”
encapsulates implementation and exposes a set of interfaces.”
Pandangan OO : Sebuah komponen terdiri dari Pandangan OO : Sebuah komponen terdiri dari sekumpulan class2x yang berkolaborasi
sekumpulan class2x yang berkolaborasi
Pandangan Konvensional: logika, struktur data internal Pandangan Konvensional: logika, struktur data internal yang dibutuhkan untuk mengimplementasi logika
yang dibutuhkan untuk mengimplementasi logika proses dan sebuah interface yang memungkinkan proses dan sebuah interface yang memungkinkan
komponen untuk dipanggil sehingga data dapat komponen untuk dipanggil sehingga data dapat
dimasukkan ke dalamnya.
dimasukkan ke dalamnya.
Komponen OO Komponen OO
PrintJ ob c omputeJ ob
initiateJ ob
numberOf Pages numberOf Sides paperType paperWeight paperSize paperColor magnif ication colorRequirements productionFeatures collationOptions bindingOptions coverStock bleed priority tot alJ obCost WOnumber
PrintJ ob
computePageCost () computePaperCost () computeProdCost () computeTotalJ obCost () buildWorkOrder() checkPriority () passJ obto Production() elaborated design class
<<int erf ace>>
co mput eJ o b computePageCost () computePaperCost ( ) computeProdCost () computeTotalJ obCost ()
<<in terf ace>>
in itiateJ o b buildWorkOrder() checkPriority ( ) passJ obt o Production()
design c omponent numberOf Pages
numberOf Sides paperType magnif ic ation produc tionFeat ures
PrintJ ob
c omputeJ obCost( ) passJ obt oPrinter( ) analysis c lass
Komponen Konvensional Komponen Konvensional
ComputePageCost design component
accessCostsDB getJ obData
elaborated module PageCost
in: job size in: color=1, 2, 3, 4 in: pageSize = A, B, C, B out: BPC
out: SF in: numberPages in: numberDocs in: sides= 1, 2 in: color=1, 2, 3, 4 in: page size = A, B, C, B out: page cost
job size (J S) =
numberPages * numberDocs;
lookup base page cost (BPC) -->
accessCostsDB (J S, color);
lookup size factor ( SF) -->
accessCostDB (J S, color, size) job complexity factor ( J CF) = getJ obData (numberPages, numberDocs,
sides, color, pageSize, pageCost) accessCostsDB (jobSize, color, pageSize, BPC, SF)
computePageCost()
Prinsip2x Desain Dasar Prinsip2x Desain Dasar
The Open-Closed Principle (OCP). The Open-Closed Principle (OCP). “sebuah modul[komponen] harus terbuka untuk “sebuah modul[komponen] harus terbuka untuk ekstensi, namun tertutup untuk modifikasi.
ekstensi, namun tertutup untuk modifikasi.
The Liskov Substitution Principle (LSP). The Liskov Substitution Principle (LSP). “Subclass harus dapat disubstitusi oleh “Subclass harus dapat disubstitusi oleh basis class nya.
basis class nya.
Dependency Inversion Principle (DIP). Dependency Inversion Principle (DIP). “Tergantung pada abstraksi, tidak “Tergantung pada abstraksi, tidak tergantung pada konkret.”
tergantung pada konkret.”
The Interface Segregation Principle (ISP). “banyak interface spesifik client lebih baik The Interface Segregation Principle (ISP). “banyak interface spesifik client lebih baik daripada satu interface general purpose.
daripada satu interface general purpose.
The Release Reuse Equivalency Principle (REP). The Release Reuse Equivalency Principle (REP). “Bagian-bagian kecil yang dapat “Bagian-bagian kecil yang dapat digunakan kembali adalah bagian-bagian kecil yang akan direlease.”
digunakan kembali adalah bagian-bagian kecil yang akan direlease.”
The Common Closure Principle (CCP). The Common Closure Principle (CCP). “Class2x yang berubah bersama-sama “Class2x yang berubah bersama-sama adalah milik bersama.”
adalah milik bersama.”
The Common Reuse Principle (CRP). The Common Reuse Principle (CRP). “Class2x yang tidak digunakan kembali “Class2x yang tidak digunakan kembali bersama-sama tidak dikelompokkan bersama.”
bersama-sama tidak dikelompokkan bersama.”
Source: Martin, R., “Design Principles and Design Patterns,” downloaded from Source: Martin, R., “Design Principles and Design Patterns,” downloaded from http:www.objectmentor.com, 2000.
http:www.objectmentor.com, 2000.
Panduan Desain Panduan Desain
Komponen Komponen
Konvensi penyebutan nama harus ditentukan untuk Konvensi penyebutan nama harus ditentukan untuk
komponen2x yang menjadi bagian dari model arsitektur dan komponen2x yang menjadi bagian dari model arsitektur dan kemudian disempurnakan dan diuraikan sebagai bagian dari kemudian disempurnakan dan diuraikan sebagai bagian dari model level komponen
model level komponen
Interfaces Interfaces
Interface menyediakan informasi penting mengenai Interface menyediakan informasi penting mengenai komunikasi dan kolaborasi (yang akan membantuk kita komunikasi dan kolaborasi (yang akan membantuk kita mendapatkan OCP)
mendapatkan OCP)
Dependencies dan Inheritance Dependencies dan Inheritance
Adalah ide yang bagus untuk membuat model dependency Adalah ide yang bagus untuk membuat model dependency dari kiri ke kanan dan intheritance dari bawah ke atas.
dari kiri ke kanan dan intheritance dari bawah ke atas.
Kohesi Kohesi
Pandangan konvensional: Pandangan konvensional:
Sebuah modul tunggal Sebuah modul tunggal
OO view: OO view:
cohesion menyatakan bahwa sebuah komponen atau class cohesion menyatakan bahwa sebuah komponen atau class
melakukan enkapsulasi hanya atribut2x dan operasi2x yang punya melakukan enkapsulasi hanya atribut2x dan operasi2x yang punya kaitan erat dengan yang satu yang lain dan dengan class atau
kaitan erat dengan yang satu yang lain dan dengan class atau komponen itu sendiri.
komponen itu sendiri.
Level kohesi Level kohesi
Fungsional Fungsional
Lapisan/Layer Lapisan/Layer
Komunikasi Komunikasi
Sekuensial Sekuensial
Prosedural Prosedural
Temporal Temporal
utility utility
Coupling Coupling
Pandangan Konvensional: Pandangan Konvensional:
Derajat dimana sebuah komponen terhubung dengan komponen Derajat dimana sebuah komponen terhubung dengan komponen lain dan dengan dunia eksternal
lain dan dengan dunia eksternal
Pandangan OO : Pandangan OO :
Pengukuran kualitatif terhadap derajat dimana class2x saling terkait Pengukuran kualitatif terhadap derajat dimana class2x saling terkait satu dengan yang lain
satu dengan yang lain
Level coupling Level coupling
Content Content
Common Common
Control Control
Stamp Stamp
Data Data
Routine call Routine call
Type use Type use
Inclusion or import Inclusion or import
External External
Component Level Design-I Component Level Design-I
Langkah 1. Identifikasi semua class2x desain yang Langkah 1. Identifikasi semua class2x desain yang berkaitan dengan domain permasalahan.
berkaitan dengan domain permasalahan.
Langkah 2. Identifikasi semua class2x desain yang Langkah 2. Identifikasi semua class2x desain yang berkaitan dengan domain infrastruktur.
berkaitan dengan domain infrastruktur.
Langkah 3. teliti semua class2x desain yang tidak dikenali Langkah 3. teliti semua class2x desain yang tidak dikenali sebagai komponen yang dapat digunaka kembali.
sebagai komponen yang dapat digunaka kembali.
Langkah 3a. Tentukan detail pesan ketika class2x atau Langkah 3a. Tentukan detail pesan ketika class2x atau komponen berkolaborasi.
komponen berkolaborasi.
Step 3b. Identifikasi interface yang tepat untuk setiap Step 3b. Identifikasi interface yang tepat untuk setiap komponen.
komponen.
Component-Level Design-II Component-Level Design-II
Langkah 3c. Teliti atribut2x dan tentukan tipe2x data dan Langkah 3c. Teliti atribut2x dan tentukan tipe2x data dan struktur data yang dibutuhkan untuk mengimplementasi struktur data yang dibutuhkan untuk mengimplementasi mereka.
mereka.
Langkah 3d. Langkah 3d. Gambarkan aliran proses di setiap operasi secara Gambarkan aliran proses di setiap operasi secara detail.
detail.
Langkah 4. Gambarkan sumber data persistence (database dan Langkah 4. Gambarkan sumber data persistence (database dan file) dan identifikasi class2x yang diminta untuk mengelolanya.
file) dan identifikasi class2x yang diminta untuk mengelolanya.
Langkah 5. Kembangkan dan perinci representasi perilaku Langkah 5. Kembangkan dan perinci representasi perilaku untuk class atau komponen.
untuk class atau komponen.
Langkah 6. Teliti diagram deployment untuk menyediakan Langkah 6. Teliti diagram deployment untuk menyediakan detail implementasi tambahan.
detail implementasi tambahan.
Step 7. Faktorkan setiap representasi desain level komponen Step 7. Faktorkan setiap representasi desain level komponen dan selalu perhatikan alternatif2x.
dan selalu perhatikan alternatif2x.
Collaboration Diagram Collaboration Diagram
:ProductionJob
:WorkOrder
:JobQueue 1: buildJob (WOnumber)
2: submitJob (WOnumber)
Refactoring Refactoring
PrintJ ob computeJ ob
initiateJ ob
ProductionJ ob buildJ ob
submitJ ob WorkOrder
appropriate attributes
buildWorkOrder () getJ obDescriiption
J obQueue
appropriate attributes
checkPriority ()
<<interface>>
initiateJ ob
passJ obToProduction()
Activity Diagram Activity Diagram
validate attributes input
accessPaperDB(weight) returns baseCostperPage
size = B paperCostperPage = paperCostperPage *1 .2
size = C paperCostperPage = paperCostperPage *1 .4
size = D paperCostperPage = paperCostperPage *1 .6
color is custom
paperCostperPage = paperCostperPage *1 .1 4 color is standard
paperCostperPage = baseCostperPage
returns ( paperCostperPage )
Statechart Statechart
buildingJ obData entry/ readJ obData() exit/displayJ obData() do/ checkConsistency() include/ dataInput
entry/ computeJ ob exit/ save totalJ obCost
formingJ ob entry/ buildJ ob exit/ save WOnumber do/
computingJ obCost
submittingJ ob entry/ submitJ ob exit/initiateJ ob do/ place on J obQueue
behavior within the state buildingJ obData
dataInputCompleted [all data items consistent]/ displayUserOptions dataInputIncomplete
jobCostAccepted [customer is authorized]/
getElectronicSignature
Object Constraint Language (OCL) Object Constraint Language (OCL)
Melengkapi UML dengan memungkin software engineer Melengkapi UML dengan memungkin software engineer
menggunakan grammar dan syntax formal untuk membangun menggunakan grammar dan syntax formal untuk membangun penyataan yang tidak ambigu tanpa elemen2x model desain penyataan yang tidak ambigu tanpa elemen2x model desain
Pernyataan bahasa OCL yang paling sederhana dibangun Pernyataan bahasa OCL yang paling sederhana dibangun dengan 4 bagian ::
dengan 4 bagian ::
(1) sebuah context (1) sebuah context yang menyatakan situasi terbatas dimana yang menyatakan situasi terbatas dimana statemen tersebut valid;
statemen tersebut valid;
(2) sebuah property (2) sebuah property yang menampilkan beberapa karakterstik dari yang menampilkan beberapa karakterstik dari konteks(mis jika context adalah class, properti adalah atribut)
konteks(mis jika context adalah class, properti adalah atribut)
(3) sebuah operation (3) sebuah operation (mis aritmetika) yang memanipulasi atau (mis aritmetika) yang memanipulasi atau menentukan properti, dan
menentukan properti, dan
(4) (4) keywords (mis if, then, else, and, or, not, implies) yang keywords (mis if, then, else, and, or, not, implies) yang digunakan untuk ekspresi kondisional.
digunakan untuk ekspresi kondisional.
Contoh OCL Contoh OCL
context
context PrintJob::validate(upperCostBound PrintJob::validate(upperCostBound : Integer, custDeliveryReq :
: Integer, custDeliveryReq :
Integer) Integer)
pre: pre: upperCostBound > 0 upperCostBound > 0
and custDeliveryReq > 0 and custDeliveryReq > 0
and self.jobAuthorization = 'no' and self.jobAuthorization = 'no' post: if post: if self.totalJobCost <= self.totalJobCost <=
upperCostBound upperCostBound
and self.deliveryDate <= and self.deliveryDate <=
custDeliveryReq custDeliveryReq
then then
self.jobAuthorization = 'yes' self.jobAuthorization = 'yes'
endif endif
Desain Algoritma Desain Algoritma
Aktivitas desain paling dekat dengan Aktivitas desain paling dekat dengan coding
coding
pendekatan: pendekatan:
review gambaran desain untuk komponen review gambaran desain untuk komponen
Gunakan langkah-langkah penyempurnaan Gunakan langkah-langkah penyempurnaan untuk mengembangkan algoritma
untuk mengembangkan algoritma
Gunakan pemrograman terstruktur untuk Gunakan pemrograman terstruktur untuk implementasi logika prosedural
implementasi logika prosedural
Gunakan ‘formal methods’ untuk Gunakan ‘formal methods’ untuk membuktikan logika
membuktikan logika
Langkah2x Penyempurnaan Langkah2x Penyempurnaan
open open
walk to door;
walk to door;
reach for knob;
reach for knob;
open door;
open door;
walk through;
walk through;
close door.
close door.
repeat until door opens repeat until door opens turn knob clockwise;
turn knob clockwise;
if knob doesn't turn, then if knob doesn't turn, then take key out; take key out;
find correct key; find correct key;
insert in lock; insert in lock;
endif endif
pull/push door pull/push door move out of way;
move out of way;
end repeat
end repeat
Model Desain Algoritma Model Desain Algoritma
Menampilkan algoritma pada level detail Menampilkan algoritma pada level detail yang dapat direview kualitasnya
yang dapat direview kualitasnya
pilihan2x: pilihan2x:
grafis (mis flowchart, box diagram) grafis (mis flowchart, box diagram)
pseudocode (mis PDL) pseudocode (mis PDL) ... choice of many ... choice of many
Bahasa pemrograman Bahasa pemrograman
Tabel Keputusan Tabel Keputusan
Lakukan penelusuran untuk menilai kualitas Lakukan penelusuran untuk menilai kualitas
Pemrograman Terstruktur Pemrograman Terstruktur
untuk desain prosedural untuk desain prosedural
Gunakan sejumlah konstruksi logika Gunakan sejumlah konstruksi logika
sequence sequence
conditional — conditional — if-then-else, select-case if-then-else, select-case
loops — loops — do-while, repeat until do-while, repeat until
Mengarah pada kode yang mudah dibaca dan diuji Mengarah pada kode yang mudah dibaca dan diuji
Penting untuk memperoleh kualitas tinggi Penting untuk memperoleh kualitas tinggi
Tapi tidak cukup Tapi tidak cukup
Dapat digunakan untuk membantu koreksi
Dapat digunakan untuk membantu koreksi
Desain prosedur terstruktur Desain prosedur terstruktur
a x1 b x2
x 3
4
5
c d
e f
g x
x
add a condition Z,
if true, exit the program
Tabel Keputusan Tabel Keputusan
Conditions
regular customer silver customer gold customer special discount Rules
no discount
apply 8 percent discount apply 15 percent discount
apply additional x percent discount T
F T
T T
T T
F
1 3 4 5 6
F
T T
T 2
Rules
Program Design Language (PDL) Program Design Language (PDL)
if-then-else
if condition x
then process a;
else process b;
endif PDL easy to combine with source code
machine readable, no need for graphics input graphics can be generated from PDL
enables declaration of data as well as procedure
easier to maintain
Why Design Language?
Why Design Language?
can be a derivative of the HOL of choice e.g., Ada PDL
machine readable and processable can be embedded with source code, therefore easier to maintain
can be represented in great detail, if designer and coder are different
easy to review
Tugas Akhir Semester Tugas Akhir Semester
Buat Model Analisis dari SRS yang anda buat sebelumnya. Model analisis Buat Model Analisis dari SRS yang anda buat sebelumnya. Model analisis berisi diagram :
berisi diagram :
Use Case Diagram Use Case Diagram
ERD (pendekatan konvensional) ERD (pendekatan konvensional)
DFD (pendekatan konvensional) DFD (pendekatan konvensional)
Activity/Sequence Diagram (Pendekatan OO) Activity/Sequence Diagram (Pendekatan OO)
Class Diagram (Pendekatan OO) Class Diagram (Pendekatan OO)
Buat Model Desain dari model analisis yang anda buat Buat Model Desain dari model analisis yang anda buat