Будьте уверены в том, что вы тестируете

Будьте уверены в том, что вы тестируетеНедавно работая над модулем одной крупной системы управления проектами, конвертируя процесс ее сборки из Ant в Maven. Это был крепкий, хорошо оттестированный код, который уже был запущен в эксплуатацию. Я засиделся до позднего вечера, все шло хорошо. Я внес небольшие изменения в процесс сборки — и тут внезапно модульный тест провалился. Я потратил некоторое время на то, чтобы разобраться, каким образом внесенные изменения могли привести к такому результату, но, в конце концов, сдался и дал обратный ход. Но тест по-прежнему проваливался. Я начал копаться в самом тесте и обнаружил, что проблема возникала при тестировании утилиты, которая вычисляет время. В частности, она возвращала экземпляр Date, который указывал на полдень следующего дня. Оказалось, что тест использует системное время, соответствующее моменту прохождения теста, в качестве параметра для сравнения с результатом, полученным при тестировании кода. А в коде метода сидела глупая ошибка (+1/-1), которая приводила к тому, что при вызове метода в промежутке 23:00 —24:00 он возвращал полдень текущего, а не следующего дня".

Важные уроки из этой истории:

•Убедитесь в том, что ваши тесты повторяются. Использование системного времени или даты в качестве параметра делает тестирование чувствительным ко времени его запуска, использование IP - адреса компьютера делает результат зависимым от того, на какой машине проводится тест и т. д.

•Проверьте тест на граничные условия. 23:59:59 и 00:00:00 —самые подходящие моменты времени.

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

Когда у вас появляется несколько модульных тестов, автоматизируйте их, т.е. запускайте их всякий раз при компиляции и сборке своего кода. Относитесь к результатам модульного тестирования так же, как к результатам компиляции: если код не проходит тестов (или не имеет их), это гак же плохо, как если бы он не компилировался вовсе.

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

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

На данный момент рассылка sms один из лучших рекламных решений, смс рассылкой вы можете оповестить своих клиентов о наступлении акций или распродаж. Не выходя из дома или офиса вы сможете произвести смс рассылки по всей России или например выбрать регион Москва или Киев и без труда разослать свое коммерческое предложение.

tel-icq