저는 Model Driven Development의 진정한 신자이며 생산성, 품질 및 예측 가능성을 높일 가능성이 있다고 생각합니다. 볼 때 MetaEdit의 결과는 놀랍습니다. 네덜란드의 Mendix 는 매우 빠르게 성장하고 있으며 훌륭한 결과를 얻었습니다.
나는 또한 많은 문제가 있다는 것을 안다
- 생성기, 템플릿 및 프레임 워크의 버전 관리
- 모델 중심 개발에 적합하지 않은 프로젝트 (충분히 반복되지 않음)
- 더 높은 위험 (첫 번째 프로젝트가 실패하면 기존 개발보다 더 적은 결과를 얻습니다)
- 기타
그러나 여전히 이러한 문제는 해결할 수있는 것으로 보이며 혜택은 필요한 노력보다 중요합니다.
질문 : 모델 중심 개발을 고려하지 않은 가장 큰 문제는 무엇이라고 생각하십니까?
이 답변을 본인의 이해를 위해서뿐만 아니라 내가 작성하려는 일련의 내부 기사의 가능한 출처로 사용하고 싶습니다.
답변
황금 망치가 없습니다. 한 도메인에서 잘 작동하는 것은 다른 도메인에서는 꽤 쓸모가 없습니다. 소프트웨어 개발에는 몇 가지 고유 한 복잡성이 있으며 마법 도구로는 소프트웨어를 제거 할 수 없습니다.
또한 코드 생성은 언어 자체 (또는 프레임 워크)가 MDD를 비교적 무의미하게 만드는 강력한 추상화를 허용 할 정도로 수준이 높지 않은 경우에만 유용하다고 주장 할 수 있습니다.
답변
재미있는 질문! 나는 팬이 아니라는 것을 인정하지만 방금 제기 한 문제 중 일부에 맞는 프로젝트에서 모델 중심 개발을 여러 번 사용하려고했습니다.
내 이유 목록은 다음과 같습니다.
- 학습 곡선-모델링 도구가 너무 빠르게 발전하여 도구를 깊이 이해하는 엔지니어를 찾기가 어려워졌습니다. 나는 여전히 당신이 모델링 도구만큼이나 좋다는 것을 알았습니다. 분명히, 아래의 많은 문제들이이 한 가지 문제를 추적 할 수 있습니다. 도구가 너무 제한적이라고 생각할 때마다 충분히 알지 못할 수도 있습니다.
- 너무 구조적-개인적으로, 모델링 툴이 내가 설명하는 데 필요한 모든 것을 설명 할 수 없을 정도로 구조화되어있는 상황에 처해있었습니다. 도구 외부에서 모델의 일부 조각을 그리는 것으로 전환하면 사람들이 정보를 찾기 위해 도구 외부로 표류하기 시작하면 상황이 빠르게 쇠퇴합니다.
- 도구 조정 비용-코드를 자동 생성하려고 시도 할 때마다 도구가 올바른 것으로 생각되면 코드를 수동으로 재 작업했습니다. 몇 번 돌아 다니면이 문제가 줄어 들지만 처음 몇 번의 라운드에서 살아남 아야합니다. 나는 일반적으로 우리가 두더지를 치고 있다고 느꼈습니다-모델 만들기-> 코드 생성-> 코드 수정-> 모델 업데이트-> 모델 수정, 헹굼 및 반복.
- 모델 구성 관리-모델은 프로젝트의 많은 부분을 설명하기 때문에 어느 정도 수준에서 모델 CM은 빌드 된 코드보다 더 교차 절단됩니다. 모델링 파일을 분류하는 것은 그 자체로 예술입니다. 잘못하면 개발자 교착 상태 또는 사람들이 포기하고 코드에 따라 오래된 모델이 종종 사라집니다.
- 시장 출시 시간-소프트웨어 작업이 절실한 상황에서 명확한 문제가 발생했습니다. 프로젝트와 팀이 충분히 작은 경우 코딩 및 테스트에 시간을 소비 할 수있을 때 모델링 도구에서 시간을 낭비 할 이유가 없습니다. 모든 프로젝트가 그러한 투자를 요구할만큼 큰 것은 아닙니다.
- 실패 비용-프로젝트가 모델링 도구에서 벗어나는 것을 보았을 때 높은 실패 비용으로 인해 도구를 사용하려면 모든 개발자가 참여해야합니다. 그것은 훈련에 대한 큰 투자와 학습에 대한 실습이며, 누군가가 모델을 잘못 설정하면 비용이 많이 드는 실수입니다. 내 경험에 따르면 모델을 올바르게 만들려면 2 ~ 3 개의 릴리스가 필요할 수 있습니다. 따라서 많은 프로젝트가 이점을 실현할만큼 오랫동안 모델링 실수를 극복하지 못합니다.
답변
이미 인용되었지만 No Silver Bullet 은 요점을 잘 설명합니다.
소프트웨어 엔터티의 본질은 데이터 세트, 데이터 항목 간의 관계, 알고리즘 및 함수 호출과 같은 연동 개념의 구성입니다. 이러한 본질은 이러한 개념적 구성이 많은 다른 표현 하에서 동일하다는 점에서 추상적이다. 그럼에도 불구하고 매우 정확하고 풍부합니다.
소프트웨어를 구축하는 데있어 어려운 부분은 소프트웨어를 표현하고 표현의 충실도를 테스트하는 것이 아니라이 개념적 구성의 사양, 디자인 및 테스트라고 생각합니다. 우리는 여전히 문법 오류를 만들고 있습니다. 그러나 그들은 대부분의 시스템에서 개념적 오류와 비교하여 모호합니다.
이것이 사실이라면, 소프트웨어 구축은 항상 어려울 것입니다. 본질적으로은 총알이 없습니다.
나중에 Brooks는 “자동 프로그래밍”개념에 대해 다음을 지적합니다.
거의 40 년 동안 사람들은 “자동 프로그래밍”또는 문제 사양 진술에서 문제를 해결하기위한 프로그램 생성에 대해 예상하고 글을 쓰고 있습니다. 오늘날 일부 사람들은이 기술이 다음 획기적인 기술을 제공 할 것으로 기대하는 것처럼 작성합니다.
파르 나스 용어는 주장이 아니라 의미 론적 내용에 대한 매력에 사용되는 것을 의미한다 “자동 프로그래밍은 항상있다, 즉 높은 수준의 언어로 프로그래밍을위한 완곡 어법 프로그래머에게 현재 사용할 수보다.”
그는 본질적으로 대부분의 경우 문제가 아닌 솔루션 방법이며 사양을 제시해야한다고 주장합니다.
기본적으로 MDD는 이전에 사용했던 것보다 더 높은 수준의 언어로 프로그래밍하는 데있어 또 하나의 완곡 어라고 주장합니다.
그것은 더 높은 수준의 언어로 프로그래밍하는 것이 도움이 될 수 없다고 말하는 것은 아닙니다. 그러나 본질 문제는 동일하게 유지 : 훌륭한 도구 나 방법 훌륭한 언어가 하루의 끝에, 사용하는 방법에 상관없이 당신이 모든 문제를 통해 생각하고 문제를 해결해야합니다. Brooks가 말했듯이 ” 이 개념 구성 의 사양 , 디자인 및 테스트 “와 같이 중요한 문제에 집중할 수 있도록 “퍼지”를 제거하는 것이 가장 좋은 도구 나 프로세스 입니다.
답변
모든 프로그래밍이 객체 지향적이지는 않기 때문에 모든 MDD 도구가 기대하는 것 같습니다. UML 자체는 객체의 추정을 기반으로합니다. 물론 시퀀스 다이어그램을 사용하여 함수를 모델링 할 수 있지만 여러 번 서투른 것입니다.
나와 같은 프로그래머가 MDD보다 TDD로부터 더 많은 진보와 결과를 얻습니다.
Modeling! = Programming 때문입니다.
비용 / 이익은 비용 측면에서 너무 높았고 이익 측면에서는 충분하지 않기 때문입니다. 내가 MDD를 마지막으로 본 이후에 이것은 아마도 바뀌었을 것입니다. 그때 MDD를 어느 정도 능숙하게 할 수있는 도구에 대해 $ 6000 / seat (USD)를 지불해야합니다.
코드를 생성하는 함수를 충분히 설명하는 모델은 더 이상 모델로 유용하지 않기 때문입니다.
나와 같은 프로그래머가 높은 수준의 모델 만 사용하고 코드로 세부 사항을 해결하는 프로그래머가 있기 때문입니다. 모델링 소프트웨어와는 다른 방식으로 코드를 볼 수 있습니다.
이것이 제가 개인적으로 MDD를하지 않는 이유 중 일부입니다. 나는 그것에 노출되었지만 아무것도 나를 개종시킬 수 없었습니다. 어쩌면 나는 너무 오래된 학교입니다. 어쩌면 나는 너무 새로운 학교입니다 (무엇이든). 그것은 내가 스스로 지불 할 수있는 도구가 아닙니다.
답변
Microsoft / Apple / Google이 추진하지 않습니다. 🙂
어떤 종류의 개발이 대중화되는지는 도구, 후원자 및 전도와 관련이 있습니다. 큰 후원자없이 무언가를 돌파하는 것은 매우 어렵습니다 (Ruby on rails는 예외이지만 Java / C # / Python에 비해 여전히 작습니다)
답변
CASE, UML 등의 모든 모델링 도구에 영향을 미치는 간단한 법 때문에
프로그래머와 코드 사이에 들어가는 것은 비용이 많이 듭니다.
그렇게하면 적절한 컴파일러 / 인터프리터를 빌드해야합니다. 코드 생성기는 프로그래머에게 끔찍한 워크 플로와 끔찍한 피드백 (오류 메시지 등)을 초래합니다.
Domain Driven Design의 큰 통찰력 중 하나는 모델이 코드 외부에있는 것이 아니라 코드에 있어야한다는 것입니다.
궁극적으로 문제는 : 모델이 코드에 적합하지 않은 이유는 무엇입니까? 임베디드 개발을하고 있고 C로 고착되어 있거나 다른 플랫폼에 대한 코드를 생성해야하는 경우 코드 생성 비용이들 수 있습니다. 다른 모든 사람들에게는 일반적으로 코드 이외의 코드를 디자인하는 것보다 강력한 프로그래밍 언어와 더 나은 코드 디자인이 더 좋습니다.
답변
- 혜택이 거의없는 거대한 번거 로움.
- 나는 항상 엣지 케이스와 이상한 것들을 마시고있는 것처럼 보이지만 마술은 결코 제대로 작동하지 않는 것 같습니다.
- OO는 총알이 아닙니다. 소프트웨어 생성 방법론을 OO에 적용한다고해서 실버가되지는 않습니다.
그러나 나는 일반적으로 엔터프라이즈 솔루션을 좋아하지 않습니다.