2009-12-16 1 views
6

Во избежание слишком большого тестирования я хотел бы предоставить команде Quality Assurance (QA) подсказки о том, какие функции должны быть регрессированы после итерации разработки. Знаете ли вы инструменты, которые могли бы сделать это в среде разработчиков C++ и Subversion (и visual studio)?Оптимизация регрессионного тестирования в среде C++

Подробная информация о прецеденте:

  1. Особенности будет определяться командой развития с точки зрения ввода точек, как правило классов или классов методов. Скажем, функция «excel file import» определяется методом ImportExcelFile (...) класса FileImporter.
  2. Во время разработки итераций команда разработчиков совершает некоторые изменения в некоторых методах некоторых классов . Скажем, один из этих классов косвенно используется метод ImportExcelFile()
  3. В конце итерации, все фиксаций анализируются с помощью инструмента и отчет производится и поставляется в команду QA. В нашем примере команде QA сообщается, что функция «excel file import» должна быть протестирована, и что другие функции X Y & Z - без изменений.

Очень вероятно, что этот инструмент будет использовать статический анализ кода и использовать API subversion. Но существует ли это?

ответ

1

G'day,

То, что вы описываете, это на самом деле не регрессионного тестирования. Вы просто тестируете новые функции.

Регрессионное тестирование - это то, где вы специально запускаете свой полный набор тестов, чтобы узнать, прервал ли код, поддерживающий вашу новую функцию, предыдущий рабочий код.

Я настоятельно рекомендую прочитать превосходную бумагу Мартина Фаулера «Continuous Integration», которая охватывает некоторые аспекты, о которых вы говорите.

Он также может предоставить вам лучший способ работы, в частности аспекты CI, о которых говорит Мартин в своей статье.

Редактировать: Тем более, что у CI есть скрытые маленькие ловушки, которые очевидны в ретроспективе. Такие вещи, как остановка тестеров, пытающихся протестировать версию, в которой еще не было файлов, реализующих новую функцию. (Вы проверяете, что за последние пять минут никаких коммитов не было).

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

Если он сломан, теперь у вас есть:

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

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

Редактировать: Что касается вашего вопроса, как насчет пометки репозитория, когда вы проводили тестирование, например. TESTS_COMPLETE_2009_12_16. Затем, когда вы будете готовы выработать то, что следующий набор тестов выполняет «svn diff -r» между этими последними тегами завершенного тега и HEAD?

НТН

КСТАТИ Я буду обновлять этот ответ с некоторыми дополнительными предложениями, как я думаю о них.

веселит,

+0

Роб, благодарю вас за ответ. На самом деле я знаю - и сторонник публикаций Мартина Фаулера, и мы используем непрерывную интеграцию, включая автоматическое модульное тестирование. Дело в том, что у нас также есть отдельная команда QA, которая фокусируется на тестировании функций - «истории» с точки зрения XP. Мы хотели бы иметь возможность вести их, по которым история (ы) должна быть повторно протестирована после ряда коммитов, особенно в целях предотвращения «чрезмерного тестирования» историй, которые, возможно, не могли быть регрессированы. –

+0

@Denis, приветствия. Может ли ваш dev, возможно, отметить коммит для одной истории пользователя? Создание единого фиксации, когда история завершена, вероятно, опасна (как в случае потери работы из-за потери локальной копии) и негибкой. Я предлагаю, возможно, пометить хранилище, когда США закончены и совершены. Кстати, я бы хотел, чтобы у меня был доллар за каждый раз, когда кто-то сказал «не мог бы меня отступить», когда это было ясно! (-: –

0

Сплит ваш проект на отдельные исполняемые файлы и их сборки.

Make will rebuild любой исполняемый файл, если его зависимости меняются.

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

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

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

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

Если вы не работаете в среде, в которой гарантам не хватает ресурсов (например, TinyC), вы закончите регрессионное тестирование всего. Регрессионное тестирование не является модульным тестированием.

Смежные вопросы