Software Design Kata pengantar Definisi design oleh IEEE6 10.12-90 adalah sebagai berikut : “proses pendefinisian arsitektur, komponen, interface dan karakteristik lain dari sistem atau komponen” dan “ hasil dari proses itu”. Di tampilkan sebagai proses, software design adalah aktivitas terus menerus dari software engineering yang mana software requirements dianalisa dalam rangka untuk menghasilkan deskripsi dari struktur internal software yang berperan sebagai basis untuk konstruksinya. Lebih pastinya, sebuah softaware design (hasilnya) harus dapat mendeskripsikan arsitektur software.Karenanya, bagaimana software dipecah dan disusun menjadi komponen-komponen, dan tampilan antara komponen-komponen tersebut, harus juga dapat mendeskripsikan komponen pada tingkatan detil yang menyediakan konstruksi mereka. Software design memainkan peranan penting dalam membangun software. Software design mengijinkan software engineers untuk membuat beberapa model yang membentuk sejenis blueprint dari solusi menjadi implementasi. Aktivitas Software design Dalam daftar standar software life cycle process seperti pada Software Life Cycle Processes, software design terdiri atas dua aktivitas yang sangat sesuai antara software requirements analysis dan software construction : - Software architectural design(sering disebut toplevel design) : Menggambarkan software’s top-level structure dan mengorganisasi dan mengidentifikasi berbagai komponen. - Software detailed design : menggambarkan tiap komponen secara cukup mendetail untuk konstruksinya. General Concepts design Software bukan satu-satunya media yang melibatkan desain. Dalam pemahaman secara umum, kita dapat melihat desain sebagai bentuk pemecahan masalah. Sebagai contoh, kita mengambil konsep dari masalah yang tidak mempunyai solusi nyata, sangat menarik sebagai bagian untuk memahami batasan dari desain. Sejumlah ide dan konsep lain juga menarik untuk memahami desain dalam pemahaman umum : tujuan, batasan, alternatif, representasi dan solusi. Software Design Process Software design secara umum terdiri atas proses dua langkah: - Architectural Design Architectural design mendeskripsikan bagaimana software dipecah dan disusun menjadi beberapa komponen (the software architecture) - Detailed Design Detailed design mendeskripsikan perilaku khusus komponen tersebut. Hasil dari proses tersebut merupakan kumpulan dari model-model dan artefak yang merekam keputusan utama yang telah diambil 1.4. Enabling Techniques Prinsip dari Software design , juga disebut dengan teknik penyediaan, adalah ide utama berdasarkan pada berbagai pendekatan dan konsep yang berbeda dari software design. Macam Enabling Techniques sebagai berikut : Abstraction Coupling and cohesion Decomposition and modularization Encapsulation/information hiding Separation of interface and implementation Sufficiency, completeness and primitiveness 1.4.1 Abstraction Abstraction adalah karakteristik dasar dari sebuah entitas yang membedakan entitas tersebut dari entitas yang lain Abstraction mendefinisikan batasan dalam pandangan viewer Abstraction bukanlah pembuktian nyata,hanya menunjukkan intisari/pokok dari sesuatu 1.4.2. Coupling and cohesion Coupling didefinisikan sebagai kekuatan hubungan antara module, sementara cohesion didefinisikan bagaimana elemenelemen membuat modul tersebut saling berkaitan. 1.4.3. Decomposition modularization Pendekomposisian dan pemodularisasian software besar menjadi sejumlah software independen yang lebih kecil, biasanya dengan tujuan untuk menempatkan fungsionalitas dan responsibilitas pada komponen yang berbeda. 1.4.4 Encapsulation Encapsulation adalah menyembunyikan implementasi dari client, sehingga client hanya tergantung pada interface Ilustrasi Encapsulation Seorang Professor bisa megajar 4 class pada semester depan 1.4.5. Separation of interface and implementation Pemisahan interface dan implementasi melibatkan pendefinisian sebuah komponen melalui penspesifikasian sebuah public interface, diketahui oleh clients, terpisah dari detil bagaimana sebuah komponen direalisasikan. 1.4.6. Sufficiency, completeness and primitiveness Pencapaian ketercukupan, kelengkapan dan primitiveness, berarti memastikan bahwa komponen software menangkap semua karakteristik penting dari sebuah abstraksi dan tidak lebih. Key issue in software design Aspect adalah bagian dari sebuah program cross cut Aspect bukan merupakan bagian dari software’s functional decomposition, tetapi hanya sebagai properti. Key issues mempunyai peran yang penting untuk developer untuk membuat pilihan dan lebih mudah untuk menemukan solusi The number of key issues crosscutting Concurrency Bagaimana software dapat membedakan proses, task,threads, synchronisasi dan scheduling Control and handling of events Bagaimana sebuah software dapat mengatur data dan flow control Distribtions of components Bagaimana sebuah software dapat didistribusikan dan semua komponen saling berkomunikasi The number of key issues crosscutting Error and Exception handling and Fault tolerance Bagaimana sebuah software dapat mengenali sebuah error dan mengetahui bagaimana cara mengatasinya Interaction and presentation Bagaimana sebuah software dapat berinteraksi dengan user dan dapat menampilkan keinginan user Data persistence Seberapa lama data akan disimpan Software architecture Software architecture adalah sebuah desain umum suatu proses pada sebuah software system., meliputi: Pembagaian software ke dalam subsistem Memutuskan bagaimana saling berhubungan Menentukan alat penghubung “The structure of the components of a program /system, their interrelationships, and principles and guidelines governing their design and devolution over time” (SEI software architecture discussion group) The importance of software architecture Kenapa kita perlu mengembangkan arsitektur: Agar setiap orang bisa mengerti mengenai sistem yang ada. Untuk membiarkan user bekerja secara individual terhadap sebuah sistem Persiapan untuk perluasan system Menyediakan fasilitas reuse and reusability 3.1 Architectural Structures and view points View menampilkan aspek aspek yang terdapat pada software architecture yang menunjukan spesifikasi software. Architectural structures Sebuah sistem famili yag terkait dengan pattern sebuah vocabulary dari komponen dan connector type Suatu batasan dimana dapat dikombinasikan Architectural structures dapat disebut juga dengan architectural style Architecture view Use Case View Analisa use case adalah teknik untuk meng-capture proses bisnis dari prespektif user. Aspek statis di-capture dalam use case diagram Aspek dinamis di-capture dalam interaction diagram, statechart diagram dan activity diagram Design View Meliputi class-class, interface, dan collaboration yang mendefinisikan vocabulary system Mendukung kebutuhan fungsional system Aspek statis di-capture dalam class diagram dan object diagram Aspek dinamis di-capture dalam interaction diagram, statechart diagram dan activity diagram Architecture view Process View Meliputi thread dan pendefinisian proses-proses concurency dan syncronization Menunjukkan performance, scalability dan throughput Aspek statis dan dinamis di-capture dengan design view, tetapi lebih menekankan pada activ class Implementation View Meliputi komponen dan file yang digunakan untuk menghimpun dan me-release system physic Menunjukkan configuration management Aspek statis di-capture dalam component diagram Aspek dinamis di-capture dalam interaction diagram, statechart diagram dan activity diagram Architecture view Deployment View Meliputi node yang membentuk topologi hardware system Menunjukkan pendistribusian, delivery, dan pengistallan Aspek statis di-capture dalam deployment diagram Aspek dinamis di-capture dalam interaction diagram, statechart diagram, activity diagram Architectural Style Secara umum architectural Style di bedakan menjadi 5 : 1. General Structure contoh : layers , pipes, filters, blackboard Architectural Style Distributed systems contoh : client server, threetiers, broker 3. Interactive systems contoh : model view controller 4. Adaptable systems contoh: micro kernel 5. Other contoh : batch, interpreters 2. 3.2 Design pattern Aspects yang berulang dalam desain disebut dengan design patterns. pattern adalah suatu outline dari permasalahan yang besar dirubah ke dalam suatu masalah yang lebih khusus, sehingga dapat ditemukan pemecahaanya. A good pattern sebaiknya Seumum mungkin Mengandung solusi yang telah dibuktikan dan efektif untuk menyelesaikan masalah Studying patterns is an effective way to learn from the experience of others Macam – macam Pattern Creational patterns membuat sebuah object berdasarkan prototype yng dibuat terlebih dahulu contoh : builder, factory, prototype, singelton Structural Pattern contoh : adapter, bridge ,proxy Behavioral Pattern contoh: command, visitors, iterator 3.3 Families of programs and Frameworks penggunaan kembali desain dari sebuah perangkat lunak untuk mendesain families dari perangkt lunak. Hal tersebut disebut juga software product line Framework adalah suatu sistem perangkat lunak yang lengkap dan dapat diperluas dalam sekejap oleh spesifiksi plug-ins Dikenal dengan nama hot spots 4. Software Design Quality Analysis and Evaluation 4.1. Quality Attributes 4.2. Quality Analysis and Evaluation Techniques 4.3. Measures (Ukuran ) Quality Attributes membedakan run-time (performance, security, availability, functionality, usability) tidak dapat membedakan run-time (modifiability, portability, reusability, integrability and testability) berhubungan dengan architecture’s qualities (conceptual integrity, correctness and completeness, buildability). Quality Analysis and Evaluation Techniques Software design reviews Static analysis Simulation and prototyping Software design reviews teknik untuk memverifikasi dan memastikan kualitas dari suatu design artifacts Static Analysis formal atau semiformal static (non-executable) analysis yang dapat dipergunakan untuk mengevaluasi suatu design Menganalisis apa yang program akan lakukan tanpa benar2 mengeksekusinya Simulation and prototyping dynamic techniques untuk mengevaluasi suatu design Dengan cara simulasi atau membuat prototype Measures (Ukuran) Function-oriented (structured) design measures - Structure Chart Object-oriented design measures - Class Diagrams 5. Software Design Notations 5.1. Structural Descriptions (static view) 5.2. Behavioral Descriptions (dynamic view) Structural Descriptions (static view) Architecture description languages (ADLs) Class and object diagrams Component diagrams Collaboration responsibilities cards (CRCs) Deployment diagrams Entity-relationship diagrams (ERDs) Interface description languages (IDLs) Jackson structure diagrams Structure charts Architecture description languages (ADLs) bahasa yang digunakan untuk mendeskripsikan suatu software architecture dalam kaitannya dengan komponen dan connector. Class & Object Diagrams digunakan untuk merepresentasikan satu set class (dan object) dan hubungan timbal-balik diantaranya. Class Diagrams ScheduleAlgorithm RegistrationForm RegistrationManager addStudent(Course, StudentInfo) RegistrationUser name Student open() addStudent(StudentInfo) major Professor tenureStatus Course name numberCredits CourseOffering location open() addStudent(StudentInfo) Object diagrams a Measurement amount: 80 unit: 'bpm' Billy: Patient pulseRate: PhenomenonType a Measurement amount: 74 unit: 'bpm' a Measurement amount: 5 unit: 'ft' height: PhenomenonType John: Patient a Measurement amount: 6 unit: 'ft' Relationship between specific objects Component Diagram Component diagrams adalah salah satu macam dari diagram yang memodelkan physical aspek dari suatu object-oriented system. Component diagram menunjukkan ketergantungan diantara satu set komponen. Register.exe Billing.exe Billing System Registrar.exe People.dll User Course.dll Course Courses.dll People.dll Student Course Course Offering Professor Collaboration responsibilities cards (CRCs) digunakan untuk menandakan nama dari suatu komponen (class), responsibilities, dan nama komponen lain yang terkait. Deployment Diagram Deployment diagram menunjukkan kofigurasi run-time processing nodes dan komponen yang bergantung padanya. Registration Database Main Building Library Dorm ERD Notation One common form: object1 (0, m) relationship (1, 1) object 2 attribute Another common form: relationship object1 (0, m) object 2 (1, 1) The ERD: An Example NmDepan Inisial NmBlk Nama Gaji nama JenisKel ( 1,1 ) Pegawai ( 0,1 ) mengepalai ,N (1 ( 1,N) ( 1,1 ) lokasi 8 Departemen JmlPegawai T glMulai ) (0,N (0,1 ) (0, N) NoKT P bekerja untuk nomor ( 0,N) Alamat mengatur (1, N) ( 1,1) ) bekerja pada memimpin menanggung Proyek ( 1,1) LamaJam Nomor T anggungan Nama Hubungan JenisKel T glLahir Nama Lokasi Interface description languages (IDLs) HARUS digunakan oleh Client dan server Adalah bahasa deskripsi interface, bukan bahasa pemrograman Jackson structure diagrams digunakan untuk mendeskripsikan data structure di dalam kaitannya dengan seleksi/pemilihan, dan iterasi. urutan, Student Register Pre-course reading Attend classes Attend examination Attend class Lecture Tutorial Practical Receive grade Structure Charts Hierarchical Decomposition Chart Menggambarkan pengorganisasian code Banyak mengikuti subroutine/function calls Structure Charts juga terdiri dari : parameters passed in/out of routines loop and condition indications A Simple Structure Chart for the Calculate Pay Amounts Module Behavioral Descriptions (dynamic view) Activity diagrams Collaboration diagrams Data flow diagrams (DFDs) Decision tables and diagrams Flowcharts and structured flowcharts Sequence diagrams State transition and statechart diagrams Formal specification languages Pseudo-code and program design languages (PDLs) Activity Diagram Activity diagram di dalam model use case dapat digunakan untuk meng-capture aktivitas-aktivitas dalam sebuah use case Sebenarnya merupakan flowchart, yang menunjukkan aliran kontrol activity ke activity yang lain Collaboration Diagram Suatu collaboration diagram menekankan hubungan object yang mengambil bagian dari suatu interaksi.Tidak seperti sequence diagram, kita tidak harus menunjukkan lifeline dari suatu object explicitly dalam suatu collaboration diagram. Urutan peristiwa ditandai oleh angka-angka urutan pesan terlebih dahulu. 1: set course info 2: process course form : CourseForm 3: add course : Registrar theManager : CurriculumManager aCourse : Course 4: new course Data flow diagrams (DFDs) Data flow diagram (DFD) – suatu model proses yang digunakan untuk melukiskan alir data melalui suatu sistem dan pekerjaan atau pengolahan yang dilakukan oleh sistem itu. Atau yang biasa disebut juga dengan bubble chart, transformation graph, and process model. Simple Data Flow Diagram Decision tables and diagrams digunakan untuk merepresentasikan kombinasi complex dari suatu kondisi dan aksi. Flowcharts and structured flowcharts Penyajian berbagai program komputer, file, database, dan hubungan proses manual yang menjadikannya lengkap. menguraikan organisasi subsistem ke dalam komponen automated dan manual Common System Flowchart Symbols Sequence Diagram Sequence diagram adalah suatu diagram interaksi yang menekankan pada time ordering (waktu) pesan. Ini menunjukkan satu set object dan pesan yang diterima dan dikirim oleh object itu. Sequence diagram adalah tabel yang menunjukkan object pesan di sepanjang sumbu X, dan time ordering-nya (waktu pemesanan) di sepanjang sumbu Y. Sequence Diagram : Student registration form registration manager math 101 math 101 section 1 1: fill in info 2: submit 3: add course(Sue, math 01) 4: are you open? 5: are you open? 6: add (Sue) 7: add (Sue) Statechart Diagram Add student[ Count < 10 ] Initialization Add student / Set count = 0 Open [ Count = 10 ] ^Course Report.Create report Cancel course Cancelled Closed Cancel course Formal Specification Language Mathematical formal yang didasarkan pada logika dengan pendukungan beberapa bahasa pemrograman (e.g. type system and parameterization) Merupakan non-executable models Dirancang untuk menetapkan apa yang akan dihitung dan bukan bagaimana perhitungan harus terpenuhi Bahasa formal didasarkan pada axiomatic set theory atau logika higher-order. Program Design Language (PDL) if condition x then process a; else process b; endif if-then-else 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 3.6 Software Design Strategies and Methods General Strategies Function-oriented (structured) Design Object-oriented Design Data-structure Centered Design Component-based Design (CBD) Other Methods General Strategies Beberapa contoh dari kegunaan strategi umum dalam proses desain adalah divideand-conquer and stepwise refinement, topdown vs bottom-up strategies, data abstraction and information hiding, use of heuristics, use of patterns and pattern languages, use of an iterative and incremental approach. Data Abstraction door manufacturer model number type swing direction inserts lights type number weight opening mechanism implemented as a data structure Procedural Abstraction open details of enter algorithm implemented with a "knowledge" of the object that is associated with enter Stepwise Refinement open walk to door; reach for knob; open door; walk through; close door. repeat until door opens turn knob clockwise; if knob doesn't turn, then take key out; find correct key; insert in lock; endif pull/push door move out of way; end repeat Top-down and bottom-up designing Top-down design Start at the highest level (user interface). Work down to lower levels one-by-one. Do detailed decisions last (e.g., data formats, particular algorithms). Bottom-up design Make decisions about reusable low-level features first. Decide how these will be put together to create high-level constructs. Information Hiding A useful definition of information hiding: Potentially changeable design decisions are isolated (i.e., “hidden”) to minimize the impact of change. - David Parnas Information Hiding module controlled interface • algorithm • data structure • details of external interface • resource allocation policy clients "secret" a specific design decision Function-oriented (structured) Design Desain dengan unit fungsional yang mengubah input menjadi output Function-Oriented (structured) Design Secara tidak resmi dipraktekkan sejak pemrograman dimulai Ribuan sistem telah dikembangkan dengan pendekatan ini Didikukung oleh sebagian besar bahasa pemrograman A Function-oriented view of design Shared memory F1 F4 F2 F3 F5 A function-oriented view of design Merupakan Top-down design strategy atau desain terstruktur. Detail algoritma tersembunyi dalam sebuah fungsi, tetapi informasi state nya tidak. Jadi sebuah fungsi dapat mengganti state pada satu waktu tanpa mengganggu fungsi lain. Tidak umum bagi seseorang untuk sepenuhnya mengetahui bagaimana bagian-bagian berbeda dari sebuah program berinteraksi. Object-oriented Design Banyak metode desain perangkat lunak yang berdasar pada object diusulkan. Bidang ini berkembang dari awal desain berbasis objek pertengahan tahun 1980an(kata benda = objek, kata kerja = metode, kata sifat = atribut) sampai desain berorientasi objek, dimana pewarisan dan polymorphism memainkan peran kunci, ke bidang desain berbasis komponen, dimana meta-information dapat didefinisikan dan diakses (melalui refleksi, sebagai contohnya). Characteristics of OOD Mengijinkan desainer untuk berpikir tentang interacting object yang memelihara state mereka sendiri dan menyediakan operasioperasi pada state tersebut daripada sekumpulan fungsi yang beroperasi pada data yang di share. Objek hide information tentang representasi state, oleh karena itu aksesnya terbatas Objek mungkin terdistribusi dan dapat bekerja secara sekuensial ataupun paralel Advantages of OOD Mudah pemeliharaannya. Objek dikenali sebagai entitas tersendiri. Objek adalah penggunaan kembali komponen-komponen. For some systems, there is an obvious mapping from real world entities to system objects. Data-structure Centered Design Desain struktur data terpusat (contohnya, Jackson Warnier-Orr) mulai dari data menyusun manipulasi program lebih baik daripada yang dilakukan fungsi tersebut. Perencana software pertama-tama mendeskripsikan input dan output struktur data dan kemudian mengembangkan struktur kontrol program berdasar pada diagram struktur datanya. Bermacammacam heuristik diusulkan penyelesaian dengan kasus tertentu – sebagai contoh, saat terdapat mismatch antara input dan output sturktur. Component-based Design (CBD) Sebuah komponen perangkat lunak adalah suatu unit yang independen, mempunyai definisi interface yang baik dan dependensi yang dapat disusun dan disebarkan secara independen. Desain berbasis komponen mengalamatkan isu yang terangkai dengan providing, developing, dan integrating seperti komponen untuk memperbaiki reuse. Component-based Design (CBD) Tujuan : Memungkinkan untuk meletakkan software dalam skala besar secara bersamaan. Contoh : Web browser plug-in, GUI builder