SOFTWARE DESIGN PENDAHULUAN Desain didefinisikan dalam [IEEE610.12-90] baik sebagai "proses mendefinisikan arsitektur, komponen, antarmuka, dan karakteristik lain dari sistem atau komponen" dan "hasil [yang] proses." Dilihat sebagai suatu proses, perangkat lunak desain adalah rekayasa perangkat lunak siklus hidup kegiatan di mana persyaratan perangkat lunak dianalisis untuk menghasilkan deskripsi struktur internal perangkat lunak yang akan berfungsi sebagai dasar untuk konstruksi. Lebih tepatnya, desain perangkat lunak (hasil) harus menjelaskan perangkat lunak arsitektur-yang, bagaimana perangkat lunak terurai dan disusun dalam komponen-dan antarmuka antara komponen-komponen. Hal ini juga harus menjelaskan komponen di tingkat detail yang memungkinkan konstruksi mereka. Software desain memainkan peran penting dalam pengembangan software: memungkinkan insinyur perangkat lunak untuk menghasilkan berbagai model yang membentuk semacam cetak biru dari solusi untuk dilaksanakan. Kita dapat menganalisis dan mengevaluasi modelmodel untuk menentukan apakah atau tidak mereka akan memungkinkan kami untuk memenuhi berbagai persyaratan. Kami juga dapat memeriksa dan mengevaluasi berbagai alternatif solusi dan trade-off. Akhirnya, kita dapat menggunakan model yang dihasilkan untuk merencanakan kegiatan pembangunan berikutnya, selain menggunakan mereka sebagai masukan dan titik awal konstruksi dan pengujian. Dalam daftar standar proses siklus hidup perangkat lunak seperti IEEE / EIA 12207 Proses Software Life Cycle [IEEE12207.0-96], desain perangkat lunak terdiri dari dua kegiatan yang sesuai antara analisis persyaratan perangkat lunak dan konstruksi perangkat lunak: Software architectural design (terkadang disebut toplevel design): menggambarkan tingkat atas struktur perangkat lunak dan organisasi dan mengidentifikasi berbagai komponen Software detailed design: describing each component sufficiently to allow for its construction. Mengenai ruang lingkup Area Software Desain Pengetahuan (KA), deskripsi KA saat ini tidak membahas setiap topik nama yang mengandung kata Tom DeMarco Dalam terminologi (DeM99), KA "desain." dibahas dalam bab ini terutama berkaitan dengan D-desain (dekomposisi desain, perangkat lunak pemetaan menjadi potongan-potongan komponen). Namun, karena pentingnya di bidang tumbuh arsitektur perangkat lunak, kami juga akan membahas FPdesign (keluarga pola desain, yang tujuannya adalah untuk membentuk dieksploitasi kesamaan dalam keluarga perangkat lunak). Sebaliknya, Software Desain KA tidak alamat I-desain (desain penemuan, biasanya dilakukan selama proses persyaratan perangkat lunak dengan tujuan konseptualisasi dan menetapkan perangkat lunak untuk memenuhi kebutuhan ditemukan dan persyaratan), karena topik ini harus dianggap sebagai bagian dari analisis kebutuhan dan spesifikasi. Desain Software KA keterangan terkait secara khusus Software Requirements, Software Construction, Software Engineering Management, Software Quality, and Related Disciplines of Software Engineering. RINCIAN TOPIK UNTUK DESAIN PERANGKAT LUNAK 1. Software Desain Fundamental Konsep-konsep, gagasan, dan terminologi diperkenalkan di sini membentuk dasar yang mendasari untuk memahami peran dan lingkup desain perangkat lunak. 1.1. Umum Konsep Desain Perangkat lunak tidak hanya bidang dimana desain yang terlibat. Dalam arti umum, kita dapat melihat desain sebagai bentuk problemsolving. [Bud03: c1] Misalnya, konsep masalah-masalah jahat tanpa definitif solusi menarik dalam hal memahami batas-batas desain. Sejumlah gagasan dan konsep lainnya juga sangat menarik dalam memahami desain dalam arti umum: tujuan, kendala, alternatif, representasi, dan solusi. 1.2. Konteks Desain Software Untuk memahami peran desain perangkat lunak, penting untuk memahami konteks yang sesuai, siklus hidup rekayasa perangkat lunak. Dengan demikian, penting untuk memahami karakteristik utama dari perangkat lunak analisis persyaratan desain perangkat lunak vs vs vs konstruksi perangkat lunak pengujian perangkat lunak. 1.3. Software Desain Proses Software desain umumnya dianggap sebagai proses dua langkah: 1.3.1. arsitektur desain Desain arsitektur menjelaskan bagaimana software decomposed dan disusun dalam komponen (arsitektur perangkat lunak) 1.3.2. Detil desain Detail desain menggambarkan perilaku spesifik dari komponen ini. Output dari proses ini adalah seperangkat model dan artefak yang mencatat keputusan besar yang telah diambil. 1,4. Mengaktifkan Teknik Menurut Kamus Inggris Oxford, prinsipnya adalah "kebenaran dasar atau hukum umum ... yang digunakan sebagai dasar pemikiran atau panduan untuk bertindak." Software prinsip-prinsip desain, juga disebut teknik memungkinkan [Bus96], yang dianggap gagasan kunci mendasar untuk banyak pendekatan desain perangkat lunak yang berbeda dan konsep. Teknik-teknik yang memungkinkan adalah sebagai berikut: [ 1.4.1. Abstraksi Abstraksi adalah "proses melupakan informasi sehingga hal-hal yang berbeda dapat diperlakukan seolah-olah mereka sama." [Lis01] Dalam konteks perancangan perangkat lunak, dua mekanisme abstraksi kunci parameterization dan spesifikasi. Abstraksi oleh spesifikasi mengarah ke tiga jenis utama dari abstraksi: abstraksi prosedural, abstraksi data, dan kontrol (iterasi) abstraksi. 1.4.2. Kopling dan kohesi Coupling didefinisikan sebagai kekuatan hubungan antara modul, sedangkan kohesi didefinisikan oleh bagaimana unsur-unsur yang membentuk modul yang terkait. 1.4.3. Dekomposisi dan modularisasi Membusuk dan modularizing perangkat lunak besar menjadi beberapa yang independen yang lebih kecil, biasanya dengan tujuan menempatkan fungsi yang berbeda atau tanggung jawab dalam berbagai komponen. 1.4.4. Enkapsulasi / informasi persembunyian Enkapsulasi / informasi persembunyian berarti pengelompokan dan kemasan elemen dan rincian internal yang abstak dan membuat rincian tidak dapat diakses. 1.4.5. Pemisahan interface dan implementasi Memisahkan interface dan implementasi mendefinisikan melibatkan komponen dengan menentukan antarmuka publik, yang dikenal dengan klien, terpisah dari rincian tentang bagaimana komponen tersebut direalisasikan. 1.4.6. Kecukupan, kelengkapan dan keprimitifan Pencapaian kecukupan, kelengkapan, dan keprimitifan berarti memastikan bahwa komponen perangkat lunak menangkap semua karakteristik penting abstraksi, dan tidak lebih. 3.2. Pola Desain (pola microarchitectural) Ringkas dijelaskan, pola adalah "solusi umum untuk masalah umum dalam konteks tertentu." (Jac99) Sementara gaya arsitektur dapat dilihat sebagai pola yang menggambarkan organisasi tingkat tinggi perangkat lunak (macroarchitecture mereka), pola desain lainnya dapat digunakan untuk menggambarkan rincian pada tingkat, lebih rendah lebih lokal (mikroarsitektur mereka). penciptaan pola (misalnya, pembangun, pabrik,prototipe, dan tunggal) Struktural pola (misalnya, adaptor, jembatan,komposit, dekorator, façade, kelas terbang, dan proxy) Perilaku pola (misalnya, perintah, penerjemah, iterator, mediator, kenang-kenangan, pengamat, negara, strategi, template, pengunjung) 3.3. Keluarga dan Kerangka Program Salah satu pendekatan mungkin untuk memungkinkan penggunaan kembali desain perangkat lunak dan komponen untuk merancang keluarga perangkat lunak, juga dikenal sebagai lini produk perangkat lunak. Hal ini dapat dilakukan dengan mengidentifikasi kesamaan di antara anggota keluarga tersebut dan dengan menggunakan komponen dapat digunakan kembali dan disesuaikan untuk memperhitungkan variabilitas antara anggota keluarga. Dalam pemrograman OO, sebuah gagasan terkait utama adalah bahwa kerangka: subsistem perangkat lunak lengkap yang sebagian dapat diperpanjang dengan tepat instantiating plug-in tertentu (juga dikenal sebagai hot spot). 4. Software Desain Kualitas Analisa dan Evaluasi Bagian ini meliputi sejumlah topik kualitas dan evaluasi yang secara khusus berkaitan dengan desain perangkat lunak. Kebanyakan dibahas secara umum dalam KA Kualitas Perangkat Lunak. 4.1. Kualitas Atribut Berbagai atribut pada umumnya dianggap penting untuk mendapatkan desain software yang baik kualitas berbagai "ilities" (rawatan, portabilitas, testability, traceability), berbagai "nesses" (kebenaran, ketahanan), termasuk satu perbedaan menarik "kelayakan tujuan." adalah salah satu antara atribut kualitas discernable pada saat run-time (kinerja, keamanan, ketersediaan, fungsi, kegunaan), tidak discernable pada saat run-time (modifiability, portabilitas, usabilitas, integrability, dan testability) mereka, dan yang berkaitan dengan kualitas intrinsik arsitektur yang (integritas konseptual, ketepatan, dan kelengkapan, buildability). 4.2. Kualitas Analisis dan Teknik Evaluasi Berbagai alat dan teknik yang dapat membantu memastikan kualitas desain perangkat lunak. tinjauan desain Software: informal atau semiformal, sering grup berbasis, teknik untuk memverifikasi dan memastikan kualitas artefak desain (misalnya, arsitektur review, tinjauan desain, dan inspeksi, skenario berbasis teknik, persyaratan pelacakan Static analisis: formal atau semiformal statis (nonexecutable) analisis yang dapat digunakan untuk mengevaluasi desain (misalnya, kesalahan-pohon analisis atau otomatis lintas-checking) Simulasi dan prototyping: dinamis teknik untuk mengevaluasi sebuah desain (misalnya, kinerja simulasi atau prototipe kelayakan) 4.3. Tindakan Tindakan dapat digunakan untuk menilai secara kuantitatif atau untuk memperkirakan berbagai aspek, struktur desain perangkat lunak kualitas atau ukuran. Langkah yang paling yang telah diusulkan umumnya bergantung pada pendekatan yang digunakan untuk memproduksi desain. Langkah-langkah ini diklasifikasikan dalam dua kategori besar: langkah-langkah desain Fungsi berorientasi (terstruktur): struktur desain, diperoleh sebagian besar melalui dekomposisi fungsional; umumnya direpresentasikan sebagai sebuah bagan struktur (terkadang disebut diagram hirarkis) pada berbagai langkah yang dapat dihitung berorientasi objek langkah-langkah desain: struktur keseluruhan desain sering direpresentasikan sebagai diagram kelas, di mana berbagai langkah dapat dihitung. Tindakan pada sifat-sifat konten internal setiap kelas juga dapat dihitung 5. Software Desain Notasi Berbagai notasi dan bahasa yang ada untuk mewakili artefak perangkat lunak desain. Beberapa digunakan terutama untuk menggambarkan struktur organisasi sebuah desain, yang lain untuk mewakili perilaku perangkat lunak.Notasi tertentu digunakan terutama dalam desain arsitektur dan lain-lain terutama selama desain rinci, meskipun beberapa notasi dapat digunakan di kedua langkah. Selain itu, beberapa notasi yang digunakan terutama dalam konteks metode tertentu (lihat Strategi Desain Software dan Metode subarea).Di sini, mereka dikelompokkan ke dalam notasi untuk menggambarkan tampilan (statis) vs struktural tampilan (dinamis) perilaku. 5.1. Deskripsi struktural (melihat statis) Notasi berikut, sebagian besar (tetapi tidak selalu) grafis, menjelaskan dan mewakili aspek struktural dari software desain-yaitu, mereka menjelaskan komponen utama dan bagaimana mereka saling berhubungan (pandangan statis): bahasa deskripsi Arsitektur (ADL): bahasa tekstual, sering resmi, yang digunakan untuk menggambarkan arsitektur perangkat lunak dalam hal komponen dan konektor. Kelas dan diagram objek: digunakan untuk mewakili ofclasses set (dan objek) dan antar hubungan mereka. diagram Komponen : digunakan untuk mewakili satu set komponen ( bagian hysical dan diganti [s] dari suatu sistem yang [sesuai] untuk dan [memberikan] realisasi satu set antarmuka dan antar hubungan mereka. Kelas kartu kolaborator tanggung jawab (CRC): digunakan untuk menunjukkan nama komponen (kelas), tanggung jawab mereka, dan komponen mereka berkolaborasi nama. diagram Deployment : digunakan untuk mewakili satu set (fisik) node dan antar. hubungan mereka, dan, dengan demikian, untuk model aspek fisik suatu sistem. Entity-relationship diagram (ERD): digunakan untuk mewakili model konseptual dari data yang disimpan dalam sistem informasi. bahasa deskripsi Interface (IDLs): programming like language digunakan untuk mendefinisikan interface (nama dan jenis operasi diekspor) komponen perangkat lunak. diagram struktur Jackson: digunakan untuk menggambarkan struktur data dalam hal urutan, seleksi, dan iterasi. grafik Struktur : digunakan untuk menggambarkan struktur memanggil program (yang panggilan modul, dan disebut oleh yang lain modul). 5.2. Perilaku Deskripsi (pandangan dinamis) Notasi berikut dan bahasa, beberapa grafis dan beberapa tekstual, digunakan untuk menggambarkan perilaku dinamis perangkat lunak dan komponen. Banyak dari notasi berguna kebanyakan, tetapi tidak eksklusif, selama desain rinci. Activity Diagram : digunakan untuk menunjukkan aliran kontrol dari kegiatan ( Ongoing non-atom eksekusi dalam mesin negara untuk kegiatan Collaboration Diagram: digunakan untuk menunjukkan interaksi yang terjadi antara sekelompok objek, di mana penekanannya adalah pada objek, link, dan pesan yang mereka tukar pada link ini. Data flow diagram (DFD): digunakan untuk menunjukkan aliran data antara serangkaian proses Tabel keputusan dan diagram : digunakan untuk mewakili kombinasi kompleks dari kondisi dan tindakan. Flowchart diagram alur dan terstruktur: digunakan untuk mewakili aliran kontrol dan tindakan yang terkait yang akan dilakukan. Sequence Diagram: digunakan untuk menampilkan interaksi antara sekelompok benda, dengan penekanan pada timeordering pesan. Negara transisi dan diagram statechart: digunakan untuk menunjukkan aliran kontrol dari negara bagian di mesin negara. bahasa spesifikasi formal: bahasa tekstual yang menggunakan konsep-konsep dasar dari matematika (misalnya, logika, set, urutan) harus betul-betul dan secara abstrak mendefinisikan interface komponen perangkat lunak dan perilaku, seringkali dalam hal pra-dan pasca-kondisi. Pseudocode dan bahasa program desain (PDLs): terstruktur pemrograman seperti bahasa yang digunakan untuk menggambarkan, umumnya pada tahap desain rinci, perilaku dari prosedur atau metode. 6. Software Desain Strategi dan Metode Ada ada berbagai strategi umum untuk membantu memandu proses desain. Berbeda dengan strategi umum, metode yang lebih spesifik dalam bahwa mereka umumnya menyarankan dan menyediakan satu set notasi untuk digunakan dengan metode ini, deskripsi proses yang akan digunakan ketika mengikuti metode dan seperangkat pedoman dalam menggunakan metode ini. Metode tersebut berguna sebagai sarana untuk mentransfer pengetahuan dan sebagai kerangka umum untuk tim insinyur perangkat lunak. Lihat juga Software Engineering Peralatan dan Metode KA. 6.1. Strategi Umum Beberapa contoh yang sering dikutip dari strategi umum berguna dalam proses desain adalah membagi-dan-menaklukkan dan langkah-langkah penyempurnaan, top-down vs bottom-up strategi, abstraksi data dan menyembunyikan informasi, penggunaan heuristik, penggunaan pola bahasa dan pola, penggunaan iteratif dan pendekatan inkremental. 6.2. Fungsi-Oriented (Terstruktur) Desain Ini adalah salah satu metode klasik software desain, di mana dekomposisi berpusat pada mengidentifikasi fungsi software yang besar dan kemudian menguraikan dan menyempurnakan mereka dengan cara top-down. Desain terstruktur umumnya digunakan setelah analisis terstruktur, sehingga menghasilkan, antara lain, diagram aliran data dan proses yang terkait deskripsi. Para peneliti telah mengusulkan berbagai strategi (misalnya, transformasi analisis, analisis transaksi) dan heuristics (misalnya, fan-in/fan-out, lingkup efek vs lingkup kontrol) untuk mengubah DFD ke dalam perangkat lunak arsitektur umumnya diwakili sebagai grafik struktur. 6.3. Desain Berorientasi Objek Sejumlah metode desain perangkat lunak berbasis pada objek telah diusulkan. Bidang ini telah berkembang dari desain objectbased awal pertengahan 1980-an (kata benda= benda; kata kerja = metode; kata sifat atribut =) melalui desain OO, di manapewarisan dan polimorfisme memainkan peran kunci, untuk bidang komponen berbasis desain, di mana meta-informasi dapat didefinisikan dan diakses (melalui refleksi,misalnya). Meskipun akar OO desain berasal dari konsep abstraksi data, tanggung jawab-driven desain juga telah diusulkan sebagai pendekatan alternatif untuk desainOO. 6.4. Data-Struktur-Centered Desain Data-struktur berpusat desain (misalnya, Jackson, Warnier-Orr) mulai dari struktur dataprogram memanipulasi bukan dari fungsi melakukan. itu software engineer pertama menggambarkan input dan output data struktur(menggunakan diagram struktur Jackson, misalnya) dan kemudian mengembangkanstruktur pengendalian program berdasarkan diagram ini struktur data. Berbagaiheuristik telah diusulkan untuk menangani kasus-khusus untuk contoh, ketika terdapat ketidaksesuaian antara input dan struktur output. 6.5. Komponen-Based Design (CBD) Sebuah komponen perangkat lunak adalah unit independen, memiliki interfacewelldefined dan dependensi yang dapat terdiri dan disebarkan secara independen.Komponen berbasis desain membahas masalah-masalah terkait dengan penyediaan, pengembangan, dan mengintegrasikan komponen tersebut untuk meningkatkan penggunaan kembali. 6.6. Metode lain Lain pendekatan arus utama menarik tetapi kurang juga ada: metode formal dan ketatdan metode transformasi.