책 소개
안드로이드 애플리케이션 개발자를 위한 친절한 테스팅 가이드
테스트를 작성하면서 안드로이드 애플리케이션을 개발할 수 있는 실용적인 방법을 소개한다. 테스트 주도 개발 방식으로 안드로이드 애플리케이션을 만들어 보고 안드로이드 테스트 프레임워크를 활용해서 UI 테스트는 물론 성능 테스트까지 다양한 상황에 대한 테스트를 실용적인 예제로 설명한다. 빌드 자동화와 테스트 자동화를 통해 지속적인 통합을 적용해보고 코드 커버리지까지 측정해본다. 이 책을 통해 테스트 코드를 작성하면서 얻게 되는 효율성을 충분히 느낄 수 있을 것이다.
[ 소개 ]
안드로이드 구조를 분석하는 데 아무리 오랜 시간을 들이고 프로그램을 작성할 때 많은 주의를 기울인다 해도 실수와 버그는 발생하게 마련이다. 이 책은 여러분이 안드로이드 프로젝트를 개발할 때 접할 수 있는 오류를 줄여주고 개발 생산성도 향상시켜 줄 것이다. 또한 손쉽게 문제를 회피하는 방법을 보여줌으로써 좀 더 빨리 테스팅 단계로 넘어갈 수 있도록 도와줄 것이다.
『Android Application Testing Guide 한국어판』은 안드로이드 애플리케이션 개발 시 유용하게 쓸 수 있는 각종 실용 기술, 프레임워크, 도구를 망라해 소개하는 유일한 책이다. 애플리케이션 테스트를 어떻게 작성하는지 단계별로 설명하고 품질을 제어하는 다양한 방법도 함께 다룬다.
[ 이 책에서 다루는 내용 ]
■ 안드로이드 애플리케이션을 효율적으로 개발하기 위한 테스팅 기술 적용과 도구 활용
■ 단위 테스트와 기능 테스트의 차이점을 알아보고 안드로이드 프로젝트에 적용
■ 테스팅 기술을 경험해보기 위한 샘플 안드로이드 테스트 프로젝트 생성
■ 테스트 주도 개발과 행위 주도 개발 등의 개발 방법론
■ 안드로이드 애플리케이션을 구성하는 액티비티, 컨텐트 제공자, 서비스 등의 컴포넌트 테스트
■ 최상의 애플리케이션 품질 관리를 위한 지속적인 통합 기술 적용
■ 성능 테스트 결과 분석을 통한 애플리케이션 성능 개선
■ 안드로이드 소스를 빌드해서 EMMA 코드 커버리지를 측정한 뒤 여러분의 코드가 얼마나 테스트되고 있는지 분석해보고 로보티움과 로보렉트릭으로 테스트 작성
[ 이 책의 대상 독자 ]
안드로이드 개발자로서 안드로이드 애플리케이션을 테스트하고 싶거나 애플리케이션 개발 과정의 최적화를 원하는가? 그렇다면 바로 당신을 위한 책이다. 애플리케이션 테스팅에 관한 사전지식은 없어도 괜찮다.
[ 이 책의 구성 ]
1장. ‘테스트’에서는 테스트의 여러 종류와 테스트가 일반적인 소프트웨어 개발 프로젝트, 특히 안드로이드에 어떻게 적용되는지 설명한다.
2장. ‘안드로이드 테스트’에서는 안드로이드 플랫폼상의 테스트와 단위 테스트, JUnit을 살펴보고 안드로이드 테스트 프로젝트의 생성과 실행을 살펴본다.
3장. ‘안드로이드 SDK의 기본 구성요소’에서는 테스트를 작성하는 데 필요한 기본 구성요소를 자세히 살펴보고 단언문, TouchUtils, 사용자 인터페이스 테스트, 목 객체, 측정, 테스트 케이스 클래스 계층구조 등을 살펴본다.
4장. ‘테스트 주도 개발’에서는 테스트 주도 개발의 원칙을 예제 코드 위주로 살펴보고 일반적인 프로젝트에 적용해본 다음 안드로이드 플랫폼으로 개념을 확장해본다.
5장. ‘안드로이드 테스트 환경’에서는 테스트를 실행할 수 있는 다양한 환경을 살펴본다. 안드로이드 가상 장치(AVD, Android Virtual Devices)를 생성해보고 환경설정을 통해 다양한 조건으로 애플리케이션을 테스트해본다. 마지막으로 테스트에 사용하는 이벤트를 생성하는 방법인 멍키(monkey)에 대해서도 살펴본다.
6장. ‘행위 주도 개발’에서는 행위 주도 개발을 소개하고 테스트를 공통된 용어로 표현함으로써 비즈니스 인력들도 소프트웨어 개발 과정에 참여할 수 있는 개념을 소개한다.
7장. ‘테스트 레시피’에서는 지금까지 설명했던 원칙과 기법을 적용하면서 만날 수 있는 갖가지 상황을 실제 예제를 통해 설명한다. 쿡북(cookbook) 스타일로 예제가 구성돼있으므로 필요한 부분만 찾아서 사용할 수 있을 것이다. 안드로이드 단위 테스트, 액티비티, 애플리케이션, 데이터베이스, 콘텐트 제공자, 로컬과 원격 서비스, UI, 예외, 파서, 메모리 누수 등의 주제를 다룬다.
8장. ‘지속적인 통합’에서는 소프트웨어 공학의 애자일 기법 중 하나인 변경을 계속 적용해서 통합시간을 줄이고 테스트를 더 자주 실행해 소프트웨어의 질을 높이고 개발시간을 줄일 수 있는 방법을 소개한다.
9장. ‘성능 테스팅과 프로파일링’에서는 전통적인 로깅 메소드에서부터 프로파일링 도구로 안드로이드 성능 측정 테스트를 작성하는 부분까지 살펴보고 성능 측정과 프로파일에 대해 살펴본다.
10장. ‘테스트 전략’에서는 안드로이드 소스를 빌드하는 방법과 엠마(EMMA)를 이용한 코드 커버리지 측정, 로보티움(Robotium), 호스트에서 테스트하는 방법, 로보렉트릭(Robolectric) 등을 살펴본다.
테스트를 작성하면서 안드로이드 애플리케이션을 개발할 수 있는 실용적인 방법을 소개한다. 테스트 주도 개발 방식으로 안드로이드 애플리케이션을 만들어 보고 안드로이드 테스트 프레임워크를 활용해서 UI 테스트는 물론 성능 테스트까지 다양한 상황에 대한 테스트를 실용적인 예제로 설명한다. 빌드 자동화와 테스트 자동화를 통해 지속적인 통합을 적용해보고 코드 커버리지까지 측정해본다. 이 책을 통해 테스트 코드를 작성하면서 얻게 되는 효율성을 충분히 느낄 수 있을 것이다.
[ 소개 ]
안드로이드 구조를 분석하는 데 아무리 오랜 시간을 들이고 프로그램을 작성할 때 많은 주의를 기울인다 해도 실수와 버그는 발생하게 마련이다. 이 책은 여러분이 안드로이드 프로젝트를 개발할 때 접할 수 있는 오류를 줄여주고 개발 생산성도 향상시켜 줄 것이다. 또한 손쉽게 문제를 회피하는 방법을 보여줌으로써 좀 더 빨리 테스팅 단계로 넘어갈 수 있도록 도와줄 것이다.
『Android Application Testing Guide 한국어판』은 안드로이드 애플리케이션 개발 시 유용하게 쓸 수 있는 각종 실용 기술, 프레임워크, 도구를 망라해 소개하는 유일한 책이다. 애플리케이션 테스트를 어떻게 작성하는지 단계별로 설명하고 품질을 제어하는 다양한 방법도 함께 다룬다.
[ 이 책에서 다루는 내용 ]
■ 안드로이드 애플리케이션을 효율적으로 개발하기 위한 테스팅 기술 적용과 도구 활용
■ 단위 테스트와 기능 테스트의 차이점을 알아보고 안드로이드 프로젝트에 적용
■ 테스팅 기술을 경험해보기 위한 샘플 안드로이드 테스트 프로젝트 생성
■ 테스트 주도 개발과 행위 주도 개발 등의 개발 방법론
■ 안드로이드 애플리케이션을 구성하는 액티비티, 컨텐트 제공자, 서비스 등의 컴포넌트 테스트
■ 최상의 애플리케이션 품질 관리를 위한 지속적인 통합 기술 적용
■ 성능 테스트 결과 분석을 통한 애플리케이션 성능 개선
■ 안드로이드 소스를 빌드해서 EMMA 코드 커버리지를 측정한 뒤 여러분의 코드가 얼마나 테스트되고 있는지 분석해보고 로보티움과 로보렉트릭으로 테스트 작성
[ 이 책의 대상 독자 ]
안드로이드 개발자로서 안드로이드 애플리케이션을 테스트하고 싶거나 애플리케이션 개발 과정의 최적화를 원하는가? 그렇다면 바로 당신을 위한 책이다. 애플리케이션 테스팅에 관한 사전지식은 없어도 괜찮다.
[ 이 책의 구성 ]
1장. ‘테스트’에서는 테스트의 여러 종류와 테스트가 일반적인 소프트웨어 개발 프로젝트, 특히 안드로이드에 어떻게 적용되는지 설명한다.
2장. ‘안드로이드 테스트’에서는 안드로이드 플랫폼상의 테스트와 단위 테스트, JUnit을 살펴보고 안드로이드 테스트 프로젝트의 생성과 실행을 살펴본다.
3장. ‘안드로이드 SDK의 기본 구성요소’에서는 테스트를 작성하는 데 필요한 기본 구성요소를 자세히 살펴보고 단언문, TouchUtils, 사용자 인터페이스 테스트, 목 객체, 측정, 테스트 케이스 클래스 계층구조 등을 살펴본다.
4장. ‘테스트 주도 개발’에서는 테스트 주도 개발의 원칙을 예제 코드 위주로 살펴보고 일반적인 프로젝트에 적용해본 다음 안드로이드 플랫폼으로 개념을 확장해본다.
5장. ‘안드로이드 테스트 환경’에서는 테스트를 실행할 수 있는 다양한 환경을 살펴본다. 안드로이드 가상 장치(AVD, Android Virtual Devices)를 생성해보고 환경설정을 통해 다양한 조건으로 애플리케이션을 테스트해본다. 마지막으로 테스트에 사용하는 이벤트를 생성하는 방법인 멍키(monkey)에 대해서도 살펴본다.
6장. ‘행위 주도 개발’에서는 행위 주도 개발을 소개하고 테스트를 공통된 용어로 표현함으로써 비즈니스 인력들도 소프트웨어 개발 과정에 참여할 수 있는 개념을 소개한다.
7장. ‘테스트 레시피’에서는 지금까지 설명했던 원칙과 기법을 적용하면서 만날 수 있는 갖가지 상황을 실제 예제를 통해 설명한다. 쿡북(cookbook) 스타일로 예제가 구성돼있으므로 필요한 부분만 찾아서 사용할 수 있을 것이다. 안드로이드 단위 테스트, 액티비티, 애플리케이션, 데이터베이스, 콘텐트 제공자, 로컬과 원격 서비스, UI, 예외, 파서, 메모리 누수 등의 주제를 다룬다.
8장. ‘지속적인 통합’에서는 소프트웨어 공학의 애자일 기법 중 하나인 변경을 계속 적용해서 통합시간을 줄이고 테스트를 더 자주 실행해 소프트웨어의 질을 높이고 개발시간을 줄일 수 있는 방법을 소개한다.
9장. ‘성능 테스팅과 프로파일링’에서는 전통적인 로깅 메소드에서부터 프로파일링 도구로 안드로이드 성능 측정 테스트를 작성하는 부분까지 살펴보고 성능 측정과 프로파일에 대해 살펴본다.
10장. ‘테스트 전략’에서는 안드로이드 소스를 빌드하는 방법과 엠마(EMMA)를 이용한 코드 커버리지 측정, 로보티움(Robotium), 호스트에서 테스트하는 방법, 로보렉트릭(Robolectric) 등을 살펴본다.
목차
목차
- 1장 테스트
- 간략한 역사
- 소프트웨어 버그
- 프로젝트에 심각한 영향을 미치는 버그
- 왜, 무엇을, 어떻게, 언제, 테스트해야 하는가
- 테스트 해야 하는 것
- 액티비티 생명주기 이벤트
- 데이터베이스와 파일시스템 연산
- 디바이스의 물리적 특성
- 테스트 해야 하는 것
- 테스트 종류
- 단위 테스트
- 테스트 픽스처
- setUp() 메소드
- tearDown() 메소드
- 사전조건 테스트
- 실제 테스트
- 통합 테스트
- 기능 또는 인수 테스트
- 테스트 케이스 시나리오
- 성능 테스트
- 시스템 테스트
- 단위 테스트
- 안드로이드 테스팅 프레임워크
- 측정
- 테스트 타겟
- 요약
- 2장 안드로이드 테스트
- JUnit
- 안드로이드 메인 프로젝트 생성
- 안드로이드 테스트 프로젝트 생성
- 패키지 탐색기
- 테스트 케이스 생성
- 특별한 메소드
- 테스트 애노테이션
- 테스트 실행
- 이클립스로 모든 테스트 실행
- 이클립스로 하나의 테스트 케이스 실행
- 에뮬레이터에서¬ 실행
- 커맨드라인에서¬ 테스트 실행
- 모든 테스트 실행
- 특정 테스트 케이스만 실행
- 이름으로 특정 테스트 실행
- 종류별로 특정 테스트 실행
- 성능 테스트 실행
- 시운전
- 테스트 디버깅
- 그 외 커맨드라인 옵션
- 요약
- 3장 안드로이드 SDK의 기본 구성요소
- 데모 애플리케이션
- 단언문 상세
- 사용자 정의 메시지
- Static Import
- 뷰 단언문
- 추가적인 단언문
- TouchUtils 클래스
- 목 객체
- MockContext
- IsolatedContext 클래스
- 파일과 데이터베이스 연산의 대안
- MockContentResolver 클래스
- TestCase 부모클래스
- 인자 없는 생성자
- 이름 지정 생성자
- setName() 메소드
- AndroidTestCase 부모클래스
- assertActivityRequiresPermission() 메소드
- 설명
- 예제
- assertReadingContentUriRequiresPermission() 메소드
- 설명
- 예제
- assertWritingContentUriRequiresPermission() 메소드
- 설명
- 예제
- assertActivityRequiresPermission() 메소드
- Instrumentation
- ActivityMonitor 내부 클래스
- 예제
- ActivityMonitor 내부 클래스
- InstrumentationTestCase 클래스
- launchActivity와 launchActivityWithIntent 메소드
- sendKeys와 sendRepeatedKeys 메소드
- runTestOnUiThread 도우미 메소드
- ActivityTestCase 클래스
- scrubClass 메소드
- ActivityInstrumentationTestCase2 클래스
- 생성자
- setUp 메소드
- tearDown 메소드
- testPreconditions 메소드
- ProviderTestCase2<T> 클래스
- 생성자
- 예제
- ServiceTestCase<T>
- 생성자
- TestSuiteBuilder.FailedToCreateTests 클래스
- 테스트 프로젝트에서¬ 외부 라이브러리 사용
- 요약
- 4장 테스트 주도 개발
- TDD 시작
- 테스트 작성
- 모든 테스트 실행
- 코드 리팩토링
- TDD의 장점
- 요구사항 이해
- 샘플 프로젝트 생성: 온도 변환기
- 요구사항 목록
- 사용자 인터페이스 컨셉 디자인
- 프로젝트 생성
- TemperatureConverterActivityTests 프로젝트 생성
- 픽스처 생성
- 사전 조건 테스트
- 사용자 인터페이스 생성
- 사용자 인터페이스의 존재 여부 테스트
- 정의된 ID 얻기
- 요구사항을 테스트로 변환
- 비어있는 입력 창
- 뷰 속성
- 화면 레이아웃
- 기능 추가
- 온도 변환
- EditNumber 클래스
- TemperatureConverter 단위 테스트
- EditNumber 테스트
- TemperatureChangeWatcher 클래스
- 더 많은 TemperatureConverter 테스트
- InputFilter 테스트
- 완성된 애플리케이션
- 요약
- TDD 시작
- 5장 안드로이드 테스팅 환경
- 안드로이드 가상 장치 생성
- 커맨드라인에서¬ AVD 실행
- UI 없는 에뮬레이터
- 키가드 비활성Ȭ
- 정리
- 에뮬레이터 종료
- 에뮬레이터 추가 설정
- 네트워크 상황 시뮬레이션
- 추가적인 qemu 옵션
- monkey 실행
- 클라이언트-서¬버 monkey
- Monkeyrunner를 통한 테스트 스크립트화
- 스크린샷 테스트
- 녹화하고 다시 재생
- 요약
- 6장 행위 주도 개발
- 간략한 역사
- Given, When, Then
- 피트네스
- 커맨드라인에서¬ 피트네스 실행
- TemperatureConverterTests 서¬브위키 생성
- 서¬브위키에 자식 페이지 추가
- 인수 테스트 픽스처 추가
- 테스트 클래스 지원부 추가
- GivWenZen
- 테스트 시나리오 생성
- 요약
- 7장 테스트 레시피
- 안드로이드 단위 테스트
- 액티비티와 애플리케이션 테스팅
- 애플리케이션과 환경설정
- RenamingMockContext 클래스
- TemperatureConverterApplicationTests 클래스
- 액티비티 테스팅
- 애플리케이션과 환경설정
- 파일, 데이터베이스, 콘텐트 제공자 테스팅
- BrowserProvider 테스트
- 예외 테스팅
- 로컬과 원격 서¬비스 테스팅
- 목 객체의 광범위한 사용
- 라이브러리 import
- testTextChanged 테스트
- 햄크레스트 소개
- 햄크레스트 매처
- hasToString 매처
- 격리시킨 뷰 테스팅
- 파서¬ 테스트
- 안드로이드 애셋
- 파서¬ 액티비티
- 파서¬ 테스트
- 메모리 누수 테스팅
- 요약
- 8장 지속적인 통합
- 앤트를 이용한 안드로이드 애플리케이션 수동 빌드
- 깃: 빠른 버전 관리 시스템
- 로컬 깃 저장소 생성
- 허드슨을 이용한 지속적인 통합
- 허드슨 설치와 설정
- 업무 생성
- 안드로이드 테스트 결과 확인
- 요약
- 9장 성능 테스팅과 프로파일링
- Ye Olde Logge 메소드
- 안드로이드 SDK의 성능 테스트
- 성능 테스트 실행
- LaunchPerformanceBase instrumentation 생성
- TemperatureConverterActivityLaunchPerformance 클래스 생성
- 테스트 실행
- 성능 테스트 실행
- Traceview와 dmtracedump 플랫폼 도구 사용
- 소규모 성능 평가
- 캘리퍼 소규모 성능 평가
- TemperatureConverterBenchmark 프로젝트 생성
- 캘리퍼 실행
- 캘리퍼 소규모 성능 평가
- 요약
- 10장 테스트 전략
- 안드로이드 소스 빌드
- 코드 커버리지
- 엠마 기능
- 시스템 요구사항
- 안드로이드 소스 코드 내려 받기
- 리포 설치
- 저장소 복사본 생성
- 빌드 과정
- 코드 커버리지
- TemperatureConverter 코드 커버리지
- 코드 커버리지 분석 보고서¬ 생성
- 인스턴스 상태 복구 커버
- 예외 커버
- 접근 제한 우회
- 옵션 메뉴 커버
- 문서¬화되지 않은 앤트 커버리지 타겟
- 로보티움 소개
- 로보티움 내려 받기
- 프로젝트 설정
- 테스트 케이스 생성
- testFahrenheitToCelsiusConversion() 테스트
- testOnCreateOptionsMenu() 다시보기
- 호스트의 JVM 기반 테스팅
- TemperatureConverterJVMTest 프로젝트 생성
- 성능 비교
- 안드로이드에 적용
- 로보렉트릭 소개
- 로보렉트릭 설치
- 새로운 자바 프로젝트 생성
- 테스트 작성
- 안드로이드 소스 빌드
도서 오류 신고
정오표
1쇄 오류/오탈자
[ p95 아래에서 2행 ]
ProviderTestCase2 → ProviderTestCase
[ p182 프로그램 9.6 중 아래에서 8행 ]
http://behaviour-driven.org → http://dannorth.net/introducing-bdd/
[ p290 2행 ]
확장한 측정기는 사용하지 못하게 돼있다. → 확장하지 않은 측정기는 사용하지 못하게 돼있다.
[ p95 아래에서 2행 ]
ProviderTestCase2 → ProviderTestCase
[ p182 프로그램 9.6 중 아래에서 8행 ]
http://behaviour-driven.org → http://dannorth.net/introducing-bdd/
[ p290 2행 ]
확장한 측정기는 사용하지 못하게 돼있다. → 확장하지 않은 측정기는 사용하지 못하게 돼있다.