Pertanyaan Perancangan Perangkat Lunak vs. Arsitektur Perangkat Lunak [tertutup]


Bisakah seseorang menjelaskan perbedaan antara Desain Perangkat Lunak dan Arsitektur Perangkat Lunak?

Lebih spesifik; jika Anda memberi tahu seseorang untuk memberikan 'desain' kepada Anda - apa yang Anda harapkan dari mereka? Sama berlaku untuk 'arsitektur'.

Pemahaman saya saat ini adalah:

  • Desain: Diagram UML / bagan alur / wireframes sederhana (untuk UI) untuk modul spesifik / bagian dari sistem
  • Arsitektur: diagram komponen (menunjukkan bagaimana modul yang berbeda dari sistem berkomunikasi satu sama lain dan sistem lain), bahasa apa yang akan digunakan, pola ...?

Koreksi saya jika saya salah. Saya telah mereferensikan Wikipedia memiliki artikel tentang http://en.wikipedia.org/wiki/Software_design dan http://en.wikipedia.org/wiki/Software_architecture, tapi saya tidak yakin apakah saya telah memahaminya dengan benar.


331
2018-04-01 10:00


asal


Jawaban:


Anda benar, ya. Arsitektur sistem adalah 'kerangka'. Ini adalah level tertinggi abstraksi 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 lapis 3 lapis, dll.

Perancangan perangkat lunak adalah tentang merancang modul / komponen individual. Apa tanggung jawab, fungsi, modul x? Kelas Y? Apa yang bisa ia lakukan, dan apa yang tidak? Pola desain apa yang bisa digunakan?

Jadi singkatnya, arsitektur perangkat lunak lebih tentang desain seluruh sistem, sementara desain perangkat lunak menekankan pada modul / komponen / tingkat kelas.


320
2018-04-01 10:19



Dalam beberapa deskripsi tentang SDLC (Software Development Life Cycle) mereka dapat dipertukarkan, tetapi consesus adalah bahwa mereka berbeda. Mereka pada saat yang sama: berbeda (1) tahapan, (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, tangkas, dll.).
  • Desain adalah gambaran yang lebih kecil: rencana bagaimana kode akan diatur; bagaimana kontrak antara berbagai bagian sistem akan terlihat; sedang berlangsung pelaksanaan dari metodologi dan tujuan proyek. Spesifikasi ditulis selama tahap ini.

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

  1. Proyek yang lebih kecil sering tidak memiliki ruang lingkup yang cukup untuk memisahkan perencanaan ke tahap ini.
  2. Sebuah proyek mungkin menjadi bagian dari proyek yang lebih besar, dan karenanya bagian dari kedua tahap sudah diputuskan. (Sudah ada basis data, konvensi, standar, protokol, kerangka kerja, kode yang dapat digunakan kembali, dll.)
  3. Cara berpikir yang lebih baru tentang SDLC (lihat Metodologi tangkas) 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 rumit dan sulit untuk direncanakan, tetapi klien / manajer / penjual biasanya membuat lebih sulit dengan mengubah tujuan dan kebutuhan mid-stream. Desain dan bahkan keputusan arsitektur harus bemade nanti di proyek apakah itu rencananya atau tidak.

Bahkan jika tahapan atau bidang tanggung jawab menyatu dan terjadi di semua tempat, selalu baik untuk mengetahui tingkat pengambilan keputusan apa yang sedang terjadi. (Kita bisa terus selamanya dengan ini. Saya mencoba untuk membuatnya menjadi ringkasan.) Saya akan mengakhiri dengan: Bahkan jika tampaknya proyek Anda tidak memiliki arsitektur formal atau tahap desain / AOR / documentaiton, itu terjadi apakah ada orang secara sadar melakukannya atau tidak. Jika tidak ada yang memutuskan untuk melakukan arsitektur, maka default yang terjadi mungkin buruk. Ditto untuk desain. Konsep-konsep ini hampir lebih penting jika tidak ada tahapan formal yang mewakili mereka.


78
2017-12-24 15:39



Arsitektur bersifat strategis, sedangkan Desain bersifat taktis.

Arsitektur terdiri dari kerangka kerja, alat, paradigma pemrograman, standar rekayasa perangkat lunak berbasis komponen, prinsip tingkat tinggi ..

Sedangkan desain adalah aktivitas yang bersangkutan dengan kendala lokal, seperti pola desain, idiom programming, dan refactorings.


54
2017-12-24 15:44



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

  • arsitektur adalah "apa" yang sedang kita bangun;
  • desain adalah "bagaimana" kita sedang membangun;

38
2018-03-28 17:36



  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 “menyusun” komponen, Anda mendefinisikan bagaimana ia berperilaku dalam sistem yang lebih besar.

    Jika Anda “merancang” komponen yang sama, Anda mendefinisikan bagaimana ia berperilaku secara internal.

Semua arsitektur adalah desain tetapi TIDAK semua desain adalah arsitektur.

What bagian adalah Desain, yang How adalah implementasi konkret dan perpotongan What dan How adalah Arsitektur.

Gambar untuk membedakan Arsitektur dan Desain:

Design vs Architecture

Ada juga keputusan desain, yang tidak signifikan secara arsitektur, yaitu tidak termasuk dalam cabang desain arsitektur. Misalnya, beberapa keputusan desain internal komponen, seperti- pilihan algoritme, pemilihan struktur data, dll.

Keputusan desain apa pun, yang tidak terlihat di luar batas komponennya adalah desain internal komponen dan non-arsitektur. Ini adalah keputusan desain yang akan ditinggalkan oleh arsitek perancang modul atau tim pelaksana selama desainnya tidak merusak batasan arsitektural yang dikenakan oleh arsitektur tingkat sistem.

Tautan yang memberi analogi yang bagus


19
2017-12-19 04:56



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

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

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

Arsitektur adalah sebuah 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 (yang diusulkan) implementasi fungsi. Ini dimaksudkan untuk memperoleh umpan balik dan untuk berdiskusi dengan para pemangku kepentingan. Ini mungkin latihan yang bagus tapi bukan merupakan langkah rekayasa yang penting.

Akan menyenangkan melihat desain dapur melihat 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

15
2018-03-16 10:03



Pengingat saya:

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

13
2017-11-23 23:31



Saya pikir kita harus menggunakan aturan berikut untuk menentukan kapan kita berbicara tentang Desain vs Arsitektur: Jika elemen dari 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 sintaks Kelas. Ini jelas Desain. Selain itu, ini mungkin membawa ke meja bahwa diskusi ini memiliki hubungan dengan bahasa pemrograman yang akan Anda gunakan untuk mengimplementasikan 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 adalah Desain juga. Anda dapat memetakan elemen (paket dalam kasus ini) ke konstruksi sintaks Java.

Sekarang, anggap aplikasi Java Anda dibagi dalam modul, dan setiap modul adalah seperangkat paket (diwakili sebagai unit penyebaran file jar), dan Anda disajikan dengan diagram yang berisi modul dan dependensinya, maka, itu adalah Arsitektur. Tidak ada cara di Java (setidaknya tidak sampai Java 7) untuk memetakan modul (seperangkat paket) ke konstruksi sintaksis. Anda mungkin juga memperhatikan bahwa diagram ini menunjukkan langkah lebih tinggi dalam tingkat abstraksi model perangkat lunak Anda. Setiap diagram di atas (butiran kasar dari) diagram paket, mewakili pandangan Arsitektur ketika berkembang dalam bahasa pemrograman Java. Di sisi lain, jika Anda berkembang di Modula-2, maka, diagram modul mewakili Desain.

(Sebuah fragmen dari http://www.copypasteisforword.com/notes/software-architecture-vs-software-design)


6
2017-07-14 02:58