Desain perangkat lunak adalah proses pemecahan masalah dan perencanaan untuk perangkat lunak solusi. After the purpose and specifications of software are determined, software developers will design or employ designers to develop a plan for a solution. Setelah tujuan dan spesifikasi perangkat lunak ditentukan, pengembang perangkat lunak akan desain atau mempekerjakan desainer untuk mengembangkan rencana untuk solusi. It includes low-level component and algorithm implementation issues as well as the architectural view. Ini termasuk tingkat rendah komponen dan algoritma isu-isu implementasi serta arsitektur tampilan.

Ikhtisar

The software requirements analysis (SRA) step of a software development process yields specifications that are used in software engineering . Para analisis persyaratan perangkat lunak (SRA) langkah dari proses pengembangan perangkat lunak hasil spesifikasi yang digunakan dalam rekayasa perangkat lunak . If the software is “semiautomated” or user centered , software design may involve user experience design yielding a story board to help determine those specifications. Jika perangkat lunak adalah “semi otomatis” atau berpusat pengguna , desain perangkat lunak mungkin melibatkan pengguna pengalaman desain menghasilkan papan cerita untuk membantu menentukan spesifikasi tersebut. If the software is completely automated (meaning no user or user interface ), a software design may be as simple as a flow chart or text describing a planned sequence of events. Jika perangkat lunak benar-benar otomatis (artinya tidak ada pengguna atau user interface ), desain perangkat lunak mungkin yang sederhana seperti diagram alur atau teks yang menjelaskan urutan kejadian yang direncanakan. There are also semi-standard methods like Unified Modeling Language and Fundamental modeling concepts . Ada juga semi-standar metode seperti Unified Modeling Language dan konsep pemodelan Fundamental . In either case some documentation of the plan is usually the product of the design. Dalam kedua kasus beberapa dokumentasi rencana biasanya produk dari desain.

A software design may be platform-independent or platform-specific , depending on the availability of the technology called for by the design. Sebuah desain perangkat lunak mungkin platform-independen atau platform-spesifik , tergantung pada ketersediaan teknologi yang disebut oleh desain.

Software design can be considered as putting solution to the problem(s) in hand using the available capabilities. Desain perangkat lunak dapat dianggap sebagai solusi untuk menempatkan masalah (s) di tangan menggunakan kemampuan yang tersedia. Hence the main difference between Software analysis and design is that the output of the analysis of a software problem will be smaller problems to solve and it should not deviate so much even if it is conducted by different team members or even by entirely different groups. Oleh karena perbedaan utama antara analisis Software dan desain adalah bahwa output dari analisis masalah perangkat lunak akan masalah yang lebih kecil untuk memecahkan dan seharusnya tidak menyimpang begitu banyak bahkan jika itu dilakukan oleh anggota tim yang berbeda atau bahkan oleh kelompok yang sama sekali berbeda. But since design depends on the capabilities, we can have different designs for the same problem depending on the capabilities of the environment that will host the solution (whether it is some OS, web , mobile or even the new cloud computing paradigm). Tapi karena desain tergantung pada kemampuan, kita dapat memiliki desain yang berbeda untuk masalah yang sama tergantung pada kemampuan lingkungan yang akan menjadi tuan rumah solusi (apakah itu beberapa OS, web, mobile atau bahkan paradigma komputasi awan baru). The solution will depend also on the used development environment (Whether you build a solution from scratch or using reliable frameworks or at least implement some suitable design patterns ) Solusi ini akan tergantung juga pada lingkungan pengembangan yang digunakan (Apakah Anda membangun solusi dari awal atau menggunakan diandalkan kerangka kerja atau setidaknya menerapkan beberapa yang cocok pola desain )

[ edit ] Software design topics [ sunting ] topik Software desain

[ edit ] Design concepts [ sunting ] konsep Desain

The design concepts provide the software designer with a foundation from which more sophisticated methods can be applied. Konsep desain menyediakan desainer perangkat lunak dengan dasar dari metode yang lebih canggih yang dapat diterapkan. A set of fundamental design concepts has evolved. Satu set konsep desain dasar telah berkembang. They are: Mereka adalah:

  1. Abstraction – Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose. Abstraksi – Abstraksi adalah proses atau hasil generalisasi dengan mengurangi isi informasi dari suatu konsep atau fenomena diamati, biasanya dalam rangka untuk mempertahankan informasi saja yang relevan untuk tujuan tertentu.
  2. Refinement – It is the process of elaboration. Perbaikan – Ini adalah proses dari elaborasi. A hierarchy is developed by decomposing a macroscopic statement of function in a stepwise fashion until programming language statements are reached. Sebuah hirarki dikembangkan dengan menguraikan pernyataan makroskopik fungsi secara bertahap sampai bahasa pemrograman pernyataan tercapai. In each step, one or several instructions of a given program are decomposed into more detailed instructions. Dalam setiap langkah, satu atau beberapa instruksi program yang diberikan didekomposisi menjadi petunjuk lebih rinci. Abstraction and Refinement are complementary concepts. Abstraksi dan Penyempitan adalah konsep saling melengkapi.
  3. Modularity – Software architecture is divided into components called modules. Modularitas – Arsitektur Perangkat Lunak dibagi menjadi komponen-komponen yang disebut modul.
  4. Software Architecture – It refers to the overall structure of the software and the ways in which that structure provides conceptual integrity for a system. Arsitektur Perangkat Lunak – Ini mengacu pada struktur keseluruhan perangkat lunak dan cara-cara di mana struktur yang menyediakan integritas konseptual untuk sistem. A good software architecture will yield a good return on investment with respect to the desired outcome of the project, eg in terms of performance, quality, schedule and cost. Sebuah arsitektur perangkat lunak yang baik akan menghasilkan pengembalian investasi sehubungan dengan hasil yang diinginkan dari proyek, misalnya dalam hal kinerja, kualitas jadwal, dan biaya.
  5. Control Hierarchy – A program structure that represents the organization of a program component and implies a hierarchy of control. Hirarki kontrol – Sebuah struktur program yang merupakan organisasi dari komponen program dan menyiratkan hierarki kontrol.
  6. Structural Partitioning – The program structure can be divided both horizontally and vertically. Partisi Struktural – Struktur program dapat dibagi secara horisontal dan vertikal. Horizontal partitions define separate branches of modular hierarchy for each major program function. Partisi horisontal mendefinisikan cabang terpisah dari hirarki modular untuk tiap fungsi program utama. Vertical partitioning suggests that control and work should be distributed top down in the program structure. Partisi vertikal menunjukkan bahwa kontrol dan work harus terdistribusi top-down dalam struktur program.
  7. Data Structure – It is a representation of the logical relationship among individual elements of data. Struktur Data – Ini adalah representasi dari hubungan logis antara unsur-unsur individual dari data.
  8. Software Procedure – It focuses on the processing of each modules individually Prosedur Perangkat Lunak – ini berfokus pada pengolahan masing-masing modul individual
  9. Information Hiding – Modules should be specified and designed so that information contained within a module is inaccessible to other modules that have no need for such information. Menyembunyikan Informasi – Modul harus ditentukan dan dirancang sedemikian rupa sehingga informasi yang terkandung dalam sebuah modul tidak dapat diakses oleh modul lain yang tidak membutuhkan informasi tersebut.

[ edit ] Design considerations [ sunting ] Desain pertimbangan

There are many aspects to consider in the design of a piece of software. Ada banyak aspek yang perlu dipertimbangkan dalam desain sebuah software. The importance of each should reflect the goals the software is trying to achieve. Pentingnya masing-masing harus mencerminkan tujuan-tujuan perangkat lunak sedang mencoba untuk mencapai. Some of these aspects are: Beberapa aspek ini:

  • Compatibility – The software is able to operate with other products that are designed for interoperability with another product. Kompatibilitas – Perangkat lunak ini mampu beroperasi dengan produk lain yang dirancang untuk interoperabilitas dengan produk lain. For example, a piece of software may be backward-compatible with an older version of itself. Sebagai contoh, sepotong perangkat lunak mungkin mundur-kompatibel dengan versi yang lebih tua dari dirinya sendiri.
  • Extensibility – New capabilities can be added to the software without major changes to the underlying architecture. Diperpanjang – kemampuan baru bisa ditambahkan ke perangkat lunak tanpa perubahan besar pada arsitektur yang mendasari.
  • Fault-tolerance – The software is resistant to and able to recover from component failure. Toleransi kesalahan – Perangkat lunak ini tahan dan mampu pulih dari kegagalan komponen.
  • Maintainability – The software can be restored to a specified condition within a specified period of time. Maintainability – Perangkat lunak ini dapat dikembalikan ke kondisi yang ditentukan dalam jangka waktu tertentu. For example, antivirus software may include the ability to periodically receive virus definition updates in order to maintain the software’s effectiveness. Sebagai contoh, perangkat lunak antivirus dapat mencakup kemampuan untuk secara berkala menerima update definisi virus untuk mempertahankan efektivitas perangkat lunak.
  • Modularity – the resulting software comprises well defined, independent components. Modularitas – perangkat lunak yang dihasilkan terdiri didefinisikan dengan baik, komponen independen. That leads to better maintainability. Yang mengarah ke rawatan yang lebih baik. The components could be then implemented and tested in isolation before being integrated to form a desired software system. Komponen bisa kemudian diterapkan dan diuji dalam isolasi sebelum terintegrasi untuk membentuk suatu sistem perangkat lunak yang diinginkan. This allows division of work in a software development project. Hal ini memungkinkan pembagian kerja dalam sebuah proyek pengembangan perangkat lunak.
  • Packaging – Printed material such as the box and manuals should match the style designated for the target market and should enhance usability. Kemasan – bahan cetak seperti kotak dan manual harus sesuai dengan gaya yang ditujukan untuk target pasar dan harus meningkatkan kegunaan. All compatibility information should be visible on the outside of the package. Semua informasi kompatibilitas harus terlihat di bagian luar paket. All components required for use should be included in the package or specified as a requirement on the outside of the package. Semua komponen yang diperlukan untuk digunakan harus disertakan dalam paket atau ditentukan sebagai persyaratan pada bagian luar paket.
  • Reliability – The software is able to perform a required function under stated conditions for a specified period of time. Keandalan – Perangkat lunak ini mampu melakukan fungsi yang diperlukan dalam kondisi dinyatakan untuk jangka waktu tertentu.
  • Reusability – the software is able to add further features and modification with slight or no modification. Reusabilitas – perangkat lunak dapat menambahkan fitur lebih lanjut dan modifikasi dengan sedikit modifikasi atau tidak.
  • Robustness – The software is able to operate under stress or tolerate unpredictable or invalid input. Robustness – Perangkat lunak ini mampu beroperasi di bawah stres atau mentoleransi masukan tak terduga atau tidak valid. For example, it can be designed with a resilience to low memory conditions. Sebagai contoh, dapat dirancang dengan ketahanan terhadap kondisi memori rendah.
  • Security – The software is able to withstand hostile acts and influences. Keamanan – Perangkat lunak ini mampu menahan tindakan bermusuhan dan pengaruh.
  • Usability – The software user interface must be usable for its target user/audience. Usability – Perangkat lunak antarmuka pengguna harus dapat digunakan untuk pengguna target / penonton. Default values for the parameters must be chosen so that they are a good choice for the majority of the users. Nilai default untuk parameter harus dipilih sehingga mereka adalah pilihan yang baik bagi mayoritas pengguna.

[ edit ] Modeling language [ sunting ] Bahasa Pemodelan

A modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. Sebuah bahasa pemodelan adalah setiap bahasa buatan yang dapat digunakan untuk mengungkapkan informasi atau pengetahuan atau sistem dalam suatu struktur yang didefinisikan oleh satu set aturan yang konsisten. The rules are used for interpretation of the meaning of components in the structure. Aturan yang digunakan untuk interpretasi makna komponen dalam struktur. A modeling language can be graphical or textual. Sebuah bahasa pemodelan dapat grafis atau tekstual. Examples of graphical modeling languages for software design are: Contoh bahasa pemodelan grafis untuk desain perangkat lunak adalah:

[ edit ] Design patterns [ sunting ] Desain pola

A software designer or architect may identify a design problem which has been solved by others before. Seorang desainer atau arsitek perangkat lunak dapat mengidentifikasi masalah desain yang telah dipecahkan oleh orang lain sebelumnya. A template or pattern describing a solution to a common problem is known as a design pattern . Sebuah template atau pola menggambarkan solusi untuk masalah yang umum dikenal sebagai pola desain . The reuse of such patterns can speed up the software development process, having been tested and proven in the past. Penggunaan kembali pola tersebut dapat mempercepat proses pengembangan perangkat lunak, yang telah diuji dan terbukti di masa lalu.

[ edit ] Usage [ sunting ] Penggunaan

Software design documentation may be reviewed or presented to allow constraints, specifications and even requirements to be adjusted prior to programming . Dokumentasi perangkat lunak desain dapat ditinjau atau disajikan untuk memungkinkan kendala, spesifikasi dan bahkan persyaratan yang harus disesuaikan sebelum pemrograman . Redesign may occur after review of a programmed simulation or prototype . Redesign mungkin terjadi setelah meninjau sebuah diprogram simulasi atau prototipe . It is possible to design software in the process of programming, without a plan or requirement analysis, but for more complex projects this would not be considered a professional approach. Hal ini dimungkinkan untuk merancang perangkat lunak dalam proses pemrograman, tanpa rencana atau analisis kebutuhan, tetapi untuk proyek yang lebih kompleks ini tidak akan dianggap sebagai pendekatan profesional. A separate design prior to programming allows for multidisciplinary designers and Subject Matter Experts (SMEs) to collaborate with highly-skilled programmers for software that is both useful and technically sound. Sebuah desain terpisah sebelum pemrograman memungkinkan untuk multidisiplin desainer dan ahli Subject Matter (UKM) untuk berkolaborasi dengan sangat terampil programmer untuk perangkat lunak yang baik berguna dan teknis suara.