День жизни devops разработчика: Приостановка работы, исправление ошибки и проведение проверки кода

Azure Repos | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017 | TFS 2015 | VS 2017 | VS 2015 | VS 2013

одним из способов переключения рабочего контекста из одного потока работы в другой является эффективный метод, доступный в 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 для запроса проверки кода от своих коллег Julia и ADAM.

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

Страница

  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

Совет

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

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

  2. На странице Проверка кода можно выполнить следующие действия.

    • Выберите принять или отклонить , чтобы уведомить автора о том, будет ли выполняться проверка.

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

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

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

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

        -или-

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

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

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

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

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

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

Страница

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

    Также можно открыть контекстное меню запроса и нажать кнопку Открыть.

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

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

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

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

    • -или-

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

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

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

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

/// <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 восстановления:

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

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

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

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

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

  • Закладки