.
Конспекты из книги "Наука отладки". Часть 10.
Автор megabax   
27.06.2011 г.
Проблема

Конспекты из книги "Наука отладки". Часть 10.

 

Это продолжение предыдущей статьи.

Проблема

Иногда ошибка может миновать этап тестирования. Ошибка может быть и не в программе, а где то рядом.

 

Фактографические данные

  • В апреле 2000 года секретный документ НАТО хакерских атак попал в одну лондонскую издательскую фирму. В целях разработки защиты от вирусных атак были разработаны вирусы, что бы смоделировать ситуацию. Но эксперимент был поставлен неправильно, в результате он вышел из под контроля. Таким образом секретные документы были разосланы. В данном случае ошибка была не в вирусе, он как раз дела то, на что был запрограммирован.  Ошибка содержалась в настройках сетевого окружения.

  • В 1993 году корпорация Intel представила новый процессор PentiumTM. Через год профессор Томас Найсели обнаружил в нем сообщил о ней в Intel. Популярная пресса заставила поверить, что эта ошибка вызвана глупостью инженера, разве трудно проверить каждое значение по справочной таблице. На самом деле реальность оказалась куда более сложней, чем кажется. Ошибка заключалась в том, что процессор вычислял ошибочное значение при некоторых операциях деления. Некорректно вычислялись последние цифры после восьмой значащей цифры. Intel пыталась сгладить важной этой ошибки.  Согласно официальному заявлению Intel, вероятность возникновения такой ошибки у среднего пользователя кране мала.

  • 28 ноября 1994 года Тим Коу из комании Vitess Semiconductor оспорил точку зрения Intel. Он продемонстрировал возможность активации ошибки один раз в 3 миллисекунды.  А так же показал, что достаточно безобидно выглядевшее деление 4.999999/14.999999 дает погрешность 0.00000407.

  • Главная причина ошибки деления была в том, что SRT-алгоритм, используемый в процессоре, использовал справочную таблицу для определения частного. Значения таблицы генерируется и загружается в массив. Но ошибка в скрипте привела к тому, что некоторые элементы таблицы оказались пропущены. И это привело к снижению точности вычислений. При чем, ошибочные значения получались только в том случае, когда в исходных данных была определенная последовательность бит, с 5-ого по 10-ое. Поэтому данная ошибка не была выявлена тестами, основанными на случайных данных.

Особенности излагаемого материала, критика

 

Ошибка в процессоре Pentium, описанная в данной статье, это ошибка, которую легко совершить но трудно найти. Данная ошибка была найдена только потому, что Нейсли заметил небольшие несоответствия. А заметил он их потому, что в его программе был заложен алгоритм проверки правильности вычислений. Если бы такого алгоритма в его программе не было, то, возможно, ошибка до сих пор была бы не обнаружена.

 

Новизна, как можно применить в жизни (выводы)

 

Из описанных в статье событий мы можем извлечь следующие уроки:

  • Тестирование должно не только следовать спецификации, но еще и учитывать используемые алгоритмы.

  • В программах нужно использовать средства для контроля над правильностью программы.

  • Все неожиданные результаты надо ставить под сомнения и проверять до тех пор, пока не найдем причину.

 

 

Источник: Мэтт Тэллес, Юань Хсих, "Наука отладки".

Продолжение следует.

 

Последнее обновление ( 18.02.2013 г. )