Desain Perangkat Lunak vs. Arsitektur Perangkat Lunak [ditutup]

342

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.

Mads Mobæk
sumber
Apakah ada pertanyaan di bawah ini yang membantu? ;)
Patrick Karcher
Perlu diingat bahwa, pada tingkat tertentu, perbedaan (yang tentu saja nyata) sering kali dibuat dari pretensius. Tidak ada arsitek yang bisa menjadi baik tanpa pemahaman yang baik tentang desain dan konstruksi, dan tidak ada desainer yang bisa menjadi baik tanpa pemahaman arsitektur yang masuk akal.
Hot Licks
Dan saya pernah melihat arsitektur digambarkan sebagai "desain yang cocok untuk suatu tujuan". Itu sedikit basi, tetapi mengandung nugget kebenaran, karena arsitektur yang baik pada akhirnya harus berpusat pada tujuan vs yang berpusat pada implementasi.
Hot Licks

Jawaban:

329

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.

Razzie
sumber
116
Juga, arsitektur biasanya berkaitan dengan apa yang dilakukan dan di mana itu dilakukan, tetapi tidak pernah dengan bagaimana. Itulah yang menjadi perbedaan prinsip - desain melengkapi bagaimana arsitektur itu tidak (dan tidak seharusnya) dibicarakan.
Asaf R
2
Hai @ AsafR! ini membuat saya berpikir tentang arsitektur sebagai analisis karena analisis berkaitan dengan apa (yang dilakukan) dan desain dengan caranya.
Chriss
2
Saat ini orang-orang melakukan semua perancangan, penerapan, pemeliharaan server backend (mungkin berbasis cloud), dan desain front-end (Web atau seluler) sendirian. Saya pikir mereka disebut pengembang tumpukan penuh. Baik?
Maziyar
1
Arsitektur adalah garis besar dari suatu sistem, struktur, cetak biru tentang semuanya. Desain hanyalah aktivitas membuat rencana. Anda bisa mendesain arsitektur, Anda bisa mendesain modul, Anda bahkan bisa mendesain metode.
Evan Hu
2
Itu karena MVC adalah desain arsitektur. MVC tidak menyatakan detail dengan sendirinya. "View" dapat berupa situs web, winforms, aplikasi konsol. Model ini dapat berupa apa saja, tidak menyatakan apa pun dari mana asalnya (lapisan basis data atau apa pun).
Razzie
80

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 .

  • Arsitektur adalah gambaran yang lebih besar: pilihan kerangka kerja, bahasa, ruang lingkup, tujuan, dan metodologi tingkat tinggi ( Rasional , air terjun , lincah , dll).
  • Desain adalah gambaran yang lebih kecil: rencana bagaimana kode akan diatur; bagaimana kontrak antara berbagai bagian sistem akan terlihat; implementasi berkelanjutan dari metodologi dan tujuan proyek. Spesifikasi ditulis selama tahap ini.

Kedua tahap ini tampaknya akan menyatu bersama untuk alasan yang berbeda.

  1. Proyek-proyek kecil seringkali tidak memiliki ruang lingkup yang cukup untuk memisahkan perencanaan ke dalam tahap-tahap ini.
  2. Sebuah proyek mungkin menjadi bagian dari proyek yang lebih besar, dan karenanya bagian dari kedua tahap sudah diputuskan. (Sudah ada database, konvensi, standar, protokol, kerangka kerja, kode yang dapat digunakan kembali, dll.)
  3. Cara berpikir baru tentang SDLC (lihat metodologi Agile ) agak mengatur ulang pendekatan tradisional ini. Desain (arsitektur pada tingkat lebih rendah) terjadi di seluruh SDLC dengan sengaja . Sering ada lebih banyak iterasi di mana seluruh proses terjadi berulang kali.
  4. Pengembangan perangkat lunak memang rumit dan sulit untuk direncanakan, tetapi klien / manajer / tenaga penjualan biasanya membuatnya lebih sulit dengan mengubah tujuan dan persyaratan di tengah-tengah. Desain dan bahkan keputusan arsitektur harus dibuat nanti dalam proyek apakah itu rencananya atau tidak.

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.

Patrick Karcher
sumber
Jawaban yang bagus. Saya suka penekanan pada bagaimana seseorang dapat tampaknya menjadi bagian dari yang lain. Poin keempat menimbulkan pertanyaan yang menarik: Apakah desain dalam domain masalah tertentu kurang valid ketika belum ada arsitektur di dalamnya? Pengalaman akan menyarankan ya, tetapi dalam teori saya ingin berpikir bahwa desain yang tetap dalam lingkup yang sesuai (yaitu untuk komponen tertentu) harus sama-sama valid terlepas dari bagaimana akhirnya digunakan.
Tom W
55

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.

Chris Kannon
sumber
Saya ingin referensi yang lebih sedikit untuk "desain" dan "architeture" dalam definisi "desain" untuk memilih ini sampai ...
Peter Hansen
1
Setuju .. mungkin: Arsitektur terdiri dari kerangka kerja, alat, paradigma pemrograman, standar rekayasa perangkat lunak berbasis komponen, prinsip tingkat tinggi .. Sementara desain adalah kegiatan yang berkaitan dengan kendala lokal, seperti pola desain, idiom pemrograman, dan refactoring.
Chris Kannon
38

Saya menemukan ini ketika saya sedang mencari perbedaan sederhana antara arsitektur dan desain sendiri;
Apa pendapat Anda tentang cara memandang mereka:

  • arsitektur adalah "apa" yang kita bangun;
  • desain adalah "bagaimana" kita membangun;
George S.
sumber
4
Apa yang kami bangun adalah persyaratan klien. Bagaimana kita membangunnya tergantung pada arsitektur dan desain. Jadi tidak, ini sepenuhnya salah.
Marek
1
@Marek Saya tidak melihat apa yang salah dengan itu. Arsitektur adalah apa yang harus dibangun, apa yang diinginkan klien, seperti apa umumnya harus dilihat, komponen apa yang harus dibuat, dll. Desain adalah bagaimana hal-hal ini kemudian dibuat: Implementasi aktual dari komponen, algoritma, dll.
RecursiveExceptionException
21
  1. 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.

  2. 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.

Semua arsitektur adalah desain tetapi TIDAK semua desain adalah arsitektur.

Whatbagian adalah Desain, Howimplementasi konkret dan persimpangan Whatdan HowArsitektur.

Gambar untuk membedakan Arsitektur dan Desain :

Desain vs Arsitektur

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

TryinHard
sumber
Saya tidak suka jawaban ini. Arsitektur adalah tingkat abstraksi tertinggi karena itu Anda tidak perlu repot-repot "bagaimana" itu dilakukan. Saya setuju bahwa desain dan arsitektur entah bagaimana terhubung - Desain adalah kegiatan yang menciptakan bagian dari arsitektur sistem tetapi saya tidak akan mengatakan "Apa dan Bagaimana" adalah Arsitektur karena itu sangat membingungkan ...
Martin Čuka
15

Saya akan mengatakan Anda benar, dengan kata-kata saya sendiri;

Arsitektur adalah alokasi persyaratan sistem untuk elemen sistem. Empat pernyataan tentang arsitektur:

  1. Ini dapat memperkenalkan persyaratan non-fungsional seperti bahasa atau pola.
  2. Ini mendefinisikan interaksi antara komponen, antarmuka, timing, dll.
  3. Itu tidak akan memperkenalkan fungsi baru,
  4. Ini mengalokasikan fungsi (dirancang) bahwa sistem dimaksudkan untuk melakukan elemen.

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:

  • arsitektur adalah untuk publik / insinyur pada tingkat abstraksi yang lebih rinci
  • desain ditujukan untuk publik pada tingkat abstraksi yang kurang rinci
pengguna662182
sumber
+1 untuk Arsitektur adalah alokasi persyaratan sistem ke elemen sistem. Virtual -1 untuk penggunaan kata 'a' dalam daftar akhir. Pandangan saya tentang ini adalah definisi awal Anda (yang benar) adalah antitesis dari abstraksi.
Chris Walton
Tidak yakin tentang poin 1 & 3. Tidak ada yang harus memperkenalkan lebih banyak fungsi daripada yang dibutuhkan untuk memenuhi persyaratan pemangku kepentingan. Kendala lebih merupakan masalah metodologi. Poin lainnya sangat membantu. Analogi dapur itu tidak bagus; Anda tidak memerlukan seorang arsitek, tetapi desain dapur adalah bidang yang cukup khusus di mana sesuatu dirancang menggunakan komponen yang agak modular. Tidak dapat setuju dengan desain yang bukan merupakan langkah rekayasa penting. Tidak yakin apa arti dua poin terakhir.
Mike G
Di mana implementasi cocok? Apakah implementasi bukan Desain?
jwilleke
14

Pengingat saya:

  • Kami dapat mengubah Desain tanpa meminta seseorang
  • Jika kita mengubah Arsitektur, kita perlu mengkomunikasikannya kepada seseorang (tim, klien, pemangku kepentingan, ...)
Peter Gfader
sumber
6

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 )

Enrique Molinari
sumber
Saya sangat menyukainya. Kontribusi yang bagus. Saya tidak yakin apakah itu sangat jelas, tetapi pada pertanyaan seperti ini tentang yang pasti Anda dapatkan. Saya akan memilih Anda, tetapi saya tidak memilih hari ini :(.
Mike G
5

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

Tavi
sumber
Bahkan ketika saya telah membaca buku itu lebih dari dua kali, setelah membaca semua komentar di atas, definisi ini tidak masuk akal bagi saya. Inilah sebabnya: bagian desainer terdengar bagus karena Anda akan mengurus setiap detail tunggal untuk memastikan tombol melakukan apa yang seharusnya. Tetapi bagian arsitek bukan tentang interaksi modul atau gambaran besar sama sekali tetapi tentang kinerja dan hal-hal seperti itu, apakah Anda pikir saya salah mengerti sesuatu dari definisi itu?
Rene Enriquez
5

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.

Ajay Shendye
sumber
5

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:

  • buat dokumen desain tunggal.
  • beri nama dokumen desain ini seperti yang Anda inginkan atau, lebih baik, cara pembaca lebih terbiasa. Contoh: "Arsitektur Perangkat Lunak", "Spesifikasi Desain Perangkat Lunak".
  • pisahkan dokumen ini menjadi tampilan dan perlu diingat Anda dapat membuat tampilan sebagai penyempurnaan dari tampilan lain.
  • membuat tampilan dalam dokumen dinavigasi dengan menambahkan referensi silang atau hyperlink
  • maka Anda akan memiliki tampilan tingkat yang lebih tinggi yang menunjukkan tinjauan desain yang luas namun dangkal, dan tampilan yang lebih dekat dengan implementasi yang menunjukkan detail desain yang sempit namun lebih dalam.
  • Anda mungkin ingin melihat contoh dokumen arsitektur multi-view (di sini ).

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?

Paulo Merson
sumber
1
Sementara saya setuju dengan definisi awal, akan menyenangkan untuk menambahkan sumbernya: "Paul Clements, Mendokumentasikan arsitektur perangkat lunak: pandangan dan seterusnya". Untuk pertanyaan terakhir Anda: Anda tidak pernah berhenti mendesain. Itulah yang coba ditunjukkan oleh Clements dalam buku yang dirujuk. Setiap pengembang yang bekerja pada sistem akan mendesain sebagiannya tetapi sebagian besar desain ini tidak akan relevan untuk arsitektur. Oleh karena itu, jika Anda ingin berbicara tentang atau mendokumentasikan arsitektur perangkat lunak, Anda berhenti segera setelah Anda mendiskusikan bagian-bagian yang tidak lagi relevan.
Thomas Eizinger
1
@ThomasEizinger. Saya menambahkan tautan ke buku kami. Saran yang bagus Dan komentar Anda juga membantu memberikan kredit yang layak. Mengenai pertanyaan terakhir, saya bermaksud merujuk pada upaya dokumentasi desain. Saya mengedit paragraf. Terima kasih!
Paulo Merson
3

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.

Tuan
sumber
3

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 :)

Larry Watanabe
sumber
3

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 ...

mr-sk
sumber
3

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.)

Charles Bretana
sumber
3

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

Tebo
sumber
3

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.

Joshua Ramirez
sumber
3

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.

LindsayBradford
sumber
Ya persis. Itu set ide yang sama (dari penulis yang sama) yang saya sarankan di atas. Saya pikir mereka ide yang bermanfaat di bidang ini.
Eoin
3

... 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.

buzzcoda
sumber
Saya suka jawaban ini hanya karena kalimat ini "Tetapi arsitektur juga dalam desain." Saya akan mengatakan bahwa "arsitektur dapat berada dalam desain." - terserah kamu. Mereka tidak terpisah.
Miroslav Trninic
3

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.

Jesse Vogt
sumber
2

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:

  • GUI
  • Peluncur
  • Dispatcher
  • ...

(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.

VONC
sumber
2

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!

Gernot Starke
sumber
2

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.

ekeren
sumber
1

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.

Ta01
sumber
1

Arsitektur adalah kumpulan pola desain yang dihasilkan untuk membangun suatu sistem.

Saya kira Desain adalah kreativitas yang digunakan untuk menyatukan semua ini?

Mark Redman
sumber
saya harus tidak setuju. tampaknya Anda (seperti saya dan sebagian besar jawaban lain) meletakkan arsitektur pada "gambaran besar", sementara desain lebih banyak tentang metode dan pemecahan masalah. Tetapi, jika arsitektur Anda adalah "hasil" dari pola desain, Anda belum benar-benar mendesainnya, Anda hanya membiarkannya tumbuh!
Javier
... kecuali Anda tidak membiarkannya tumbuh, yaitu :-) Dibutuhkan pengetahuan dan pengalaman untuk memiliki kreativitas untuk menggunakan teknik yang tersedia untuk menciptakan arsitektur yang elegan. ... itu jelas terlalu subjektif untuk datang dengan sesuatu yang pasti ... tapi ya Anda benar mengingat ada beberapa sistem yang buruk di luar sana tanpa desain sistem secara keseluruhan (arsitektur)
Mark Redman
1

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.

LeWoody
sumber
1

Arsitektur adalah desain tingkat tinggi, abstrak dan logis sedangkan desain perangkat lunak adalah desain tingkat rendah, rinci dan fisik.

imran
sumber
1

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

Arsitektur perangkat lunak adalah abstraksi elemen run-time dari sistem perangkat lunak selama beberapa tahap operasinya. Suatu sistem dapat terdiri dari banyak tingkatan abstraksi dan banyak tahapan operasi, masing-masing dengan arsitektur perangkat lunaknya sendiri.

Dia menekankan "elemen run-time" dan "level abstraksi".

Jacky
sumber
elemen run-time juga disebut komponen atau modul aplikasi dan setiap modul atau komponen mengandung tingkat abstraksi sendiri. Benar?
Ankit Rana
1

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!

Eoin
sumber