지금까지 프로그램 설계를 위해 몇 년에 걸쳐 UML 툴을 이것저것 써봤는데, 정말 마음에 꼭 드는 툴은 하나도 없었습니다. 기억나는데로 적어보면 Visio, StarUML, ArgoUML, Visual Paradigm, NetBeans UML plugin, Enterprise Architect, Metamill, PowerDesigner 등을 잠깐씩 만져봤는데, 라이센스 문제로 평가판을 받아서 써 본 툴이나 잠깐 구경만 해본 툴들은 장단점을 제대로 파악하기는 어렵고, 제대로라고까지 말하긴 뭐하지만 좀 오래 붙잡고 써 본 툴들은 Visio, StarUML 정도인것 같습니다. Visio는 그냥 드로잉 툴이라 UML 그리기가 여간 괴로운게 아니고, StarUML은 개발이 중단된 상태라 계속 사용하기가 좀 그렇죠.
이 툴들은 모두 UML로 직접 다이어그램을 그려가며 설계하는 툴들인데, 제 경우엔 이런 방식으로는 설계가 잘 안되더라구요. 반드시 설계 과정에서 좀 꼬이게 됩니다. 그래서 의사 코드(pseudo code)를 약간 작성하고, 이를 토대로 다이어그램을 그리고, 이 과정에서 나오는 문제점을 다시 의사 코드에 반영하고, 이를 다시 다이어그램에 그리고.. 하는 식으로 작업을 하게 됩니다. 그래서 제 경우엔 UML 설계가 현재의 툴들로는 좀 불편하고 번잡한 작업이 되어버립니다. 아마 제가 설계하는 방식이 UML과 딱 맞지는 않아서 그렇겠죠.
그렇다면 저 같은 사람에게 적합한 기능은 무엇일까 찾아봤습니다. 툴 상에서 UML 다이어그램과 실제 코드가 연동되어 동작하면서 다이어그램을 수정하면 바로 코드에 반영되고, 역으로 코드를 수정해도 바로 다이어그램에 반영되는 방식을 round trip engineering이라고 부르는데, round trip engineering이 제대로 구현된 툴은 상당히 고가이고, Java나 C#과 같이 이미 기반 라이브러리가 단단하게 구축되어 있고 상당부분 추상화된 언어가 아닌 다음에는 잘 동작하지도 않습니다. 제 경우엔 C++ 프로그래머이므로 C++에 대하여 round trip engineering 기능이 제공되는 툴이 있는지 찾아봤는데, 제가 찾아본 범위에서는 하나도 찾을 수 없었습니다. (뭐 결국엔 가격에 제약이 있어서 고가의 툴 몇개를 배제했기 때문이겠지만요)
그러던 차에 재미있는 프로젝트를 발견했습니다. 바로
Pseudo Code Modeling Language 라는 프로젝트인데, 의사 코드를 작성하여 다이어그램을 뽑아낸다는 접근법입니다. 이것 자체로도 괜찮기는 하지만, 이 방식은 의사 코드를 작성하는 표기법을 새로 익혀야 한다는 점이 약간 걸립니다. 편하자고 쓰는 툴인데 또 뭔가를 익혀가며 쓰는것도 문제고, 실질적으로 Java나 C#은 round trip engineering이 잘 되는 언어이기 때문에 이런 접근법이 별 필요도 없고.. 그래서, 제 생각엔 C++로 클래스 선언부만 작성하면 다이어그램이 뽑혀 나오고, 역으로 다이어그램을 만지면 클래스 선언부가 수정되는 방식의 round trip engineering 툴을 만들 수 있지 않을까 싶습니다. 완전히 C++ round trip engineering을 구현하는건 상당한 비용이 들어가는 일이니 어렵지만, C++과 유사한 의사 코드 언어를 상정하여 round trip engineering을 지원하는 설계툴을 만든다면 제 입장에서는 정말 유용할 것 같습니다. 이런 툴 어디 없나요? 좀 시간이 나면 만들어보고 싶은데, 지금은 생계의 압박이 너무 크네요. 이래서 우리나라가 오픈소스 프로젝트가 잘 안되는 모양입니다.