Наверняка машина для голосования тестировалась тысячи раз, а затем сотни раз использовалась на региональных выборах без каких-либо проблем. Тем не менее проблема возникла, и это изрядно замедлило процесс выбора следующего лидера свободного мира. Если же мы с вами посмотрим на внутреннюю кухню отрасли по разработке программного обеспечения, то легко поймем, почему серьезные программные сбои часто не привлекают внимания. Программы создаются разработчиками, то есть людьми, производящими множество страниц с логическими инструкциями, которые машина затем интерпретирует и в соответствии с которыми работает. В большинстве компаний-разработчиков готовый программный продукт проверяется тестерами – людьми, которые смотрят на программу со всех сторон в надежде найти ошибки. Тестеры делают то, что делали бы на их месте обычные пользователи. Они нажимают на большие кнопки, выбирают самые типичные опции, открывают и закрывают файлы и т. д. Проблема состоит в том, что зачастую пути, по которым идут обычные пользователи, не всегда позволяют выявить сбои или ошибки в программе. Какие-то проблемы выявляются, однако способность тестеров найти сбои быстро достигает уровня плато – система, по сути, приобретает иммунитет к стандартным техникам тестирования. Однако многие ошибки, упускаемые из внимания, оказываются потом чуть ли не самыми важными (минус 16 тысяч 22 голоса – это серьезно). То есть обычный метод охоты за сбоями несовершенен и позволяет упускать именно те важнейшие ошибки, которые как раз и необходимо найти.
Каждый год сотни продуктов отзываются с рынка из-за тех или иных дефектов. О некоторых из этих дефектов производители знают еще перед выпуском продукта, однако во многих случаях их не выявляют из-за того, что тестирование было слишком методичным,
Процессу тестирования программ необходим шок, позволяющий предупредить парадокс пестицидов и пробиться сквозь создаваемое сбоями плато. Решение этой проблемы может состоять в использовании подхода, известного в наши дни под названием «фаззинг» и способного справиться почти с любым плато, вызванным акклиматизацией.
Фаззинг обращает внимание на все странное и необычное{25}
. Эта техника основана на точке зрения, с которой редко соглашаются инженеры: большинство систем слишком сложны для полного понимания, что приводит к возникновению странных вещей. Инженеры привыкли к жестким процессам и живут в мире математических допусков. Фаззинг допускает, что реальный мир значительно более неопределен.Первый опыт общения Хью с фаззингом{26}
(хотя в то время он этого еще не понял) состоялся, когда он учился в школе на Багамах. Хью захотел выпить газировки. Тогда, в 1980-х годах, машины по продаже прохладительных напитков только-только начали появляться в школах в столице страны Нассау. Багамы – довольно небольшой рынок для поставщиков таких машин, а кроме того, ситуация осложнялась уникальным положением национальной валюты. Официальной денежной единицей на острове выступает багамский доллар, искусственно привязанный к доллару США в соотношении один к одному. Багамские и американские доллары полностью взаимозаменяемы. Если вы покупаете в магазине шоколадку, то можете получить сдачу наполовину в американских, а наполовину в багамских долларах.Наконец новые машины добрались и до школы, в которой учился Хью, однако к ним были прикреплены рукописные объявления: «Только 25-центовые монеты США». Когда Хью вместе со своими страдавшими от жажды друзьями добрался до одной из этих машин, ни у кого не оказалось американских четвертаков, и ребята начали экспериментировать. Один бросил в прорезь металлическую шайбу в надежде, что это каким-то волшебным образом поможет получить газировку. Шайба тут же выскочила обратно. Тогда они засунули в прорезь американский 10-центовик. Ничего. Багамский 25-центовик. Безрезультатно. Кто-то вспомнил, что в таких ситуациях иногда помогает соленая вода. Из этого тоже ничего не вышло, не считая того, что машина оказалась полностью мокрой. В течение получаса ребята запихивали в машину все, что только могли найти в карманах (в их защиту стоит сказать, что они к тому моменту еще не достигли пубертатного возраста). Ничего не получалось до тех пор, пока кто-то не бросил в прорезь багамскую монету в 10 центов.