Детективные юнит-тесты на исторических версиях в системе контроля версий - PullRequest
3 голосов
/ 19 января 2012

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

Мы используем subversion, но мне любопытно, существует ли вообще что-либо подобное.

Ответы [ 3 ]

3 голосов
/ 19 января 2012

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

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

Я не уверен, существует ли такой инструмент для SVN, но я нашел, что пополам с Mercurial очень полезно для такого рода вещей.

3 голосов
/ 19 января 2012

Bisect в Mercurial (и Git) выполняет именно эту работу, кроме ckecking каждая обратная версия - он быстрее находит источник проблемы

1 голос
/ 19 января 2012

Практически любая система контроля версий позволяет вам проверить конкретную версию всей сборки. И позволяет отслеживать историю / изменения любого конкретного файла (ов) сборки.

Обычно я просто использую простой подход «разделяй и властвуй»:

  a) Check out a really old version into a scratch directory

  b) Build and confirm it DOESN'T have the bug

  c) Manually compare the old and current versions and make "educated guesses" as to "what changed".

  d) Check out a version between the old and current version (based on what I found in step c).

  e) Build and test.

  f) If it has the bug, check out version between a) and d).

     If it doesn't have the bug, check out a version between d) and the current.

  g) Rinse and repeat

И да, некоторые или все это, безусловно, можно записать в сценарии.

В bash (если вы используете Linux) или на языке сценариев по вашему выбору.

...