четверг, 6 ноября 2014 г.

Урок 5. Слайд 219

Поехали:

Слайд 219
У MASPAR был встроенный механизм для работы с числами с плавающей точкой. Один из них читал 32-битное слово как integer и извлекал из него корень.
Когда я спрашиваю студентов, как много времени займет прогнать 4 миллиарда тестов, большинство считает, что это займет слишком много времени. Так отвечают и студенты с несколькими годами опыта.
Большинство людей, зная, как много можно провести тестов, проверят самое большое и самое маленькое числа - 0 и 4294967295. Некоторые проверят степени двойки: 1,2,4,8,16 итак далее. В терминах бинарной логики, у этих чисел все биты содержат нули, кроме одного с 1.
Некоторые люде проверял случайные числа, или такие, в которых они сомневаются, но мало кто проверит больше ста чисел.
А что, если предположить, что нужно полностью выполнить эту задачу? Hoffman оценил время, вышло около 6 минут. И он проверил все числа.
2 теста упало. 2 из четырех миллиардов.
Ни один из упавших тестов не находился на какой-либо границе. Ни один из тестов, которые я описал не нашел бы эти 2 бага.
Сможете ли вы найти эти баги? Либо вы проверите все варианты, либо вам невероятно повезет.
Рассмотрим функцию извлечения корня из 64битного слова. Это 2 в 64 степени тестов, вместо 2 в 32. Их проверка займет около 24 миллиардов минут, это 49 тысяч лет компьютерного времени.
И если вы найдете достаточно компьютеров для проведения такого теста, то вам все равно останется проверить 64-битное умножение, 64-битное деление и все остальные функции.
Вы не сможете запустить так много тестов. Поэтому, даже если существуют еще ошибки и этот компьютер используется для управления ракетами, то лучшее, что вы сможете сделать - провести достаточно много тестов.
Есть другие стратегии для увеличения надежности ПО, такие как аккуратное ревью кода или TDD, но с точки зрения тестирования черного ящика, всегда есть больше тестов, чем вы смогли бы провести.

Комментариев нет:

Отправка комментария