Приложение 4. КРИТЕРИИ ТЕСТИРОВАНИЯ СООТВЕТСТВИЯ СТОЛЕТИЮ

Приложение 4

КРИТЕРИИ ТЕСТИРОВАНИЯ СООТВЕТСТВИЯ СТОЛЕТИЮ

В основе данного приложения лежит работа корпорации GTE, подготовленная для внутреннего использования. Назначением приложения является представление критериев соответствия 2000 году и приемов для определения влияния 2000 года на операционные системы, трансляторы, ассемблеры, интерпретаторы, системы управления базами данных, локальные сети и заказные приложения.

Четырьмя критериями, определяющими соответствие столетию, являются общая целостность, целостность даты, явное столетие и неявное столетие.

Критерии

Общая целостность

Никакое значение для текущей даты не вызовет прерывания нормальной работы. Наиболее широко известной сменой даты с повышенным риском является переход к 2000 году.

Целостность даты

Все операции со связанными с календарем данными (датами, длительностями, днями недели и т.д.) будут производить желательные результаты для всех имеющих силу значений даты внутри области приложения. Эти операции должны быть надежными только в диапазоне дат, который приложение, как ожидается, должно обрабатывать. Например, обработка торговых заказов может требовать работы с датами пяти прошлых лет и одного будущего года. И напротив, база данных служащих может хранить даты рождения начала XX столетия и даты планируемого ухода на пенсию в XXI столетии.

Явное столетие

Элементы даты в интерфейсах и памяти позволяют определять столетие, исключая неоднозначность даты. Этот критерий, по существу, требует возможности хранить явные значения для столетия. Например, продукты третьей стороны, которые могут использовать год с четырьмя цифрами во всех элементах данных даты, сохраняемых и передаваемых через каждый интерфейс (включая интерфейс пользователя), будут удовлетворять этому критерию. Представление дат с помощью базы и смещения, покрывающее все представляющие интерес столетия, также будет удовлетворять этому критерию. Необходимость использования этой возможности для устранения неоднозначности столетия и является частью последнего критерия.

Неявное столетие

Для любого элемента даты, представляемого без столетия, правильное столетие является однозначным для всех операций, включающих этот элемент. Этот последний критерий требует, чтобы, если столетие не дается в явном виде, его значение определялось со стопроцентной точностью на основе предоставленного значения даты. Например, диапазон значений для "даты счета" редко охватывает более 10 лет. Вследствие того, что столетие может быть всегда правильно угадано для даты счета с годом, представленным двумя цифрами, этот элемент данных даты будет удовлетворять указанному критерию. Обратите внимание на то, что этот критерий допускает компромиссы затрат и рисков, которые минимизируют изменения для существующих форматов даты.

Хотя описанные выше четыре критерия полностью определяют соответствие столетию, оно представляет, скорее, баланс между стоимостью и риском, чем абсолютное "мерило". Такой баланс будет меняться для каждого учреждения согласно его деловым потребностям и технологической основе. Следовательно, потребуется большая детализация, чтобы интерпретировать эти критерии по отношению к конкретному учреждению. Эта интерпретация, задокументированная и распространенная, может гарантировать, что "соответствие столетию" понимается в организации одинаково. Следующие инструкции являются примером того, как учреждение может документировать и тестировать эти четыре критерия для операционных систем, трансляторов, ассемблеров, интерпретаторов, систем управления базами данных, локальных сетей и заказных приложений.

Инструкции по тестированию

Операционная система

Общая целостность

Системная дата может быть установлена на даты с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29.

Повторная инициализация с холодного старта по датам с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29.

Системная дата правильно переходит к датам с повышенным риском:

1998-12-31 -> 1999-01-01

1998-12-31 -> 2000-01-01

2000-02-28 -> 2000-02-29

2000-02-29 -> 2000-03-01.

Правильно ли происходит переход даты как в выключенном, так и во включенном состоянии?

Целостность даты

Ведут ли себя корректно в 19xx и 20xx годах чувствительные к датам функции для системных дат?

- Чувствительность к дате относится к функциям, осуществление которых может начаться или остановиться в конкретный день месяца и года, в определенный день недели или по истечении указанного времени.

- Чувствительны к дате также функции планирования заданий, учета и администрирования, любая интерактивная команда с датами или переключателями (особенно дисковые и ленточные команды и утилиты), устанавливающие или получающие системную дату через обращение к системе или сообщающие системные данные с датами в них.

Каково наибольшее возможное значение, которое переключатель может представлять для системной даты?

Системная дата правильно появляется при использовании в штампах времени для дат с повышенным риском:

1999-01-01, 1999-12-31, 2000-01-01, 2000-02-28,

2000-02-29, 2000-03-01.

Штампы времени в записях очередей, директориях томов, связи между процессами и связи вне хост - машины.

Явное столетие

Может ли столетие явно вводиться или отображаться в чувствительных ко времени функциях?

Имеются ли функции или обращения к системе, не допускающие явного столетия, формат которых управляется отраслевым стандартом или требованием пользователя?

Неявное столетие

Может ли столетие в любом значении даты в любой чувствительной ко времени функции неправильно интерпретироваться для дат между 1985-01-01 и 2050-12-01?

Компилятор, ассемблер или интерпретатор

Общая целостность

Предоставляет ли язык функцию для получения или установки системной даты на хост - машине или через службу времени?

Возвращает ли эта функция правильное значение для системной даты для дат с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29?

Возвращает ли эта функция правильное значение для системной даты после перехода системной датой дат с повышенным риском:

1998-12-31 -> 1999-01-01

1999-12-31 -> 2000-01-01

2000-02-28 -> 2000-02-29

2000-02-29 -> 2000-03-01?

Целостность даты

Поддерживает ли язык тип данных для значений даты в диапазоне от 1900-01-01 до 2050-12-31?

- Обрабатывают ли подпрограммы языка 2000 год как високосный, а 1900 год как невисокосный?

- Правильно ли арифметика дат определяет разности между датами, складывает даты и длительности, а также вычисляет день недели?

- Правильно ли подпрограммы языка выполняют преобразование представлений даты (YYMMDD в юлианскую и в базу со смещением)?

Работает ли язык с библиотекой подпрограмм даты? Если да, то правильно ли библиотека функционирует для вопросов в предыдущем пункте?

Включает ли система утилиту сортировки / слияния? Если да, то дает ли сортировка или слияние по полю даты правильную последовательность для дат в 19xx и 20xx годах?

Явное столетие

Предусматривает ли тип данных "дата" явные значения для столетия?

Имеются ли функции или обращения к системе, не допускающие явного столетия, формат которых управляется отраслевым стандартом или требованием пользователя?

Неявное столетие

Поддерживает ли тип данных "дата" форматы без явного столетия?

Если значение для столетия не устанавливается явно, то какое значение предполагается при сравнении дат, арифметических операциях, постоянном хранении и т.д.?

Правильно ли столетие определяется во всех случаях, где столетие не является явным?

Система управления базами данных (СУБД)

Общая целостность

Предоставляет ли язык функцию для получения системной даты на хост - машине или через службу времени?

Возвращает ли эта функция правильное значение для системной даты для дат с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29?

Возвращает ли эта функция правильное значение для системной даты после перехода системной датой дат с повышенным риском:

1998-12-31 -> 1999-01-01

1999-12-31 -> 2000-01-01

2000-02-28 -> 2000-02-29

2000-02-29 -> 2000-03-01?

Целостность даты

Поддерживает ли язык тип данных для значений даты в диапазоне от 1900-01-01 до 2050-12-31?

- Обрабатывают ли подпрограммы языка 2000 год как високосный, а 1900 год как невисокосный?

- Правильно ли арифметика дат определяет разности между датами, складывает даты и длительности, а также вычисляет день недели?

- Правильно ли подпрограммы языка выполняют преобразование представлений даты (YYMMDD в юлианскую и в базу со смещением)?

- Правильно ли язык сравнивает даты?

Производит ли ключевой индекс, включающий поле даты, правильную последовательность для дат в 19xx и 20xx годах?

Точно ли СУБД находит даты для значений в диапазоне от 1900-01-01 до 2050-12-31?

Явное столетие

Позволяет ли тип данных "дата" устанавливать явные значения для столетия?

Допускают ли функции поиска форматирование дат с явным столетием?

Точно ли СУБД находит даты для значений в диапазоне от 1900-01-01 до 2050-12-31?

Неявное столетие

Предусматривает ли тип данных "дата" типы данных без явного столетия?

Если значение для столетия не устанавливается явно, то какое значение предполагается при установке поля даты, сравнении дат, арифметических операциях и т.д.?

Локальная сеть

Общая целостность

Получает ли клиентское программное обеспечение правильную системную дату от хост - машины для дат с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29?

Получает ли сетевое программное обеспечение сервера правильную системную дату от хост - машины для дат с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29?

Получает ли программное обеспечение сетевой администрации правильную системную дату от хост - машины для дат с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29?

Возвращает ли эта функция правильное значение для системной даты после перехода системной датой дат с повышенным риском:

1998-12-31 -> 1999-01-01

1999-12-31 -> 2000-01-01

2000-02-28 -> 2000-02-29

2000-02-29 -> 2000-03-01?

Правильно ли принимает и устанавливает штампы времени в диапазоне от 1985-01-01 до 2035-12-31 программное обеспечение локальной сети?

Целостность даты

Поддерживает ли программное обеспечение администрации даты истечения сроков для счетов и паролей пользователя?

- Обрабатывает ли календарная логика 2000 год как високосный, а 1900 год как невисокосный?

- Правильно ли арифметика дат определяет разности между датами, складывает даты и длительности, а также вычисляет день недели?

- Правильно ли подпрограммы языка выполняют преобразование представлений даты (YYMMDD в юлианскую и в базу со смещением)?

- Правильно ли язык сравнивает даты?

Точно ли программное обеспечение администрации сети и прикладной интерфейс (API) к сетевому программному обеспечению принимают и ищут все поля даты для значений в диапазоне от 1900-01-01 до 2050-12-31?

Явное столетие

Предусматривают ли штампы времени явные значения столетия?

Допускает ли интерфейс пользователя в программном обеспечении администрации сети явный ввод и отображение столетия во всех полях даты?

Допускает ли прикладной интерфейс к сетевому программному обеспечению явный ввод и поиск столетия во всех полях даты?

Неявное столетие

Правильно ли определяется значение столетия для всех операций над штампами времени для штампов времени без явного столетия?

Какое значение столетия предполагается для полей даты в пользовательском интерфейсе программного обеспечения администрации, если оно не вводится?

Какое предполагается значение столетия для полей даты в API, если приложение его не устанавливает?

Заказное приложение

Общая целостность

Предоставляет ли язык функцию для получения или установки системной даты на хост - машине или через службу времени?

Возвращает ли эта функция правильное значение для системной даты для дат с повышенным риском:

1999-09-09, 1999-12-31, 2000-01-01, 2000-02-29?

Возвращает ли эта функция правильное значение для системной даты после перехода системной датой дат с повышенным риском:

1998-12-31 -> 1999-01-01

1999-12-31 -> 2000-01-01

2000-02-28 -> 2000-02-29

2000-02-29 -> 2000-03-01?

Встроены ли в приложение продукты третьей стороны? Соответствуют ли столетию все эти продукты?

Игнорирует ли код приложения значения для явного столетия в системной дате в любой точке программы?

Целостность даты

Поддерживает ли язык тип данных для значений даты в диапазоне от 1900-01-01 до 2050-12-31?

Выполняет ли приложение вычисление високосного кода? Обращаются ли эти вычисления с 2000 годом как с високосным, а с 1900 годом как с невисокосным?

Правильно ли арифметика дат определяет разности между датами, складывает даты и длительности, а также вычисляет день недели?

Правильно ли приложение выполняет преобразование значений даты из одного представления даты в другое (например, YYMMDD в юлианскую и в базу со смещением)?

Сравнивает ли приложение даты в логике какого-либо условного перехода или вычислении булевских значений? Получают ли все эти сравнения правильные результаты для всех сочетаний значений с ожидаемыми диапазонами дат?

Включает ли приложение поиск, сортировку, слияние или индексирование по внутренним таблицам, цепным спискам и другим структурам данных, основанным на переменных даты? Правильно ли эти операции выполняются для всех возможных значений даты в ключевых переменных? Производит ли правильную последовательность для дат в 19xx и 20xx годах ключевой индекс, включающий поле даты?

Представляет ли приложение дату в любой переменной как смещение от базовых даты / времени? Каково максимальное значение даты для этого представления? Каково минимальное значение даты для этого представления (обычно базовая дата)? Попадает ли ожидаемый диапазон значений для каждой переменной, использующей это представление даты, в эти пределы?

Использует ли приложение присваивание значений даты из одной переменной в другую? Отсекается ли у даты столетие при выполнении какого-либо присваивания? Используется ли значение в целевой переменной в операции над датами, требующей для получения правильных результатов явного столетия?

Использует ли приложение языковые средства, связывающие адрес даты с несколькими переменными (такие, как REDEFINE в языке COBOL или COMMON в языке FORTRAN)? Игнорирует или отсекает значение для явного столетия в значении даты какая-либо переменная среди всех псевдонимов для одной и той же области данных? Используется ли усеченное значение даты в операции, которая предполагает, что все значения даты используют то же самое столетие?

Используются ли константы для значений даты (включая день, месяц или год) в какой-либо операции? Относится ли константа к функциональным требованиям или особое значение используется в типе данных "дата" для удобства?

Осуществляет ли приложение точное хранение и поиск дат для значений в диапазоне от 1900-01-01 до 2050-12-31?

Использует ли приложение утилиты сортировки / слияния для упорядочивания содержимого файлов по полям даты или индексированные файловые структуры с ключами по полям даты? Правильна ли упорядоченность для всех значений даты в диапазоне от 1900-01-01 до 2050-12-31?

Полагается ли приложение на первичные или альтернативные индексы структурированной базы данных для поиска, вставки, обновления или удаления, когда какой-либо ключ содержит поле даты? Будет ли правильной упорядоченность индекса для всех значений даты в диапазоне от 1900-01-01 до 2050-12-31?

Инициализируются ли все переменные типа "дата" в соответствии с каким-либо соглашением относительно пустого значения?

Явное столетие

Использует ли приложение язык, инструментальные средства и / или генератор приложений, допускающие явное столетие в типах данных "дата"? Если да, то поступают ли значения для столетия в переменных этих типов путем ввода извне или формируются программным обеспечением?

Использует ли приложение СУБД или другой программный продукт для хранения и поиска данных типа "дата"? Если да, то могут ли эти продукты поддерживать явные значения для столетия в любой хранимой и участвующей в поиске переменной типа "дата"?

Имеет ли приложение внешние интерфейсы (ввод - вывод, API, обращения к внешним подпрограммам и т.д.), содержащие переменную даты с явным столетием? Игнорирует ли программное обеспечение, усекает или дописывает значение столетия в любой такой переменной, когда она переносится логикой программы в любой другой внешний интерфейс? Может ли при таком переносе какая-либо логика изменить значение для столетия каким-то образом, отличающимся от обобщенных операций, основанных на григорианском календаре?

Удовлетворяют ли критериям соответствия столетию все представления даты с явным столетием как внутри приложения, так и во всех интерфейсах?

Неявное столетие

Использует ли приложение язык, инструментальные средства и / или генератор приложений (включая средства построения GUI), допускающие представление даты без явного столетия в типах данных "дата"? Если да, то формируется ли столетие для любых операций или передачи значения даты через любой интерфейс или для постоянного хранения? Если да, то является ли значение для столетия правильным для всех возможных значений дат, которые может содержать каждая переменная?

Использует ли приложение константы для даты или частей даты (например, дня, месяца или года)? Если да, то является ли столетие неявным в значении любой константы полной даты или года? Все ли операции, использующие каждую константу прямо или косвенно (то есть переносимую через переменные в другие операции в программе), производят правильные результаты для всех возможных значений для таких переменных даты?

Использует ли приложение какой-либо прикладной интерфейс (API), такой как SQL, который передает переменные типа "дата"? Если да, то предоставляет ли принимающее программное обеспечение значение столетия, производное или по умолчанию, для любого значения даты, передаваемого через этот интерфейс?