1.69k likes | 1.95k Views
D. 지뢰찾기 분석 설계 예제. 0. 지뢰찾기 분석. 분석의 목적. 시스템과 사용자 사이의 인터페이스를 정의 사용자 관점에서 인식할 수 있는 것만 정의한다 시스템 내부는 언급하지 않는다 사용자는 몰라도 되고 개발자만 알면 되는 것은 언급하지 않는다 여기서 언급한 사용자는 꼭 사람만을 의미하는 것은 아님 시스템과 명령이나 데이터를 주고 받는 것 시스템 내부가 아니고 외부 환경에 속하는 것. 분석 단계의 산출물 ( 중요도 순서로 나열됨 ). 1. Use-case 모델
E N D
분석의 목적 • 시스템과 사용자 사이의 인터페이스를 정의 • 사용자 관점에서 인식할 수 있는 것만 정의한다 • 시스템 내부는 언급하지 않는다 • 사용자는 몰라도 되고 개발자만 알면 되는 것은 언급하지 않는다 • 여기서 언급한 사용자는 • 꼭 사람만을 의미하는 것은 아님 • 시스템과 명령이나 데이터를 주고 받는 것 • 시스템 내부가 아니고 외부 환경에 속하는 것
분석 단계의 산출물 (중요도 순서로 나열됨) 1. Use-case 모델 (Use-case Diagram + Use-case Specification) 2. 보충 요구사항 명세서 (Supplementary Requirement Specification) 3. 개념 모델 (Conceptual Level Class Diagram) 4. 화면/메뉴 설계 5. 개발계획 6. 기타 : 용어사전, 사용자 메뉴얼
Use-case Diagram 지뢰찾기 닫힌 칸을 열기 지뢰를 표시 플레이어 닫힌 칸들을 열기
앞의 Use-case 모델은 적절한가? • 무엇을 기준으로 판단할 것인가? • 좋은 모델의 기준은 무엇인가?
좋은 모델의 기준은? • 좋은 모델은 정보의 전달이라는 목적에 충실해야 한다 • Use-case 모델이 고객에게 전달하는 정보 : 시스템을 이렇게 만들면 되나? • Use-case 모델이 개발자에게 전달하는 정보 :이러한 시스템을 만들어라 • 전달해야 하는 정보를 빠짐 없이 포함해야 한다 • 이해하기 쉽고 간결해야 한다
빠진 Use-case 는? • 새 게임 시작하기 시나리오 • 초급 중급 고급 선택 • 색깔 소리 같은 옵션 지정 • 최고 기록 보기 • 위와 같은 것도 포함해야 하나?
Use-case Diagram 의 목적 • Use-case Diagram -> 조감도 (Bird’s Eye View) • 시스템이 제공하는 기능을 큰 단위로 표현한 것 • 모든 세세한 기능을 Use-case Diagram 으로 표현하지 말라 • 세밀한 묘사는 다른 적당한 다이어그램에서 표현하면 된다
지뢰찾기의 Use-case ? • 지뢰찾기 게임이 사용자에게 제공하는 기능을 크게 분류하면?
Use-case Diagram 지뢰찾기 닫힌 칸을 열기 지뢰를 표시 플레이어 닫힌 칸들을 열기
Use-case Specification • 자세한 내용은 Use-case Specification 에서 설명한다
Use-case Specification • Name : 닫힌 칸을 열기 • Description: • 지뢰가 없을 것으로 짐작되는 칸을 연다 • Actor: 플레이어 • Precondition: • 칸은 닫혀있어야 한다 • 지뢰 표시가 없는 칸이어야 한다
닫힌 칸을 열기 • Main Flow • 지뢰가 없을 것으로 짐작되는 칸을 플레이어가 마우스 왼쪽 버튼으로 클릭한다 • 칸은 열려진 상태로 표시되며, 주변의 지뢰의 수가 칸 안에 표시된다 3. 주변의 지뢰의 수가 0 이면 • 지뢰 수 0은 표시되지 않고 • 주변의 닫힌 칸들이 모두 열려지며 • 각 칸 안에 그 주변의 지뢰의 수가 표시된다. • 이 과정은 재귀적으로 반복된다
닫힌 칸을 열기 • Alternative Flow A2. 지뢰가 있는 칸이었으면 지뢰가 폭발하여 게임은 실패로 종료된다 A2. 모든 칸이 열려졌으면 게임은 성공으로 종료된다
Use-case Specification • Name : 지뢰를 표시 • Description: • 지뢰가 있을 것으로 짐작되는 칸에 지뢰 표시를 한다 • Actor: 플레이어 • Precondition: • 칸은 닫혀있어야 한다
지뢰를 표시 • Main Flow: • 지뢰가 있을 것으로 짐작되는 칸을 플레이어가 마우스 오른쪽 버튼으로 클릭한다 • 칸에 지뢰 표시가 되고, 남은 지뢰 수 표시가 1 감소한다. • 지뢰 표시가 된 칸을 마우스 오른쪽 버튼으로 클릭한다 • 칸에서 지뢰 표시가 제거되고, 남은 지뢰 수 표시가 1 증가한다
지뢰를 표시 • Notes: • 지뢰 표시가 된 칸은 열 수가 없다"닫힌 칸 열기" 의 Precondition 참고
Use-case Specification • Name : 닫힌 칸들을 열기 • Description: • 인접한 지뢰가 모두 표시되었을 경우, 지뢰가 없는 인접한 빈 칸을 모두 동시에 연다 • Actor: 플레이어 • Precondition: • 클릭하는 칸은 열려 있어야 한다 • 열려진 칸에 표시된 주변 지뢰 수 만큼 주변 칸들에 지뢰 표시들이 있어야 한다
닫힌 칸들을 열기 • Main Flow • 열려진 칸에서 마우스 왼쪽과 오른쪽 버튼을 동시에 클릭한다 • 인접한 8개의 칸들 중 지뢰 표시가 되어 있지 않은 칸들 이 열려진다. 열려진 각 칸들에는 인접한 지뢰의 수가 표시된다. • 열려진 칸의 주변 지뢰의 수가 0이면 • 지뢰 수 0은 표시되지 않고 • 주변의 칸 모두 열려지며 • 각 칸 안에 그 주변의 지뢰의 수가 표시된다. • 이 과정은 재귀적으로 반복된다
닫힌 칸들을 열기 • Alternative Flow A2. 지뢰가 있는 칸이었으면 지뢰가 폭발하여 게임은 실패로 종료된다 A2. 모든 칸이 열려졌으면 게임은 성공으로 종료된다
보충 요구사항 • 모든 것을 Use-case 형태에 맞춰서 표현할 필요없다 • 사용자와 시스템 사이의 작업 시나리오 절차들은 Use-case 형태로 표현하는 것이 적당하다 • 기타 요구사항으로 표현하는 편이 더 단순한 것들도 있다
보충 요구사항 • 난이도 • 초급: 9 행 9 열의 칸, 10개의 지뢰 • 중급: 16 행 16 열의 칸, 40개의 지뢰 • 고급: 16 행 30 열의 칸, 99개의 지뢰 • 화면에 남은 지뢰수가 표시된다 • 남은 지뢰수 = 전체 지뢰 수 –지뢰 표시의 수 • 화면에 초시계가 표시된다 • 첫 칸을 연 때부터 초시계가 시작하고 • 성공하거나 실패한 순간 초시계가 정지한다 • 난이도 별로 최단시간 성공 기록을 유지한다
개념모델 • Use-case 모델의 이해를 돕기 위해 작성 • Use-case 모델에 등장하는 개념들의 관계를 표현한다 • 용어 사전과 비슷한 역할을 한다
지뢰찾기의 개념모델 • 개념모델의 목적은 시스템 설계가 아니고 관련 개념의 이해이다 • 모듈 설계와 다르다 • 다음의 개념들을 이해하기 쉽게 표현하기 위한 모델이다 • 지뢰, 이웃칸, 지뢰표시, 칸의 상태 … • 사용자와 개발자들이 위 개념들을 잘 알고 있다면, 개념모델은 생략 가능하다 • 지뢰 찾기의 경우 사실 개념 모델은 필요없다 • 금융 정보시스템을 개발하는 경우라면, 관련 개념들이 이해하기 매우 어려울 것이므로 개념모델이 꼭 필요할 것이다.
화면설계 진행화면 성공 실패
점진적 개발 • 크고 복잡한 시스템을 한 번에 완성하는 것은 매우 어렵다 • 작게 쪼개어 하나씩 만들어 가는 것이 좋다 • Use-case 단위로 만들어 나간다 • 중요한 Use-case 를 먼저 선택하여 • 설계, 구현, 테스트하여 완성하고 • 그 다음 Use-case 를 선택하여 만들어 나간다
Use-case 단위로 점진적 개발 • Use-case 의 우선순위 별로 점진적 개발 • 닫힌 칸을 열기 • 지뢰를 표시 • 닫힌 칸들을 열기 • 1차 개발 • 닫힌 칸을 열기 • 2차 개발 • 지뢰를 표시 • 닫힌 칸들을 열기
1차개발 개요 • 가장 중요한 use-case 인 "닫힌 칸을 열기" 를 구현한다 • 1차개발의 완료는 빠르면 빠를 수록 좋다 • 실행하고 테스트 해 볼 수 있는 1차 버전은, 고객으로부터 요구사항 수집하는데, 개발자가 시스템을 이해하고 개발하는데, 아주 큰 도움이 된다 • 1차개발을 빠르게 완료하기 위하여, use-case 를 단순하게 수정하고 구현하는 것도 좋다. • 단순하게 수정된 내용은 2차 개발에서 보충 구현한다.
Use Case Diagram 지뢰찾기 닫힌 칸을 열기 지뢰를 표시 플레이어 닫힌 칸들을 열기
Use Case Specification (단순화됨) • Name : 닫힌 칸을 열기 • Description: • 지뢰가 없을 것으로 짐작되는 칸을 연다 • Actor: 플레이어 • Precondition: • 칸은 닫혀있어야 한다
닫힌 칸을 열기 • Main Flow • 지뢰가 없을 것으로 짐작되는 칸을 플레이어가 마우스 왼쪽 버튼으로 클릭한다 • 칸은 열려진 상태로 표시되며, 주변의 지뢰의 수가 칸 안에 표시된다
닫힌 칸을 열기 • Alternative Flow A2. 지뢰가 있는 칸이었으면 지뢰가 폭발하여 게임은 실패로 종료된다 A2. 모든 칸이 열려졌으면 게임은 성공으로 종료된다
보충 요구사항 • 난이도 • 초급: 9 행 9 열의 칸, 10개의 지뢰
화면설계 진행화면 성공하거나 실패했을 경우 위와 같은 대화상자가 출력된다
아키텍처 설계의 목적 • 주요 클래스 사이의 인터페이스를 정의 • 시스템을 몇 개의 주요 클래스로 나누고 • 그들 사이의 인터페이스를 정의한다 • 주요 클래스 사이의 상호작용만 정의한다 • 주요 클래스 내부는 언급하지 않는다 • 주요 클래스 내부는 상세 설계 단계에서 • 설계에서 아키텍처 설계 단계가 가장 중요하다
아키텍처 설계의 산출물 (중요도 순서로 나열됨) • Class Diagram • 주요 클래스를 그린 클래스 다이어그램 • Specification Level Class Diagram • Sequence Diagram • 주요 클래스 사이의 상호 작용을 설계 • Specification Level Sequence Diagram • Use-case specification 에서 주요 이벤트 각각에 대하여 sequence diagram 이 그려져야 한다 • Activity Diagram or Statechart Diagram