Выбрать главу

Почему число 127 настолько важно для некоторых программ? Подобно числу 10 для наших пальцев, оно считается пограничным значением. Обычная математика говорит нам, что результат сложения 1 и 127 (1 + 127) должен быть равен 128. Однако порой в компьютерной математике результат оказывается равным минус 128, то есть минимальному значению, которое могут удерживать бинарные переключатели. Иными словами, это все равно что выпрямленный палец, означающий 11, однако выглядящий как один.

Как только Хью увидел число 127 на экране самолетной развлекательной системы, он понял, что у него есть отличный шанс вызвать целочисленное переполнение системы. Затем, исключительно в интересах науки, он нажал кнопку «+» еще один раз. Внезапно на экране на какой-то момент показалось число 128, а затем экран погас.

Тут же выключился экран сидевшего рядом с ним пассажира.

Погасли экраны и у пассажиров перед ним и за ним.

Через секунду выключилась вся развлекательная система в самолете.

После нескольких минут ворчания некоторых пассажиров бесстрастный бортпроводник перегрузил систему, и все вернулось к нормальному состоянию. А Хью приземлился с новыми знаниями о «Тетрисе» (и числе 127).

Как мог производитель упустить из виду эту проблему?

Позвольте провести один интересный эксперимент. Прочитайте приведенный ниже список, но только один раз:

1) страус;

2) арахисовое масло;

3) компьютерная программа;

4) осьминог;

5) плащ;

6) сэндвич;

7) лимон;

вернуться

30

Richard Lacayo et al., «The End of the World as We Know It?» Time, January 18, 1999.

вернуться

31

Хорошее описание исследовательского тестирования приведено в книге: James A. Whittaker, Exploratory Software Testing: Tips, Tricks, Tours, and Techniques to Guide Test Design (Boston: Addison-Wesley, 2009).

вернуться

32

На самом деле проблема имеет огромные масштабы. В последнее время фаззинг стал основным методом для выявления проблем с безопасностью программ. Каждый год с помощью этого метода выявляются тысячи сбоев.