В проекте, где существуют нефункциональные требования, которые определяют максимальное время выполнения для конкретного действия, QA должен проверить производительность этого действия на выделенном компьютере, используя точное оборудование под точной нагрузкой, причем в требованиях указывается как оборудование, так и нагрузка.
С другой стороны, некоторые ошибочные изменения в исходном коде могут серьезно повлиять на производительность. Заметив это негативное влияние на ранней стадии , до того, как исходный код достигнет контроля над исходным кодом и будет проверен отделом контроля качества, это может быть полезно с точки зрения времени, затрачиваемого отделом контроля качества, сообщающим о проблеме, и разработчиком, исправляющим ее несколько коммитов позже.
Для этого хорошая идея:
Чтобы использовать модульные тесты, чтобы иметь представление о времени, потраченном на выполнение одного и того же действия² n раз,
Использовать тайм-аут на тестирование через
[TestMethod, Timeout(200)]
атрибут в C #?
Я ожидаю несколько проблем с этим подходом:
Концептуально модульные тесты на самом деле не для этого: предполагается, что они будут тестировать небольшую часть кода, не более того: ни проверку функциональных требований, ни интеграционный тест, ни тест производительности.
Действительно ли время ожидания модульных тестов в Visual Studio измеряет то, что ожидается измерить, учитывая, что инициализация и очистка для этих тестов отсутствуют или слишком коротки, чтобы повлиять на результаты?
Измерять производительность таким образом некрасиво. Выполнение теста на любом компьютере, независимо от оборудования, нагрузки и т. Д., Похоже на выполнение теста , показывающего, что один продукт базы данных всегда быстрее другого. С другой стороны, я не ожидаю, что эти модульные тесты будут окончательным результатом или тем, что используется отделом контроля качества . Эти модульные тесты будут использоваться только для того, чтобы дать общее представление об ожидаемой производительности и, по сути, предупредить разработчика о том, что его последняя модификация что-то сломала, что серьезно сказалось на производительности .
Разработка через тестирование (TDD) невозможна для этих тестов. Как он потерпит неудачу, прежде всего, перед тем, как приступить к реализации кода?
Слишком много тестов производительности будут влиять на время, необходимое для выполнения тестов, поэтому этот подход ограничен только короткими действиями.
Принимая во внимание эти проблемы, мне все еще интересно использовать такие модульные тесты в сочетании с реальными показателями производительности, проводимыми отделом контроля качества.
Я ошибаюсь? Существуют ли другие проблемы, которые делают абсолютно неприемлемым использование для этого модульных тестов?
Если я ошибаюсь, как правильно предупредить разработчика о том, что изменение исходного кода сильно повлияло на производительность, прежде чем исходный код достигнет контроля исходного кода и будет проверен отделом контроля качества?
¹ На самом деле, ожидается, что модульные тесты будут выполняться только на компьютерах разработчиков, имеющих сопоставимую производительность оборудования, что сокращает разрыв между самыми быстрыми машинами, которые никогда не смогут провалить тест производительности, и самыми медленными машинами, которые никогда не смогут пройти его.
«Под действием я подразумеваю довольно короткий фрагмент кода, который тратится на выполнение нескольких миллисекунд.