Оптимизация регрессионного тестирования в C++ environnement

Для предотвращения слишком большого тестирования я хотел бы обеспечить, Гарантия качества (QA) подходят к подсказкам, на которых функциями должна быть регрессия, протестированная после повторения разработки. Вы знаете инструменты, которые могли сделать это на C++ и Подверсии (и Visual Studio) dev среда?

Детали о варианте использования:

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

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

6
задан MatrixFrog 3 January 2010 в 19:34
поделиться

2 ответа

Добрый день,

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

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

Я настоятельно рекомендую прочитать превосходную статью Мартина Фаулера " Непрерывная интеграция ", который охватывает некоторые аспекты, о которых вы говорите.

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

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

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

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

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

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

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

HTH

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

ура,

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

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

HTH

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

ура,

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

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

HTH

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

ура,

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

HTH

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

ура,

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

HTH

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

ура,

1
ответ дан 17 December 2019 в 22:13
поделиться

Split your project up into separate executables and build them.

Make will rebuild any executable if its dependencies change.

Add the output files of any chained tests to the dependencies of the next test - for example the save file test's output as a dependency of the read file test.

Anything which has been built after this point needs unit testing.

If any libaries use common exhaustable resources ( heap memory, disk, global mutexes etc. ) add them as dependencies too, as exhaustion due to a leak in one library is often a regression failure in another.

Anything which has been built after a certain point needs regression testing.

Unless you are working in an environment which guarentees lack resource exhaustion ( eg TinyC ), you will end up regression testing everything. Regression testing is not unit testing.

0
ответ дан 17 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: