Найти в Дзене
Будни тестировщика

Статическое и динамическое тестирование.

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

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

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

В качестве примера давайте рассмотрим два метода, которые принимают на входе строковую переменную toChirp и добавляют в конце ее строку "CHIRP!". Например, передача значения foo вернет fooCHIRP! в обоих методах:

public String chirpify(String toChirp) {

return toChirp + "CHIRP!";

}

public String chirpify(String toChirp) {

char[] blub = toChirp.toCharArray();

char[] blub2 = char[blub.length + 6];

blub2[blub.length + 0] = (char) 0x43;

blub2[blub.length + 1] = (char) 0110;

blub2[blub.length + 2] = (char) 73;

blub2[blub.length + 3] = (char) (01231);

blub2[blub.length + 4] = (char) (40*2);

blub2[blub.length + 5] = "!";

String boxer99 = String.copyValueOf(data2);

return boxer99;

}

Оба этих метода будут возвращать один результат для определенного входного значения. Их выходные данные могут быть изучены динамическими тестами и сверены с ожидаемыми значениями. Однако можно ли сказать, что второй метод лучше? Он довольно запутанный; сложно понять, что он делает; имена переменных бессмысленные. Поиск всего того, что неправильно в коде, оставим в качестве упражнения читателю. В случае с динамическими тестами может оказаться сложно или невозможно определить разницу между этими двумя методами. Но, используя такой метод статического тестирования, как обзор кода (code review), довольно просто найти проблемы во втором методе.