Bisakah seseorang menjelaskan perbedaan antara Desain Perangkat Lunak dan Arsitektur Perangkat Lunak?
Lebih spesifik; jika Anda memberi tahu seseorang untuk memberi Anda 'desain' - apa yang Anda harapkan dari mereka? Sama halnya dengan 'arsitektur'.
Pemahaman saya saat ini adalah:
- Desain: Diagram UML / diagram alir / gambar rangka sederhana (untuk UI) untuk modul / bagian tertentu dari sistem
- Arsitektur: diagram komponen (menunjukkan bagaimana berbagai modul sistem berkomunikasi satu sama lain dan sistem lainnya), bahasa apa yang digunakan, pola ...?
Koreksi saya jika saya salah. Saya telah merujuk Wikipedia memiliki artikel tentang http://en.wikipedia.org/wiki/Software_design dan http://en.wikipedia.org/wiki/Software_architecture , tetapi saya tidak yakin apakah saya sudah memahaminya dengan benar.
architecture
definition
Mads Mobæk
sumber
sumber
Jawaban:
Anda benar ya. Arsitektur suatu sistem adalah kerangkanya. Ini adalah level tertinggi dari suatu sistem. Jenis penyimpanan data apa yang ada, bagaimana modul berinteraksi satu sama lain, sistem pemulihan apa yang ada. Sama seperti pola desain, ada pola arsitektur: MVC, desain berlapis 3-tier, dll.
Perancangan perangkat lunak adalah tentang perancangan masing-masing modul / komponen. Apa tanggung jawab, fungsi, modul x? Kelas Y? Apa yang bisa dilakukannya, dan apa yang tidak? Pola desain apa yang bisa digunakan?
Jadi singkatnya, arsitektur Perangkat Lunak lebih tentang desain seluruh sistem, sedangkan desain perangkat lunak menekankan pada tingkat modul / komponen / kelas.
sumber
Dalam beberapa deskripsi dari SDLC (Pengembangan Perangkat Lunak Siklus Hidup) mereka dapat dipertukarkan, tetapi konsumsinya adalah bahwa mereka berbeda. Mereka pada saat yang sama: berbeda (1) tahap , (2) bidang tanggung jawab , dan (3) tingkat pengambilan keputusan .
Kedua tahap ini tampaknya akan menyatu bersama untuk alasan yang berbeda.
Sekalipun tahapan atau bidang tanggung jawab menyatu dan terjadi di mana-mana, selalu baik untuk mengetahui tingkat pengambilan keputusan apa yang terjadi. (Kita bisa melanjutkan selamanya dengan ini. Saya mencoba membuat ringkasannya.) Saya akan mengakhiri dengan: Bahkan jika tampaknya proyek Anda tidak memiliki arsitektur formal atau tahap desain / AOR / documentaiton, itu terjadi apakah ada orang yang secara sadar melakukannya atau tidak. Jika tidak ada yang memutuskan untuk melakukan arsitektur, maka default terjadi yang mungkin buruk. Ditto untuk desain. Konsep-konsep ini hampir lebih penting jika tidak ada tahapan formal yang mewakili mereka.
sumber
Arsitektur itu strategis, sementara Desain bersifat taktis.
Arsitektur terdiri dari kerangka kerja, alat, paradigma pemrograman, standar rekayasa perangkat lunak berbasis komponen, prinsip tingkat tinggi ..
Sedangkan desain adalah kegiatan yang berkaitan dengan kendala lokal, seperti pola desain, idiom pemrograman, dan refactoring.
sumber
Saya menemukan ini ketika saya sedang mencari perbedaan sederhana antara arsitektur dan desain sendiri;
Apa pendapat Anda tentang cara memandang mereka:
sumber
Arsitektur berarti struktur konseptual dan organisasi logis dari komputer atau sistem berbasis komputer.
Desain berarti rencana atau gambar yang dibuat untuk menunjukkan tampilan dan fungsi atau cara kerja suatu sistem atau objek sebelum dibuat.
Jika Anda "merancang" komponen, Anda menentukan bagaimana komponen itu berperilaku dalam sistem yang lebih besar.
Jika Anda "mendesain" komponen yang sama, Anda mendefinisikan bagaimana perilakunya secara internal.
What
bagian adalah Desain,How
implementasi konkret dan persimpanganWhat
danHow
Arsitektur.Gambar untuk membedakan Arsitektur dan Desain :
Ada juga keputusan desain, yang tidak signifikan secara arsitektur, yaitu bukan milik cabang arsitektur desain. Misalnya, keputusan desain internal beberapa komponen, seperti- pilihan algoritma, pemilihan struktur data dll.
Setiap keputusan desain, yang tidak terlihat di luar batas komponennya adalah desain internal komponen dan non-arsitektur. Ini adalah keputusan desain arsitek sistem akan meninggalkan pada kebijaksanaan perancang modul atau tim implementasi selama desain mereka tidak melanggar kendala arsitektur yang dikenakan oleh arsitektur tingkat sistem.
Tautan yang memberikan analogi yang baik
sumber
Saya akan mengatakan Anda benar, dengan kata-kata saya sendiri;
Arsitektur adalah alokasi persyaratan sistem untuk elemen sistem. Empat pernyataan tentang arsitektur:
Arsitektur adalah langkah rekayasa penting ketika kompleksitas sistem dibagi.
Contoh: Pikirkan tentang rumah Anda, Anda tidak memerlukan arsitek untuk dapur Anda (hanya satu elemen yang terlibat) tetapi bangunan lengkap membutuhkan beberapa definisi interaksi, seperti pintu, dan atap .
Desain adalah representasi informatif dari implementasi (yang diusulkan) fungsi. Hal ini dimaksudkan untuk memperoleh umpan balik dan untuk berdiskusi dengan para pemangku kepentingan. Ini mungkin praktik yang baik tetapi bukan langkah rekayasa penting .
Akan menyenangkan untuk melihat desain dapur sebelum dapur dipasang tetapi tidak penting untuk kebutuhan memasak :
Jika saya memikirkannya, Anda dapat menyatakan:
sumber
Pengingat saya:
sumber
Saya pikir kita harus menggunakan aturan berikut untuk menentukan kapan kita berbicara tentang Desain vs Arsitektur: Jika elemen-elemen gambar perangkat lunak yang Anda buat dapat dipetakan satu ke satu ke konstruksi sintaksis bahasa pemrograman, maka Desain, jika tidak Arsitektur.
Jadi, misalnya, jika Anda melihat diagram kelas atau diagram urutan, Anda dapat memetakan kelas dan hubungannya dengan bahasa Pemrograman Berorientasi Objek menggunakan konstruksi sintaksis Kelas. Ini jelas Desain. Selain itu, ini mungkin membawa ke tabel bahwa diskusi ini memiliki hubungan dengan bahasa pemrograman yang akan Anda gunakan untuk menerapkan sistem perangkat lunak. Jika Anda menggunakan Java, contoh sebelumnya berlaku, karena Java adalah Bahasa Pemrograman Berorientasi Objek. Jika Anda datang dengan diagram yang menunjukkan paket dan dependensinya, itu juga Desain. Anda dapat memetakan elemen (paket dalam kasus ini) ke konstruksi sintaksis Java.
Sekarang, misalkan aplikasi Java Anda terbagi dalam beberapa modul, dan setiap modul adalah sekumpulan paket (direpresentasikan sebagai unit penyebaran file jar), dan Anda akan diberikan diagram yang berisi modul dan dependensinya, yaitu Arsitektur. Tidak ada cara di Jawa (setidaknya tidak sampai Java 7) untuk memetakan modul (satu set paket) ke konstruksi sintaksis. Anda mungkin juga memperhatikan bahwa diagram ini mewakili langkah yang lebih tinggi dalam tingkat abstraksi model perangkat lunak Anda. Diagram apa pun di atas (berbutir kasar daripada) diagram paket, mewakili tampilan Arsitektur saat berkembang dalam bahasa pemrograman Java. Di sisi lain, jika Anda mengembangkan di Modula-2, maka, diagram modul mewakili Desain.
(Sebuah fragmen dari http://www.copypasteisforword.com/notes/software-architecture-vs-software-design )
sumber
Secara pribadi, saya suka yang ini:
"Perancang khawatir dengan apa yang terjadi ketika pengguna menekan tombol, dan arsitek khawatir dengan apa yang terjadi ketika sepuluh ribu pengguna menekan tombol."
Panduan Studi SCEA untuk Java ™ EE oleh Mark Cade dan Humphrey Sheil
sumber
Saya setuju dengan banyak penjelasan; pada dasarnya kami mengakui perbedaan antara desain arsitektur dan desain rinci dari sistem perangkat lunak.
Sementara tujuan perancang adalah setepat dan konkret dalam spesifikasi yang diperlukan untuk pengembangan; arsitek pada dasarnya bertujuan menentukan struktur dan perilaku global dari sistem sebanyak yang diperlukan untuk desain rinci untuk memulai.
Arsitek yang baik akan mencegah hiper-spesifikasi - arsitektur tidak boleh terlalu ditentukan tetapi cukup, keputusan (arsitektur) yang ditetapkan hanya untuk aspek-aspek yang menimbulkan risiko paling mahal untuk ditangani, dan secara efektif menyediakan kerangka kerja ("kesamaan") di mana desain rinci dapat dikerjakan yaitu variabilitas untuk fungsionalitas lokal.
Memang, proses arsitektur atau siklus hidup hanya mengikuti tema ini - tingkat abstraksi yang memadai untuk menguraikan struktur untuk persyaratan bisnis yang signifikan (secara arsitektur), dan meninggalkan detail lebih lanjut ke tahap desain untuk hasil yang lebih konkret.
sumber
Arsitektur adalah desain, tetapi tidak semua desain adalah arsitektur. Oleh karena itu, secara tegas, akan lebih masuk akal untuk mencoba membedakan antara desain arsitektur dan desain non-arsitektur . Dan apa bedanya? Tergantung! Setiap arsitek perangkat lunak mungkin memiliki jawaban yang berbeda (ymmv!). Kami mengembangkan heuristik kami untuk menghasilkan jawaban, seperti 'diagram kelas adalah arsitektur dan diagram urutan adalah desain'. Lihat buku DSA untuk lebih lanjut.
Sudah umum dikatakan bahwa arsitektur berada pada tingkat abstraksi yang lebih tinggi daripada desain, atau arsitektur itu logis dan desain itu fisik. Tetapi gagasan ini, meskipun diterima secara umum, pada praktiknya tidak berguna. Di mana Anda menarik garis antara abstraksi tinggi atau rendah, antara logis dan fisik? Tergantung!
Jadi, saran saya adalah:
Setelah mengatakan semua itu ... pertanyaan yang lebih relevan yang perlu kita tanyakan adalah: berapa banyak desain yang cukup? Yaitu, kapan saya harus berhenti mendeskripsikan desain (dalam diagram atau prosa) dan harus beralih ke pengkodean?
sumber
Ya itu kedengarannya benar bagi saya. Desain adalah apa yang akan Anda lakukan, dan arsitektur adalah cara di mana potongan-potongan desain akan disatukan. Itu bisa bahasa agnostik, tetapi biasanya akan menentukan teknologi yang akan digunakan yaitu LAMP v Windows, Web Service v RPC.
sumber
Arsitektur perangkat lunak suatu program atau sistem komputasi adalah struktur atau struktur sistem, yang terdiri dari komponen perangkat lunak, sifat-sifat yang terlihat secara eksternal dari komponen-komponen itu, dan hubungan di antara mereka.
(dari Wikipedia, http://en.wikipedia.org/wiki/Software_architecture )
Desain perangkat lunak adalah proses penyelesaian masalah dan perencanaan untuk solusi perangkat lunak. Setelah tujuan dan spesifikasi perangkat lunak ditentukan, pengembang perangkat lunak akan merancang atau mempekerjakan desainer untuk mengembangkan rencana solusi. Ini termasuk komponen tingkat rendah dan masalah implementasi algoritma serta pandangan arsitektur.
(dari Wikipedia, http://en.wikipedia.org/wiki/Software_design )
Tidak bisa mengatakannya lebih baik sendiri :)
sumber
Saya melihat arsitektur seperti yang dilakukan Patrick Karcher - gambaran besarnya. Misalnya, Anda dapat menyediakan arsitektur untuk bangunan, melihat dukungan strukturalnya, jendela, entri dan keluar, drainase air, dll. Tetapi Anda belum "mendesain" tata letak lantai, posisi bilik, dll.
Jadi saat Anda merancang gedung itu, Anda belum mendesain tata letak masing-masing kantor. Saya pikir hal yang sama berlaku untuk perangkat lunak.
Anda dapat melihat mendesain tata letak, sebagai "merancang tata letak" meskipun ...
sumber
Pertanyaan yang bagus ... Meskipun garis di antara mereka bukanlah garis yang tajam, ya, jika Anda menggunakan kedua istilah tersebut, maka Arsitektur mencakup keputusan yang lebih teknis atau struktural tentang cara membangun atau membangun sesuatu, terutama keputusan yang akan sulit ( atau lebih sulit) untuk mengubah sekali dilaksanakan, sedangkan Desain mencakup keputusan-keputusan yang mudah diubah kemudian (seperti nama metode, kelas <-> file struktur organisasi, pola desain, apakah akan menggunakan singleton atau kelas statis untuk menyelesaikan beberapa masalah tertentu , dll.) dan / atau yang mempengaruhi penampilan atau aspek estetika suatu sistem atau aplikasi (Antarmuka Manusia, kemudahan penggunaan, tampilan dan nuansa, dll.)
sumber
Arsitektur perangkat lunak “peduli dengan masalah ... di luar algoritma dan struktur data perhitungan.
Arsitektur secara khusus bukan tentang ... detail implementasi (misalnya, algoritma dan struktur data.) Desain arsitektur melibatkan koleksi abstraksi yang lebih kaya daripada yang biasanya disediakan oleh OOD ”(desain berorientasi objek).
Rancangan berkaitan dengan modularisasi dan antarmuka rinci elemen desain, algoritme dan prosedurnya, dan tipe data yang diperlukan untuk mendukung arsitektur dan untuk memenuhi persyaratan.
"Arsitektur" sering digunakan sebagai sinonim belaka untuk "desain" (kadang-kadang didahului dengan kata sifat "tingkat tinggi"). Dan banyak orang menggunakan istilah "pola arsitektur" sebagai sinonim untuk "pola desain."
Lihat tautan ini.
Mendefinisikan Istilah Arsitektur, Desain, dan Implementasi
sumber
Arsitektur:
Desain struktural bekerja pada level abstraksi yang lebih tinggi yang mewujudkan persyaratan signifikan secara teknis ke dalam sistem. Arsitektur meletakkan dasar untuk desain lebih lanjut.
Desain:
Seni mengisi apa yang tidak dilakukan arsitektur melalui proses berulang pada setiap lapisan abstraksi.
sumber
Saya benar-benar menyukai tulisan ini sebagai aturan praktis dalam memisahkan arsitektur dari desain:
http://www.eden-study.org/articles/2006/abstraction-classes-sw-design_ieesw.pdf
Ini disebut hipotesis Intensi / Lokalitas. Pernyataan tentang sifat perangkat lunak yang non-lokal dan intensional adalah arsitektur. Pernyataan yang bersifat lokal dan intens adalah desain.
sumber
... dahulu kala di tempat yang jauh para filsuf khawatir tentang perbedaan antara yang satu dan yang banyak. Arsitektur adalah tentang hubungan, yang membutuhkan banyak. Arsitektur memiliki komponen. Desain adalah tentang konten, yang membutuhkannya. Desain memiliki sifat, kualitas, karakteristik. Kami biasanya berpikir bahwa desain berada dalam arsitektur. Pemikiran dualistik memberi yang banyak sebagai primordial. Tetapi arsitektur juga dalam desain. Itu semua bagaimana kita memilih untuk melihat apa yang ada di hadapan kita - yang satu atau yang banyak.
sumber
Cukup subyektif tetapi pendapat saya:
Arsitektur Desain keseluruhan sistem termasuk interaksi dengan sistem lain, kebutuhan perangkat keras, desain komponen keseluruhan, dan aliran data.
Desain Organisasi dan aliran komponen dalam sistem keseluruhan. Ini juga akan mencakup API komponen untuk interaksi dengan komponen lain.
sumber
Arsitektur perangkat lunak paling baik digunakan pada level sistem, ketika Anda perlu memproyeksikan bisnis dan fungsi-fungsi diidentifikasi oleh level arsitektur yang lebih tinggi ke dalam aplikasi.
Misalnya, bisnis Anda adalah tentang "Untung dan Rugi" untuk pedagang, dan fungsi utama Anda melibatkan "evaluasi portofolio" dan "perhitungan risiko".
Tetapi ketika menjadi Arsitek Perangkat Lunak akan merinci solusinya, ia akan menyadari bahwa:
"evaluasi portofolio" tidak bisa hanya satu aplikasi. Itu perlu disempurnakan dalam proyek-proyek yang dikelola seperti:
(karena operasi yang terlibat sangat besar sehingga mereka perlu dibagi antara beberapa komputer, sementara masih dipantau setiap saat melalui GUI umum)
desain perangkat lunak akan memeriksa berbagai aplikasi, hubungan teknis dan sub-komponen internal mereka.
Ini akan menghasilkan spesifikasi yang diperlukan untuk lapisan Arsitektur terakhir ("Arsitektur Teknis") untuk dikerjakan (dalam hal kerangka teknis atau komponen transversal), dan untuk tim proyek (lebih berorientasi pada implementasi fungsi bisnis ) untuk memulai proyek masing-masing.
sumber
jika seseorang membangun kapal, maka mesin, lambung kapal, sirkuit listrik dll. akan menjadi "elemen arsitektur" nya. Baginya, konstruksi mesin akan menjadi "pekerjaan desain".
Jika ia kemudian mendelegasikan pembangunan mesin ke tim lain, mereka akan menciptakan "arsitektur mesin" ...
Jadi - itu tergantung pada tingkat abstraksi atau detail. Arsitektur satu orang mungkin merupakan desain lain!
sumber
Arsitektur adalah "keputusan desain yang sulit diubah."
Setelah bekerja dengan TDD, yang secara praktis berarti desain Anda berubah sepanjang waktu, saya sering menemukan diri saya berjuang dengan pertanyaan ini. Definisi di atas diekstraksi dari Pola Arsitektur Aplikasi Perusahaan , Oleh Martin Fowler
Ini berarti bahwa arsitekturnya tergantung pada Bahasa, Kerangka dan Domain sistem Anda. Jika Anda bisa mengekstrak antarmuka dari Java Class Anda dalam 5 menit, itu bukan lagi keputusan arsitektur.
sumber
Versi Cliff Notes:
Desain: Menerapkan solusi berdasarkan spesifikasi produk yang diinginkan.
Arsitektur: Dasar / alat / infrastruktur / komponen yang mendukung desain Anda.
Ini adalah pertanyaan yang cukup luas yang akan mengundang banyak tanggapan.
sumber
Arsitektur adalah kumpulan pola desain yang dihasilkan untuk membangun suatu sistem.
Saya kira Desain adalah kreativitas yang digunakan untuk menyatukan semua ini?
sumber
Desain perangkat lunak memiliki sejarah yang lebih panjang sedangkan arsitektur perangkat lunak istilahnya baru berumur 20 tahun. Oleh karena itu, ia mengalami rasa sakit yang tumbuh sekarang.
Akademisi cenderung melihat Arsitektur sebagai bagian dari bidang desain perangkat lunak yang lebih besar. Meskipun ada pengakuan yang berkembang bahwa Arch adalah bidang di dalamnya.
Praktisi cenderung melihat Arch sebagai keputusan desain tingkat tinggi yang strategis dan dapat mahal dalam proyek untuk dibatalkan.
Garis yang tepat antara Arch dan desain tergantung pada domain perangkat lunak. Misalnya, dalam domain Aplikasi Web, arsitektur berlapis mendapatkan popularitas saat ini (Biz Logic Layer, Data Access Layer, dll.) Bagian tingkat lebih rendah dari Arch ini dianggap desain (diagram kelas, tanda tangan metode, dll. ) Ini akan didefinisikan secara berbeda dalam domain sistem embedded, sistem operasi, kompiler, dll.
sumber
Arsitektur adalah desain tingkat tinggi, abstrak dan logis sedangkan desain perangkat lunak adalah desain tingkat rendah, rinci dan fisik.
sumber
Juga, lihat: http://en.wikipedia.org/wiki/4%2B1_Architectural_View_Model
sumber
Saya suka definisi dan penjelasan Roy Thomas Fielding tentang apa itu arsitektur perangkat lunak dalam makalahnya: Gaya Arsitektur dan Desain Arsitektur Perangkat Lunak Berbasis Jaringan
Dia menekankan "elemen run-time" dan "level abstraksi".
sumber
Tidak ada jawaban pasti untuk ini karena "arsitektur perangkat lunak" dan "desain perangkat lunak" memiliki cukup banyak definisi dan tidak ada definisi kanonik untuk keduanya.
Cara berpikir yang baik adalah pernyataan Len Bass, Paul Clements dan Rick Kazman bahwa "semua arsitektur adalah desain tetapi tidak semua desain adalah arsitektur" [Arsitektur Perangkat Lunak dalam Praktek]. Saya tidak yakin saya cukup setuju dengan itu (karena arsitektur dapat mencakup kegiatan lain) tetapi menangkap esensi bahwa arsitektur adalah kegiatan desain yang berhubungan dengan subset kritis dari desain.
Definisi saya sedikit kurang ajar (ditemukan pada halaman definisi SEI ) adalah bahwa itu adalah serangkaian keputusan yang, jika dibuat secara salah, menyebabkan proyek Anda dibatalkan.
Upaya yang berguna untuk memisahkan arsitektur, desain dan implementasi sebagai konsep telah dilakukan oleh Amnon Eden dan Rick Kazman beberapa tahun yang lalu dalam makalah penelitian berjudul "Arsitektur, Desain, Implementasi" yang dapat ditemukan di sini: http: //www.sei.cmu .edu / library / assets / ICSE03-1.pdf . Bahasa mereka cukup abstrak tetapi secara sederhana mereka mengatakan bahwa arsitektur adalah desain yang dapat digunakan dalam banyak konteks dan dimaksudkan untuk diterapkan di seluruh sistem, desain adalah (err) desain yang dapat digunakan dalam banyak konteks tetapi diterapkan dalam bagian tertentu sistem, dan implementasi dirancang khusus untuk konteks dan diterapkan dalam konteks itu.
Jadi keputusan arsitektur bisa menjadi keputusan untuk mengintegrasikan sistem melalui pesan daripada RPC (jadi itu adalah prinsip umum yang dapat diterapkan di banyak tempat dan dimaksudkan untuk diterapkan ke seluruh sistem), keputusan desain mungkin menggunakan master / struktur benang slave dalam modul penanganan permintaan input sistem (prinsip umum yang dapat digunakan di mana saja tetapi dalam kasus ini hanya digunakan dalam satu modul) dan akhirnya, keputusan implementasi mungkin memindahkan tanggung jawab untuk keamanan dari Request Router ke Handler Permintaan dalam modul Manajer Permintaan (keputusan yang hanya relevan dengan konteks itu, digunakan dalam konteks itu).
Saya harap ini membantu!
sumber