이 체크리스트는 앱 품질을 평가할 수 있도록 일련의 핵심 품질 기준과 관련 테스트를 정의합니다. 이러한 기준의 일부는 쉽게 누락될 수 있지만 테스트를 통해 이러한 기준을 테스트 계획에 포함할 수 있습니다.
체크리스트에서는 모든 앱이 충족해야 하는 최소 품질을 강조합니다. 테스트는 여기서 설명하는 범위 이상으로 잘 진행될 수 있습니다.
품질 체크리스트의 각 항목에는 고유 ID가 있습니다. 이 ID는 팀과 소통할 때 유용할 수 있습니다.
시각적 환경
앱은 일관되고 직관적인 사용자 환경을 위해 적절한 경우 표준 Android 시각적 디자인 및 상호작용 패턴을 제공해야 합니다.
영역 | ID | 테스트 | 설명 |
---|---|---|---|
탐색 | VX-N1 | CR-3 | 앱이 표준 뒤로 버튼 탐색을 지원하며 화면에 표시되는 맞춤 '뒤로 버튼' 메시지를 사용하지 않습니다. |
VX-N2 | CR-3 | 앱이 홈 화면으로 돌아가거나 홈 화면으로 이동하는 동작 탐색을 지원합니다. | |
VX-N3 | CR-1 CR-3 CR-5 |
앱이 사용자 상태나 앱 상태를 올바르게 유지하고 복원합니다. 포그라운드를 종료할 때 앱이 사용자 상태나 앱 상태를 유지하여 뒤로 탐색 및 기타 상태 변경으로 인해 우발적으로 데이터가 손실되는 것을 방지합니다. 포그라운드로 돌아가는 경우 앱은 보존된 상태와 대기 중이던 중요한 스테이트풀(Stateful) 트랜잭션을 복원해야 합니다. 앱 또는 게임의 수정 가능한 필드, 게임 진행 상황, 메뉴, 동영상, 기타 섹션 변경사항 등을 예로 들 수 있습니다.
|
|
알림 | VX-S1 | CR-9 | 알림은 머티리얼 디자인 가이드라인을 따릅니다. 특히 다음 항목이 중요합니다.
|
VX-S2 | CR-9 | 메시지/소셜 앱 및 대화의 경우:
|
|
UI 및 그래픽 | VX-U1 | CR-5 | 앱이 가로 모드와 세로 모드를 모두 지원합니다(가능한 경우).
방향은 대체로 동일한 기능과 작업을 표시하고 기능 패리티를 보존합니다. 콘텐츠 또는 뷰의 사소한 변경은 허용됩니다. |
VX-U2 | CR-5 | 앱이 두 방향 모두에서 전체 화면을 사용하고, 방향 변경을 나타내기 위한 레터박스는 사용하지 않습니다.
화면 구성의 미세한 차이를 보정하기 위한 사소한 레터박스는 허용됩니다. |
|
VX-U3 | CR-5 | 앱이 렌더링 문제나 상태 손실 없이 디스플레이 방향 간의 빠른 전환을 올바르게 처리합니다. | |
시각적 품질 | VX-V1 | CR-all | 앱이 현저한 왜곡, 흐림 또는 모자이크 현상 없이 그래픽, 텍스트, 이미지 및 기타 UI 요소를 표시합니다.
|
VX-V2 | CR-all | 앱에서 지원하는 각 언어에 허용되는 방식으로 앱이 텍스트 및 텍스트 블록을 표시합니다.
|
|
VX-V3 | CR-all | 앱 콘텐츠와 앱에서 참조하는 모든 웹 콘텐츠는 어두운 테마를 지원합니다. |
기능
앱은 예상되는 기능 동작을 구현해야 합니다.
영역 | ID | 테스트 | 설명 |
---|---|---|---|
오디오 | FN-A1 | CR-1 CR-8 |
앱이 포그라운드로 돌아오면 오디오가 다시 시작되거나 사용자에게 재생이 일시중지된 상태임을 나타냅니다. |
FN-A2 | CR-1 CR-2 CR-8 |
오디오 재생이 핵심 기능인 앱은 백그라운드 재생을 지원해야 합니다. | |
FN-A3 | CR-0 | 사용자가 오디오 재생을 시작하면 앱은 1초 이내에 다음 중 하나를 실행해야 합니다.
|
|
FN-A4 | CR-0 | 앱은 오디오 재생이 시작될 때 오디오 포커스를 요청하고 재생이 중지될 때 오디오 포커스를 종료해야 합니다. | |
FN-A5 | CR-0 | 앱은 다른 앱의 오디오 포커스 요청을 처리해야 합니다. 예를 들어 앱은 다른 앱에서 음성을 재생할 때 재생 볼륨을 줄일 수 있습니다. | |
미디어 | FN-M1 | CR-0 CR-6 CR-8 |
앱이 백그라운드에서 오디오를 재생하는 경우 MediaStyle로 스타일이 지정된 알림을 만들어야 합니다. |
FN-M2 | CR-0 | 앱이 동영상을 재생한다면 PIP 모드 재생을 지원해야 합니다. | |
FN-M3 | CR-0 | 앱이 동영상을 인코딩하는 경우 HEVC 동영상 압축 표준을 사용하여 인코딩해야 합니다. | |
공유 | FN-S1 | CR-0 | 앱은 콘텐츠를 공유할 때 Android Sharesheet를 사용해야 합니다. 맞춤 솔루션에 사용할 수 없는 타겟을 제안할 수 있습니다. |
백그라운드 서비스 | FN-B1 | CR-6 | 가능한 경우 앱은 백그라운드 서비스를 실행하지 않습니다. 사용자의 기기가 원활하게 실행되도록 시스템에서는 다양한 백그라운드 서비스 제한사항을 적용합니다. 다음은 백그라운드 서비스의 올바른 사용으로 간주되지 않습니다.
작업에 올바른 솔루션을 선택하는 방법을 알아보세요. |
FN-B2 | CR-10 | 앱이 Android 6.0에서 도입된 전원 관리 기능(잠자기 및 앱 대기)을 올바르게 지원합니다. 전원 관리가 핵심 기능을 방해하는 경우 자격이 있는 앱만 예외를 요청할 수 있습니다. 잠자기 및 앱 대기의 다른 사용 사례 지원을 참고하세요. |
성능 및 안정성
앱은 사용자가 기대하는 성능, 안정성, 호환성, 응답성을 제공해야 합니다.
영역 | ID | 테스트 | 설명 |
---|---|---|---|
안정성 | PS-S1 | CR-all SD-1 |
앱이 비정상 종료되거나 ANR(Android 응답 없음) 오류를 일으키는 UI 스레드를 차단하지 않습니다. Google Play의 사전 출시 보고서를 활용하여 잠재적인 안정성 문제를 식별하세요. 배포 후에는 Google Play Console의 Android Vitals 페이지에 유의합니다. |
성능 | PS-P1 | CR-all SD-1 |
앱이 빨리 로드되거나, 로드하는 데 2초 이상 걸리는 경우 화면에 피드백을 표시합니다(진행률 표시기 또는 유사 기능). |
PS-P2 | CR-all SD-1 |
앱은 16ms마다 프레임을 렌더링해야 초당 60프레임을 달성합니다. 개발자는 테스트에서 프로필 HWUI 렌더링 옵션을 사용할 수 있습니다. 문제가 있는 경우 느린 렌더링을 진단하는 데 도움이 되는 도구를 사용할 수 있습니다. | |
PS-P3 | PM-1 | StrictMode가 사용 설정된 상태(아래 StrictMode 테스트 참고)에서 앱을 테스트할 때 빨간색 깜박임(StrictMode의 성능 경고)이 표시되지 않습니다. 빨간색 깜박임은 저장소나 네트워크 액세스, 메모리 누수와 관련된 잘못된 동작을 나타냅니다. | |
SDK | PS-T1 | CR-0 | 앱이 비정상 종료되거나 핵심 기능에 심각한 영향을 미치지 않고 최신 공개 버전의 Android 플랫폼에서 실행됩니다. |
PS-T2 | SP-1 | 앱이 targetSdk 값을 설정하여 최신 Android SDK를 타겟팅합니다. |
|
PS-T3 | SP-1 | 앱이 compileSdk 값을 설정하여 최신 SDK로 빌드됩니다. |
|
PS-T4 | SP-2 SP-3 |
사용된 모든 타사 SDK는 최신입니다. 이러한 SDK의 모든 개선사항(안정성이나 호환성, 보안 등)은 사용자가 시기적절하게 사용할 수 있어야 합니다. 개발자는 사용된 타사 SDK를 포함하여 전체 앱의 코드베이스를 책임집니다. |
|
PS-T5 | CR-0 | 앱이 비 SDK 인터페이스를 사용하지 않습니다. | |
배터리 | PS-B1 | BA-1 | 앱이 Android 6.0에서 도입된 전원 관리 기능(잠자기 및 앱 대기)을 올바르게 지원합니다. 전원 관리가 핵심 기능을 방해하는 경우 자격이 있는 앱만 예외를 요청할 수 있습니다. 개발하는 동안 개발자는 이러한 ADB 명령어를 사용하여 앱 대기 및 잠자기 동작을 테스트할 수 있습니다.
배터리 사용량과 관련하여 개발자는 계획된 백그라운드 작업과 함께 Android 스튜디오 에너지 프로파일러나 Battery Historian 도구를 사용하여 예상치 못한 배터리 사용을 진단할 수 있습니다. |
개인 정보 보호 및 보안
앱에서는 적절한 수준의 권한으로 사용자 데이터와 개인 정보를 안전하게 처리해야 합니다.
Google Play 스토어에 게시된 애플리케이션은 이 체크리스트 외에도 사용자 데이터 정책을 준수하여 사용자의 개인 정보를 보호해야 합니다.
영역 | ID | 테스트 | 설명 |
---|---|---|---|
권한 | SC-P1 | SC-4 | 앱이 당면한 사용 사례를 지원하는 데 필요한 최소 권한만 요청합니다. 위치와 같은 일부 권한의 경우 가능하다면 자세한 위치 대신 대략적 위치를 사용합니다. |
SC-P2 |
앱은 앱의 핵심 사용 사례와 직접 관련된 경우에만 민감한 정보(예: SMS나 통화 기록, 위치)나 비용이 드는 서비스(예: 다이얼러나 SMS)에 액세스하는 권한을 요청해야 합니다. 이러한 권한과 관련된 결과는 사용자에게 명확하게 공개되어야 합니다. 권한을 사용하는 방법에 따라 민감한 정보에 액세스하지 않고도 앱의 사용 사례를 처리하는 다른 방법이 있을 수 있습니다. 예를 들어 사용자의 연락처와 관련된 권한을 요청하는 대신 암시적 인텐트를 사용하여 액세스 권한을 요청하는 것이 더 적절할 수 있습니다. |
||
SC-P3 | CR-0 | 앱은 앱 시작 중에 미리 요청하는 것이 아니라 기능이 요청되면 상황에 따라 런타임 권한을 요청합니다. | |
SC-P4 | CR-0 | 앱은 특정 권한이 필요한 이유를 명확하게 전달하는 UX를 디자인해야 합니다. 이렇게 할 수 없다면 권장되는 흐름에 따라 앱의 기능에 권한이 필요한 이유를 설명해야 합니다. 앱에서는 사용자가 권한을 거부하거나 취소하면 성능을 단계적으로 저하해야 하고 사용자가 전체 앱에 액세스하지 못하도록 하면 안 됩니다. |
|
데이터 및 파일 | SC-DF1 | SC-1 | 모든 민감한 정보는 앱의 내부 저장소에 저장됩니다. |
SC-DF2 | SC-10 | 개인 정보 또는 민감한 사용자 데이터는 시스템 로그나 앱별 로그에 기록되지 않습니다. | |
SC-DF3 | 앱은 식별 목적으로 IMEI와 같은 재설정할 수 없는 하드웨어 ID를 사용해서는 안 됩니다. | ||
ID | SC-ID1 | CR-0 | 계정 사용자 인증 정보와 기타 민감한 정보(신용카드 정보, 실제 주소, 전화번호 등)를 자동 완성하도록 힌트를 제공합니다. |
SC-ID2 | CR-0 | 원활한 로그인 환경을 위해 Android용 원탭을 통합합니다. | |
SC-ID3 | CR-0 | 생체 인식 인증을 통합하여 금융 거래나 민감한 정보(예: 중요한 사용자 문서)를 보호합니다. | |
앱 구성요소 | SC-AC1 | SC-5 | 다른 앱과 데이터를 공유하는 애플리케이션 구성요소나 다른 앱에서 호출해야 하는 구성요소만 내보냅니다.
여기에는 활동, 서비스, broadcast receiver,특히 콘텐츠 제공자가 포함됩니다.
항상 |
SC-AC2 | CR-0 SC-4 |
모든 인텐트 및 브로드캐스트가 권장사항을 따릅니다.
|
|
SC-AC3 | SC-3 | 앱 간에 콘텐츠를 공유하는 모든 콘텐츠 제공자는 맞춤 권한에 android:protectionLevel="signature" 를 사용합니다. 여기에는 활동, 서비스, broadcast receiver, 특히 콘텐츠 제공자가 포함됩니다.
대부분의 앱은 설치된 패키지 목록 액세스에 의존해서는 안 됩니다. Android 11부터 액세스가 제한되었습니다.
|
|
네트워킹 | SC-N1 | SC-9 | 모든 네트워크 트래픽이 SSL을 통해 전송됩니다. |
SC-N2 | SC-6 | 애플리케이션이 네트워크 보안 구성을 선언합니다. | |
SC-N3 | 애플리케이션이 Google Play 서비스를 사용하면 애플리케이션 시작 시 보안 제공자가 초기화됩니다. | ||
라이브러리 | SC-U1 | SP-2 | 모든 라이브러리, SDK, 종속 항목이 최신입니다. |
SC-U2 | 디버그 라이브러리가 프로덕션 앱에 포함되지 않습니다. 이로 인해 성능 및 보안 문제가 발생할 수 있습니다. | ||
WebViews | SC-W1 | SC-6 | 로컬 콘텐츠 액세스를 위해 setAllowUniversalAccessFromFileURLs()를 사용해서는 안 됩니다. 대신 WebViewAssetLoader를 사용하세요. |
SC-W2 | SC-7 | WebView에서는 신뢰할 수 없는 콘텐츠와 함께 addJavaScriptInterface()를 사용해서는 안 됩니다.
Android 6.0 이상에서는 HTML 메시지 채널을 대신 사용하세요. |
|
실행 | SC-E1 | 앱이 앱의 APK 외부에서 코드를 동적으로 로드하지 않습니다. 개발자는 Play Feature Delivery와 Play Asset Delivery가 포함된 Android App Bundle을 사용해야 합니다.
2021년 8월부터 Android App Bundle 사용이 Google Play 스토어의 모든 새 앱에 의무화됩니다. |
|
암호화 | SC-C1 | 앱에서 강력한 플랫폼 제공 암호화 알고리즘과 랜덤 숫자 생성기를 사용합니다. 앱이 맞춤 알고리즘을 구현하지는 않습니다. |
Google Play
앱이 Google Play에 게시될 수 있는지 확인하세요.
영역 | ID | 테스트 | 설명 |
---|---|---|---|
정책 | GP-P1 | GP-all | 앱이 Google Play 개발자 콘텐츠 정책의 약관을 철저히 준수하고 부적절한 콘텐츠를 제공하지 않으며 다른 사람의 지적 재산이나 브랜드 등을 사용하지 않습니다. |
GP-P2 | GP-1 | 앱 콘텐츠 수위가 콘텐츠 등급 가이드라인에 따라 적절히 설정됩니다. | |
앱 세부정보 페이지 | GP-D1 | GP-1 GP-2 |
앱의 그래픽 이미지가 이 지원 도움말에 설명된 가이드라인을 따릅니다. 다음 사항을 확인하세요.
|
GP-D2 | GP-1 | 앱 스크린샷 및 동영상이 비 Android 기기를 표시하거나 언급하지 않습니다. | |
GP-D3 | GP-1 | 앱 스크린샷 또는 동영상이 앱의 콘텐츠와 환경을 잘못된 방식으로 나타내지 않습니다. | |
사용자 지원 | GP-X1 | GP-1 | Google Play 페이지의 리뷰 탭에서 일반 사용자가 보고하는 버그가 많은 다른 기기에서 재현될 수 있고 발생하는 경우 처리됩니다. 일부 기기에서만 버그가 발생하는 경우라도 해당 기기가 매우 인기 있거나 신기종인 경우에는 버그를 해결해야 합니다. |
테스트 환경 설정
이 체크리스트의 테스트 환경을 설정하려면 다음을 실행하는 것이 좋습니다.
- 에뮬레이터 테스트에 집중 - Android Emulator를 통해 다양한 Android 버전 및 화면 해상도에서 앱을 손쉽게 테스트할 수 있습니다. 에뮬레이션된 기기(AVD)를 설정하여 타겟 사용자층의 가장 일반적인 폼 팩터와 하드웨어/소프트웨어 조합을 나타내도록 해야 합니다.
- 하드웨어 기기 - 테스트 환경에는 현재 소비자가 사용할 수 있는 주요 폼 팩터와 하드웨어/소프트웨어 조합을 나타내는 소수의 실제 하드웨어 기기가 포함되어야 합니다. 시장에 출시된 모든 기기를 테스트할 필요는 없습니다. 폼 팩터 하나당 한 대나 두 대의 기기를 사용하여 소수의 대표적인 기기에 초점을 맞춰야 합니다.
- 기기 테스트 실험실 - Firebase Test Lab과 같은 타사 서비스를 사용하여 광범위한 기기에서 앱을 테스트할 수도 있습니다.
- 최신 Android 버전으로 테스트 - 타겟 사용자층의 대표적인 Android 버전을 테스트하는 것 외에도 항상 최신 버전의 Android(현재 Android 11)를 대상으로 테스트해야 합니다. 이렇게 하면 최신 동작 변경사항이 사용자 환경에 부정적인 영향을 미치지 않습니다.
단위 테스트, 통합 테스트, UI 테스트 등 테스트에 관한 종합 안내는 Android 테스트 기초를 참고하세요.
테스트 절차
이러한 테스트 절차를 통해 앱에서 다양한 유형의 품질 문제를 발견할 수 있습니다. 테스트를 결합하거나 테스트 그룹을 자체 테스트 계획에 통합할 수 있습니다. 이러한 테스트 절차와 기준을 연결하는 참조 자료는 위 섹션을 확인하세요.
유형 | 테스트 | 설명 |
---|---|---|
핵심 테스트 도구 모음 | CR-0 | 모든 화면, 대화상자, 설정, 모든 사용자 플로우 등과 같은 앱의 모든 부분으로 이동합니다.
|
CR-1 | 각 앱 화면에서 기기의 홈 키를 누르거나 동작 탐색에서 위로 스와이프하고 모든 앱 화면에서 앱을 다시 실행합니다. | |
CR-2 | 각 앱 화면에서 실행 중인 다른 앱으로 전환한 다음 최근 앱 전환을 사용하여 테스트 중인 앱으로 돌아갑니다. | |
CR-3 | 각 앱 화면(및 대화상자)에서 뒤로 버튼을 누르거나 뒤로 스와이프 동작을 사용합니다. | |
CR-5 | 각 앱 화면에서 가로 모드와 세로 모드가 바뀌도록 기기를 세 번 이상 회전합니다. | |
CR-6 | 다른 앱으로 전환하여 테스트 앱을 백그라운드로 보냅니다. 설정으로 이동하여 테스트 앱에 백그라운드로 실행 중인 서비스가 있는지 확인합니다. Android 4.0 이상에서는 앱 화면으로 이동하여 '실행 중' 탭에서 앱을 찾습니다. | |
CR-7 | 전원 버튼을 눌러 기기를 절전 모드로 전환한 다음 전원 버튼을 다시 눌러 화면의 절전 모드를 해제합니다. | |
CR-8 | 기기에 화면 잠금을 설정합니다. 전원 버튼을 눌러 기기를 절전 모드로 전환합니다(기기가 잠김). 그런 다음 전원 버튼을 다시 눌러 화면의 절전 모드를 해제하고 기기를 잠금 해제합니다. | |
CR-9 | 알림 창에서 앱이 표시할 수 있는 모든 유형의 알림을 트리거하고 관찰합니다. 적용되는 경우(Android 4.1 이상) 알림을 확장하고 사용 가능한 모든 작업을 탭합니다. | |
CR-10 | 잠자기 및 앱 대기의 다른 사용 사례 지원을 검토합니다. | |
SD 카드에 설치 | SD-1 | 기기의 SD 카드에 설치된 앱으로 핵심 테스트 도구 모음을 반복합니다(앱에서 이 설치 방법을 지원하는 경우).
앱을 SD 카드로 이동하려면 설정 > 앱 정보 > SD 카드로 이동을 사용하면 됩니다. |
성능 및 안정성 | SP-1 | Android 매니페스트 파일과 빌드 구성을 검토하여 애플리케이션이 사용할 수 있는 최신 SDK(targetSdk 및 compileSdk )를 대상으로 빌드되었는지 확인합니다.
|
SP-2 | build.gradle 파일에서 오래된 종속 항목이 있는지 확인합니다. |
|
SP-3 | Android 스튜디오 린트 도구를 사용하여 비 SDK 인터페이스 사용을 감지합니다. 다른 대체 테스트 방법도 있습니다. | |
성능 모니터링 | PM-1 | StrictMode 프로파일링이 사용 설정된 상태에서 핵심 테스트 도구 모음을 반복합니다.
가비지 컬렉션 및 사용자 환경에 미치는 영향에 세심한 주의를 기울이세요. |
배터리 | BA-1 | 잠자기 및 앱 대기 주기에서 핵심 테스트 도구 모음을 반복합니다.
알람, 타이머, 알림, 동기화 등에 세심한 주의를 기울이세요. 요구사항 및 가이드라인에 관해서는 잠자기 및 앱 대기로 테스트를 참고하세요. |
보안 | SC-1 | 외부 저장소에 저장된 모든 데이터를 검토합니다. |
SC-2 | 외부 저장소에서 로드된 데이터가 처리되는 방식을 검토합니다. | |
SC-3 | Android 매니페스트 파일에서 정의된 모든 콘텐츠 제공자를 검토합니다. 각 제공자에 적절한 protectionLevel 이 있는지 확인합니다.
|
|
SC-4 | 앱에 필요한 모든 권한을 매니페스트 파일에서, 런타임 시, 기기의 앱 설정 화면(설정 > 앱 정보)에서 검토합니다. | |
SC-5 | 적절한 내보내기 상태에 관해 Android 매니페스트 파일에서 정의된 모든 애플리케이션 구성요소를 검토합니다. 내보내기 속성은 모든 구성요소에 명시적으로 설정되어야 합니다. | |
SC-6 | 앱의 네트워크 보안 구성을 검토하여 구성의 린트 검사가 실패하지 않도록 합니다. | |
SC-7 | 각 WebView의 경우 자바스크립트가 필요한 페이지로 이동합니다. | |
SC-8 | 각 WebView에서 앱이 직접 로드하지 않은 사이트와 콘텐츠로 이동하려고 합니다. | |
SC-9 | 일반 텍스트 트래픽을 사용 중지한 후 앱을 테스트하는 네트워크 보안 구성을 선언합니다. | |
SC-10 | 기기 로그를 관찰하면서 애플리케이션을 실행하고 모든 핵심 기능을 작동시킵니다. 사용자 개인 정보는 기록되지 않아야 합니다. | |
Google Play | GP-1 | Google Play Console에 로그인하여 개발자 프로필, 앱 설명, 스크린샷, 그래픽 이미지, 콘텐츠 등급, 사용자 피드백을 검토합니다. |
GP-2 | 그래픽 이미지와 스크린샷을 다운로드한 후 타겟팅하는 기기 및 폼 팩터의 디스플레이 크기에 맞게 축소합니다. | |
GP-3 | 그래픽 저작물, 미디어, 텍스트, 코드 라이브러리, 앱 또는 확장 파일 다운로드에 패키지로 포함된 기타 콘텐츠를 모두 검토합니다. |
StrictMode로 테스트
성능 테스트의 경우 앱에서 StrictMode
를 사용 설정하고 이를 사용하여 성능과 네트워크 액세스, 파일 읽기/쓰기 등에 영향을 미칠 수 있는 작업을 포착하는 것이 좋습니다. 기본 스레드와 다른 스레드에서 모두 문제가 발생할 수 있는 작업을 찾습니다.
StrictMode.ThreadPolicy.Builder
를 사용하여 스레드별 모니터링 정책을 설정하고 detectAll()
을 사용하여 ThreadPolicy
에서 모든 지원되는 모니터링을 사용 설정할 수 있습니다.
penaltyFlashScreen()
를 사용하여 ThreadPolicy
정책 위반의 시각적 알림을 사용 설정해야 합니다.