프로젝트가 실패하는 가장 큰 이유중에 하나는 "비정상적으로 짧은 개발기간"이라고들 합니다. 네, 물론 그렇습니다. 아직까지 헝그리 정신으로 밤샘과 철야를 하루 세끼 밥먹듯이 하며, "까라면 까는거지"라는 마인드를 가지고 있는 과장이나 부장밑에서 힘들게 고생하시는 한국의 프로그래머들을 보면 제가 다 화가 납니다. 또 프로젝트가 실패하는 큰 이유중에 하나는 "말도 안되게 수시로 변경되는 고객의 과도한 기능요구"라도들 합니다. 이 역시 맞는 말입니다. 무슨 도깨비 방망이라도 되는줄 알고 "이런저런 것들도 들어갔으면 하는데 간단하죠?"라고 고객이 말하면 나오는건 한숨밖에 없죠. 하지만 제 생각에 후자의 경우는 프로젝트에대한, 즉 원래 고객이 요구한 시스템에 대한 정확한 이해만 있으면 유동적으로 대처 할 수 있다는게 제 생각입니다. 프로젝트 초기에 가능한한 정확히 고객의 요구를 파악하고, 어느정도 변경이나 추가적인 요구가 들어와도 충분히 받아들일 수 있는 설계를 지향하는 것입니다. 이를 위해서 반듯이 필요한것이 요구사항 분석인데, 사실 많은 개발그룹들이 요구사항 분석을 단순 "요구사항서 낭독"쯤으로 생각하고 있는것 같았습니다. 제가 지향하는 "요구사항 분석"은 고객이 원하고 또 알고있는 것이상의 개발 시스템에대한 전문가가 되는것입니다. 자 그럼, 함께 Usecase를 사용해서 시스템을 분석해 보도록 합시다.
1. Usecase 란
1.1 정의
뭐 복잡한 말 하지 않겠습니다. 간단히 말해서 Use case란 말 그대로 "기능"이라고 보면 되겠습니다. 기능을 어느정도 작게 나눌지, 크게 합쳐서 표현할지는 개발 시스템마다 다르겠습니다.
1.2 특징
1.2.1 시스템 개발의 기본적인 단위가 된다.
무슨 말인고 하니, 대부분의 프로세스에서 제일 먼저 하는 일이 요구사항 분석입니다. 그렇기 때문에 Usecase가 이후 진행되는 프로세스에서 모듈이라던지 패키지라던지 컴포넌트도 전이될 확률이 상당히 높다는 말이죠, 즉 Usecase가 복잡하면 할 수록 시스템의 복잡도도 올라간다라고 할 수 있는것입니다.
1.2.2 구현 단계로부터 독립된다.
이 역시 당연한 말입니다. 길게 설명하지 않겠습니다.
2. Notation
2.1 Actor
액터는 다음과 같이 표현합니다.
액터가 생긴것이 "사람"모양을 하고 있어서 처음 공부하시는 분들은 Actor를 사용자에 국한시키는 경우를 몇번 보았는데 - 저도 역시 그랬구요 - Actor는 시스템의 기능을 사용하는 "외부의 모든것"을 의미합니다. 다른 시스템의 특정 컴포넌트가 개발할 시스템의 특정 기능을 사용하게 되면 그 외부 시스템도 역시 Actor가 되는 것입니다.
2.2 Usecase
Usecase는 다음과 같이 표시합니다.
간단하죠 ? 그냥 옆으로 길쭉한 타원에다가 Usecase의 이름을 적으면 됩니다. ^_^
2.3 System
System은 다음과 같이 표시합니다.
이 사각형이 가지는 의미는 시스템의 경계입니다. 이 사각형안에 위치한 Usecase는 해당 시스템에서 구현되어야 함을 의미합니다.
2.4 Relationship
자 그럼 이제 각각의 요소들과 연관을 지어서 좀더 의미를 부여해 보도록 합시다.
2.4.1 extend and include
extend와 include라는 관계가 있습니다. 의미를 설명하기 전에 먼저 아래의 그림을 봅시다.
점선과 화살표로 표시를 합니다. 이게 조금 의미가 복잡해질 수 있는데 간단히 설명해서 특수한 경우 수행되는 분기문정도로 이해하시면 됩니다. 크게 Include와 비교가 많이 되는데 include는 반드시 포함되는 필수불가결한 요소를 의미하며, extend는 경우에 따라 선택적으로 수행되는 기능을 의미합니다. 아래의 예제를 보도록 하죠.
Write Article은 반드시 Store to DB 기능을 사용한다는 의미로 받아드리시면 됩니다.
이제 extend를 살펴보도록 합시다. 우선 먼저 다음의 예제를 보도록 하죠.
위의 의미는 신용카드로 결재를 하는 Order with Credit에서 신용카드에 적립된 포인트로 결재를 하기를 원할 경우 Order with Point of Credit로 분기한다는 의미입니다.
2.4.3 generalization
객체지향에서 가장 중요한 의미인 상속입니다. 액터나 Usecase사이에서도 상속의 개념을 표현할 수 있습니다.
위의 그림을 보면 금방 이해하실 수 있으리라 생각됩니다. 관리자는 오퍼레이터의 기능을 가지면서 자신만의 고유한 기능을 또한 가지고 있습니다.
2.4.4 association
그럼 이제 액터가 시스템의 기능을 사용한다라는 가장 중요한 의미를 표현해 보도록 하겠습니다.
그림에서 액터와 Usecase사이의 실선이 바로 association입니다. 간단하죠 ? 그럼 이제 위의 그림을 설명해 보도록 하죠. 우선 시스템의 구현해야 할 기능들은 글을 쓰고, 고치고, 지우고 보여주는 기능입니다. User액터는 글을 읽을수만 있고, Writer액터는 글을 읽고, 쓰고, 지우고, 고칠 수 있습니다.
간단하죠 ?
간단한 예제이기 때문에 너무 그림자체에 몰두하지 말아 주시기 바랍니다. 아무 생각없이 그린 그림이라 의미가 이상하거든요.. 그냥 예제로만 보아주시기 바랍니다.
제대로된 그림은 차후 Case Study에서 한번 그려보자구요. ^_^
2.5 문서화
그럼 이제 그림은 대충 그렸는데, 문서화는 어떻게 해야 하는지 많은 분들이 물어 보십니다.
간단히 Usecase에 대해서 말씀드리면, 뭐 별거 없습니다. 기본적으로 Usecase는 액터와 시스템간의 상호 작용 - 바꿔말해서 시나리오 - 을 위주로 작성하시면 됩니다.
예) 1. 액터가 무엇을 한다.
2. 시스템이 무엇을 한다.
3. 액터가 뭘 한다.
4. 시스템이 뭘 요구한다. 등등...
이 시나리오에서 객체라던지 모듈이라던지 등장할 필요은 없습니다. 하지만, GUI레벨 정도수준에서 무슨 화면이 나타난다 정도 기술해주시면 나중 작업이 상당히 수월해 집니다.
그리고 이때 도메인의 전문용어가 있으면 거침없이 사용해주시기 바랍니다. 나중에 수월해 집니다.
다음의 Question List를 활용하실 수 있습니다.
1. Actor 추출
1) 시스템의 주기능을 사용하는 사람은 누구인가?
2) 누가 시스템으로부터 업무 지원을 받는가?
3) 누가 시스템을 운영, 유지 보수하는가?
4) 시스템과 정보를 교환하는 외부 시스템은 무엇인가?
5) 시스템이 내어놓은 결과물에 누가 관심을 가지는가?
2. Usecase 추출1) Actor가 요구하는 시스템의 주요 기능은 무엇인가?
2) Actor가 시스템의 어떤 정보를 수정, 조회, 삭제, 저장하느가?
3) 시스템이 Actor에게 주는 어떠한 Event가 있는가?, Actor가 시스템에 주는 어떠한 Event가 있는가?
4) 시스템의 입력과 출력으로 무엇이 필요한가? 그리고 입력과 출력이 어디에서 오고 어디에로 가는가?
5) 시스템의 구현에서 가장 문제가 되는 점은 무엇인가?
'UML' 카테고리의 다른 글
About UML #04 - Domain Modeling 2. (0) | 2006.10.27 |
---|---|
About UML #04 - Domain Modeling 1. (0) | 2006.10.22 |
About UML #02 Overview - 전체적인 구성 첫번째 (0) | 2006.10.06 |
About UML #01 Overview - Why UML (0) | 2006.10.05 |
About StarUML (1) | 2006.10.05 |