
Android 사용자는 고품질 앱을 기대합니다. 앱 품질은 설치, 사용자 평점 및 리뷰, 사용자 확보 및 유지 측면에서 앱의 장기적 성공에 직접적인 영향을 미칩니다.
이 페이지에서는 단순한 사용자 인터페이스 품질 기준 및 관련 테스트를 통해 앱의 핵심적인 품질을 평가하도록 도와줍니다. 모든 Android 앱은 이 기준을 충족해야 합니다.
앱을 게시하기 전에 이 기준에 대한 테스트를 거쳐 다양한 기기에서 잘 작동하는지, 탐색 및 디자인에 대한 Android 표준을 충족하는지 확인하고 Google Play 스토어에서 홍보 기회를 잡으세요. 여기에서 설명하는 범위 이상으로 테스트를 수행할 수 있습니다. 이 문서의 목적은 테스트 계획에 모든 앱이 표시해야 하는 필수 품질 특성을 포함할 수 있도록 이러한 항목을 명시하는 것입니다.
태블릿이나 TV와 같은 기타 Android 기기용 앱을 제작하는 경우 고려해야 하는 추가 품질 가이드라인이 있습니다.
시각적 디자인 및 사용자 상호작용
이 기준은 앱이 일관되고 직관적인 사용자 환경을 위해 필요한 경우 표준 Android 시각적 디자인 및 상호작용 패턴을 제공하도록 보장합니다.
영역 | ID | 설명 | 테스트 |
---|---|---|---|
표준 디자인 | UX-B1 |
앱이 Android 디자인 가이드라인을 따르고 공통 UI 패턴 및 아이콘을 사용합니다.
|
CR-all |
탐색 | UX-N1 |
앱이 표준 시스템의 뒤로 버튼 탐색을 지원하고 화면에 표시되는 사용자 지정 "뒤로 버튼" 프롬프트를 사용하지 않습니다. |
CR-3 |
UX-N2 |
뒤로 버튼을 사용하여 모든 대화상자를 취소할 수 있습니다. |
CR-3 | |
UX-N3 | 어디서든지 홈 버튼을 누르면 기기의 홈 화면으로 이동합니다. | CR-1 | |
알림 | UX-S1 |
알림이 Android 디자인 가이드라인을 따릅니다. 구체적인 내용은 다음과 같습니다.
|
CR-11 |
UX-S2 |
앱이 다음과 같은 경우에만 알림을 사용합니다.
|
CR-11 |
기능
이 기준은 앱이 적절한 권한 수준으로 예상되는 기능 동작을 제공하도록 보장합니다.
영역 | ID | 설명 | 테스트 |
---|---|---|---|
권한 | FN-P1 | 앱이 핵심 기능을 지원하는 데 필요한 절대적으로 최소한의 권한만 요청합니다. | SC-4 |
FN-P2 |
앱이 핵심 기능과 관련되지 않은 경우 사용자에게 비용을 발생시킬 수 있는 서비스(예: 다이얼러 또는 SMS) 또는 민감한 데이터(예: 연락처 또는 시스템 로그)에 대한 액세스 권한을 요청하지 않습니다. |
||
설치 위치 | FN-L1 |
앱이 SD 카드에 설치된 경우 정상적으로 작동합니다(앱에서 지원하는 경우). SD 카드에 설치 지원은 대부분의 대형 앱(10MB 이상)에서 권장됩니다. SD 카드에 설치를 지원해야 하는 앱 유형에 대한 자세한 내용은 앱 설치 위치 개발자 가이드를 참조하세요. |
SD-1 |
오디오 | FN-A1 | 핵심 기능이 아닌 경우 화면이 꺼지면 오디오가 재생되지 않습니다(예: 앱이 뮤직 플레이어인 경우). | CR-7 |
FN-A2 | 핵심 기능이 아닌 경우 오디오가 잠금 화면 상태에서 재생되지 않습니다. | CR-8 | |
FN-A3 | 핵심 기능이 아닌 경우 오디오가 메인 스크린이나 다른 앱에서 재생되지 않습니다. | CR-1, CR-2 | |
FN-A4 | 앱이 포그라운드로 돌아오면 오디오가 다시 시작되거나 사용자에게 재생이 일시 중지된 상태임을 알립니다. | CR-1, CR-8 | |
UI 및 그래픽 | FN-U1 |
앱이 가로 모드와 세로 모드를 모두 지원합니다(가능한 경우). 방향은 대체로 동일한 기능과 동작을 표시하고 기능 패리티를 보존합니다. 콘텐츠 또는 뷰의 사소한 변경은 허용됩니다. |
CR-5 |
FN-U2 |
앱이 두 방향 모두에서 전체 화면을 사용하고, 방향 변경을 나타내기 위한 레터박스는 사용하지 않습니다. 화면 구성의 미세한 차이를 보정하기 위한 사소한 레터박스는 허용됩니다. |
CR-5 | |
FN-U3 |
앱이 렌더링 문제 없이 표시 방향 전환을 신속하고 정확하게 처리합니다. |
CR-5 | |
사용자/앱 상태 | FN-S1 |
앱의 핵심 기능과 관련되지 않은 한, 앱이 백그라운드 상태일 때 실행 중인 서비스가 있어서는 안 됩니다. 예를 들어, 앱이 알림을 위해 네트워크 연결을 유지하거나 블루투스 연결을 유지하거나 GPS를 켜진 상태로 유지하는 서비스를 실행 상태로 두어서는 안 됩니다. |
CR-6 |
FN-S2 |
앱이 사용자 또는 앱 상태를 정확히 보존하고 복원합니다. 앱이 포그라운드 상태를 벗어날 때 사용자 또는 앱 상태를 보존하고 뒤로가기 및 기타 상태 변경으로 인해 우발적으로 데이터를 잃는 것을 방지합니다. 앱이 포그라운드 상태로 돌아올 때 앱 또는 게임의 편집 가능한 필드, 게임 진행 상황, 메뉴, 동영상, 기타 섹션의 변경 내용 등 보류 중인 중요한 상태 저장 트랜잭션과 보존된 상태를 복원해야 합니다.
|
CR-1, CR-3, CR-5 |
호환성, 성능 및 안정성
이 기준은 앱이 사용자가 기대하는 호환성, 성능, 안정성 및 응답성을 제공하도록 보장합니다.
영역 | ID | 설명 | 테스트 |
---|---|---|---|
안정성 | PS-S1 | 앱이 대상 기기에서 비정상 종료되거나 강제로 닫히거나 멈추거나 비정상적으로 작동합니다. | CR-all, SD-1, HA-1 |
성능 | PS-P1 | 앱이 빨리 로드되거나, 로드하는 데 3초 이상 걸리는 경우 화면에 피드백을 표시합니다(진행률 표시기 또는 유사 기능). | CR-all, SD-1 |
PS-P2 | StrictMode가 활성화된 상태에서(아래 StrictMode 테스트 참조) 앱의 게임 실행, 애니메이션 및 UI 전환, 기타 부분 실행 등 앱을 실행할 때 빨간색 깜박임(StrictMode의 성능 경고)이 표시되지 않습니다. | PM-1 | |
SDK | PS-T1 | 앱이 핵심 기능의 비정상 종료나 손실 없이 Android 플랫폼의 최신 공개 버전에서 실행됩니다. | CR-0 |
PS-T2 |
앱이 최신 SDK를 대상으로 하도록 targetSdk 값을 설정해 플랫폼에서 제공되는 각종 포환성 폴백 사용을 최소화합니다.
|
SP-1 | |
PS-T3 |
compileSdk 값을 설정해 앱을 최신 SDK로 빌드합니다.
|
SD-1 | |
배터리 | PS-B1 | 앱이 Android 6.0+(잠자기 및 앱 대기 모드) 이상에서 전원 관리를 적절히 지원합니다. 전원 관리가 핵심 기능을 방해하는 경우 자격이 있는 앱만 면제를 요청할 수 있습니다. | BA-1 |
미디어 | PS-M1 | 정상적인 앱 사용 및 로드 시 음악 및 동영상 재생이 매끄럽고 잡음이나 끊김 또는 기타 아티팩트가 없습니다. | CR-all, SD-1, HA-1 |
시각적 품질 | PS-V1 |
앱이 현저한 왜곡, 흐림 또는 모자이크 현상 없이 그래픽, 텍스트, 이미지 및 기타 UI 요소를 표시합니다.
|
CR-all |
PS-V2 |
앱이 허용되는 방식으로 텍스트 및 텍스트 블록을 표시합니다.
|
보안
이들 기준은 앱이 사용자 데이터와 개인정보를 안전하게 처리하도록 합니다.
Google Play 스토어에 게시된 애플리케이션은 이 체크리스트 외에 사용자 데이터 정책도 따라 사용자의 개인정보를 보호해야 합니다.
영역 | ID | 설명 | 테스트 |
---|---|---|---|
데이터 | SC-D1 | 모든 비공개 데이터는 앱의 내부 저장소에 저장됩니다. | SC-1 |
SC-D2 | 외부 저장소의 모든 데이터는 확인을 거친 후에 액세스합니다. | SC-2 | |
SC-D3 |
모든 인텐트 및 브로드캐스트가 보안 모범 사례를 따릅니다. |
||
SC-D4 | 개인정보 또는 민감한 사용자 데이터를 시스템 또는 앱 특정 로그에 기록하지 않습니다. | SC-10 | |
앱 구성 요소 | SC-P1 |
애플리케이션 구성요소 중 다른 앱과 데이터를 공유하는 것 또는 다른 앱이 호출해야 하는 구성요소만 내보냅니다. 여기에는 액티비티, 서비스, broadcast receiver 및 특히 콘텐츠 제공자가 포함됩니다.
항상 |
SC-5 |
SC-P2 | 다른 앱과 콘텐츠를 공유하는 모든 애플리케이션 구성요소가 적절한 권한을 정의(및 적용)합니다. 여기에는 액티비티, 서비스, broadcast receiver 및 특히 콘텐츠 제공자가 포함됩니다. | SC-4 | |
SC-P3 |
앱 간에 콘텐츠를 공유하는 모든 콘텐츠 제공자가 android:protectionLevel="signature" 를 사용합니다.
|
SC-3 | |
네트워킹 | SC-N1 | 모든 네트워크 트래픽이 SSL을 거쳐 전송됩니다. | SC-9 |
SC-N2 | 애플리케이션이 네트워크 보안 구성을 선언합니다. | ||
SC-N3 | 애플리케이션이 Google Play services를 사용하면 애플리케이션 시작 시 보안 제공자가 초기화됩니다. | ||
라이브러리 | SC-U1 | 모든 라이브러리, SDK, 종속성이 최신 상태입니다. | |
WebViews | SC-W1 | 모든 WebView에서 JavaScript가 중지됩니다(필요한 경우는 예외). | SC-6 |
SC-W2 | WebView가 허용 목록 콘텐츠만 로드합니다(가능한 경우). | SC-8 | |
SC-W3 |
WebView가 신뢰할 수 없는 콘텐츠에 Android M 이상에서 HTML 메시지 채널을 대신 사용할 수 있습니다. |
SC-7 | |
실행 | SC-E1 | 앱이 앱의 APK 외부에서 동적으로 코드를 로드하지 않습니다. | |
암호화 | SC-C1 | 앱이 강력한 플랫폼 제공 암호화 알고리즘을 사용하며, 사용자설정 알고리즘을 구현하지 않습니다. | |
SC-C2 | 앱이 안전한 난수 생성기를 사용하여 암호화 키를 초기화합니다. |
Google Play
이 기준은 앱을 Google Play에 게시할 수 있도록 보장합니다.
영역 | ID | 설명 | 테스트 |
---|---|---|---|
정책 | GP-P1 | 앱이 Google Play 개발자 콘텐츠 정책의 약관을 철저히 준수하고, 부적절한 콘텐츠를 제공하지 않으며 다른 사람의 지적 재산권이나 브랜드 등을 사용하지 않습니다. | GP-all |
GP-P2 |
앱 콘텐츠 수위가 콘텐츠 등급 가이드라인에 따라 적절히 설정되었습니다. |
GP-1 | |
GP-P3 |
앱이 Android 6.0+(잠자기 및 앱 대기 모드) 이상에서 전원 관리를 적절히 지원합니다. 전원 관리가 핵심 기능을 방해하는 경우 자격이 있는 앱만 면제를 요청할 수 있습니다. 잠자기 및 앱 대기 모드의 다른 사용 사례 지원을 참조하세요. |
GP-4 | |
앱 세부정보 페이지 | GP-D1 |
앱 피처 그래픽이 이 블로그 게시물에 나오는 가이드라인을 따릅니다. 다음 사항을 확인하세요.
|
GP-1, GP-2 |
GP-D2 | 앱 스크린샷 및 동영상이 비 Android 기기를 표시하거나 참조하지 않습니다. | GP-1 | |
GP-D3 | 앱 스크린샷 또는 동영상이 앱의 콘텐츠와 환경을 잘못된 방식으로 나타내지 않습니다. | ||
사용자 지원 | GP-X1 | Google Play 페이지의 Reviews 탭에서 일반 사용자가 보고하는 버그가 재현될 수 있고 많은 다른 기기에서 발생하는 경우 처리됩니다. 일부 기기에서만 버그가 발생하는 경우라도 해당 기기가 매우 인기 있거나 신기종인 경우에는 버그를 해결해야 합니다. | GP-1 |
테스트 환경 설정
앱의 품질을 평가하려면 테스트용으로 적합한 하드웨어 또는 에뮬레이터 환경을 설정해야 합니다.
이상적인 테스트 환경으로는 현재 소비자가 이용할 수 있는 핵심 폼 팩터와 하드웨어/소프트웨어 조합을 대표하는 몇 가지의 실제 하드웨어 기기가 있습니다. 시장에 출시된 모든 기기에서 테스트할 필요는 없습니다. 오히려 폼 팩터당 한두 대의 기기를 사용하더라도 소수의 대표 기기에 초점을 맞춰야 합니다.
테스트용 실제 하드웨어 기기를 구할 수 없는 경우 가장 일반적인 폼 팩터와 하드웨어/소프트웨어 조합을 나타내는 에뮬레이트된 기기(AVD)를 구성해야 합니다.
기본 테스트 이상을 수행하려면 더 많은 기기, 폼 팩터 또는 새 하드웨어/소프트웨어 조합을 테스트 환경에 추가하면 됩니다. 테스트 개수나 테스트의 복잡성 및 품질 기준을 높일 수도 있습니다.
테스트 절차
이 테스트 절차를 통해 앱에서 다양한 유형의 품질 문제를 찾아낼 수 있습니다. 테스트를 조합하거나 테스트 그룹을 본인의 테스트 계획에 통합할 수 있습니다. 이러한 테스트 절차와 기준을 연결하는 참조 자료는 위의 섹션을 참조하세요.
유형 | 테스트 | 설명 |
---|---|---|
핵심 테스트 도구 모음 | CR-0 |
앱의 모든 부분(모든 화면, 대화상자, 설정 및 모든 사용자 플로우)을 탐색합니다.
|
CR-1 | 각 앱 화면에서 기기의 홈 키를 누른 다음 모든 앱 화면에서 앱을 다시 시작합니다. | |
CR-2 | 각 앱 화면에서 실행 중인 다른 앱으로 전환한 다음 최근 앱 전환기를 사용하여 테스트 중인 앱으로 돌아갑니다. | |
CR-3 | 각 앱 화면(및 대화 상자)에서 Back 버튼을 누릅니다. | |
CR-5 | 각 앱 화면에서 가로 모드와 세로 모드가 바뀌도록 기기를 세 번 이상 회전합니다. | |
CR-6 | 다른 앱으로 전환하여 테스트 앱을 백그라운드로 보냅니다. 설정으로 이동하여 테스트 앱에 백그라운드로 실행 중인 서비스가 있는지 확인합니다. Android 4.0 이상에서는 앱 화면으로 이동하여 "실행 중" 탭에서 앱을 찾습니다. | |
CR-7 | 전원 버튼을 눌러 기기를 절전 모드로 전환한 다음 전원 버튼을 다시 눌러 화면의 절전 모드를 해제합니다. | |
CR-8 | 전원 버튼을 누르면 기기를 잠금 설정합니다. 전원 버튼을 눌러 기기를 절전 모드로 전환한 다음, 전원 버튼을 다시 눌러 화면의 절전 모드를 해제하고 기기의 잠금을 해제합니다. | |
CR-9 | 기기에 슬라이드아웃 키보드가 있는 경우 키보드를 한 번 이상 슬라이드인 또는 슬라이드아웃합니다. 기기에 키보드 도크가 있는 경우 기기를 키보드 도크에 장착합니다. | |
CR-10 | 기기에 외부 디스플레이 포트가 있는 경우 외부 디스플레이를 연결합니다. | |
CR-11 | 알림 창에서 앱이 표시할 수 있는 모든 유형의 알림을 트리거하고 관찰합니다. 적용 가능한 경우(Android 4.1 이상) 알림을 확장하고 제공된 모든 작업을 탭합니다. | |
SD 카드에 설치 | SD-1 |
기기 SD 카드에 앱이 설치된 상태에서 핵심 테스트 도구 모음을 반복합니다(앱에서 지원하는 경우). 앱을 SD 카드로 이동하려면 설정 > 앱 정보 > SD 카드로 이동을 사용하면 됩니다. |
하드웨어 가속 | HA-1 |
하드웨어 가속이 활성화된 상태에서 핵심 테스트 도구 모음을 반복합니다.
하드웨어 가속을 강제로 활성화하려면(기기에서 지원하는 경우) |
성능 및 안정성 | SP-1 | Android 매니페스트 파일을 검토하고 구성을 빌드하여 애플리케이션이 이용할 수 있는 최신 SDK(targetSdk 및 compileSdk )에 대해 빌드되었는지 확인합니다.
|
성능 모니터링 | PM-1 |
아래 설명처럼 StrictMode 프로파일링이 활성화된 상태에서 핵심 테스트 도구 모음을 반복합니다. 가비지 컬렉션 및 사용자 환경에 미치는 영향에 세심한 주의를 기울이세요. |
배터리 | BA-1 |
잠자기 및 앱 대기 모드에서 핵심 테스트 도구 모음을 반복합니다. 알람, 타이머, 알림, 동기화 등에 세심한 주의를 기울이세요. 요구사항 및 가이드라인에 대해서는 잠자기 및 앱 대기 모드로 테스트를 참조하세요. |
보안 | SC-1 | 외부 저장소에 저장된 모든 데이터를 검토합니다. |
SC-2 | 외부 저장소에서 로드된 데이터의 처리 및 프로세스 방식을 검토합니다. | |
SC-3 |
적절한 protectionLevel 에 대해 Android 매니페스트 파일에 정의된 모든 콘텐츠 제공자를 검토합니다.
|
|
SC-4 | 앱에 필요한 모든 권한을 매니페스트 파일, 런타임, 기기의 앱 설정(설정 > 앱 정보)에서 검토합니다. | |
SC-5 | 적절한 내보내기 상태에 대해 Android 매니페스트 파일에 정의된 모든 애플리케이션 구성요소를 검토합니다. 내보내기 속성은 모든 구성요소에 대해 명시적으로 설정되어야 합니다. | |
SC-6 | 앱의 네트워크 보안 구성을 검토하여 구성의 린트 점검이 실패하지 않도록 합니다. | |
SC-7 | 각 WebView에 대해 JavaScript가 필요한 페이지로 이동합니다. | |
SC-8 | 각 WebView에 대해 제어할 수 없는 영역의 사이트 및 콘텐츠로의 이동을 시도합니다. | |
SC-9 | 일반 텍스트 트래픽을 중지한 후 앱을 실행하는 네트워크 보안 구성을 선언합니다. | |
SC-10 | 기기 로그를 관찰하면서 애플리케이션을 실행하고 모든 핵심 기능을 작동시킵니다. 사용자 개인정보는 로그되지 말아야 합니다. | |
Google Play | GP-1 | Google Play Developer Console에 로그인하여 개발자 프로필, 앱 설명, 스크린샷, 피처 그래픽, 콘텐츠 등급 및 사용자 피드백을 검토합니다. |
GP-2 | 대표 그래픽과 스크린샷을 다운로드하고 대상으로 하는 기기 및 폼 팩터의 디스플레이 크기에 맞게 배율을 축소합니다. | |
GP-3 | 앱 또는 확장 파일 다운로드에 패키징된 모든 그래픽 자산, 미디어, 텍스트, 코드 라이브러리 및 기타 콘텐츠를 검토합니다. | |
GP-4 | 잠자기 및 앱 대기 모드의 다른 사용 사례 지원을 검토하세요. | |
결제 | GP-4 | 앱의 모든 화면을 탐색하고 모든 인앱 구매 흐름으로 진입합니다. |
StrictMode로 테스트
성능을 테스트하려면 앱에서 StrictMode
를 활성화하고 이를 사용하여 성능, 네트워크 액세스, 파일 읽기/쓰기 등에 영향을 줄 수 있는 기본 스레드 및 기타 스레드에서 작업을 캐치하는 것이 좋습니다.
StrictMode.ThreadPolicy.Builder
를 사용하여 스레드별 모니터링 정책을 수립하고 detectAll()
을 사용하여 ThreadPolicy
에서 지원되는 모든 모니터링을 활성화할 수 있습니다.
penaltyFlashScreen()
을 사용하여 ThreadPolicy
정책 위반의 시각적 알림을 활성화합니다.