SlideShare a Scribd company logo
1 of 44
아장아장 안린이의 안드로이드 테스트 첫걸음
GDG Korea Android
19. 08. 31
김우섭
wooseop@rainist.com
01 02목차
INDEX
기본 개념 주의점/베스트 프랙티스
3
bit.ly/아장아장테스트
들어가기 전에…
김우섭
- 레이니스트 안드로이드 개발자 (1월부터!)
- 글이 많은 걸 안 좋아하는데 까먹을까봐 쭉 적었습니다
- 여러분보다 특별히 뛰어나지 않아요
발표
- 여러분의 테스팅 입문과 오늘 추후 발표 이해를 위하여
- 제가 아는 선에서의 기본 사항을 짚고자 합니다
- 최근에 한 발표들에서 전부 시간 조절에 실패했음
- 최대한 욕심을 빼고 간결하게 다루되
- 발표에서 다루지 못한 이야기들은 쉬는 시간/네트워킹 때
4
bit.ly/아장아장테스트
오늘의 목표가 아닌 것들 (중 일부)
1. TDD란 무엇이며, 장단점은 어떻게 되는가
2. Mockito나 Espresso 등 프레임워크/라이브러리 세부 사항
기본 개념01
6
bit.ly/아장아장테스트
테스팅 피라미드
7
bit.ly/아장아장테스트
테스팅 피라미드
1. 단위 테스트 Unit tests
- 각 컴포넌트 및 기능 단위의 동작을 검증
2. 통합 테스트 Integration tests
- 각 모듈 간의 상호작용을 검증
3. UI 테스트 UI tests (E2E tests)
- 실제 유저가 보는 화면을 기준으로 하는 테스트
8
bit.ly/아장아장테스트
테스팅 피라미드
9
bit.ly/아장아장테스트
테스팅 피라미드
10
bit.ly/아장아장테스트
테스팅 피라미드
11
bit.ly/아장아장테스트
테스팅 피라미드
“유닛 테스트만 있고 통합 테스트는 안 했을 때”
12
bit.ly/아장아장테스트
테스팅 피라미드
UI 테스트 코드는 비싸고 어렵고 관리하기 힘들다 (흑흑)
13
bit.ly/아장아장테스트
로컬 테스트와 인스트루먼티드 테스트
안드로이드 기기에서 도느냐 아니냐
14
bit.ly/아장아장테스트
로컬 테스트와 인스트루먼티드 테스트
src/test냐 src/androidTest냐
15
bit.ly/아장아장테스트
테스트, 왜 하는가
소프트웨어는 복잡하다
16
bit.ly/아장아장테스트
테스트, 왜 하는가
그리고 갈수록 복잡해진다
17
bit.ly/아장아장테스트
테스트, 왜 하는가
잘 하는 개발이란 불안 요소의 최소화
18
bit.ly/아장아장테스트
테스트, 왜 하는가
1. 결함을 사전에 발견
- 실제 행동이 일어나지 않더라도 개발 과정 중에 포착 가능
2. 문서로서 작용
- 작성자의 의도, 사용법, 주의사항 등이 드러나게 되어 있음
3. 리팩터링에 대한 확신
- 이전의 동작이 변경되지 않았음을 담보할 수 있는 장치
4. 더 나은 구조를 유도
- 역할 분담 및 관심사의 분리 등: 테스트가 어렵다면 나쁜 구조라는 징조
19
bit.ly/아장아장테스트
테스트, 왜 하는가
20
bit.ly/아장아장테스트
테스트, 왜 하는가
리팩터링에 대한 확신
21
bit.ly/아장아장테스트
테스트, 왜 하는가
의도, 사용법, 주의사항
주의점/베스트 프랙티스02
23
bit.ly/아장아장테스트
안드로이드 플랫폼 디펜던시
로컬에서 테스트를 돌리면, 안드로이드 코드는 전부 예외를 뱉음
24
bit.ly/아장아장테스트
안드로이드 플랫폼 디펜던시
Mockito를 이용하는 법 (모킹)
25
bit.ly/아장아장테스트
안드로이드 플랫폼 디펜던시
Robolectric으로 구현을 주입하는 방법
26
bit.ly/아장아장테스트
안드로이드 플랫폼 디펜던시
인스트루먼티드 테스트로 돌리는 방법
27
bit.ly/아장아장테스트
안드로이드 플랫폼 디펜던시
또는 디펜던시 걷어내기!
28
bit.ly/아장아장테스트
적절한 assertion
assertEquals, verify가 아니어도 많습니다
29
bit.ly/아장아장테스트
적절한 assertion
깜짝 퀴즈) assertEquals와 assertSame의 차이?
30
bit.ly/아장아장테스트
적절한 assertion
프레임워크/라이브러리 API에 대해서도 알아두어야
31
bit.ly/아장아장테스트
세 단계로 나누기
Given, When, Then
32
bit.ly/아장아장테스트
세 단계로 나누기
Arrange, Act, Assert
33
bit.ly/아장아장테스트
세 단계로 나누기
전제 조건, 동작, 예상 결과
34
bit.ly/아장아장테스트
세 단계로 나누기
사고 표현에 용이, 가독성 증대, 의도 명확해짐
35
bit.ly/아장아장테스트
모든 케이스 다루기
36
bit.ly/아장아장테스트
모든 케이스 다루기
발생할 수 있는 모든 경우: 성공, 실패, 오류
37
bit.ly/아장아장테스트
모든 케이스 다루기
나와 동료가 꼼꼼하게 보기
38
bit.ly/아장아장테스트
모든 케이스 다루기
테스트 커버리지 보기
39
bit.ly/아장아장테스트
각 케이스는 독립적으로
감사합니다
(박수는 아직이에요)
41
bit.ly/아장아장테스트
더 알아보기
1. UI 테스팅
2. Mockito, Junit, Espresso 등 프레임워크/라이브러리
3. TDD, BDD
4. 테스트 가능한 또는 테스트가 용이한 구조
5. 몽키 테스팅(=카오스 테스팅)
42
bit.ly/아장아장테스트
같이 나누고 싶은 고민
1. 모킹, 얼마나 해도 되는가 (Classicists vs. Mockists)
2. UI 테스팅 어떻게, 얼마나 하는가
3. “어느 수준"까지 테스트해야 하는가
43
bit.ly/아장아장테스트
참고한 자료들
1. https://developer.android.com/training/testing/
2. https://stackoverflow.com/questions/129693/is-duplicated-code-more-tolerable-in-
unit-tests
3. https://martinfowler.com/bliki/GivenWhenThen.html
Q&A

More Related Content

Similar to [GDG And Kor] 아장아장 테스트 첫걸음

20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나JunHak Kim
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17Yoon Hee Hwang
 
사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서Kim kyoung-song
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례SangIn Choung
 
테스팅을위한선행조건 명세
테스팅을위한선행조건 명세테스팅을위한선행조건 명세
테스팅을위한선행조건 명세규동 최규동
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스KTH, 케이티하이텔
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)KH Park (박경훈)
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)SangIn Choung
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)SangIn Choung
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드Mijeong Park
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점Jubok Kim
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드Herren
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 

Similar to [GDG And Kor] 아장아장 테스트 첫걸음 (20)

20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나
 
xUnitTestPattern/chapter17
xUnitTestPattern/chapter17xUnitTestPattern/chapter17
xUnitTestPattern/chapter17
 
사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서사내 TDD 도입을 위한 설명 문서
사내 TDD 도입을 위한 설명 문서
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
Custom assert
Custom assertCustom assert
Custom assert
 
짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례짝 테스트(Pair Testing) 소개와 사례
짝 테스트(Pair Testing) 소개와 사례
 
테스팅을위한선행조건 명세
테스팅을위한선행조건 명세테스팅을위한선행조건 명세
테스팅을위한선행조건 명세
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스[H3 2012] 행복한 개발을 위한 테스트 케이스
[H3 2012] 행복한 개발을 위한 테스트 케이스
 
테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)테스트 자동화와 TDD(테스트 주도 개발방법론)
테스트 자동화와 TDD(테스트 주도 개발방법론)
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
 
클린코드와 테스트코드
클린코드와 테스트코드클린코드와 테스트코드
클린코드와 테스트코드
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
TDD
TDDTDD
TDD
 

[GDG And Kor] 아장아장 테스트 첫걸음