면책 조항 : 나는 나는 연장자, "어떤 전투 계획은 적과의 접촉을 살아 없다"라고 헬무트 폰 몰트 케와 같은 민첩한 환경에서 건축가하지만. 다시 말해, 실용성은 가이드 라인의 정확한 글자를 항상 따를 수는 없다는 것을 의미합니다.
위에서 제기 한 대부분의 포인트는 팀이 할 수있는 최선의 방법으로 따릅니다. 그러나 원칙 1 (시스템을 설계하는 시스템을 코딩하는 팀)은 팀이 다른 대륙과 시간대로 분산 된 수십 (또는 수백) 명의 개발자로 구성되어있는 경우 실제로 따르기가 어렵습니다 . 이것은 개발자의 기술이나 태도와는 아무런 관련이 없으며, 고객의 요구 사항을 수집하고 기존의 복잡한 시스템을 이해하기 위해 존재하는 모든 물류 문제가 존재합니다.
그렇다면 시스템 설계는 어떻게 이루어 집니까? UML을 사용하십니까? 아니면 인터페이스와 주요 블록을 정의하는 문서입니까? 다른 게 있을까요?
종종 설계자는 주요 구성 요소를 식별 한 다음 구성 요소 간의 인터페이스 (보안, 속도 및 안정성과 같은 비 기능적 요구 사항 포함)를 정의하고 구성 요소의 내부 디자인을 개별 팀에 위임합니다 . 이는 모든 사람이 시스템에 대한 모든 것을 알 필요없이 팀이 자체 구성 요소를 설계하게하는 것 사이의 타협점입니다.
모든 조직에는 건축 설계에 대한 자체 표준 세트가 있으며 때로는 조직 내 프로젝트마다 다릅니다. 이 디자인은 팀이 코딩을 시작하기 전에 또는 가능한 빨리 시작하며 일반적으로 전체 목록이 아닙니다.
- 확장 된 요구 사항 및 범위 정의. 여기에는 더 높은 수준의 비즈니스 요구 사항을 충족시키는 사용 사례 또는 사용자 사례가 포함됩니다. 저는 개인적 으로 비 기능적 요구 사항에 RFC 2119 를 사용하고 싶습니다 . 디자인은이를 기반으로하고이를 거슬러 올라갑니다. 디자인의 일반적인 정의에 맞지 않을 수도 있지만, 이것도 종종 중요합니다.
- 고급 네트워크 또는 구성 요소 다이어그램 및 텍스트 페이지로 구성된 개요. 이는 고위 경영진에서 개발자 및 QA에 이르기까지 매우 광범위한 사용자를위한 것입니다. 이는 청중이 많기 때문에 UML 또는 정의 된 표기법을 거의 사용하지 않습니다.
- 개별 구성 요소에 대한 세부 사항으로, 위에서 언급 한대로 인터페이스 또는 API 간의 인터페이스에 중점을 둡니다. 인터페이스는 전제 조건 및 사후 조건 세부 사항이있는 대상 언어에서 메소드 서명으로 지정 될 수 있습니다. 구성 요소에는 클라우드 또는 데이터 센터에서 VM의 레이아웃 및 네트워킹 배열을 보여주는 것과 같은 네트워크 다이어그램이있을 수 있습니다. 관계형 데이터베이스에는 일반적으로 엔터티 관계 다이어그램이 있습니다.
- 알려진 경우 아키텍처 위험 및 완화 목록. 요구 사항과 마찬가지로 디자인 결정 및 절충 사항을 보여줍니다.
요컨대, 민첩한 프로세스에서의 시스템 설계는 기존의 폭포 프로세스에서의 것과 동일합니다. 그러나 민첩한 환경에서는 적은 양의 설계가 선행 작업으로 이루어지고 더 많은 부분이 컴포넌트 팀에 위임됩니다 . 핵심은 처음에 얼마나 깊이 갈 것인지 결정하고, 언제 결정을 내려야 할지를 결정하고 결정하는 것입니다. 여러 개발 팀에 영향을 미치는 결정, 특히 확장 성과 보안을 먼저 결정해야합니다. 이미 국제화 된 제품에 언어를 추가하는 것과 같은 결정은 매우 늦게까지 연기 될 수 있습니다.
초기 설계가 생성 된 후 건축가는 각 팀과 함께 작업하여 설계를 검토합니다. 작업 단위 (예 : 스크럼 스프린트)에 대한 추가 디자인 또는 디자인 변경이 필요한 경우, 건축가는 작업 단위가 시작될 때까지이를 사용할 수있게하는 것을 목표로합니다. 또한 건축가는 영향을받는 팀이나 이해 관계자에게 변경 사항을 전달할 책임이 있습니다.