Регрессивный анализ
Результаты лежат в файлах в каталоге ./results. Эти результаты можно сравнить с результатами в каталоге ./expected, используя 'diff'. (Тестирующий сценарий сделает это за тебя, и поместит отличия в ./regression.diffs.)
Файлы могут точно не совпадать. Тестирующий сценарий сообщит о любом отличии как о "провале", но отличие может быть из-за маленьких системо-зависимых различий в написании сообщений ошибок, работы математической библиотеки, и т.д. "Провалы" такого типа не указывают на проблему с Postgres.
Поэтому, необходимо исследовать фактическую разницу для каждого "непрошедшего" теста, чтобы определить, есть ли реальная проблема. Следующие параграфы пытаются предоставить некоторое руководство в определении значима ли разница или нет.
Некоторые регрессивные тесты включают в себя создаваемые неправильные значения ввода. Сообщения об ошибках могут появиться или из кода Postgres code или из процедур системы платформы хоста. В последнем случае, сообщения могут различаться между платформами, но должны отражать похожую информацию. Эти различия в сообщениях приводят к "провалу" регрессивного теста, которая может быть обоснована проверкой.
Есть несколько мест, где PostgreSQL OID (идентификаторы объектов) появляются в 'regress.out'. OIDы - это уникальные 32-битные целые, которые генерируются сервером PostgreSQL, в зависимости от того вставляется ли строка таблицы или обновляется. Если ты запустил регрессивный тест над уже пользованной базой данных или запускал его несколько раз, то выдаваемые OIDы будут иметь разные значения. Следующие предложения SQL в 'misc.out' отражают такое поведение:
QUERY: SELECT user_relns() AS user_relns ORDER BY user_relns;
The 'a,523676' row is composed from an OID.
Большинство результатов даты и времени зависят от среды временной зоны. Соответствующие файлы генерировались для временной зоны PST8PDT (Berkeley, California) и поэтому обнаружится несостоятельность, если тесты запущены в ненастроенной временной зоне. Драйвер регрессивного теста устанавливает переменную среды PGTZ в PST8PDT чтобы получить правильные результаты.
Подобное случается на некоторых системах, которые не поддерживают рекомендуемый синтаксические правила настройки локальной временной зоны; тебе могут потребоваться другие настройки PGTZ на таких машинах.
Некоторые системы, использующие старые библиотеки временных зон, не смогут выполнить перевод часовой стрелки на даты до-1970 dates, и время до-1970 PDT будет отображаться в PST. Все эти различия локализации отразятся на результатах тестов.
Некоторые тесты затрагивают вычисления 64-битных (float8) чисел из таблицы столбцов. Разница в результатах предполагает наблюдение за математическими функциями над столбцами float8. float8 и геометрические тесты особенно падки на маленькие отличия между платформами. При сравнении человеческим глазом нужно определить реальную значимость этих отличий, которые обычно имеются в 10 знаках справа от десятичной точки.
Некоторые системы сигнализируют об ошибках от pow() и exp() по-разному, в зависимости от механизма, ожидаемого текущим кодом Postgres.
Некоторые тесты затрагивают операции с географическими данными о карте улиц Oakland/Berkley CA. Данные карты представлены в виде многоугольников, чьи вершины представляются в виде пары float8 чисел (десятичные широта и долгота). Сначала, создавались таблицы и заполнялись географическими данными, затем создавались некоторые представления, которые объединяли две таблицы, используя оператор пересечения многоугольников (##), затем представление заканчивалось выборкой. Когда сравнивались результаты сравнения разных платформ, то появлялась разница во 2м или 3м порядке справа от десятичной точки. Вот операторы SQL, где возникали эти проблемы:
QUERY: SELECT * from street;
QUERY: SELECT * from iexit;
Есть по крайней мере один тест в random.out, который предназначен для создания результатов random. Это вызывает неудачу random регрессивных тестов в это время. Набрав
diff results/random.out expected/random.out
получим только одну или несколько строк различий по этой причине, но другие различия с плавающей точкой с непохожей архитектурой могут вызывать много других различий. Смотри замечания по релизам ниже.
Файлы ./expected/*.out переделываются из первоначального монолитного expected.input файла, созданного Jolly Chen et al. Новые версии этих файлов, генерируемые различными машина разработки, заменяются после тщательной (?) проверки. Многие машины разработки работают на на вариантах ОС Unix (FreeBSD, Linux, и т.д.) на аппаратуре Ix86. Первоначальный expected.input файл создан на системе SPARC Solaris 2.4, используя postgres5-1.02a5.tar.gz дерево исходников. Он был сравнён с файлом, созданным на системе I386 Solaris 2.4 и отличался только в многоугольниках плавающей точкой в 3ей цифре справа от десятичной точки. (смотри ниже) Первоначальный sample.regress.out файл был в postgres-1.01 релизе, собранном Jolly Chen и включён здесь для ссылки. Он мог быть создан на машине DEC ALPHA как Makefile.global в postgres-1.01 релизе с именем PORTNAME=alpha.
|