SlideShare a Scribd company logo
1 of 24
Download to read offline
Object-Oriented
Analysis & Desgin
2. 요구사항 수집
이데아 게임즈 손진화
Code 1
하나의 요구 사항이라는 것이 정확히 무엇입니까?
시스템이
올바르게
동작하기 위해서
수행하는
특정한 하나의 일
1. 여러분의 소프트웨어가
고객이 원하는 기능을 하도록 하세요
요구 사항 리스트 만들기
- 고객에게 귀를 기울여라
- 시스템이 무엇을 해야 하는지 이해하라
강아지 문 요구사항
1. 강아지 문은 열렸을 때 35cm 이상이어
야 한다.
2. 리모콘에 있는 하나의 버튼은 문이 닫혔
을 때 누르면 열리고, 열렸을 때 누르면
닫힌다.
3. 강아지 문이 한번 열린 후, 닫지 않으면
자동으로 닫혀야 한다.
Code 2
Q 하나의 요구 사항은 고객이 원하는 애플리케이션
의 기능들 중 하나를 말하는 건가요?
A 고객이 생각하는 것보다 많은 내용이 포함되어 있
습니다. 고객이 여러분이 만들 시스템에 원하고 기대
하는 것과 꼭 해야 한다고 생각하는 것을 찾는 것 부터
시작하세요. 특히 대부분의 고객은 문제가 발생해도
잘 동작하기를 원합니다.
Q 토드와 지나를 위한 시스템은 강아지 문을 말하는
거죠?
A 시스템은 고객의 목적을 맞춰주기 위해 필요한 모
든 것이라 할 수 있습니다. 강아지 문과 리모콘을 모두
포함한다고 말할 수 있습니다.
Q 나는 왜 토드와 지나가 강아지 문을 어떻게 이용
할 지, 그리고 뭐 잘못될 것이 없는지 까지 알아내야
하는지 잘 모르겠습니다.
A 고객이 원하는 것을 만들어줘야 합니다. 그래서
그들보다 시스템이 해야 할 일을 정확하게 파악해야
합니다.
Q 토드와 지니가 강아지 문을 사용할 때 일어날지
모르는 안 좋은 상황을 생각해 봐야 하는 것이군요?
A 예! 바로 그거죠. 이제 그걸 해 봅시다.
강아지 문 유스케이스
1. 피도가 밖에 나가고 싶어 짖습니다.
2. 토드 또는 지나가 피도가 짖는 것을 듣습니다.
3. 토드 또는 지나가 리모콘의 버튼을 누릅니다.
4. 강아지 문이 열립니다.
5. 피도가 밖에 나갑니다.
6. 피도는 밖에서 쉬합니다.
6.1 문이 자동으로 닫힙니다.
6.2 피도가 들어 오려고 짖습니다.
6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시)
6.4 토드나 지나가 리모콘을 누릅니다.
6.5 강아지 문이 열립니다(다시)
7. 피도가 안으로 들어옵니다.
8. 강아지 문이 자동으로 닫힙니다.
문제를 대체 경로로 정리한다.
유스케이스(Use-cases)
고객의
특정한 목표를
달성하기 위해
여러분의 시스템이
무엇을 하는지를
기술합니다.
하나의 유스케이스는 하나의 목표에만 집중합니다.
어떻게는 신경쓰지 않습니다
유스케이스의 세 가지 필수 요소
1. 명확한 가치
모든 유스케이스는 시스템에게 명확한 가치를 가지고 있어
야 합니다. 고객의 목표 달성에 도움이 되지 않는다면 쓸모
없는 유스케이스입니다.
2. 시작과 종료
모든 유스케이스는 명확한 시작 시점과 종료 시점에 있어
야 합니다. 뭔가가 유스케이스를 기동시키고, 유스케이스
가 완료되었음을 표시하는 상태가 있어야 합니다.
3. 외부 기동자(액터)
모든 유스케이스는 액터에 의해 시작됩니다. 액터는 주로
사람이지만 시스템 외부의 어떤 것이나 될 수 있습니다.
강아지 문 유스케이스
1. 피도가 밖에 나가고 싶어 짖습니다.
2. 토드 또는 지나가 피도가 짖는 것을 듣습니다.
3. 토드 또는 지나가 리모콘의 버튼을 누릅니다.
4. 강아지 문이 열립니다.
5. 피도가 밖에 나갑니다.
6. 피도는 밖에서 쉬합니다.
6.1 문이 자동으로 닫힙니다.
6.2 피도가 들어 오려고 짖습니다.
6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시)
6.4 토드나 지나가 리모콘을 누릅니다.
6.5 강아지 문이 열립니다(다시)
7. 피도가 안으로 들어옵니다.
8. 강아지 문이 자동으로 닫힙니다.
강아지 문 유스케이스
1. 피도가 밖에 나가고 싶어 짖습니다.
2. 토드 또는 지나가 피도가 짖는 것을 듣습니다.
3. 토드 또는 지나가 리모콘의 버튼을 누릅니다.
4. 강아지 문이 열립니다.
5. 피도가 밖에 나갑니다.
6. 피도는 밖에서 쉬합니다.
6.1 문이 자동으로 닫힙니다.
6.2 피도가 들어 오려고 짖습니다.
6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시)
6.4 토드나 지나가 리모콘을 누릅니다.
6.5 강아지 문이 열립니다(다시)
7. 피도가 안으로 들어옵니다.
8. 강아지 문이 자동으로 닫힙니다.
외부 기동자
시
작
점
종료점
가치
Q 유스케이스는 시스템이 제대로 동작하기 위해 수행
해야 할 단계들을 표시한 리스트입니까?
A 하나의 특정한 목표를 달성하는데 초점을 맞추고
있습니다.
Q 유스케이스가 구체적이지 않아요. 각 유스케이스는
왜 Remote 클래스나 DogDoor 클래스에 대해 얘기
하지 않았죠?
A 유스케이스는 시스템이 해야 할 일에 대해 여러분
이 이해하고 다른 사람에게 설명하기 위해 만드는 것
입니다. 만약 유스케이스가 코드 수준까지 자세하게
설명한다면, 프로그래머 이외의 다른 사람들에게는 유
용하지 않을 것입니다.
Q 유스케이스는 유스케이스 다이어그램과 같은 것입
니까?
A 유스케이스 다이어그램은 유스케이스들을 시각적
으로 보여주는 방법입니다.
Q 유스케이스를 가지고 어떻게 실제 코드를 만들죠?
A 유스케이스의 목적이 코드를 어떻게 작성할지를 자
세하게 나타내는 것은 아닙니다. 유스케이스의 단계를
구현하는 방법에 대해서는 좀 더 생각해 봐야 할 거예
요.
Q 유스케이스가 코드 작성에는 별 도움이 되지 않으
면, 유스케이스에 이렇게 시간을 들이는 이유가 뭐죠?
A 유스케이스는 코드 작성에 도움이 됩니다. 고객이
원하는 기능을 제공하지 못한다면 좋은 소프트웨어가
될 수 없습니다. 유스케이스는 고객이 원하는 기능을
알아내는 도구입니다.
유스케이스를 가지고 요구사항 체크하기
1. 피도가 밖에 나가고 싶어 짖습니다.
2. 토드 또는 지나가 피도가 짖는 것을 듣습니다.
3. 토드 또는 지나가 리모콘의 버튼을 누릅니다.
4. 강아지 문이 열립니다.
5. 피도가 밖에 나갑니다.
6. 피도는 밖에서 쉬합니다.
6.1 문이 자동으로 닫힙니다.
6.2 피도가 들어 오려고 짖습니다.
6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시)
6.4 토드나 지나가 리모콘을 누릅니다.
6.5 강아지 문이 열립니다(다시)
7. 피도가 안으로 들어옵니다.
8. 강아지 문이 자동으로 닫힙니다.
1. 강아지 문은 열렸을 때 35cm 이상이어야 한다.
2. 리모콘에 있는 하나의 버튼은 문이 닫혔을 때 누르면 열리고, 열렸을 때 누르면
닫힌다.
3. 강아지 문이 한번 열린 후, 닫지 않으면 자동으로 닫혀야 한다.
유스케이스를 가지고 요구사항 체크하기
1. 피도가 밖에 나가고 싶어 짖습니다. N/A
2. 토드 또는 지나가 피도가 짖는 것을 듣습니다. N/A
3. 토드 또는 지나가 리모콘의 버튼을 누릅니다. 2
4. 강아지 문이 열립니다. 2
5. 피도가 밖에 나갑니다. 1
6. 피도는 밖에서 쉬합니다. N/A
6.1 문이 자동으로 닫힙니다. 3
6.2 피도가 들어 오려고 짖습니다. N/A
6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시) N/A
6.4 토드나 지나가 리모콘을 누릅니다. 2
6.5 강아지 문이 열립니다(다시) 2
7. 피도가 안으로 들어옵니다. 1
8. 강아지 문이 자동으로 닫힙니다. 3
1. 강아지 문은 열렸을 때 35cm 이상이어야 한다.
2. 리모콘에 있는 하나의 버튼은 문이 닫혔을 때 누르면 열리고, 열렸을 때 누르면
닫힌다.
3. 강아지 문이 한번 열린 후, 닫지 않으면 자동으로 닫혀야 한다.
대체 경로, 주 경로
- 주 경로
모든 것이 제대로 진행되었을 때의 시스템이
하는 일. 고객이 시스템에 대해 얘기할 때 보통
이것을 얘기한다
- 대체 경로
유스케이스에서 항상 일어나지 않는 단계들
테스트코드를 작성할 때는 대체 경로도 테스트 해야 한다
Code 3
Quiz
외부 구동자
유스케이스
시작 조건
요구 사항
명확한 가치
종료 조건
주 경로
유스케이스에 설명된 단계들의 리스트를 시작시킨다.
이것이 없으면 유스케이스는 시작되지 않는다.
성공하기 위해 시스템이 해야 할 일
유스케이스가 언제 끝나는지 알려준다. 이것이 없으면
유스케이스는 끝나지 않는다.
좋은 요구 사항들을 수집하게 도와준다. 시스템이 할
일에 관한 이야기를 한다.
모든 것이 제대로 진행되었을 때의 시스템이 하는 일.
고객이 시스템에 대해 얘기할 때 보통 이것을 얘기한다.
이것이 항상 유스케이스의 첫 번째 단계이다.
이것이 없이는 유스케이스가 아무에게도 소용없다. 이
것 없는 유스케이스는 항상 실패한다.
Quiz
외부 구동자
유스케이스
시작 조건
요구 사항
명확한 가치
종료 조건
주 경로
유스케이스에 설명된 단계들의 리스트를 시작시킨다.
이것이 없으면 유스케이스는 시작되지 않는다.
성공하기 위해 시스템이 해야 할 일
유스케이스가 언제 끝나는지 알려준다. 이것이 없으면
유스케이스는 끝나지 않는다.
좋은 요구 사항들을 수집하게 도와준다. 시스템이 할
일에 관한 이야기를 한다.
모든 것이 제대로 진행되었을 때의 시스템이 하는 일.
고객이 시스템에 대해 얘기할 때 보통 이것을 얘기한다.
이것이 항상 유스케이스의 첫 번째 단계이다.
이것이 없이는 유스케이스가 아무에게도 소용없다. 이
것 없는 유스케이스는 항상 실패한다.
핵심 정리
- 요구 사항은 시스템이 제대로 동작하기 위해 해야 할
일입니다.
- 초기 요구 사항은 보통 고객이 말해줍니다.
- 좋은 요구 사항들을 만들려면, 유스케이스를 만들어
야 합니다.
- 유스케이스는 시스템이 해야 할 일을 자세하고 명확
하게 설명합니다.
- 하나의 유스케이스는 하나의 목표를 가집니다. 하지
만 그 목표를 이루는 경로는 여러 가지 입니다.
- 좋은 유스케이스는 시작 조건, 종료 조건, 외부 구동
자, 사용자의 명확한 가치를 가지고 있습니다.
- 유스케이스는 단지 시스템이 어떻게 동작하는 지를
말하는 것입니다.
핵심 정리
- 여러분의 시스템이 달성해야 할 각 목표에 대해 최소
하나 이상의 유스케이스가 필요합니다.
- 유스케이스들을 작성 후, 요구 사항을 다듬거나 추가
할 수 있습니다.
- 여러분의 유스케이스 모두를 가능하게 하는 요구 사
항 리스트는 좋은 요구 사항 리스트입니다.
- 여러분의 시스템은 모든 게 여러분의 기대대로 돌아
갈 때뿐만 아니라, 실제 상황에서도 동작해야 합니다.
- 문제가 생기면 시스템은 대체경로를 사용해서 시스템
의 목표를 달성해야 합니다.

More Related Content

Similar to Object oriented analysis and design - 2장

Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...
Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...
Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...Byunghyun Ban
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...Kay Kim
 
Intern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionIntern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionJeong-gyu Kim
 
16 학술제 마무리 자료
16 학술제 마무리 자료16 학술제 마무리 자료
16 학술제 마무리 자료Junyoung Jung
 
프로그램 기초
프로그램 기초프로그램 기초
프로그램 기초Minsuk Lee
 
임베디드 설계 하기
임베디드 설계 하기임베디드 설계 하기
임베디드 설계 하기Lay Sukmin Lim
 
[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기Luavis Kang
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제Kiyoung Moon
 

Similar to Object oriented analysis and design - 2장 (11)

Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...
Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...
Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
 
Intern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionIntern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_mission
 
16 학술제 마무리 자료
16 학술제 마무리 자료16 학술제 마무리 자료
16 학술제 마무리 자료
 
프로그램 기초
프로그램 기초프로그램 기초
프로그램 기초
 
임베디드 설계 하기
임베디드 설계 하기임베디드 설계 하기
임베디드 설계 하기
 
[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기[SWMaestro 100+ 발표자료] 테스트하기
[SWMaestro 100+ 발표자료] 테스트하기
 
System+os study 7
System+os study 7System+os study 7
System+os study 7
 
DebugIt/chapter5~8
DebugIt/chapter5~8DebugIt/chapter5~8
DebugIt/chapter5~8
 
Final
FinalFinal
Final
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 

More from 진화 손

C++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdfC++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdf진화 손
 
C++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdfC++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdf진화 손
 
C++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templatesC++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templates진화 손
 
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...진화 손
 
C++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functionsC++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functions진화 손
 
C++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdfC++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdf진화 손
 
C++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete typesC++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete types진화 손
 
C++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirementsC++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirements진화 손
 
C++20 Concepts library
C++20 Concepts libraryC++20 Concepts library
C++20 Concepts library진화 손
 
C++20 Coroutine
C++20 CoroutineC++20 Coroutine
C++20 Coroutine진화 손
 
C++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rulesC++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rules진화 손
 
C++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rulesC++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rules진화 손
 
C++20 explicit(bool)
C++20 explicit(bool)C++20 explicit(bool)
C++20 explicit(bool)진화 손
 
C++20 std::map::contains
C++20 std::map::containsC++20 std::map::contains
C++20 std::map::contains진화 손
 
C++20 Comparing unordered containers
C++20 Comparing unordered containersC++20 Comparing unordered containers
C++20 Comparing unordered containers진화 손
 
C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]진화 손
 
C++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contextsC++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contexts진화 손
 
C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>진화 손
 
C++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptrC++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptr진화 손
 
C++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fieldsC++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fields진화 손
 

More from 진화 손 (20)

C++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdfC++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 Remove std::weak_equality and std::strong_equality.pdf
 
C++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdfC++20 std::execution::unseq.pdf
C++20 std::execution::unseq.pdf
 
C++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templatesC++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templates
 
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
 
C++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functionsC++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functions
 
C++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdfC++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdf
 
C++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete typesC++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete types
 
C++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirementsC++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirements
 
C++20 Concepts library
C++20 Concepts libraryC++20 Concepts library
C++20 Concepts library
 
C++20 Coroutine
C++20 CoroutineC++20 Coroutine
C++20 Coroutine
 
C++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rulesC++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rules
 
C++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rulesC++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rules
 
C++20 explicit(bool)
C++20 explicit(bool)C++20 explicit(bool)
C++20 explicit(bool)
 
C++20 std::map::contains
C++20 std::map::containsC++20 std::map::contains
C++20 std::map::contains
 
C++20 Comparing unordered containers
C++20 Comparing unordered containersC++20 Comparing unordered containers
C++20 Comparing unordered containers
 
C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]
 
C++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contextsC++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contexts
 
C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>
 
C++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptrC++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptr
 
C++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fieldsC++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fields
 

Object oriented analysis and design - 2장

  • 1. Object-Oriented Analysis & Desgin 2. 요구사항 수집 이데아 게임즈 손진화
  • 3. 하나의 요구 사항이라는 것이 정확히 무엇입니까? 시스템이 올바르게 동작하기 위해서 수행하는 특정한 하나의 일 1. 여러분의 소프트웨어가 고객이 원하는 기능을 하도록 하세요
  • 4. 요구 사항 리스트 만들기 - 고객에게 귀를 기울여라 - 시스템이 무엇을 해야 하는지 이해하라
  • 5. 강아지 문 요구사항 1. 강아지 문은 열렸을 때 35cm 이상이어 야 한다. 2. 리모콘에 있는 하나의 버튼은 문이 닫혔 을 때 누르면 열리고, 열렸을 때 누르면 닫힌다. 3. 강아지 문이 한번 열린 후, 닫지 않으면 자동으로 닫혀야 한다.
  • 7. Q 하나의 요구 사항은 고객이 원하는 애플리케이션 의 기능들 중 하나를 말하는 건가요? A 고객이 생각하는 것보다 많은 내용이 포함되어 있 습니다. 고객이 여러분이 만들 시스템에 원하고 기대 하는 것과 꼭 해야 한다고 생각하는 것을 찾는 것 부터 시작하세요. 특히 대부분의 고객은 문제가 발생해도 잘 동작하기를 원합니다. Q 토드와 지나를 위한 시스템은 강아지 문을 말하는 거죠? A 시스템은 고객의 목적을 맞춰주기 위해 필요한 모 든 것이라 할 수 있습니다. 강아지 문과 리모콘을 모두 포함한다고 말할 수 있습니다.
  • 8. Q 나는 왜 토드와 지나가 강아지 문을 어떻게 이용 할 지, 그리고 뭐 잘못될 것이 없는지 까지 알아내야 하는지 잘 모르겠습니다. A 고객이 원하는 것을 만들어줘야 합니다. 그래서 그들보다 시스템이 해야 할 일을 정확하게 파악해야 합니다. Q 토드와 지니가 강아지 문을 사용할 때 일어날지 모르는 안 좋은 상황을 생각해 봐야 하는 것이군요? A 예! 바로 그거죠. 이제 그걸 해 봅시다.
  • 9. 강아지 문 유스케이스 1. 피도가 밖에 나가고 싶어 짖습니다. 2. 토드 또는 지나가 피도가 짖는 것을 듣습니다. 3. 토드 또는 지나가 리모콘의 버튼을 누릅니다. 4. 강아지 문이 열립니다. 5. 피도가 밖에 나갑니다. 6. 피도는 밖에서 쉬합니다. 6.1 문이 자동으로 닫힙니다. 6.2 피도가 들어 오려고 짖습니다. 6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시) 6.4 토드나 지나가 리모콘을 누릅니다. 6.5 강아지 문이 열립니다(다시) 7. 피도가 안으로 들어옵니다. 8. 강아지 문이 자동으로 닫힙니다. 문제를 대체 경로로 정리한다.
  • 10. 유스케이스(Use-cases) 고객의 특정한 목표를 달성하기 위해 여러분의 시스템이 무엇을 하는지를 기술합니다. 하나의 유스케이스는 하나의 목표에만 집중합니다. 어떻게는 신경쓰지 않습니다
  • 11. 유스케이스의 세 가지 필수 요소 1. 명확한 가치 모든 유스케이스는 시스템에게 명확한 가치를 가지고 있어 야 합니다. 고객의 목표 달성에 도움이 되지 않는다면 쓸모 없는 유스케이스입니다. 2. 시작과 종료 모든 유스케이스는 명확한 시작 시점과 종료 시점에 있어 야 합니다. 뭔가가 유스케이스를 기동시키고, 유스케이스 가 완료되었음을 표시하는 상태가 있어야 합니다. 3. 외부 기동자(액터) 모든 유스케이스는 액터에 의해 시작됩니다. 액터는 주로 사람이지만 시스템 외부의 어떤 것이나 될 수 있습니다.
  • 12. 강아지 문 유스케이스 1. 피도가 밖에 나가고 싶어 짖습니다. 2. 토드 또는 지나가 피도가 짖는 것을 듣습니다. 3. 토드 또는 지나가 리모콘의 버튼을 누릅니다. 4. 강아지 문이 열립니다. 5. 피도가 밖에 나갑니다. 6. 피도는 밖에서 쉬합니다. 6.1 문이 자동으로 닫힙니다. 6.2 피도가 들어 오려고 짖습니다. 6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시) 6.4 토드나 지나가 리모콘을 누릅니다. 6.5 강아지 문이 열립니다(다시) 7. 피도가 안으로 들어옵니다. 8. 강아지 문이 자동으로 닫힙니다.
  • 13. 강아지 문 유스케이스 1. 피도가 밖에 나가고 싶어 짖습니다. 2. 토드 또는 지나가 피도가 짖는 것을 듣습니다. 3. 토드 또는 지나가 리모콘의 버튼을 누릅니다. 4. 강아지 문이 열립니다. 5. 피도가 밖에 나갑니다. 6. 피도는 밖에서 쉬합니다. 6.1 문이 자동으로 닫힙니다. 6.2 피도가 들어 오려고 짖습니다. 6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시) 6.4 토드나 지나가 리모콘을 누릅니다. 6.5 강아지 문이 열립니다(다시) 7. 피도가 안으로 들어옵니다. 8. 강아지 문이 자동으로 닫힙니다. 외부 기동자 시 작 점 종료점 가치
  • 14. Q 유스케이스는 시스템이 제대로 동작하기 위해 수행 해야 할 단계들을 표시한 리스트입니까? A 하나의 특정한 목표를 달성하는데 초점을 맞추고 있습니다. Q 유스케이스가 구체적이지 않아요. 각 유스케이스는 왜 Remote 클래스나 DogDoor 클래스에 대해 얘기 하지 않았죠? A 유스케이스는 시스템이 해야 할 일에 대해 여러분 이 이해하고 다른 사람에게 설명하기 위해 만드는 것 입니다. 만약 유스케이스가 코드 수준까지 자세하게 설명한다면, 프로그래머 이외의 다른 사람들에게는 유 용하지 않을 것입니다.
  • 15. Q 유스케이스는 유스케이스 다이어그램과 같은 것입 니까? A 유스케이스 다이어그램은 유스케이스들을 시각적 으로 보여주는 방법입니다. Q 유스케이스를 가지고 어떻게 실제 코드를 만들죠? A 유스케이스의 목적이 코드를 어떻게 작성할지를 자 세하게 나타내는 것은 아닙니다. 유스케이스의 단계를 구현하는 방법에 대해서는 좀 더 생각해 봐야 할 거예 요.
  • 16. Q 유스케이스가 코드 작성에는 별 도움이 되지 않으 면, 유스케이스에 이렇게 시간을 들이는 이유가 뭐죠? A 유스케이스는 코드 작성에 도움이 됩니다. 고객이 원하는 기능을 제공하지 못한다면 좋은 소프트웨어가 될 수 없습니다. 유스케이스는 고객이 원하는 기능을 알아내는 도구입니다.
  • 17. 유스케이스를 가지고 요구사항 체크하기 1. 피도가 밖에 나가고 싶어 짖습니다. 2. 토드 또는 지나가 피도가 짖는 것을 듣습니다. 3. 토드 또는 지나가 리모콘의 버튼을 누릅니다. 4. 강아지 문이 열립니다. 5. 피도가 밖에 나갑니다. 6. 피도는 밖에서 쉬합니다. 6.1 문이 자동으로 닫힙니다. 6.2 피도가 들어 오려고 짖습니다. 6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시) 6.4 토드나 지나가 리모콘을 누릅니다. 6.5 강아지 문이 열립니다(다시) 7. 피도가 안으로 들어옵니다. 8. 강아지 문이 자동으로 닫힙니다. 1. 강아지 문은 열렸을 때 35cm 이상이어야 한다. 2. 리모콘에 있는 하나의 버튼은 문이 닫혔을 때 누르면 열리고, 열렸을 때 누르면 닫힌다. 3. 강아지 문이 한번 열린 후, 닫지 않으면 자동으로 닫혀야 한다.
  • 18. 유스케이스를 가지고 요구사항 체크하기 1. 피도가 밖에 나가고 싶어 짖습니다. N/A 2. 토드 또는 지나가 피도가 짖는 것을 듣습니다. N/A 3. 토드 또는 지나가 리모콘의 버튼을 누릅니다. 2 4. 강아지 문이 열립니다. 2 5. 피도가 밖에 나갑니다. 1 6. 피도는 밖에서 쉬합니다. N/A 6.1 문이 자동으로 닫힙니다. 3 6.2 피도가 들어 오려고 짖습니다. N/A 6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시) N/A 6.4 토드나 지나가 리모콘을 누릅니다. 2 6.5 강아지 문이 열립니다(다시) 2 7. 피도가 안으로 들어옵니다. 1 8. 강아지 문이 자동으로 닫힙니다. 3 1. 강아지 문은 열렸을 때 35cm 이상이어야 한다. 2. 리모콘에 있는 하나의 버튼은 문이 닫혔을 때 누르면 열리고, 열렸을 때 누르면 닫힌다. 3. 강아지 문이 한번 열린 후, 닫지 않으면 자동으로 닫혀야 한다.
  • 19. 대체 경로, 주 경로 - 주 경로 모든 것이 제대로 진행되었을 때의 시스템이 하는 일. 고객이 시스템에 대해 얘기할 때 보통 이것을 얘기한다 - 대체 경로 유스케이스에서 항상 일어나지 않는 단계들 테스트코드를 작성할 때는 대체 경로도 테스트 해야 한다
  • 21. Quiz 외부 구동자 유스케이스 시작 조건 요구 사항 명확한 가치 종료 조건 주 경로 유스케이스에 설명된 단계들의 리스트를 시작시킨다. 이것이 없으면 유스케이스는 시작되지 않는다. 성공하기 위해 시스템이 해야 할 일 유스케이스가 언제 끝나는지 알려준다. 이것이 없으면 유스케이스는 끝나지 않는다. 좋은 요구 사항들을 수집하게 도와준다. 시스템이 할 일에 관한 이야기를 한다. 모든 것이 제대로 진행되었을 때의 시스템이 하는 일. 고객이 시스템에 대해 얘기할 때 보통 이것을 얘기한다. 이것이 항상 유스케이스의 첫 번째 단계이다. 이것이 없이는 유스케이스가 아무에게도 소용없다. 이 것 없는 유스케이스는 항상 실패한다.
  • 22. Quiz 외부 구동자 유스케이스 시작 조건 요구 사항 명확한 가치 종료 조건 주 경로 유스케이스에 설명된 단계들의 리스트를 시작시킨다. 이것이 없으면 유스케이스는 시작되지 않는다. 성공하기 위해 시스템이 해야 할 일 유스케이스가 언제 끝나는지 알려준다. 이것이 없으면 유스케이스는 끝나지 않는다. 좋은 요구 사항들을 수집하게 도와준다. 시스템이 할 일에 관한 이야기를 한다. 모든 것이 제대로 진행되었을 때의 시스템이 하는 일. 고객이 시스템에 대해 얘기할 때 보통 이것을 얘기한다. 이것이 항상 유스케이스의 첫 번째 단계이다. 이것이 없이는 유스케이스가 아무에게도 소용없다. 이 것 없는 유스케이스는 항상 실패한다.
  • 23. 핵심 정리 - 요구 사항은 시스템이 제대로 동작하기 위해 해야 할 일입니다. - 초기 요구 사항은 보통 고객이 말해줍니다. - 좋은 요구 사항들을 만들려면, 유스케이스를 만들어 야 합니다. - 유스케이스는 시스템이 해야 할 일을 자세하고 명확 하게 설명합니다. - 하나의 유스케이스는 하나의 목표를 가집니다. 하지 만 그 목표를 이루는 경로는 여러 가지 입니다. - 좋은 유스케이스는 시작 조건, 종료 조건, 외부 구동 자, 사용자의 명확한 가치를 가지고 있습니다. - 유스케이스는 단지 시스템이 어떻게 동작하는 지를 말하는 것입니다.
  • 24. 핵심 정리 - 여러분의 시스템이 달성해야 할 각 목표에 대해 최소 하나 이상의 유스케이스가 필요합니다. - 유스케이스들을 작성 후, 요구 사항을 다듬거나 추가 할 수 있습니다. - 여러분의 유스케이스 모두를 가능하게 하는 요구 사 항 리스트는 좋은 요구 사항 리스트입니다. - 여러분의 시스템은 모든 게 여러분의 기대대로 돌아 갈 때뿐만 아니라, 실제 상황에서도 동작해야 합니다. - 문제가 생기면 시스템은 대체경로를 사용해서 시스템 의 목표를 달성해야 합니다.