Компьютер-Информ || Архив || Рубрики || Поиск || Подписка || Работа || О "КИ" || Карта

ЗАО "Техно-СПб" Системная интеграция

К 2000 году будь готов!


Вадим Халепский MCSE, АСТРО СОФТ

B настоящее время, наверное, не существует ни одного человека, который бы не слышал о проблеме 2000 года. Многочисленные мифы и слухи порождают, с одной стороны, предположения о том, что "меня это не касается", с другой - панические настроения типа "встретим Новый 2000 год при свечах". Подобные утверждения не имеют ничего общего с реальностью, однако, проблему нельзя недооценивать. Если учесть масштаб затронутых проблемой 2000 года систем и процессов, то можно с уверенностью сказать, что проверка вычислительных систем и устранение ошибок, связанных с проблемой 2000 года, требует значительных временных и материальных ресурсов. Осознавая масштаб и потенциальные последствия Проблемы 2000, Астро Софт уделяет большое внимание комплексам мер по обеспечению совместимости базовых программно-аппаратных ресурсов требованиям 2000 года. Уже проводя соответствующие мероприятия и оказывая услуги по решению Проблемы 2000 для своих клиентов, Астро Софт готовит серьезный комплекс услуг для предоставления их в массовом порядке всем нуждающимся. Информация об этом - в ближайших номерах "КИ". А этой статьей открывается цикл публикаций, посвященных общим подходам к решению проблем.

Содержание проблемы 2000 года

Перед тем, как начать обсуждение походов к решению проблемы 2000 года, необходимо договориться, что будет пониматься под термином "Проблема 2000 года". Названия "Проблема 2000 года" (Year 2000 Problem, Y2K), "Ошибка тысячелетия" (millenium bug) и т. п. недостаточно полно отражают суть вопроса, хотя большая часть ошибок программного обеспечения, характерных для проблемы 2000 года, действительно начнет проявляться в 2000 году. Каноническое определение проблемы 2000 года выглядит следующим образом: под "Проблемой 2000 года" понимается комплекс проблем аппаратного и программного обеспечения, связанных с неправильной обработкой и интерпретацией дат.Основные причины возникновения ошибок при обработке дат:

- хранение и обработка двухзначных дат;
- неверное определение високосного года;
- специальные значения дат.

2000 год является во многом исключительным. Вспомним, как определяется, например, високосный год: если значение года без остатка делится
на 4, то он високосный. При этом не стоит забывать, что раз в сто лет, значение года делится без остатка на 100, тогда за 28 февраля следует 1 марта. Но если значение года без остатка делится на 400, то год все же високосный. Поэтому в 2000 году 366 дней, но некоторые об этом забыли, в том числе и программисты, реализовавшие неполный алгоритм определения високосного года. Чтобы лучше понять, почему применение двухзначных дат действительно является проблемой, попробуйте ответить на вопрос: "Какому году соответствует дата 1/1/00?" Правильным ответом будет: ..., 1900, 2000, 2100 и т. д. Люди привыкли использовать двухзначные даты и при этом практически никогда не ошибаются, восстанавливая оставшиеся две цифры года, исходя из контекста, в котором употребляется та или иная дата. Вспомните, когда вы последний раз писали значение года полностью? Почему же нужно требовать этого от программистов? Поэтому в приложениях с двухзначным представлением дат зачастую предполагается, что все даты относятся исключительно к текущему столетию. Поэтому в таких приложениях дата 1/1/00 интерпретируется как 1/1/1900, даже если пользователь трактует ее как 1/1/2000. Очевидно, что при выполнении операций над датами, относящимися к следующему столетию, в таких приложениях возникают ошибки. Например, 2000 - 1999 = 1, а 00 - 99 = -99 (или 99, если отрицательные числа считаются недопустимыми).

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

Истоки проблемы

По своей сути проблема 2000 года не нова. Примерно такая же проблема существовала в конце 60-х годов. Напомним, что в 60-х годах многие приложения в целях экономии памяти использовали для хранения даты только одну цифру года (тогда проблема была решена довольно легко, поскольку применялось не так много приложений, к тому же они являлись скорее вспомогательными инструментами, чем основными, да и степень проникновения информационных технологий в повседневную жизнь не была столь высокой). На заре развития вычислительных систем оперативная память и устройства хранения данных были очень дорогостоящими, и использование двухзначного формата и специальных значений для дат считалось вполне приемлемым решением. Никто не предполагал, что приложения и алгоритмы, созданные в 70-х будут использоваться через 30 лет по принципу: "Не трогай - это работает!". В результате, неверный расчет жизненного цикла программного обеспечения привел к возникновению столь острой проблемы.

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

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

Возможные последствия

Давайте на секунду представим себе организацию (например, торговую), в которой отказались решать проблему 2000 года, посчитав, что она не
значительна и не затронет информационной инфраструктуры организации. Что произойдет, если сотрудники этой организации ошиблись, и проблемы, связанные с обработкой дат, все-таки начнут возникать? Рассмотрим лишь несколько весьма показательных сценариев.

  1. Счет, выписанный одному из поставщиков незадолго перед началом 2000 года, приходит в первых числах января, однако, ошибочно вычислив 5/1/00 - 29/12/99 бухгалтерское приложение полагает, что платеж задержался на 99 лет.
  2. Запланированный на последний вторник февраля 2000 года (29/02/2000) перевод на счет поставщика продукции может состояться на неделю раньше, на день позже или не состояться вообще. Дата других платежей окажется сдвинутой на один день.
  3. Использование специальных значений может вызвать удаление важных данных. Специальные значения дат вводились разработчиками приложений в предположении, что данные, не требующие специальной обработки, ни при каких условиях не будут иметь в поле даты специальное значение. Информация о платежах, датированных 9/9/99, в лучшем случае попадет в конец отчета, в худшем - будет безвозвратно удалена.

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

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

Уязвимые компоненты

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

Для платформы ПК выделяют 6 основных слоев, критичных к проблеме 2000 года.

  1. Аппаратное обеспечение (BIOS). Большинство версий BIOS, выпущенных до 1995 года, используют двухзначное представление дат и, следовательно, неправильно обрабатывают даты, относящиеся к 2000 и последующим годам.
  2. Операционная система. Операционные системы чаще всего используют собственные часы для отсчета времени, предоставляя приложениям системные библиотеки и службы для доступа к информации о дате и времени.
  3. Системные библиотеки. Практически все функции по обработке даты и времени в системных библиотеках хорошо проверены и стандартизованы, однако это не означает, что ошибки на этом слое полностью исключены.
  4. Приложения. В коммерческих приложениях источником проблемы 2000 года могут быть как ошибки, заложенные в приложение на этапе разработки, так и вызванные неправильной работой остальных слоев вычислительной платформы.
  5. Модули, создаваемые и подключаемые пользователем. Практически все современные приложения имеют возможность подключения надстроек и дополнительных компонентов, разрабатываемых организацией для собственных нужд. Пользовательские модули представляют наибольший риск с точки зрения проблемы 2000 года, поскольку в них для хранения и обработки дат зачастую используются неправильные типы данных и алгоритмы.
  6. Интерфейсы обмена данными. Вычислительная платформа практически никогда не является изолированной. Обмен данными между приложениями, получение информации из унаследованных систем, а также от клиентов или партнеров является неотъемлемой частью процесса обработки информации. Поэтому неправильно отформатированная или просто неверная информация, полученная извне, может оказаться одним из самых серьезных источников ошибок.

Понимая всю важность и масштабность проблемы 2000 года, Астро Софт проводит для своих заказчиков цикл работ, связанных с решением этой проблемы для базовых программно-аппаратных средств информационных систем любого масштаба - от одного компьютера до корпоративных систем. Информация о подходах и методиках, используемых специалистами Астро Софт, появится в следующих выпусках газеты.


       КОМПЬЮТЕР-ИНФОРМ 
          Главная страница || Статьи ╧ 1'1999 || Новости СПб || Новости России || Новости мира

Анкета || Рубрики || Работа || Услуги || Поиск || Архив || Дни рождения
О "КИ" || График выхода || Карта сайта || Подписка

Главная страница

Сайт газеты "Компьютер-Информ" является зарегистрированным электронным СМИ.
Свидетельство Эл ╧ 77-4461 от 2 апреля 2021 г.
Перепечатка материалов без письменного согласия редакции запрещена.
При использовании материалов газеты в Интернет гиперссылка обязательна.

Телефон редакции (812) 118-6666, 118-6555.
Адрес: 196084, СПб, ул. Коли Томчака, д. 9
Пейджер 238-6931(аб.3365)
e-mail:
Для пресс-релизов и новостей