[architecture] 소프트웨어 디자인과 소프트웨어 아키텍처 비교

누군가 소프트웨어 디자인과 소프트웨어 아키텍처의 차이점을 설명 할 수 있습니까?

더 구체적으로; 누군가에게 당신에게 ‘디자인’을 제시하라고하면-그들이 무엇을 제시 할 것으로 기대하십니까? ‘아키텍처’도 마찬가지입니다.

나의 현재 이해는 :

  • 디자인 : 시스템의 특정 모듈 / 부분에 대한 UML 다이어그램 / 플로우 차트 / 간단한 와이어 프레임 (UI 용)
  • 아키텍처 : 구성 요소 다이어그램 (시스템의 다른 모듈이 서로 다른 시스템과 통신하는 방법을 보여줌), 어떤 언어를 사용해야합니까? 패턴?

틀 렸으면 말해줘. Wikipedia에 http://en.wikipedia.org/wiki/Software_designhttp://en.wikipedia.org/wiki/Software_architecture 에 대한 기사가 있다고 말했지만 올바르게 이해했는지는 확실하지 않습니다.



답변

당신 말이 맞아 시스템의 아키텍처는 ‘골격’입니다. 시스템의 최고 수준의 추상화입니다. 어떤 종류의 데이터 스토리지가 존재하는지, 모듈이 서로 상호 작용하는 방법, 어떤 복구 시스템이 있는지. 디자인 패턴과 마찬가지로 MVC, 3 계층 디자인 등의 아키텍처 패턴이 있습니다.

소프트웨어 설계는 개별 모듈 / 구성 요소 설계에 관한 것입니다. 모듈 x의 책임, 기능은 무엇입니까? Y 급? 무엇을 할 수 있고 무엇을 할 수 없습니까? 어떤 디자인 패턴을 사용할 수 있습니까?

간단히 말해서 소프트웨어 아키텍처는 전체 시스템의 디자인에 관한 것이고 소프트웨어 디자인은 모듈 / 컴포넌트 / 클래스 레벨에 중점을 둡니다.


답변

SDLC (Software Development Life Cycle)에 대한 일부 설명에서 그것들은 상호 교환이 가능하지만, 그것들은 서로 다르다는 결론입니다. 그들은 동시에 서로 다른 (1) 단계 , (2) 책임 영역 및 (3) 의사 결정 수준입니다 .

  • 아키텍처 는 더 큰 그림입니다. 프레임 워크, 언어, 범위, 목표 및 높은 수준의 방법론 ( Rational , Waterfall , Agile 등) 선택.
  • 디자인 은 더 작은 그림입니다. 코드 구성 방법에 대한 계획; 시스템의 다른 부분 간의 계약이 어떻게 보일지; 프로젝트 방법론과 목표의 지속적인 구현 . 이 단계에서 사양이 작성됩니다.

이 두 단계는 서로 다른 이유로 혼합되어있는 것 같습니다 .

  1. 소규모 프로젝트는 계획을 단계적으로 분리 할 수있는 범위가 충분하지 않은 경우가 많습니다.
  2. 프로젝트는 더 큰 프로젝트의 일부일 수 있으므로 두 단계의 일부가 이미 결정되었습니다. (기존의 데이터베이스, 규칙, 표준, 프로토콜, 프레임 워크, 재사용 가능한 코드 등이 이미 있습니다.)
  3. SDLC에 대한 새로운 사고 방식 ( 민첩한 방법론 참조 )은이 전통적인 접근 방식을 다소 재정렬합니다. SDLC 전체에서 설계 (아키텍처의 범위가 작음) 가 의도적으로 발생 합니다. 전체 프로세스가 계속 반복 되는 반복 횟수 가 더 많습니다 .
  4. 소프트웨어 개발은 ​​복잡하고 어쨌든 계획하기가 어렵지만, 클라이언트 / 관리자 / 영업 사원은 일반적으로 중간 단계에서 목표와 요구 사항을 변경하여 더 어렵게 만듭니다. 계획이든 아니든 프로젝트 후반에 설계 및 건축 결정을 내려야 합니다 .

책임의 단계 나 영역이 서로 섞여서 모든 곳에서 발생하더라도, 어떤 수준의 의사 결정이 이루어지는 지 항상 아는 것이 좋습니다. (우리는 이것으로 영원히 갈 수 있습니다. 요약을 유지하려고 노력하고 있습니다.) 다음으로 끝날 것입니다 : 프로젝트에 공식적인 건축 또는 설계 단계 / AOR / 문서가없는 것 같더라도 누구나 의식적으로하고 있는지 아닌지 아무도 아키텍처를 결정하지 않으면 기본 상태가 좋지 않을 수 있습니다. 디자인을위한 디토. 공식적인 단계가없는 경우 이러한 개념은 거의 더 중요 합니다.


답변

건축은 전략적이며 디자인은 전술적입니다.

아키텍처는 프레임 워크, 툴, 프로그래밍 패러다임, 컴포넌트 기반 소프트웨어 엔지니어링 표준, 높은 수준의 원칙으로 구성됩니다.

디자인은 디자인 패턴, 프로그래밍 관용구 및 리팩토링과 같은 로컬 제약 조건과 관련된 활동입니다.


답변

건축과 디자인을 간단히 구분할 때이 점을 발견했습니다.
당신은 그들을 보는 이런 방식에 대해 어떻게 생각하십니까?

  • 건축은 우리가 만들고있는 “무엇”입니다.
  • 디자인은 우리가 만들고있는 “어떻게”입니다.

답변

  1. 아키텍처는 컴퓨터 또는 컴퓨터 기반 시스템의 개념적 구조와 논리적 구성을 의미합니다.

    디자인은 시스템이나 개체를 만들기 전에 모양과 기능 또는 작업을 보여주기 위해 제작 된 계획이나 그림을 의미합니다.

  2. 구성 요소를 “아키텍처”하는 경우 더 큰 시스템에서 구성 요소의 동작 방식을 정의합니다.

    동일한 구성 요소를 “설계”하는 경우 내부적으로 작동하는 방식을 정의하고 있습니다.

모든 아키텍처는 디자인이지만 모든 디자인이 아키텍처는 아닙니다.

What부분은 디자인의이 How구체적인 구현과의 교점 WhatHow아키텍처이다.

차별화 된 아키텍처 및 디자인 이미지 :

디자인과 아키텍처

건축 적으로 중요하지 않은 설계 결정도 있습니다. 즉, 설계의 아키텍처 분기에 속하지 않습니다. 예를 들어, 알고리즘 선택, 데이터 구조 선택 등과 같은 일부 구성 요소의 내부 설계 결정

구성 요소 경계 외부에서 보이지 않는 모든 설계 결정은 구성 요소의 내부 설계이며 아키텍처가 아닙니다. 시스템 설계자가 시스템 레벨 아키텍처에 의해 부과 된 구조적 제약을 위반하지 않는 한, 시스템 설계자가 모듈 설계자의 재량 또는 구현 팀에 맡길 설계 결정입니다.

좋은 비유 를주는 링크


답변

나는 당신이 내 말로 옳다고 말하고 싶습니다.

아키텍처 는 시스템 요구 사항을 시스템 요소에 할당하는 것입니다. 아키텍처에 대한 네 가지 진술 :

  1. 언어 나 패턴과 같은 비 기능적 요구 사항을 도입 할 수 있습니다.
  2. 구성 요소, 인터페이스, 타이밍 등의 상호 작용을 정의합니다.
  3. 새로운 기능을 도입하지 않아야합니다.
  4. 시스템이 수행 할 (설계된) 기능을 요소에 할당합니다.

아키텍처는 시스템의 복잡성이 세분화 될 때 필수적인 엔지니어링 단계 입니다.

예 : 집에 대해 생각해보십시오. 부엌에 건축가가 필요하지 않지만 (단 하나의 요소 만 필요) 완전한 건물에는 문 및 지붕과 같은 상호 작용 정의가 필요합니다 .

디자인 은 함수의 (제안 된) 구현에 대한 유익한 표현입니다. 피드백을 유도하고 이해 관계자와 논의하기위한 것입니다. 모범 사례 일 수 있지만 필수적인 엔지니어링 단계는 아닙니다 .

부엌을 설치하기 전에 부엌 디자인을 보는 것이 좋겠지 만 요리 요구 사항에는 필수적이지 않습니다 .

내가 생각하면 다음과 같이 말할 수 있습니다.

  • 아키텍처는보다 상세한 추상화 수준의 공공 / 엔지니어를위한 것입니다
  • 디자인은 덜 상세한 추상화 수준에서 대중을 대상으로합니다.

답변

내 알림 :

  • 누군가에게 묻지 않고 디자인을 바꿀 수 있습니다
  • 아키텍처를 변경하면 다른 사람 (팀, 고객, 이해 관계자 등)에게 전달해야합니다.