Приостановка работы, исправьте ошибку, и проводить анализ кода
При использовании Visual Studio Premium и Visual Studio Ultimate в сочетании с Team Foundation Server существует эффективный способ переключить рабочий контекст с одного потока работы на другой одним щелчком мыши. Кроме того, члены команды могут легко обмениваться сообщениями о предлагаемых изменениях в коде. Этот раздел иллюстрирует эти возможности и продолжает учебное руководство о действиях членов вымышленной Agile-команды в течение рабочего дня.
Питер был занят написанием некоторого кода для выполнения задачи в элементе невыполненной работы. Однако его коллеги нашли ошибку, которая блокирует их работу, и он хочет исправить ее немедленно. Он приостанавливает свою текущую работу и исправляет ошибку. Затем он просит Юлию проверить исправление и после проверки возвращает исправление, после чего возобновляет работу над своей первоначальной задачей.
Примечание
Компоненты "Моя работа" и "Проверка кода", которые использует Питер, доступны только в Visual Studio Premium и Visual Studio Ultimate.
Содержание раздела
Приостановка текущей работы и начало работы над ошибкой
Исследование ошибки
Запрос проверки кода
Принятие и выполнение (или отклонение) проверки кода
Получение проверки кода и ответ на нее
Исправление теста и кода
Возврат исправления
Возобновление работы над задачей
Приостановка текущей работы
К Питеру, работающему над элементом невыполненной работы, приходит Юлия обсудить ошибку, которая мешает ей продолжить свою работу. Область, в которой найдена ошибка, знакома Питеру, поэтому он создает задачу для исправления ошибки и назначает эту задачу себе. Он принимает решение начать работу над исправлением сразу же.
Прежде чем приступить к работе над ошибкой, он хочет убедиться, что его текущая работа отложена в безопасное место на сервере команды. На странице Моя работа Питер выбирает Приостановить, чтобы сохранить (в Team Foundation Server):
всю работу, которую он проделал, включая изменения в коде, тестах и других файлах;
открытые решения, окна, точки останова, переменные окна контрольных значений и другие элементы состояния Visual Studio.
Теперь, когда его рабочая область чиста, Питер перетаскивает свою новую задачу из раздела Доступные рабочие элементы в раздел Выполняемая работа. Он готов исследовать ошибку и написать исправление.
Примечание
Ваш рабочий контекст связан с рабочими элементами, отображаемыми в разделе "Выполняемая работа" на странице "Моя работа".С помощью команд Приостановить и Возобновить можно быстро переключаться между различными задачами.При этом открытые решения и файлы, изменения в коде и макет Visual Studio переключаются все вместе.
Приостановка текущей работы и начало работы над другой задачей
Подключитесь: если вы еще не подключены к командному проекту, в котором собираетесь работать, подключитесь к командному проекту.
- В Team Explorer выберите Главная, а затем выберите Моя работа.
Приостановите свою текущую задачу:
В разделе Выполняемая работа выберите Приостановить.
В появившемся окне укажите имя, которое вы хотите присвоить этому набору приостановленной работы, и нажмите кнопку Приостановить. По умолчанию используется имя выполняемого в настоящее время рабочего элемента.
Начните работу над новой задачей, ошибкой или другим рабочим элементом:
Прежде чем выбирать рабочий элемент, может потребоваться:
создать новую задачу или другой рабочий элемент, выбрав Создать в разделе Доступные рабочие элементы; или
выбрать другой запрос в разделе Доступные рабочие элементы.
Перетащите рабочий элемент из раздела Доступные рабочие элементы в раздел Выполняемая работа.
Либо, можно переключиться на рабочий элемент, который был ранее приостановлен, перетащив его из раздела Приостановленная работа.
Совет
Рабочие элементы, присутствующие в разделе "Выполняемая работа", связываются с текущими изменениями кода и состоянием 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 запрашивает проверку кода со стороны своих коллег по команде Юлии и Адама.
Запрос проверки кода
В Team Explorer на странице Моя работа выберите Запросить анализ.
Появится страница Новая проверка кода.
Укажите одного или нескольких рецензентов.
Укажите имя проверки.
Укажите путь к области.
Введите комментарий для рецензентов.
Выберите Отправить запрос.
Рецензенты уведомляются о запросе по электронной почте.
Можно также запросить проверку кода приостановленной работы, набора отложенных изменений или набора изменений. Чтобы просмотреть список наборов изменений, откройте Обозреватель управления исходным кодом и нажмите кнопку Журнал.
Принятие или отклонение проверки кода
Юлия получает запрос проверки кода и принимает его. Она проверяет код, пишет несколько комментариев на уровне файла и блока кода, а затем отправляет проверку кода обратно Питеру. Адам слишком занят, чтобы проверить код, поэтому он отклоняет запрос.
В своих комментариях Юлия указывает, что тест неправильный. Допустимая ошибка должна представлять собой заданную долю входных значений, а не постоянное значение. Поэтому в тесте ошибка должна умножаться на значение.
// 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
Совет
Обратите внимание, что члены команды используют тесты в качестве отправной точки для обсуждения.Если тесты верны и достаточны, код также будет правильным.В отличие от кода, каждый тест представляет собой отдельный случай.По этой причине обсуждать тесты зачастую проще, чем код.
Выполнение проверки кода
В Team Explorer на странице Моя работа перейдите в раздел Мои проверки кода и запросы и откройте запрос.
На странице Проверка кода можно:
Выберите Принять или Отклонить, чтобы уведомить автора, будете ли вы рецензировать код.
Выберите Добавить рецензента, чтобы добавить в запрос проверки кода других рецензентов.
Просмотрите изменения в каждом файле, который был обновлен для этого рабочего элемента.
Разверните узел Комментарии, чтобы обсудить изменения с автором и другими рецензентами.
Выберите Добавить общие комментарии
-или-
выберите блок кода, а затем выберите Добавить комментарий в контекстном меню.
- Выберите Отправить комментарии, чтобы сделать свои комментарии видимыми для автора и других рецензентов.
Выберите Отправить и завершить, чтобы завершить проверку и указать, требуется ли дальнейшая работа над кодом.
Ответ на проверку кода
Питер получает проверку кода от Юлии и отвечает на нее.
Ответ на проверку кода
Рецензенты и авторы кода могут обмениваться комментариями как угодно часто. Проверка заканчивается, когда автор закрывает ее. О каждом новом высказывании в ходе дискуссии ее участники оповещаются по электронной почте.
В Team Explorer на странице Моя работа перейдите в раздел Проверки кода и запросы и дважды щелкните запрос.
Можно также открыть контекстное меню запроса и выбрать Открыть.
Читайте комментарии и отвечайте на них по мере необходимости. Чтобы ответить на комментарий, выберите Ответить, введите свой комментарий в появившемся диалоговом окне и выберите ОК. Чтобы отправить свои комментарии, выберите Отправить комментарии.
Чтобы просмотреть файл и блоки кода, имеющие комментарии, или отредактировать файл, перейдите в раздел Комментарии. В подразделе Файлы откройте контекстное меню файла и выберите Сравнить (только чтение) или Изменить файл.
Когда вы и другие рецензенты закончите отвечать на комментарии друг друга и будете готовы закрыть проверку, щелкните Закрыть анализ и выберите один из следующих вариантов:
Завершить, чтобы указать, что проверка завершена;
—или—
Прервать, чтобы указать, что проверка отменена.
Исправление теста и кода
Прочитав комментарии Юлии, Питер исправляет свой модульный тест так, как она предлагает. После этого тест оказывается непройденным. Это означает, что код все еще не является правильным.
Питер исправляет код:
/// <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;
}
Тест снова проходит успешно:
Совет
Для исправления ошибки пользуйтесь тем же подходом, что и при разработке кода.Напишите тест, который завершается сбоем, а затем добейтесь, чтобы тест проходил успешно.Возвращайте код и тесты только тогда, когда тесты проходят успешно.
Теперь Питер обращает внимание на тестовый случай, в котором была обнаружена ошибка. Шаги для воспроизведения ошибки четко описаны в рабочем элементе тестового случая. Он выполняет эти шаги и видит, что счета-фактуры помечаются как оплаченные правильно.
Возврат исправления
Питер возвращает исправленный код и модульные тесты. Состояние ошибки автоматически устанавливается в значение Разрешено, а значение параметра Кому назначено автоматически меняется на имя члена команды тестирования, который обнаружил ошибку. Этот член команды должен будет проверить, что ошибка исправлена, и закрыть рабочий элемент.
Возврат исправления
В Team Explorer на странице Моя работа выберите Вернуть.
Просмотрите содержимое страницы Ожидающие изменения, чтобы убедиться, что:
все необходимые изменения перечислены в разделе Включенные изменения;
все необходимые рабочие элементы перечислены в разделе Связанные рабочие элементы.
Введите Комментарий, чтобы членам команды было легче понять назначение этих изменений при просмотре истории управления версиями измененных файлов и папок.
Выберите Вернуть.
Возобновление работы над задачей
Питер возобновляет работу над своей задачей. Он может быстро вернуться к работе, поскольку все его изменения кода восстанавливаются в его рабочей области вместе с необходимыми элементами состояния, такими как открытые окна, точки останова и переменные окна контрольных значений.
Возобновление работы над задачей
В Team Explorer на странице Моя работа найдите список Приостановленная и включенная в набор отложенных изменений работа. Откройте контекстное меню элемента. Имеется два варианта:
если требуется возобновить приостановленную работу и автоматически приостановить все ожидающие изменения в рабочей области, выберите Возобновить;
если требуется объединить приостановленную работу с ожидающими изменениями, которые уже присутствуют в рабочей области, выберите Слияние с "Выполняется".
Что происходит при возобновлении работы
При возобновлении работы Visual Studio восстанавливает следующие элементы:
Ваше открытое решение
Ваши изменения кода
Состояние и положение открытых окон
Точки останова
Переменные и выражения окна контрольных значений
Закладки
Проверка исправления ошибки
Если ошибка была найдена командой тестирования, они свяжут с ошибкой определенные тестовые случаи, которые затем можно будет перезапустить. Дополнительные сведения.