Windows 스토어 앱 테스트 및 배포: Hilo(C++ 및 XAML)

출처: C++ 및 XAML을 사용하여 종단 간 Windows 스토어 앱 개발: Hilo

Patterns & Practices 로고

이전 페이지 | 다음 페이지

Hilo C++는 테스트 가능하게 디자인되었으며 앱을 디자인할 때도 동일한 작업을 수행하는 것이 좋습니다. Hilo C++에 대해 단위 테스트, 통합 테스트, 사용자 환경 테스트, 보안 테스트, 지역화 테스트, 성능 테스트 및 장치 테스트를 만들어 수행했습니다.

다운로드

Hilo 샘플 다운로드
설명서(PDF) 다운로드

코드를 다운로드한 후 지침은 Hilo 시작을 참조하세요.

배울 내용

  • Microsoft Visual Studio에서 사용할 수 있는 테스트 도구를 사용하는 방법
  • 다양한 테스트 모드가 앱의 안정성 및 정확성에 미치는 영향

적용 대상

  • Windows 런타임
  • Visual C++ 구성 요소 확장(C++/CX)
  • XAML

앱을 테스트하는 방법

다양한 방법으로 앱을 테스트할 수 있습니다. Hilo에 대해 선택한 방법은 다음과 같습니다.

  • 단위 테스트는 개별 기능을 격리해서 테스트합니다. 단위 테스트의 목표는 오류가 시스템 전체에 전파되지 않도록 각 기능 단위가 예상대로 수행되는지 확인하는 것입니다. 발생 위치에서 버그를 검색하는 것이 두 번째 실패 지점에서 간접적으로 버그 결과를 관찰하는 것보다 더 효과적입니다.
  • 통합 테스트는 앱의 구성 요소가 함께 올바르게 작동하는지 확인합니다. 통합 테스트는 사실적인 방법으로 앱 기능을 실행합니다. Hilo에서 이 종류의 테스트는 보기 모델의 메서드를 호출하므로 사용자가 구분할 수 있습니다. 보기 모델에서 보기를 분리하면 통합 테스트가 가능합니다.
  • UX(사용자 환경) 테스트는 사용자 인터페이스와 직접 통합됩니다. 이 종류의 테스트에는 사용자 개입이 필요한 경우가 많습니다. 자동화된 통합 테스트는 일부 UX 테스트를 대체할 수 있지만 완전히 제거할 수는 없습니다.
  • 보안 테스트는 잠재적 보안 취약성에 중점을 둡니다. 이 테스트는 가능한 공격 클래스를 식별하는 위협 모델을 기반으로 합니다.
  • 지역화 테스트는 앱이 모든 언어 환경에서 작동하는지 확인합니다.
  • 성능 테스트는 앱이 실행될 때 시간을 사용하는 방법을 식별합니다. 대부분의 경우 성능 테스트는 앱의 CPU 시간을 많이 사용하는 병목이나 루틴을 찾을 수 있습니다.
  • 장치 테스트는 앱이 지원하는 하드웨어 범위에서 제대로 작동하는지 확인합니다. 예를 들어 앱이 다양한 화면 해상도와 터치 입력 기능에서 작동하는지 테스트하는 것이 중요합니다.

이 페이지의 나머지 부분에서는 Hilo 테스트에 사용한 도구에 대해 설명합니다.

[맨 위]

Visual Studio 단위 테스트 프레임워크 사용

Hilo에서는 Visual Studio의 단위 테스트 프레임워크를 단위 테스트와 통합 테스트에 사용합니다. Hilo Visual Studio 솔루션의 HiloTests 프로젝트에는 Hilo 테스트를 지원하는 모든 코드가 포함되어 있습니다.

참고  HiloTests 프로젝트가 포함된 Hilo 버전은 patterns & practices - C++ 및 XAML을 사용하는 Windows 스토어 앱 개발: Hilo(영문)에서 다운로드할 수 있습니다.

Hilo Visual Studio 솔루션을 열면 단위 테스트를 검사할 수 있습니다. 메뉴 모음에서 테스트 > Windows > 테스트 탐색기를 선택합니다. 테스트 탐색기 창에는 Hilo의 단위 테스트가 모두 나열됩니다.

테스트 탐색기 창을 보여 주는 Visual Studio의 Hilo 솔루션은 다음과 같습니다.

Visual Studio 테스트 탐색기에 표시된 Hilo 단위 테스트의 스크린샷

테스트 예제는 다음과 같습니다.

RotateImageViewModelTests.cpp


TEST_METHOD(RotateImageViewModelShouldSaveAndLoadRotationAngle)
{
    auto vm = std::make_shared<RotateImageViewModel^>(nullptr);
    auto newVm = std::make_shared<RotateImageViewModel^>(nullptr);

    TestHelper::RunUISynced([this, vm, newVm]() 
    {
        (*vm) = ref new RotateImageViewModel(m_repository, m_exceptionPolicy);
        (*vm)->RotationAngle = 90;
        auto state = ref new Platform::Collections::Map<String^, Object^>();
        (*vm)->SaveState(state);

        (*newVm) = ref new RotateImageViewModel(m_repository, m_exceptionPolicy);
        (*newVm)->LoadState(state);
    });

    Assert::AreEqual((*vm)->RotationAngle,  (*newVm)->RotationAngle);
}


이 코드는 RotateImageViewModel 클래스의 SaveStateLoadState 메서드가 RotationAngle 속성 값을 저장하고 복원하는지 확인합니다. RunUISynced 함수는 단위 테스트 전체에서 비동기 작업을 테스트할 수 있도록 하기 위해 Hilo 테스트 프로젝트에서 정의됩니다.

TEST_METHOD 전처리기 매크로는 C++용 Microsoft 단위 테스트 프레임워크에서 정의됩니다.

Visual Studio의 단위 테스트 도구에 대한 자세한 내용은 단위 테스트를 사용하여 코드 검증을 참조하세요. C++ 코드 테스트에 대한 자세한 내용은 C++용 Microsoft 단위 테스트 프레임워크를 사용하여 C/C++용 단위 테스트 작성을 참조하세요.

[맨 위]

Visual Studio를 사용하여 앱 일시 중단 및 다시 시작 테스트

Windows 스토어 앱을 디버그할 때 디버그 위치 도구 모음에는 실행 중인 앱을 일시 중단, 다시 시작 또는 일시 중단 후 종료할 수 있는 드롭다운 메뉴가 포함됩니다. 이 기능을 사용하여 시스템이 앱을 일시 중단하거나 다시 시작할 때 또는 일시 중단/종료 시퀀스 후에 앱을 활성화할 때 앱이 예상대로 동작하는지 테스트할 수 있습니다.

디버그 위치 도구 모음의 스크린샷

디버거에서 일시 중단하는 작업을 보여 주려는 경우 Visual Studio 디버거에서 Hilo를 실행하고 Hilo의 App:OnSuspendingApp::OnLaunched 메서드에서 중단점을 설정합니다. 그런 다음 디버그 위치 도구 모음에서 일시 중단 및 종료를 선택합니다. 앱이 종료됩니다. 디버거에서 앱을 다시 시작하면 앱이 Terminated 상태에서 다시 시작되기 위한 코드 경로를 따릅니다. Hilo에서 이 논리는 App::OnLaunched 메서드에 있습니다. 자세한 내용은 일시 중단, 다시 시작 및 활성화 처리를 참조하세요.

[맨 위]

시뮬레이터 및 원격 디버거를 사용하여 장치 테스트

Visual Studio에는 다양한 장치 환경에서 Windows 스토어 앱을 실행하는 데 사용할 수 있는 시뮬레이터가 포함되어 있습니다. 예를 들어 시뮬레이터를 사용하여 다양한 화면 해상도와 입력 하드웨어에서 앱이 올바르게 작동하는지 확인할 수 있습니다. 터치를 지원하지 않는 컴퓨터에서 앱을 개발하는 경우에도 터치 제스처를 시뮬레이트할 수 있습니다.

시뮬레이터에서 실행 중인 Hilo는 다음과 같습니다.

시뮬레이터에서 실행 중인 Hilo의 스크린샷

시뮬레이터를 시작하려면 Visual Studio의 디버그 도구 모음에 있는 드롭다운 메뉴에서 시뮬레이터를 선택합니다. 드롭다운 메뉴의 다른 선택 항목은 로컬 컴퓨터원격 컴퓨터입니다.

시뮬레이터 사용 외에도 다양한 하드웨어에서 Hilo를 테스트했습니다. 원격 디버깅을 사용하면 Visual Studio가 없는 컴퓨터에서 앱을 테스트할 수 있습니다. 원격 디버깅에 대한 자세한 내용은 원격 컴퓨터에서 Windows 저장소 앱 실행을 참조하세요.

[맨 위]

테스트에 의사 지역화된 버전 사용

Hilo의 의사 지역화된 버전을 지역화 테스트에 사용했습니다. 자세한 내용은 지역화 가능성 테스트를 참조하세요.

[맨 위]

보안 테스트

Hilo에서는 보안 테스트의 기초로 위협 모델링에 대한 STRIDE 방법론을 사용했습니다. 해당 방법론에 대한 자세한 내용은 STRIDE 방식을 사용한 보안 설계 결함 탐색을 참조하세요.

[맨 위]

디버깅에 WinDbg 사용

정상적인 개발 중의 디버깅을 위해 Visual Studio 디버거를 사용했습니다. 또한 일부 테스트 시나리오에서의 디버깅을 위해 Windows 디버거(WinDbg)를 사용했습니다.

[맨 위]

테스트에 Visual C++ 컴파일러 사용

앱 테스트에 도움이 되도록 Visual C++ 컴파일러를 사용할 수도 있습니다. 예를 들어 static_assert를 사용하여 특정 조건이 컴파일 시간에 true인지 확인하고 런타임에 true여야 하는 조건에 대해서는 assert를 사용합니다. 어설션은 단위 테스트를 지정된 형식과 입력으로 제한하는 데 유용할 수 있습니다.

[맨 위]

전 세계 어디에서나 앱을 사용 가능하게 만들기

세계 시장을 위해 준비하면 더 많은 사용자에게 도달하는 데 도움이 됩니다. 앱 세계화에서는 Windows 스토어 앱을 세계화 및 지역화하여 사용자에게 도달하는 사용자 환경을 만들 수 있도록 도와주는 가이드, 검사 목록 및 작업을 제공합니다. Hilo는 모든 세계 달력 형식을 지원합니다. 리소스 문자열은 아랍어(사우디아라비아), 영어(미국), 독일어(독일) 및 일본어의 4개 언어로 지역화되었습니다.

Hilo를 개발하는 동안 고려해야 했던 몇 가지 문제는 다음과 같습니다.

  • 초기 단계에 지역화에 대해 고려. 흐름 방향과 다른 UX 요소가 다양한 로캘의 사용자에게 미치는 영향을 고려했습니다. 또한 초기 단계에 문자열 지역화를 통합하여 전체 프로세스 관리가 용이하도록 했습니다.
  • 각 로캘에 대해 리소스 분리. 각 로캘에 대해 별도의 솔루션 폴더를 유지 관리합니다. 예를 들어 Strings > en-US > Resources.resw에서는 en-US 로캘의 문자열을 정의합니다. 자세한 내용은 빠른 시작: 문자열 리소스 사용한정자를 사용하여 리소스 이름을 지정하는 방법을 참조하세요.
  • 앱 매니페스트 지역화.패키지 매니페스트 지역화의 단계를 따랐습니다. 여기서는 매니페스트 디자이너를 사용하여 앱의 이름, 설명 및 다른 식별 기능을 지역화하는 방법을 설명합니다.
  • UI에 표시되는 각 텍스트 부분이 문자열 리소스에 의해 정의되는지 확인.x:Uid 지시문을 사용하여 지역화된 문자열을 화면에 표시되는 텍스트와 연결하는 지역화 프로세스에 대해 고유 이름을 제공합니다. 예를 들어 기본 페이지에 표시되는 앱 제목을 정의하는 XAML은 다음과 같습니다.

    MainHubView.xaml

    
    <TextBlock x:Name="PageTitle"
               x:Uid="AppName"
               Grid.Column="1"
               Style="{StaticResource PageHeaderTextStyle}"
               Text="{Binding AppName}"/>
    
    
    

    en-US 로캘의 경우 리소스 파일에서 AppName.Text를 "Hilo"로 정의합니다. XAML 런타임에서 이 문자열을 TextBlock 컨트롤의 Text 속성에 연결할 수 있도록 .Text 부분을 지정합니다. 또한 이 기술을 사용하여 도구 설명 텍스트(ContentControl::Content)를 설정합니다.

  • 앱 리소스 파일에 컨텍스트 설명 추가. 리소스 파일의 설명은 지역화하는 사람이 문자열을 더 정확하게 번역하는 데 도움이 됩니다. 예를 들어 DisplayNameProperty 문자열의 경우 지역화하는 사람이 문자열의 사용 위치를 이해하는 데 도움이 되도록 "DisplayName property value for the package manifest."라는 설명을 제공했습니다. 자세한 내용은 지역화를 준비하는 방법을 참조하세요.
  • 모든 페이지에 대한 흐름 방향 정의. 문자열 리소스 파일에서 Page.FlowDirection을 정의하여 모든 페이지에 대한 흐름 방향을 설정합니다. 왼쪽에서 오른쪽으로 읽는 순서를 사용하는 언어(예: 영어 및 독일어)의 경우 해당 값으로 "LeftToRight"를 정의합니다. 오른쪽에서 왼쪽으로 읽는 언어(예: 아랍어 및 히브리어)의 경우 이 값을 "RightToLeft"로 정의합니다. 또한 리소스 파일에서 AppBar.FlowDirection을 정의하여 모든 앱 바에 대한 흐름 방향을 정의했습니다.
  • 리소스 파일에서 예외 메시지를 읽어오는지 확인. 처리되지 않은 예외에 대해 예외 메시지 문자열이 사용자에게 표시될 수 있으므로 이러한 문자열을 지역화하는 것이 중요합니다. Hilo는 문자열 리소스를 로드하는 IResourceLoader 인터페이스를 정의합니다.

    IResourceLoader.h

    
    public interface class IResourceLoader
    {
        Platform::String^ GetString(Platform::String^ value);
    };
    
    
    

    LocalResourceLoader 클래스는 IResourceLoader에서 파생되며 ResourceLoader 클래스를 사용하여 리소스 파일에서 문자열을 로드합니다.

    LocalResourceLoader.cpp

    
    String^ LocalResourceLoader::GetString(String^ value)
    {
        auto loader = ref new ResourceLoader();
        return loader->GetString(value);
    }
    
    
    

    Windows 런타임 예외가 발생할 때 메시지를 제공하는 경우 LocalResourceLoader 클래스를 사용하여 메시지 텍스트를 읽습니다. 예제는 다음과 같습니다.

    WideFiveImageTile.cpp

    
    void WideFiveImageTile::SetImageFilePaths(const vector<wstring>& fileNames)
    {
        if (fileNames.size() > MaxTemplateImages)
        {
            throw ref new FailureException(m_loader->GetString("ErrorWideTileTooBig"));
        }
    
        m_fileNames = fileNames;
    }
    
    
    

    en-US 로캘의 경우 "ErrorWideTileTooBig"을 "Wide tile can only take up to 5 images."로 정의합니다. 다른 로캘에는 동일한 오류를 전달하는 메시지가 있습니다. 예를 들어 Strings/ja-JP/Resources.resw 파일에는 동등한 일본어 문자열인 "ワイドタイルは5イメージまでしか"가 포함됩니다.

    참고  테스트를 위해 IResourceLoader 인터페이스를 정의합니다. HiloTests 프로젝트에서 지역화된 문자열 대신 하드 코드된 문자열을 사용하는 StubResourceLoader 클래스를 정의합니다. 이런 방식으로 모의 데이터를 사용하면 특정 기능에 집중하도록 테스트를 쉽게 격리할 수 있습니다.
  • Calendar 클래스를 사용하여 세계 달력 지원. Hilo는 Windows::Globalization::Calendar 클래스의 메서드와 속성을 사용합니다. 예를 들어 Hilo는 각 연도에 항상 12개월이 있다고 가정하는 대신 Calendar::NumberOfMonthsInThisYear 속성을 가져와서 현재 연도의 월 수를 확인합니다. Hilo의 달력 논리는 CalendarExtensions.cpp 파일에 있습니다.

제어판에서 기본 언어 목록을 구성하여 앱의 지역화를 테스트할 수 있습니다. 전 세계 어디에서나 앱을 사용 가능하게 만드는 방법에 대한 자세한 내용은 지역화를 준비하는 방법, Guidelines for app resources빠른 시작: UI 리소스 번역을 참조하세요.

Windows 앱 인증 키트를 사용하여 앱 테스트

앱이 인증될 가능성을 높이려면 Windows 앱 인증 키트를 사용하여 앱의 유효성을 검사합니다. 이 키트는 많은 테스트를 수행하여 앱이 Windows 스토어의 특정 인증 요구 사항을 충족하는지 확인합니다. 이러한 테스트는 다음과 같습니다.

  • 앱 매니페스트를 검사하여 내용이 올바른지 확인
  • 앱 매니페스트에 정의된 리소스를 검사하여 리소스가 있고 유효한지 확인
  • 앱의 복원력 및 안정성 테스트
  • 앱이 얼마나 빨리 시작되고 일시 중단되는지 확인
  • 앱을 검사하여 Windows 스토어 앱용 API만 호출하는지 확인
  • 앱이 Windows 보안 기능을 사용하는지 확인

앱의 릴리스 빌드에서 Windows 앱 인증 키트를 실행해야 합니다. 그렇지 않으면 유효성 검사에 실패합니다. 자세한 내용은 방법: 디버그 및 릴리스 구성 설정을 참조하세요.

또한 앱을 빌드할 때마다 앱의 유효성을 검사할 수 있습니다. Team Foundation Build를 실행 중인 경우 앱을 빌드할 때마다 Windows 앱 인증 키트가 자동으로 실행되도록 빌드 컴퓨터에서 설정을 수정할 수 있습니다. 자세한 내용은 자동화된 빌드에서 패키지의 유효성 검사 를 참조하세요.

자세한 내용은 Windows 앱 인증 키트를 사용하여 앱을 테스트하는 방법을 참조하세요.

[맨 위]

Windows 스토어 인증 검사 목록 만들기

앱을 판매하거나 사용할 수 있게 하는 주요 방법으로 Windows 스토어를 사용합니다. 앱을 준비하고 제출하는 방법에 대한 자세한 내용은 앱 제출을 참조하세요.

앱을 계획하는 동안 나중에 앱을 테스트할 때 사용할 게시 요구 사항 검사 목록을 만드는 것이 좋습니다. 이 검사 목록은 빌드하는 앱 종류와 화폐화하려는 방법에 따라 달라질 수 있습니다. 여기서 사용한 검사 목록은 다음과 같습니다.

  1. 개발자 계정 열기. Windows 스토어에 앱을 업로드하려면 개발자 계정이 있어야 합니다. 자세한 내용은 Windows 스토어 개발자 계정 등록을 참조하세요.
  2. 앱 이름 예약. 앱 이름을 1년 동안 예약할 수 있으며, 1년 내에 앱을 제출하지 않으면 예약이 만료됩니다. 자세한 내용은 앱 이름 지정 및 설명을 참조하세요.
  3. 개발자 라이선스 구하기. Windows 스토어 앱을 개발하려면 개발자 라이선스가 필요합니다. 자세한 내용은 Windows 8용 개발자 라이선스 구하기 를 참조하세요.
  4. 앱 매니페스트 편집. 앱 매니페스트를 수정하여 앱의 기능을 설정하고 로고 등의 항목을 제공합니다. 자세한 내용은 매니페스트 디자이너(영문)를 참조하세요.
  5. 스토어에 앱 연결. Windows 스토어에 앱을 연결하면 앱 매니페스트 파일이 스토어 관련 데이터를 포함하도록 업데이트됩니다.
  6. Windows 스토어에 앱 스크린샷 복사.
  7. 앱 패키지 만들기. 이 작업을 수행하는 가장 간단한 방법은 Visual Studio를 사용하는 것입니다. 자세한 내용은 Visual Studio 2012를 사용하여 앱 패키징을 참조하세요. 대체 방법은 명령 프롬프트에서 앱 패키지를 만드는 것입니다. 자세한 내용은 명령 프롬프트에서 앱 패키지 빌드 를 참조하세요.
  8. Windows 스토어에 앱 패키지 업로드. 업로드 프로세스 중 앱 패키지의 기술 사양이 앱 인증 요구 사항에 맞는지 확인합니다. 앱이 이러한 테스트를 통과하면 업로드 성공 메시지가 표시됩니다. 패키지 업로드 테스트가 실패하면 오류 메시지가 표시됩니다. 자세한 내용은 패키지 업로드 오류 해결 을 참조하세요.

실제로 Hilo를 Windows 스토어에 업로드하지는 않았지만 유효성 검사를 통과하는지 확인하기 위해 필요한 단계를 수행했습니다.

Windows 스토어에 업로드할 앱 패키지를 만들기 전에 다음을 수행해야 합니다.

  • 앱 제출 검사 목록 검토. 이 검사 목록은 앱을 업로드할 때 제공해야 하는 정보를 나타냅니다. 자세한 내용은 앱 제출 검사 목록을 참조하세요.
  • Windows 앱 인증 키트를 사용하여 앱 릴리스 빌드의 유효성을 검사했는지 확인. 자세한 내용은 이 페이지의 Windows 앱 인증 키트를 사용하여 앱 테스트를 참조하세요.
  • 앱의 주요 기능을 보여 주는 스크린샷 만들기
  • 다른 개발자가 앱을 테스트하도록 허용. 자세한 내용은 로컬에서 앱 패키지 공유 를 참조하세요.

또한 앱이 개인 데이터를 수집하거나 다른 사람이 제공하는 소프트웨어를 사용하는 경우 개인 정보 취급 방침이나 추가 사용 조건도 포함해야 합니다.

[맨 위]

 

 

표시:
© 2015 Microsoft