Приостановка работы, исправьте ошибку, и проводить анализ кода

При использовании Visual Studio Premium и Visual Studio Ultimate в сочетании с Team Foundation Server существует эффективный способ переключить рабочий контекст с одного потока работы на другой одним щелчком мыши. Кроме того, члены команды могут легко обмениваться сообщениями о предлагаемых изменениях в коде. Этот раздел иллюстрирует эти возможности и продолжает учебное руководство о действиях членов вымышленной Agile-команды в течение рабочего дня.

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

Примечание

Компоненты "Моя работа" и "Проверка кода", которые использует Питер, доступны только в Visual Studio Premium и Visual Studio Ultimate.

Содержание раздела

  • Приостановка текущей работы и начало работы над ошибкой

  • Исследование ошибки

  • Запрос проверки кода

  • Принятие и выполнение (или отклонение) проверки кода

  • Получение проверки кода и ответ на нее

  • Исправление теста и кода

  • Возврат исправления

  • Возобновление работы над задачей

Приостановка текущей работы

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

Прежде чем приступить к работе над ошибкой, он хочет убедиться, что его текущая работа отложена в безопасное место на сервере команды. На странице Моя работа Питер выбирает Приостановить, чтобы сохранить (в Team Foundation Server):

  • всю работу, которую он проделал, включая изменения в коде, тестах и других файлах;

  • открытые решения, окна, точки останова, переменные окна контрольных значений и другие элементы состояния Visual Studio.

Теперь, когда его рабочая область чиста, Питер перетаскивает свою новую задачу из раздела Доступные рабочие элементы в раздел Выполняемая работа. Он готов исследовать ошибку и написать исправление.

Примечание

Ваш рабочий контекст связан с рабочими элементами, отображаемыми в разделе "Выполняемая работа" на странице "Моя работа".С помощью команд Приостановить и Возобновить можно быстро переключаться между различными задачами.При этом открытые решения и файлы, изменения в коде и макет Visual Studio переключаются все вместе.

Приостановка текущей работы и начало работы над другой задачей

Приостановка работы

  1. Подключитесь: если вы еще не подключены к командному проекту, в котором собираетесь работать, подключитесь к командному проекту.

    1. В Team Explorer выберите Значок "Начало" Главная, а затем выберите Значок "Моя работа" Моя работа.
  2. Приостановите свою текущую задачу:

    1. В разделе Выполняемая работа выберите Приостановить.

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

  3. Начните работу над новой задачей, ошибкой или другим рабочим элементом:

    1. Прежде чем выбирать рабочий элемент, может потребоваться:

      • создать новую задачу или другой рабочий элемент, выбрав Создать в разделе Доступные рабочие элементы; или

      • выбрать другой запрос в разделе Доступные рабочие элементы.

    2. Перетащите рабочий элемент из раздела Доступные рабочие элементы в раздел Выполняемая работа.

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

Совет

Рабочие элементы, присутствующие в разделе "Выполняемая работа", связываются с текущими изменениями кода и состоянием Visual Studio.Чтобы использовать Visual Studio для организации своей работы, при переключении от одной задачи к другой следите за тем, чтобы соответствующие элементы находились в состоянии "Выполняется".

Исследование ошибки

Питер открывает рабочий элемент "ошибка" и читает его. Согласно описанию, которое было написано членом команды тестирования, оплаченный счет-фактура иногда ошибочно помечается как неоплаченный. В рабочий элемент "ошибка" вложен снимок лабораторной среды. Питер может открыть виртуальные машины, на которых запускался тест, просмотреть неправильный счет-фактуру и шаг за шагом перейти назад по журналу IntelliTrace. Он прослеживает ошибку до следующего метода:

    public class LocalMath
    {       
        public static bool EqualTo(double a, double b)
        {
          return a == b;
        }

По журналу IntelliTrace Питер видит, что иногда метод возвращает значение false из-за того, что параметры отличаются на чрезвычайно малую величину. Питер знает, что подобные ошибки округления неизбежны в арифметических операциях с плавающей запятой, и что проверять числа с плавающей запятой на равенство — плохая практика.

Корректировка тестов для демонстрации ошибки

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

 
        // Added 2012-02-02 for bug 654321:
        /// <summary>
        /// Make sure that number equality test allows for 
        /// small rounding errors.
        /// </summary>
        [TestMethod]
        public void TestDoublesEqual()
        {
            // We allow a rounding error of 1 in 1000000:
            TestEqual(1, 1e-7, true); // Less than allowed error
            TestEqual(1, 1e-5, false); // More than allowed error
            TestEqual(1000, 1e-7, true); // Less than allowed error
            TestEqual(1000, 1e-5, false); // More than allowed error
        }
        private void TestEqual(double value, double error, bool result)
        {
            // Try different combinations of error and value:
            Assert.IsTrue(result == LocalMath.EqualTo(value + error, value));
            Assert.IsTrue(result == LocalMath.EqualTo(value, value + error));
            Assert.IsTrue(result == LocalMath.EqualTo(value - error, value));
            Assert.IsTrue(result == LocalMath.EqualTo(value, value - error));
        }

Он запускает тест и тот завершается сбоем, как и ожидалось.

Обозреватель модульных тестов с непройденным тестом равенства

Исправление ошибки

Питер исправляет код:

        public static bool EqualTo(double a, double b)
        {
            // Allow for rounding errors.
            // For example, a == 2.0 and b = 1.99999999999

            const double allowedError = 1/1000000;
            return System.Math.Abs(a - b) < allowedError;
        }

Теперь тест проходит успешно:

Обозреватель модульных тестов с пройденным тестом равенства

Запрос проверки кода

Питер доволен тем, как он исправил ошибку, но пока не возвращает свою работу. В его команде принято использовать проверки кода, чтобы повысить общее качество кода и уменьшить риск создания дополнительных ошибок, поэтому Питер с помощью Team Explorer запрашивает проверку кода со стороны своих коллег по команде Юлии и Адама.

Запрос проверки кода

My Work page - Request Review link. New Code Review page - Enter the name of a reviewer dropdown, Enter a description (optional) textbox, Submit Request button.

  1. В Team Explorer на странице Моя работа выберите Запросить анализ.

    Появится страница Новая проверка кода.

  2. Рецензент Укажите одного или нескольких рецензентов.

  3. Анализ кода Укажите имя проверки.

  4. Путь области Укажите путь к области.

  5. Комментарий Введите комментарий для рецензентов.

  6. Выберите Отправить запрос.

Рецензенты уведомляются о запросе по электронной почте.

Можно также запросить проверку кода приостановленной работы, набора отложенных изменений или набора изменений. Чтобы просмотреть список наборов изменений, откройте Обозреватель управления исходным кодом и нажмите кнопку Журнал.

Принятие или отклонение проверки кода

Юлия получает запрос проверки кода и принимает его. Она проверяет код, пишет несколько комментариев на уровне файла и блока кода, а затем отправляет проверку кода обратно Питеру. Адам слишком занят, чтобы проверить код, поэтому он отклоняет запрос.

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

            // We allow a rounding error of 1 in 1000000
            // as a fraction of the value:
            TestEqual(1, 1e-7, true); // Less than allowed error
            TestEqual(1, 1e-5, false); // More than allowed error
            TestEqual(1000, 1000*1e-7, true); // Less than allowed error
            TestEqual(1000, 1000*1e-5, false); // More than allowed error

Совет

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

Выполнение проверки кода

My Work page - code review item. Code Review page - Decline link, Comment, Decline button.Diff window. Code Review page - Accept link, Overall comment, code block comment

  1. В Team Explorer на странице Моя работа перейдите в раздел Мои проверки кода и запросы и откройте запрос.

  2. На странице Проверка кода можно:

    • Выберите Принять или Отклонить, чтобы уведомить автора, будете ли вы рецензировать код.

    • Выберите Добавить рецензента, чтобы добавить в запрос проверки кода других рецензентов.

    • Просмотрите изменения в каждом файле, который был обновлен для этого рабочего элемента.

    • Разверните узел Комментарии, чтобы обсудить изменения с автором и другими рецензентами.

      • Выберите Добавить общие комментарии

        -или-

        выберите блок кода, а затем выберите Добавить комментарий в контекстном меню.

      • Выберите Отправить комментарии, чтобы сделать свои комментарии видимыми для автора и других рецензентов.
    • Выберите Отправить и завершить, чтобы завершить проверку и указать, требуется ли дальнейшая работа над кодом.

Ответ на проверку кода

Питер получает проверку кода от Юлии и отвечает на нее.

Ответ на проверку кода

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

My Work page - code review item. Code Review page - Overall comment, file comment, Close Review link.

  1. В Team Explorer на странице Моя работа перейдите в раздел Проверки кода и запросы и дважды щелкните запрос.

    Можно также открыть контекстное меню запроса и выбрать Открыть.

  2. Читайте комментарии и отвечайте на них по мере необходимости. Чтобы ответить на комментарий, выберите Ответить, введите свой комментарий в появившемся диалоговом окне и выберите ОК. Чтобы отправить свои комментарии, выберите Отправить комментарии.

  3. Чтобы просмотреть файл и блоки кода, имеющие комментарии, или отредактировать файл, перейдите в раздел Комментарии. В подразделе Файлы откройте контекстное меню файла и выберите Сравнить (только чтение) или Изменить файл.

  4. Когда вы и другие рецензенты закончите отвечать на комментарии друг друга и будете готовы закрыть проверку, щелкните Закрыть анализ и выберите один из следующих вариантов:

    • Завершить, чтобы указать, что проверка завершена;

    • —или—

    • Прервать, чтобы указать, что проверка отменена.

Исправление теста и кода

Прочитав комментарии Юлии, Питер исправляет свой модульный тест так, как она предлагает. После этого тест оказывается непройденным. Это означает, что код все еще не является правильным.

Питер исправляет код:

        /// <summary>
        /// Returns true if two numbers are equal.
        /// </summary>
        public static bool EqualTo(double a, double b)
        {
            // Allow for rounding errors.
            const double allowedErrorMultiple = 1/1000000;
            double allowedError = (System.Math.Abs(a) + System.Math.Abs(b)) * allowedErrorMultiple/2;
            return System.Math.Abs(a - b) < allowedError;
        }

Тест снова проходит успешно:

Обозреватель модульных тестов с пройденным тестом равенства

Совет

Для исправления ошибки пользуйтесь тем же подходом, что и при разработке кода.Напишите тест, который завершается сбоем, а затем добейтесь, чтобы тест проходил успешно.Возвращайте код и тесты только тогда, когда тесты проходят успешно.

Теперь Питер обращает внимание на тестовый случай, в котором была обнаружена ошибка. Шаги для воспроизведения ошибки четко описаны в рабочем элементе тестового случая. Он выполняет эти шаги и видит, что счета-фактуры помечаются как оплаченные правильно.

Возврат исправления

Питер возвращает исправленный код и модульные тесты. Состояние ошибки автоматически устанавливается в значение Разрешено, а значение параметра Кому назначено автоматически меняется на имя члена команды тестирования, который обнаружил ошибку. Этот член команды должен будет проверить, что ошибка исправлена, и закрыть рабочий элемент.

Возврат исправления

Возврат обновления для исправления ошибки

  1. В Team Explorer на странице Моя работа выберите Вернуть.

  2. Просмотрите содержимое страницы Ожидающие изменения, чтобы убедиться, что:

    • все необходимые изменения перечислены в разделе Включенные изменения;

    • все необходимые рабочие элементы перечислены в разделе Связанные рабочие элементы.

  3. Введите Комментарий, чтобы членам команды было легче понять назначение этих изменений при просмотре истории управления версиями измененных файлов и папок.

  4. Выберите Вернуть.

Возобновление работы над задачей

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

Возобновление работы над задачей

Возобновление и завершение задачи

  • В Team Explorer на странице Моя работа найдите список Приостановленная и включенная в набор отложенных изменений работа. Откройте контекстное меню элемента. Имеется два варианта:

    • если требуется возобновить приостановленную работу и автоматически приостановить все ожидающие изменения в рабочей области, выберите Возобновить;

    • если требуется объединить приостановленную работу с ожидающими изменениями, которые уже присутствуют в рабочей области, выберите Слияние с "Выполняется".

Что происходит при возобновлении работы

Области, затронутые приостановкой рабочего элемента.

При возобновлении работы Visual Studio восстанавливает следующие элементы:

  • Ваше открытое решение

  • Ваши изменения кода

  • Состояние и положение открытых окон

  • Точки останова

  • Переменные и выражения окна контрольных значений

  • Закладки

Проверка исправления ошибки

Если ошибка была найдена командой тестирования, они свяжут с ошибкой определенные тестовые случаи, которые затем можно будет перезапустить. Дополнительные сведения.