Автосигнализация утратила свою эффективность, поскольку перестала быть необычной. Однако, отключаясь от нее, мы упускаем из виду по-настоящему важные сигналы – а это может привести к значительным ошибкам.
В конце 2000 года технологическое сообщество США заинтересовалось техническим сбоем, произошедшим в округе Волусия во Флориде. Машина для электронного голосования в районе с 600 зарегистрированными избирателями насчитала минус 16 тысяч 22 голоса за Эла Гора, кандидата от Демократической партии{23}. Если вы в это время не снимались в эпизоде шоу «Остаться в живых» на пустынном острове, то наверняка помните драму, связанную с противостоянием Буша и Гора в ходе выборной кампании. Неуверенность! Неопределенность! Хаос! Но что же случилось в Волусии? Каким образом машина, призванная помогать в одном из самых важных процессов в стране, могла дать столь серьезный сбой? (Нужно отметить, что плохие результаты были аннулированы и не оказали никакого влияния на итог выборов, поскольку голоса в Волусии были впоследствии пересчитаны, причем с изрядной шумихой.)
Наверняка машина для голосования тестировалась тысячи раз, а затем сотни раз использовалась на региональных выборах без каких-либо проблем. Тем не менее проблема возникла, и это изрядно замедлило процесс выбора следующего лидера свободного мира. Если же мы с вами посмотрим на внутреннюю кухню отрасли по разработке программного обеспечения, то легко поймем, почему серьезные программные сбои часто не привлекают внимания. Программы создаются разработчиками, то есть людьми, производящими множество страниц с логическими инструкциями, которые машина затем интерпретирует и в соответствии с которыми работает. В большинстве компаний-разработчиков готовый программный продукт проверяется тестерами – людьми, которые смотрят на программу со всех сторон в надежде найти ошибки. Тестеры делают то, что делали бы на их месте обычные пользователи. Они нажимают на большие кнопки, выбирают самые типичные опции, открывают и закрывают файлы и т. д. Проблема состоит в том, что зачастую пути, по которым идут обычные пользователи, не всегда позволяют выявить сбои или ошибки в программе. Какие-то проблемы выявляются, однако способность тестеров найти сбои быстро достигает уровня плато – система, по сути, приобретает иммунитет к стандартным техникам тестирования. Однако многие ошибки, упускаемые из внимания, оказываются потом чуть ли не самыми важными (минус 16 тысяч 22 голоса – это серьезно). То есть обычный метод охоты за сбоями несовершенен и позволяет упускать именно те важнейшие ошибки, которые как раз и необходимо найти.
Каждый год сотни продуктов отзываются с рынка из-за тех или иных дефектов. О некоторых из этих дефектов производители знают еще перед выпуском продукта, однако во многих случаях их не выявляют из-за того, что тестирование было слишком методичным, слишком нормальным. Борис Бейзер, легенда в мире тестирования программных продуктов, называет эту ситуацию парадоксом пестицидов{24}. В своей книге Software Testing Techniques («Техники тестирования программ») он замечает: «Каждый метод, который вы используете для предотвращения или выявления сбоев, оставляет следы менее заметных сбоев, против которых этот метод неэффективен». Выражаясь иными словами, традиционные методы проверки могут привести к появлению «суперсбоев», что особенно страшно, если речь идет о программах, контролирующих движение самолетов, гаджетах, следящих за ускорением автомобиля, или устройствах, помогающих выбрать президента.
Процессу тестирования программ необходим шок, позволяющий предупредить парадокс пестицидов и пробиться сквозь создаваемое сбоями плато. Решение этой проблемы может состоять в использовании подхода, известного в наши дни под названием «фаззинг» и способного справиться почти с любым плато, вызванным акклиматизацией.
Фаззинг обращает внимание на все странное и необычное{25}. Эта техника основана на точке зрения, с которой редко соглашаются инженеры: большинство систем слишком сложны для полного понимания, что приводит к возникновению странных вещей. Инженеры привыкли к жестким процессам и живут в мире математических допусков. Фаззинг допускает, что реальный мир значительно более неопределен.
23
Оценка уязвимости машин для голосования – одно из любимых хобби Хью. Он даже снялся для документального фильма Hacking Democracy, номинанта на премию «Эмми», и детально рассказал о технологических недостатках имеющихся систем. Узнать больше об этом фильме можно на сайте www.hackingdemocracy.com. См. также: Dana Milbank, Tragicomedy of Errors Fuels Volusia Recount, The Washington Post, November 12, 2000.
24
Boris Beizer, Software Testing Techniques, 2nd ed. (London: International Thomson Computer Press, 1990).
25
Отличное описание фаззинга с технической точки зрения приведено в книге Ari Takanen, Jared DeMott, Charlie Miller, Fuzzing for Software Security Testing и Quality Assurance (Norwood, MA: Artech House Inc., 2008).