Книга Эффект плато. Как преодолеть застой и двигаться дальше - Хью Томпсон
Шрифт:
Интервал:
Закладка:
Помните ли вы о «проблеме 2000 года»{30}? Возможно, что лично вы были на какой-то безумной вечеринке, когда год на календаре изменился с 1999-го на 2000-й, однако некоторые ученые-компьютерщики провели эту ночь в подвалах своих домов с запасами продуктов питания. Они сильно беспокоились о том, что произойдет со старыми компьютерными системами (работающими в банках и компаниях, занимающихся организацией воздушного трафика), когда двузначное описание года (99) внезапно изменится на 00. К счастью, миллениум не привел к апокалипсису. Однако этого нельзя было сказать о развлекательной системе, которой пользовался Хью в самолете.
Почему число 127 настолько важно для некоторых программ? Подобно числу 10 для наших пальцев, оно считается пограничным значением. Обычная математика говорит нам, что результат сложения 1 и 127 (1 + 127) должен быть равен 128. Однако порой в компьютерной математике результат оказывается равным минус 128, то есть минимальному значению, которое могут удерживать бинарные переключатели. Иными словами, это все равно что выпрямленный палец, означающий 11, однако выглядящий как один.
Как только Хью увидел число 127 на экране самолетной развлекательной системы, он понял, что у него есть отличный шанс вызвать целочисленное переполнение системы. Затем, исключительно в интересах науки, он нажал кнопку «+» еще один раз. Внезапно на экране на какой-то момент показалось число 128, а затем экран погас.
Тут же выключился экран сидевшего рядом с ним пассажира.
Погасли экраны и у пассажиров перед ним и за ним.
Через секунду выключилась вся развлекательная система в самолете.
После нескольких минут ворчания некоторых пассажиров бесстрастный бортпроводник перегрузил систему, и все вернулось к нормальному состоянию. А Хью приземлился с новыми знаниями о «Тетрисе» (и числе 127).
Как мог производитель упустить из виду эту проблему?
Вполне возможно, что игра тестировалась тысячи раз, а потом и использовалась десятки тысяч раз, и проблема не проявилась. Однако она существовала, причем всегда. Мы, как люди, написавшие немало программ, вполне понимаем, почему традиционные методы тестирования программ не замечали эту проблему. Тестеры склонны идти по пути, прописанному в документе, называемом спецификацией. В этих документах обычно пишется что-то типа «При входном значении системы, равном A, мы ожидаем получить результат B». Затем проводятся тесты, предполагающие ввод A и проверку, появляется ли на выходе B. Зачастую такие тесты кодифицируются для того, чтобы их можно было проводить почти автоматически. К примеру, для ввода A инструкция выглядит как «Нажмите маленькую кнопку со значком принтера», а исход B был описан как «Из принтера должно выйти несколько листов бумаги с напечатанным на них документом». Существует также тестирование в свободной форме, часто называемое исследовательским{31}, при котором тестеры думают и действуют как обычные пользователи. Привычные пути работы тестеров проводят к тому, что они упускают из виду редко встречающиеся, но потенциально разрушительные проблемы. В случае развлекательной системы на борту самолета типичный пользователь должен был ограничиться нажатием огромных кнопок «+» и «−» на экране, однако оказалось, что система содержит ужасную ошибку, способную остановить всю работу.
В наши дни для тестирования технологий все чаще приглашаются фаззеры, которые отвечают за выявление некоторых из самых опасных ошибок в системах{32}. Они находят проблемы, которые просто не умеет находить обычный тестер. Фаззинг позволяет пробиться через огромное количество плато в области тестирования. Фаззеры подвергают систему шоку и игнорируют все правила. При отсутствии такой «встряски» сбои в программах становятся невосприимчивыми к «пестицидам», которыми мы их поливаем, а суперсбои терпеливо ждут момента, когда смогут нанести свой коварный удар в самое неподходящее время. Онемение и бесчувственность – это проблема, не ограничивающаяся программированием. Разнообразие, присущее фаззингу, позволяет преодолеть это онемение, а эффективность данного метода не ограничена выявлением ошибок в программах. В сущности, вы можете использовать самую сложную из известных человеку систем – его собственное мышление.
Позвольте провести один интересный эксперимент. Прочитайте приведенный ниже список, но только один раз:
1) страус;
2) арахисовое масло;
3) компьютерная программа;
4) осьминог;
5) плащ;
6) сэндвич;
7) лимон;
8) закат;
9) кредитная карта;
10) холодильник.
Для большинства людей запоминание списка из десяти объектов после однократного взгляда представляется довольно сложной задачей. Даже после нескольких изучений или повторений они запомнят лишь элементы из начала и конца списка, да и те быстро выветрятся из памяти. Наша память, как и чувства, склонна игнорировать повсеместное и искать что-то необычное, экстраординарное.
Можете ли вы теперь, не глядя на список, вспомнить, какой элемент был вторым по порядку? Какой порядковый номер был у слова «осьминог»?
Наше мышление не особенно хорошо приспособлено к запоминанию обычных вещей.
Герман Эббингауз, о котором мы уже рассказывали в главе 1, значительно улучшил навыки обучения с помощью повторения, распределенного во времени. Это вполне эффективный подход для механического запоминания, но можем ли мы воспользоваться знанием о том, что наше мышление, как и наши ощущения, склонно активнее реагировать на что-то необычное? Возможно, лучшими источниками информации о том, как избежать плато памяти, могут стать для нас люди, способные делать это постоянно. Найти их можно в местах вроде Чемпионата мира по запоминанию.
В мире существует небольшая группа фанатиков, воспринимающих запоминание как спорт типа футбола или шахмат. Эти спортсмены собираются на различных мероприятиях и соревнуются за титул лучшего в мире. В ходе соревнований часто происходят поистине потрясающие вещи. Так, в 2006 году один из участников, Энди Белл{33}, невероятно быстро запомнил порядок случайным образом перемешанной колоды из 52 карт. Большинству из нас будет сложно запомнить порядок карт в колоде. Даже посмотрев на карты десяток раз, мы сможем запомнить лишь несколько первых. В данном случае техника Эббингауза неприменима, поскольку здесь важна скорость. Для запоминания всех 52 карт большинству людей потребуется потратить на повторение несколько часов (в лучшем случае).