이를 올바르게 설명하려면 짧은 역사 수업이 필요합니다. 소프트웨어 엔지니어링 초기에는 자주 사용되는 비유가 집을 짓고있었습니다. 건축가 및 구조 엔지니어는 고객과 계획을 논의하고 디자인을 제안합니다. 그런 다음 건축업자는 그 설계에 따라 실제 주택을 건축합니다. 코드 작성은 실제 집을 짓는 것과 동등한 것으로 여겨졌습니다. 따라서, 그 빌드가 이루어지기 전에 선행 디자인이 필요하다는 인식이있었습니다. UML을 사용하여 다양한 그래픽 디자인 도구를 만들었습니다.
원래 UML의 아이디어는 UML을 사용하여 시스템을 완전히 디자인 한 다음 해당 디자인을 코드로 변환하기 위해 코더에게 넘겨주는 것입니다. 실제로 이것은 작동하지 않으며 수년간의 프로그래머가 "디자이너"가 아닌 "구현 자"로 보였고, 프로젝트가 늦었고, 디자인이 완료된 후에 끊임없이 디자인을 변경해야했습니다.
이유는 간단합니다. 코딩은 디자인 입니다. 집의 비유와 함께, 코드는 건축가의 도면입니다. 컴파일러는 해당 디자인을 가져 와서 프로그램을 작성하는 빌더입니다. 이 실현으로 민첩한 기술, TDD 등이 탄생했습니다. 코드 디자인의 품질을 향상시키는 데 도움이되는 도구입니다.
건축가가 전체 스케치를 시각화하는 데 도움이되는 예비 스케치를 생성하는 것처럼 개발자는 UML 또는 기타 도구를 사용하여 필요한 디자인을 시각화 할 수 있습니다. 이러한 스케치를 맹목적으로 따르지 않는 것처럼 UML도 맹목적으로 따르지 않아야합니다. 코드 디자인은 민첩한 반복에서 벗어나 TDD를 사용하여 발전해야합니다. 마찬가지로 건축가가 집 모델을 만들어서 그림을 시각화하는 데 도움이되는 것처럼 UML을 사용하여 코드 구조를 시각화 할 수 있습니다.
Bob 아저씨가 말했듯이 UML의 유효성을 검사 할 수 없으며 코드의 유효성 만 검사 할 수 있습니다. 따라서이 코드는 주요 설계 문서이며 UML (사용되는 경우)은 보조 문서입니다.