Сложные приёмы разработки приложений для Windows Phone 8

Тестирование и анализ приложений

Разбить на страницы
Показывать лекцию целиком

Цель работы: освоить технологии тестирования и анализа приложений

Использование модульных тестов при тестировании приложений

В ходе освоения этого курса вы постоянно тестируете приложение. Фактически, когда мы создаём интерфейс приложения, программный код, запускаем приложение в эмуляторе или на устройстве, мы тестируем его. Более того, подготовка приложения к публикации в Магазине Windows Phone подразумевает проведение целого ряда испытаний, которые позволяют повысить вероятность приёма приложения для публикации и обнаружить недоработки, которые допущены при создании приложения. Существуют, однако, специализированные инструменты для тестирования приложений. Один из них – это модульное тестирование (unit testing). Проект Приложение модульного тестирования доступен в Экспресс-выпуске Microsoft Visual Studio 2012 для Windows Phone после установки второго пакета обновлений этой среды.

Модульные тесты предназначены для автоматизации проверки правильности работы отдельных программных модулей. В частности, это касается правильной работы классов и их методов. Методика модульного тестирования даст наилучшие результаты при применении её к проектам, разработанным с использованием технологии MVVM – чем слабее взаимосвязи отдельных классов приложения – тем лучше, так как тестируя отдельный класс можно сосредоточиться на его функциональности и обнаруженные при тестировании ошибки с очень высокой долей вероятности будут относиться именно к тестируемому классу.

Упрощённо говоря, модульный тест – это некий набор входных параметров, передача которых классу должна приводить к получению некого набора выходных параметров, которые можно сравнить с эталоном. Создавать модульные тесты можно непосредственно в процессе написания классов. Фактически, эти тесты являются чем-то вроде документации по создаваемым классам, так как в них зафиксировано то, как именно должны работать классы. Наличие модульных тестов значительно облегчает жизнь разработчиков при необходимости внесения изменений в исходные классы, в алгоритмы, которые используются для решения каких-либо задач. Если интерфейс (входные и выходные параметры) обновленного класса выглядит так же, как интерфейс исходного класса, применив к нему те же модульные тесты, можно либо убедиться в правильной работе класса, либо в том, что в ходе его модификации допущены ошибки, искажающие результаты его работы. Существует, кроме того, методология разработки программного обеспечения, которая называется разработкой через тестирование (test-driven development, TDD). При таком подходе сначала пишут модульный тест, потом – соответствующий класс. При этом если в класс нужно внести изменения, влияющие на его входные и выходные данные, сначала пишется модульный тест для проверки работы класса, после этого вносятся исправления в класс и результат проверяется модульным тестом.

Рассмотрим пример тестирования с использованием модульных тестов. Он рассмотрен в проекте приложения P21_1. Пример основан на материале "Unit testing for Windows Phone" ("Модульное тестирование для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn168930%28v=vs.105%29.aspx.

Проект приложения вы можете увидеть на рис. 57.1.

(рис 57.1) Проект приложения, иллюстрирующего применение модульного тестирования

В левой части экрана расположена панель, с которой до этого мы не работали. Это Обозреватель тестов, открыть её можно, воспользовавшись командой Тест > Окна > Обозреватель тестов. Эта панель служит для управления модульными тестами.

В решении присутствуют два проекта. Первый – P21_1 – это обычный проект приложения для Windows Phone, второй – это добавленный в решение проект, созданный о шаблону Приложение модульного тестирования для Windows Phone. Для того, чтобы добавить такой проект в решение, нужно воспользоваться контекстным меню Решение > Добавить > Создать проект.

Проект модульного тестирования называется BankAccountTest, обратите внимание на то, что после добавления в решение этого проекта нужно добавить ссылку на проект нашего приложения (P21_1) в папку References.

В проекте BankAccountTest есть класс UnitTest1 – в нём и будет располагаться модульный тест.

В приложении имеется класс BankAccounts (Листинг 57.1), его мы будем тестировать. Этот класс хранит сведения об имени клиента (customerName) и балансе его счёта (Balance). Класс имеет два метода. Метод Debit используется для списания средств со счёта, перед списанием проводится проверка на неотрицательность списываемой суммы и на то, не превышает ли она баланса счёта. Метод Credit используется для зачисления средств на счёт, перед зачислением производится проверка на неотрицательность.

using System;

namespace P21_1
{
    public class BankAccount
    {
        public string CustomerName { get; private set; }
        public double Balance { get; private set; }

        private BankAccount()
        {
        }

        public BankAccount(string customerName, double balance)
        {
            CustomerName = customerName;
            Balance = balance;
        }
        //Снятие со счета
        public void Debit(double amount)
        {
            if (amount > Balance)
            {
                throw new ArgumentOutOfRangeException("amount");
            }

            if (amount < 0)
            {
                throw new ArgumentOutOfRangeException("amount");
            }

            Balance -= amount;
        }
        //Пополнение счета
        public void Credit(double amount)
        {
            if (amount < 0)
            {
                throw new ArgumentOutOfRangeException("amount");
            }

            Balance += amount;
        }
    }
}

С помощью модульного теста мы можем проверить правильность работы логики класса, зная, что при списании средств со счёта баланс счёта уменьшается на списываемую сумму, и что при зачислении средств на счёт баланс на зачисляемую сумму увеличивается.

В Листинге 57.2 приведен код класса BankAccountTests. Обратите внимание на название класса и на названия методов класса, которые используются для тестирования. Они позволяют быстро понять – что именно тестируется. Обычно для тестирования отдельных классов создают отдельные тестовые классы.

Класс теста объявляется с атрибутом [TestClass], методы – с атрибутом [TestMethod]

using System;
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
using P21_1;

namespace BankAccountTest
{
    [TestClass]
    public class BankAccountTests
    {
        [TestMethod]
        public void Debit_WithValidAmount_UpdatesBalance()
        {
            // Подготовка (arrange)
            double beginningBalance = 11.99;
            double debitAmount = 4.55;
            double expected = 7.44;

            BankAccount account = new BankAccount("New Customer", beginningBalance);

            // Выполнение действия (act)
            account.Debit(debitAmount);

            //Проверка результатов (assert)
            double actual = account.Balance;
            Assert.AreEqual(expected, actual, 0.001, "Списание со счета производится неверно");
        }
        [TestMethod]
        public void Credit_WithValidAmount_UpdatesBalance()
        {
            // Подготовка (arrange)
            double beginningBalance = 11.99;
            double creditAmount = 4.55;
            double expected = 16.54;

            BankAccount account = new BankAccount("New Customer", beginningBalance);

            // Выполнение действия (act)
            account.Credit(creditAmount);

            //Проверка результатов (assert)
            double actual = account.Balance;
            Assert.AreEqual(expected, actual, 0.001, "Пополнение счета производится неверно");
        }

    }
}

Процесс работы теста традиционно разбивают на три логические части.

Первая часть – подготовка (arrange). Она заключается в подготовке начальных условий. Здесь, для теста Debit_WitnValidationAmount_UpdatesBalance, задаются значения начального баланса (beginningBalance), суммы для списания (debitAmount) и результата (expected), который должен получиться при правильной работе данного метода. Эти начальные сведения нужно тщательно проверить – если они неверны, а метод работает правильно – тест сообщит об ошибке. Здесь же создаётся объект типа BancAccount, который инициализируется начальным балансом и произвольным именем клиента.

Вторая часть – выполнение действий (act) над тестируемым методом тестируемого класса. Мы вызываем метод Debit, передавая ему ранее заготовленную сумму для списания. В объекте account хранится новое значение баланса.

Третья часть – проверка результатов (assert). Здесь используется метод ) объекта . При вызове метода ему передаётся ожидаемое значение (expected), полученное значение (actual), допустимую погрешность измерений и сообщение, которое выдаётся в том случае, если условие не выполняется. Класс Assert имеет множество методов, позволяющих сравнивать объекты различных типов.

Перед запуском теста нужно выбрать в строке запуска отладки эмулятор, после чего воспользоваться командой Запустить все (или другой подходящей) окна Обозреватель тестов. Результат успешного прохождения тестов вы могли видеть на рис. 57.1. Если поменять, например, в методе Debit класса BankAccount команду Balance -= amount на Balance += amount, то есть – создать ситуацию, которая должна приводить к ошибке, тест, относящийся к данному методу, пройден не будет, это будет отмечено соответствующим значком, если щёлкнуть по сообщению об ошибке, как показано на рис. 57.2, можно увидеть описание ошибки, выданное тестом, найти ошибку, исправить и провести повторные тесты.

(рис 57.2) Тест обнаружил ошибку

Дополнительные сведения о тестировании приложений можно найти в разделе документации "Testing apps for Windows Phone" ("Тестирование приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247547%28v=vs.105%29.aspx

Анализ производительности приложений

Анализ производительности приложений доступен и при запуске их в эмуляторе, однако, реально оценить производительность можно лишь на устройстве, причем – в конфигурации выпуска (Release), так как запуск приложения в конфигурации отладки создаёт дополнительную нагрузку на систему.

Быстро оценить производительность приложения можно, воспользовавшись показателями, которые выводятся в правой части экрана, рис. 57.3.

(рис 57.3) Показатели производительности, выводимые в правой части экрана приложения

Ниже, в порядке представления слева направо, перечислены показатели и их описание. Если показатели в данном списке выделяются красным цветом, это сигнализирует о том, что они выше (или ниже) некоторых пороговых значений, на них стоит обратить внимание в первую очередь.

  • 055 – Composition Thread FPS – скорость, с которой обновляется экран. Чем ближе этот показатель к 60 кадрам в секунду – тем лучше. Если он падает ниже 30 – это означает недостаточную производительность приложения.
  • 055 – User Interface Thread FPS – скорость, с которой обновляется пользовательский интерфейс, этот показатель не должен падать ниже 20 кадров в секунду.
  • 005453 – Texture Memory Usage – использование системной и видеопамяти
  • 002 – Surface Counter – счётчик поверхностей, которые явно передаются графическому ускорителю для обработки
  • 001 – Intermediate Surface Counter – счётчик полного количества поверхностей, сгенерированных в результате кэширования поверхностей.
  • 00.6020 – Screen Fill Rate Counter – количество пикселей, которые выводятся каждый кадр. 1 обозначает полную перерисовку всего экрана в 480х800 пикселей. Рекомендуется, чтобы данный показатель не превышал 2,5.
  • Для более глубокого анализа приложений используется специальный инструментарий, вызвать который можно, воспользовавшись командой Отладка > Начать анализ приложения Windows Phone, рис. 57.4.

    (рис 57.4) Начало анализа приложения

    Перед началом анализа нужно подготовить приложение для запуска на устройстве. Запуск и остановку приложения следует выполнять с помощью ссылок, которые приведены на экране средства анализа приложения. После запуска нужно поработать с приложением так, как с ним будет работать пользователь, после чего изучить данные анализа, при необходимости внести в приложение изменения и повторить анализа

    Здесь доступны три варианта анализа:

  • Анализ производительности и качества приложения. Выбор данного пункта позволяет проанализировать следующие параметры приложения, по каждому из которых выводятся измеренные показатели и комментарии:
  • Время запуска
  • Скорость реагирования
  • Общий объем отправленных данных
  • Общий объем загруженных данных
  • Оставшийся заряд батареи
  • Максимальное использование памяти
  • Среднее использование памяти
  • Выполнение (оценка производительности приложения с использованием расширенных визуальных средств и профилирования кода). Позволяет оценить производительность приложения, в частности, здесь можно получить сведения о внешних событиях, частоте кадров, загрузке центрального процессора, скорости реагирования приложения, о расходе заряда батарей, основные сведения об использовании памяти, о событиях "сборки мусора". Эти сведения представлены в графическом виде, выделив участок графика можно посмотреть подробности.
  • Память (оценка выделения памяти и использования текстур). Используется для более глубокого, чем в предыдущем варианте, анализа использования памяти.
  • Анализировать приложение с помощью этих средств следует не только на финальной стадии разработки, но и в процессе работы над приложением. Например, это позволяет сразу же, после внедрения в приложение какого-либо нового механизма (например, создания страницы, на которой размещается большой список элементов, загружаемых из Интернета и т.д.) оценить его воздействие на объем памяти, требующийся приложению, на его производительность, скорость загрузки, энергопотребление. Периодический анализ приложения помогает выявлять проблемы с производительностью на ранних стадиях и сразу же принимать меры по их решению.

    Подробнее об анализе производительности приложения, о типичных проблемах, о способах их решения, можно узнать в следующих материалах:

  • "Ускорьте появление своих приложений Windows Phone в Marketplace", http://msdn.microsoft.com/ru-ru/magazine/hh781024.aspx
  • "App performance considerations for Windows Phone" ("Производительность приложений для Windows Phone", http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff967560%28v=vs.105%29.aspx
  • "App profiling for Windows Phone" ("Профилирование приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj215908%28v=vs.105%29.aspx
  • "Network Monitoring for Windows Phone Apps" ("Мониторинг сетевой активности приложений для Windows Phone"), http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/12/20/network-monitoring-for-windows-phone-apps.aspx
  • "Optimizing Battery Consumption of Windows Phone Applications" ("Оптимизация энергопотребления приложений для Windows Phone"), http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/01/17/optimizing-battery-consumption-of-windows-phone-applications.aspx
  • "Building High Performance Windows Phone Apps" ("Создание высокопроизводительных приложений для Windows Phone"), http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/01/25/building-high-performance-windows-phone-apps.aspx
  • "App monitoring for Windows Phone" ("Мониторинг приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj215907%28v=vs.105%29.aspx
  • "How to identify and fix common performance issues using Windows Phone Application Analysis" ("Как найти и устранить типичные проблемы с производительностью, используя средство анализа приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202932%28v=vs.105%29.aspx
  • "Windows Phone Application Analysis" ("Анализ приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202934%28v=vs.105%29.aspx
  • Выводы

    Методология модульного тестирования позволяет автоматизировать тестирование кода, упростить внесение в код изменений с контролем правильности его работы. При разработке приложений для Windows Phone следует обращать внимание на их производительность, на объем потребляемых системных ресурсов, и, в ходе разработки, а так же при завершении разработки, контролировать эти параметры, при необходимости оптимизируя приложение.

    Задание

    Произведите всесторонний анализ разрабатываемого вами приложения с использованием средств анализа приложений, присутствующих в Visual Studio 2012. При обнаружении проблем в производительности и в потреблении системных ресурсов, оптимизируйте приложение, воспользовавшись рекомендациями из материалов, ссылки на которые можно найти в тексте лабораторной работы. Подготовьте отчёт со сравнением показателей приложения до оптимизации и после неё.

    Дополнительные материалы

    К данной лекции подготовлено видеоприложение и демонстрационный программный проект.

    Страницы:

    Цель работы: освоить технологии тестирования и анализа приложений

    Использование модульных тестов при тестировании приложений

    В ходе освоения этого курса вы постоянно тестируете приложение. Фактически, когда мы создаём интерфейс приложения, программный код, запускаем приложение в эмуляторе или на устройстве, мы тестируем его. Более того, подготовка приложения к публикации в Магазине Windows Phone подразумевает проведение целого ряда испытаний, которые позволяют повысить вероятность приёма приложения для публикации и обнаружить недоработки, которые допущены при создании приложения. Существуют, однако, специализированные инструменты для тестирования приложений. Один из них – это модульное тестирование (unit testing). Проект Приложение модульного тестирования доступен в Экспресс-выпуске Microsoft Visual Studio 2012 для Windows Phone после установки второго пакета обновлений этой среды.

    Модульные тесты предназначены для автоматизации проверки правильности работы отдельных программных модулей. В частности, это касается правильной работы классов и их методов. Методика модульного тестирования даст наилучшие результаты при применении её к проектам, разработанным с использованием технологии MVVM – чем слабее взаимосвязи отдельных классов приложения – тем лучше, так как тестируя отдельный класс можно сосредоточиться на его функциональности и обнаруженные при тестировании ошибки с очень высокой долей вероятности будут относиться именно к тестируемому классу.

    Упрощённо говоря, модульный тест – это некий набор входных параметров, передача которых классу должна приводить к получению некого набора выходных параметров, которые можно сравнить с эталоном. Создавать модульные тесты можно непосредственно в процессе написания классов. Фактически, эти тесты являются чем-то вроде документации по создаваемым классам, так как в них зафиксировано то, как именно должны работать классы. Наличие модульных тестов значительно облегчает жизнь разработчиков при необходимости внесения изменений в исходные классы, в алгоритмы, которые используются для решения каких-либо задач. Если интерфейс (входные и выходные параметры) обновленного класса выглядит так же, как интерфейс исходного класса, применив к нему те же модульные тесты, можно либо убедиться в правильной работе класса, либо в том, что в ходе его модификации допущены ошибки, искажающие результаты его работы. Существует, кроме того, методология разработки программного обеспечения, которая называется разработкой через тестирование (test-driven development, TDD). При таком подходе сначала пишут модульный тест, потом – соответствующий класс. При этом если в класс нужно внести изменения, влияющие на его входные и выходные данные, сначала пишется модульный тест для проверки работы класса, после этого вносятся исправления в класс и результат проверяется модульным тестом.

    Рассмотрим пример тестирования с использованием модульных тестов. Он рассмотрен в проекте приложения P21_1. Пример основан на материале "Unit testing for Windows Phone" ("Модульное тестирование для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn168930%28v=vs.105%29.aspx.

    Проект приложения вы можете увидеть на рис. 57.1.

    (рис 57.1) Проект приложения, иллюстрирующего применение модульного тестирования

    В левой части экрана расположена панель, с которой до этого мы не работали. Это Обозреватель тестов, открыть её можно, воспользовавшись командой Тест > Окна > Обозреватель тестов. Эта панель служит для управления модульными тестами.

    В решении присутствуют два проекта. Первый – P21_1 – это обычный проект приложения для Windows Phone, второй – это добавленный в решение проект, созданный о шаблону Приложение модульного тестирования для Windows Phone. Для того, чтобы добавить такой проект в решение, нужно воспользоваться контекстным меню Решение > Добавить > Создать проект.

    Проект модульного тестирования называется BankAccountTest, обратите внимание на то, что после добавления в решение этого проекта нужно добавить ссылку на проект нашего приложения (P21_1) в папку References.

    В проекте BankAccountTest есть класс UnitTest1 – в нём и будет располагаться модульный тест.

    В приложении имеется класс BankAccounts (Листинг 57.1), его мы будем тестировать. Этот класс хранит сведения об имени клиента (customerName) и балансе его счёта (Balance). Класс имеет два метода. Метод Debit используется для списания средств со счёта, перед списанием проводится проверка на неотрицательность списываемой суммы и на то, не превышает ли она баланса счёта. Метод Credit используется для зачисления средств на счёт, перед зачислением производится проверка на неотрицательность.

    using System;
    
    namespace P21_1
    {
        public class BankAccount
        {
            public string CustomerName { get; private set; }
            public double Balance { get; private set; }
    
            private BankAccount()
            {
            }
    
            public BankAccount(string customerName, double balance)
            {
                CustomerName = customerName;
                Balance = balance;
            }
            //Снятие со счета
            public void Debit(double amount)
            {
                if (amount > Balance)
                {
                    throw new ArgumentOutOfRangeException("amount");
                }
    
                if (amount < 0)
                {
                    throw new ArgumentOutOfRangeException("amount");
                }
    
                Balance -= amount;
            }
            //Пополнение счета
            public void Credit(double amount)
            {
                if (amount < 0)
                {
                    throw new ArgumentOutOfRangeException("amount");
                }
    
                Balance += amount;
            }
        }
    }
    

    С помощью модульного теста мы можем проверить правильность работы логики класса, зная, что при списании средств со счёта баланс счёта уменьшается на списываемую сумму, и что при зачислении средств на счёт баланс на зачисляемую сумму увеличивается.

    В Листинге 57.2 приведен код класса BankAccountTests. Обратите внимание на название класса и на названия методов класса, которые используются для тестирования. Они позволяют быстро понять – что именно тестируется. Обычно для тестирования отдельных классов создают отдельные тестовые классы.

    Класс теста объявляется с атрибутом [TestClass], методы – с атрибутом [TestMethod]

    using System;
    using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
    using P21_1;
    
    namespace BankAccountTest
    {
        [TestClass]
        public class BankAccountTests
        {
            [TestMethod]
            public void Debit_WithValidAmount_UpdatesBalance()
            {
                // Подготовка (arrange)
                double beginningBalance = 11.99;
                double debitAmount = 4.55;
                double expected = 7.44;
    
                BankAccount account = new BankAccount("New Customer", beginningBalance);
    
                // Выполнение действия (act)
                account.Debit(debitAmount);
    
                //Проверка результатов (assert)
                double actual = account.Balance;
                Assert.AreEqual(expected, actual, 0.001, "Списание со счета производится неверно");
            }
            [TestMethod]
            public void Credit_WithValidAmount_UpdatesBalance()
            {
                // Подготовка (arrange)
                double beginningBalance = 11.99;
                double creditAmount = 4.55;
                double expected = 16.54;
    
                BankAccount account = new BankAccount("New Customer", beginningBalance);
    
                // Выполнение действия (act)
                account.Credit(creditAmount);
    
                //Проверка результатов (assert)
                double actual = account.Balance;
                Assert.AreEqual(expected, actual, 0.001, "Пополнение счета производится неверно");
            }
    
        }
    }
    

    Процесс работы теста традиционно разбивают на три логические части.

    Первая часть – подготовка (arrange). Она заключается в подготовке начальных условий. Здесь, для теста Debit_WitnValidationAmount_UpdatesBalance, задаются значения начального баланса (beginningBalance), суммы для списания (debitAmount) и результата (expected), который должен получиться при правильной работе данного метода. Эти начальные сведения нужно тщательно проверить – если они неверны, а метод работает правильно – тест сообщит об ошибке. Здесь же создаётся объект типа BancAccount, который инициализируется начальным балансом и произвольным именем клиента.

    Вторая часть – выполнение действий (act) над тестируемым методом тестируемого класса. Мы вызываем метод Debit, передавая ему ранее заготовленную сумму для списания. В объекте account хранится новое значение баланса.

    Третья часть – проверка результатов (assert). Здесь используется метод ) объекта . При вызове метода ему передаётся ожидаемое значение (expected), полученное значение (actual), допустимую погрешность измерений и сообщение, которое выдаётся в том случае, если условие не выполняется. Класс Assert имеет множество методов, позволяющих сравнивать объекты различных типов.

    Перед запуском теста нужно выбрать в строке запуска отладки эмулятор, после чего воспользоваться командой Запустить все (или другой подходящей) окна Обозреватель тестов. Результат успешного прохождения тестов вы могли видеть на рис. 57.1. Если поменять, например, в методе Debit класса BankAccount команду Balance -= amount на Balance += amount, то есть – создать ситуацию, которая должна приводить к ошибке, тест, относящийся к данному методу, пройден не будет, это будет отмечено соответствующим значком, если щёлкнуть по сообщению об ошибке, как показано на рис. 57.2, можно увидеть описание ошибки, выданное тестом, найти ошибку, исправить и провести повторные тесты.

    (рис 57.2) Тест обнаружил ошибку

    Дополнительные сведения о тестировании приложений можно найти в разделе документации "Testing apps for Windows Phone" ("Тестирование приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247547%28v=vs.105%29.aspx

    Анализ производительности приложений

    Анализ производительности приложений доступен и при запуске их в эмуляторе, однако, реально оценить производительность можно лишь на устройстве, причем – в конфигурации выпуска (Release), так как запуск приложения в конфигурации отладки создаёт дополнительную нагрузку на систему.

    Быстро оценить производительность приложения можно, воспользовавшись показателями, которые выводятся в правой части экрана, рис. 57.3.

    (рис 57.3) Показатели производительности, выводимые в правой части экрана приложения

    Ниже, в порядке представления слева направо, перечислены показатели и их описание. Если показатели в данном списке выделяются красным цветом, это сигнализирует о том, что они выше (или ниже) некоторых пороговых значений, на них стоит обратить внимание в первую очередь.

  • 055 – Composition Thread FPS – скорость, с которой обновляется экран. Чем ближе этот показатель к 60 кадрам в секунду – тем лучше. Если он падает ниже 30 – это означает недостаточную производительность приложения.
  • 055 – User Interface Thread FPS – скорость, с которой обновляется пользовательский интерфейс, этот показатель не должен падать ниже 20 кадров в секунду.
  • 005453 – Texture Memory Usage – использование системной и видеопамяти
  • 002 – Surface Counter – счётчик поверхностей, которые явно передаются графическому ускорителю для обработки
  • 001 – Intermediate Surface Counter – счётчик полного количества поверхностей, сгенерированных в результате кэширования поверхностей.
  • 00.6020 – Screen Fill Rate Counter – количество пикселей, которые выводятся каждый кадр. 1 обозначает полную перерисовку всего экрана в 480х800 пикселей. Рекомендуется, чтобы данный показатель не превышал 2,5.
  • Для более глубокого анализа приложений используется специальный инструментарий, вызвать который можно, воспользовавшись командой Отладка > Начать анализ приложения Windows Phone, рис. 57.4.

    (рис 57.4) Начало анализа приложения

    Перед началом анализа нужно подготовить приложение для запуска на устройстве. Запуск и остановку приложения следует выполнять с помощью ссылок, которые приведены на экране средства анализа приложения. После запуска нужно поработать с приложением так, как с ним будет работать пользователь, после чего изучить данные анализа, при необходимости внести в приложение изменения и повторить анализа

    Здесь доступны три варианта анализа:

  • Анализ производительности и качества приложения. Выбор данного пункта позволяет проанализировать следующие параметры приложения, по каждому из которых выводятся измеренные показатели и комментарии:
  • Время запуска
  • Скорость реагирования
  • Общий объем отправленных данных
  • Общий объем загруженных данных
  • Оставшийся заряд батареи
  • Максимальное использование памяти
  • Среднее использование памяти
  • Выполнение (оценка производительности приложения с использованием расширенных визуальных средств и профилирования кода). Позволяет оценить производительность приложения, в частности, здесь можно получить сведения о внешних событиях, частоте кадров, загрузке центрального процессора, скорости реагирования приложения, о расходе заряда батарей, основные сведения об использовании памяти, о событиях "сборки мусора". Эти сведения представлены в графическом виде, выделив участок графика можно посмотреть подробности.
  • Память (оценка выделения памяти и использования текстур). Используется для более глубокого, чем в предыдущем варианте, анализа использования памяти.
  • Анализировать приложение с помощью этих средств следует не только на финальной стадии разработки, но и в процессе работы над приложением. Например, это позволяет сразу же, после внедрения в приложение какого-либо нового механизма (например, создания страницы, на которой размещается большой список элементов, загружаемых из Интернета и т.д.) оценить его воздействие на объем памяти, требующийся приложению, на его производительность, скорость загрузки, энергопотребление. Периодический анализ приложения помогает выявлять проблемы с производительностью на ранних стадиях и сразу же принимать меры по их решению.

    Подробнее об анализе производительности приложения, о типичных проблемах, о способах их решения, можно узнать в следующих материалах:

  • "Ускорьте появление своих приложений Windows Phone в Marketplace", http://msdn.microsoft.com/ru-ru/magazine/hh781024.aspx
  • "App performance considerations for Windows Phone" ("Производительность приложений для Windows Phone", http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff967560%28v=vs.105%29.aspx
  • "App profiling for Windows Phone" ("Профилирование приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj215908%28v=vs.105%29.aspx
  • "Network Monitoring for Windows Phone Apps" ("Мониторинг сетевой активности приложений для Windows Phone"), http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/12/20/network-monitoring-for-windows-phone-apps.aspx
  • "Optimizing Battery Consumption of Windows Phone Applications" ("Оптимизация энергопотребления приложений для Windows Phone"), http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/01/17/optimizing-battery-consumption-of-windows-phone-applications.aspx
  • "Building High Performance Windows Phone Apps" ("Создание высокопроизводительных приложений для Windows Phone"), http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/01/25/building-high-performance-windows-phone-apps.aspx
  • "App monitoring for Windows Phone" ("Мониторинг приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj215907%28v=vs.105%29.aspx
  • "How to identify and fix common performance issues using Windows Phone Application Analysis" ("Как найти и устранить типичные проблемы с производительностью, используя средство анализа приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202932%28v=vs.105%29.aspx
  • "Windows Phone Application Analysis" ("Анализ приложений для Windows Phone"), http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202934%28v=vs.105%29.aspx
  • Выводы

    Методология модульного тестирования позволяет автоматизировать тестирование кода, упростить внесение в код изменений с контролем правильности его работы. При разработке приложений для Windows Phone следует обращать внимание на их производительность, на объем потребляемых системных ресурсов, и, в ходе разработки, а так же при завершении разработки, контролировать эти параметры, при необходимости оптимизируя приложение.

    Задание

    Произведите всесторонний анализ разрабатываемого вами приложения с использованием средств анализа приложений, присутствующих в Visual Studio 2012. При обнаружении проблем в производительности и в потреблении системных ресурсов, оптимизируйте приложение, воспользовавшись рекомендациями из материалов, ссылки на которые можно найти в тексте лабораторной работы. Подготовьте отчёт со сравнением показателей приложения до оптимизации и после неё.

    Дополнительные материалы

    К данной лекции подготовлено видеоприложение и демонстрационный программный проект.

    Вернуться к учебному плану