'EDSL'에 해당되는 글 1건

  1. 2008/01/05 글뻥 문득 들어버린 SI개발방식에 대한 생각
개발자로 SI개발에 있어 고객의 요구사항을 명확히 하고 Change Request를 최소화 시켜 프로젝트를 성공시킨다.

참으로 얼마나 많이 들어본 이야기인가?

그래서 건설의 프로세스를 보기도 했고 자동차 만들기 프로세스를 보기도했다.
또 UML을 보기도 했고 XP방법론에 도전하기도 했는데 이모든 고민의 교집합에는 "Prototype"이 있었다.

다시말해 자동차를 만들때 디자이너가 요구한 요구사항을 엔지니어는 3D CAD로 구현해서 시뮬레이션하고 각각의 형상과 부품을 결정한다. 문제점은 제기하고 디자이너와 요구사항을 조율한다. 이때 만든 CAD가 바로 Prototype이 되는것이다.
건축에서는 어떠한가?
건축주가 제시한 요구사항을 건축설계사가 받아 그리고 이를 다시 도면으로 옮기고 그것을 다시 조감도/모형/CAD로 요구사항을 조율한다. 이것도 바로 Prototype인 것이다.
배? 마찬가지 아닌가?
XP방법론도 한번 뜯어보면 결론은 빠른 개발을 통해서 Prototype을 만든뒤 이를 계속 수정해서 구체화 해나가는 방법이다. 다시말해 최종산출물이 아닌 Prototype을 이용하고 있는 것이다.

한때는 UML이 이러한 Prototype이 될 수 있을것이란 착각을 했었다.
그러나 UML은 어디까지나 설계도구일 뿐. 고객이 이해할 수 있는 수준이 아닌것이다.
(개발자들도 혜매는 마당에...)

그렇다면 최선의 방법은 무엇인가?
현재까지 나온 최선의 방법은 당연 XP방법이다.
그렇다면 개발을 어떻게 하면 빨리 할 수 있을까?
루비온레일스에서 어느정도 적용하고 있는 EDSL (Embedded Domain Specific Languages)에서 어느정도 단초를 찾았다.

이렇게 한번 바라보도록 하자. 다음은 고객의 요구사항 면담내용이다.
신입사원채용
  - 신입사원은 매년 1월 1일부터 웹으로 공지하고
    1월 10일까지 웹에서 신청받아
    서류심사를 2월 1일까지 완료하여
    2월 10일까지 지원자에게 메일로 공지하고
    3월 1일시험을 치른후에 면접을 거쳐 선발합니다.
어떤가? 많이 보던 포맷아닌가? 고객의 요구는 이렇게 두리뭉실한 특성을 지닌다.
수식의 발전형인 프로그래밍 랭귀지가 아닌것이다. 우리는 이것을 프로그램 랭귀지로 변역하여 개발하였고 그 번역 능력에 따라 품질이 결정되어 버린다.
그렇다면 좀더 인간언어에 가깝게 만들수는 없을까?
위의 요구사항을 다음과 같이 정리하였다.
신입사원채용(){
    공지(){
        bool 기간제한(시작일,종료일);
        string 공지내용;
        void 공지DB(열람,수정,삭제,저장);
    }
    지원(){
        bool 기간제한(시작일,종료일);
        string 지원내용;
        void 지원DB(열람,수정,삭제,저장);
    }
    심사(){
        bool 기간제한(시작일,종료일);
        string 통보내용;
        void 이메일시스템(발송);
    }
    시험(){
    ...
    }
    면접(){
    ...
    }
}
신입사원이라는 업무는 공지, 지원, 심사, 시험, 면접 이라는 단위업무로 구성된다.
(인터뷰 내용이 전부 들어가 있다는 것이다.)

이를 바탕으로 신입사원채용에 데한 공지를 하는 단위업무는 다음처럼 같이 코딩 할 수 있지 않을까?
신입사원채용(기간제한(20070101,20070110).공지DB(저장, 공지내용);
다시 정리하면 설계자가 설계한 코드를 코딩하는 코더는 다음과 같은 순서로 사용하면 되는 것이다.
업무(제한사항).행동(행동유형,목적/내용);
짧게나마 생각해본 아이디어 이다.
유용한 블록 접착제가 될 수 있지 않을까?
2008/01/05 17:22 2008/01/05 17:22