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

ВОПРОСЫ

1 Какой календарь использует большинство граждан США?

  • Юлианский
  • Григорианский
  • Лунный

2 1 января 2000 года - это

  • Вторник
  • Среда
  • Пятница
  • Суббота
  • Воскресенье

3 Укажите високосные годы

  • 1900
  • 1982
  • 1988
  • 1990
  • 2000
  • 2004

4 Утверждение, что проблемы, связанные с 2000 годом, могут возникнуть лишь по наступлении или прошествии первого его дня.

  • Верно
  • Неверно

5 Выберите наилучшее представление для даты.

  • ДДММГГ
  • ДДММВВГГ (ВВ - век, например, 19 или 20)
  • Стандарт, установленный Международной организацией по стандартам (ISO)
  • Стандарт, установленный Американским национальным институтом стандартов (ANSI)
  • Абстрактный тип данных "дата" (или объектный класс "дата")
  • Другой

6 Верно ли, что проблемы 2000 года возникнут в основном при эксплуатации программного обеспечения?

  • Да
  • Нет

7 Вы считаете, что в процессе эксплуатации новой версии программы большинство ошибок обнаруживается относительно рано.

  • Да
  • Нет

8 Инструмент для анализа влияния "Проблемы 2000" выявит все эффекты изменений, внесенных в программу.

  • Да
  • Нет

9 Вы тестируете свое приложение с помощью анализатора влияния. Он показывает, что воздействию ваших изменений подвержено 80% программы. Означает ли это, что вам придется вносить исправления в 80% исходного текста?

  • Да
  • Нет

10 Инструмент или служба анализа влияния изменений предсказывает, что на разработку вашего проекта уйдет девять человеко-лет. Стоит ли доверять такой оценке?

  • Да
  • Нет
  • Неизвестно

11 Вы считаете, что тестирование, в принципе, может выявить, что программа не содержит ошибок.

  • Да
  • Нет

12 Может ли программа содержать ошибки, связанные с наступлением 2000 года, если она не выполняет никаких операций, относящихся к датам?

  • Да
  • Нет

13 Программа прошла тестирование; ошибки устранены. Можно ли считать, что приложение не содержит ошибок, связанных с наступлением 2000 года?

  • Да
  • Нет
  • Требуется дополнительное тестирование


ОТВЕТЫ

1 Григорианский

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

3 Високосные годы - 1988, 2000 и 2004.
Високосный год либо делится на 4, но не делится на 100, либо делится на 400.

1982 и 1990 не делятся на 4 или 100, значит, они не високосные. 1900 - не високосный год, поскольку делится на 100, но не делится на 400. 2000 - високосный, потому что делится на 400.

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

4 Неверно
Эти проблемы уже возникли, поскольку большинство из них - следствие представления поля даты двумя цифрами. Даты за пределами 2000 г. уже обрабатываются некоторыми системами. В 21 веке могут появиться проблемы, связанные с годами, составленными из двух цифр; эти "неприятности" имеют отношение к автоматическому удалению программами внезапно "устаревших" данных.

5 Абстрактный тип данных "дата" (или объектный класс "дата")
"Наилучшее" - слово, имеющее много значений. В основном, с точки зрения эксплуатации, использование класса дат наиболее удобно. Класс дат можно рассматривать как набор подпрограмм для работы с датами. Представление даты в этом случае известно только этим подпрограммам, а не программам, их вызывающим. Вот почему класс дат удобен при эксплуатации. При его использовании, внутреннее представление даты может быть "скрытым" - другие программы могут получать информацию о дате лишь через подпрограммы класса. Если надо поменять представление даты (например расширить количество цифр года с двух до четырех), сохранив при этом синтаксис процедур класса, вы сможете уменьшить количество исправлений, связанных с преобразованием, внеся изменения лишь в исходный текст этих процедур. (Для подстраховки следовало бы провести дополнительную проверку. Большинство систем не предусматривают столь легкого способа преобразования даты, связанного с наступлением нового века.) Это стало бы большим подспорьем для определения мест, где надо внести исправления, и свело бы к минимуму эффект "распространения волны". Если вы, как и большинство людей, не используете объектно-ориентированный язык, есть возможность реализовать идею класса дат с помощью дисциплины программирования. Например, можно создать библиотеку с вашим собственным набором подпрограмм обработки даты и обязать всех программистов, участвующих в проекте, использовать только их. Если вы не последуете этим советам, то, возможно, придется вносить множество изменений, связанных с порядком следования и количеством байт, отведенных для записи дней, месяцев и лет на еще более низком уровне. Здесь выбор представления даты не столь прост. Необходим какой-либо вид стандартизации. Одна из возможностей - выбор официального стандарта, например ANSI или ISO. Однако, если у вас уже используется внутренний стандарт де-факто типа ГГММДД, вероятно, лучше всего будет ничего не менять.

6 Да
Хотя проблемы, связанные с 2000 годом, и могут возникнуть в процессе разработки, чаще всего они обнаруживаются сейчас во время эксплуатации.

7 Да
Одно из исследований, проведенных для компании IBM Эдвардом Адамсом, показало, что в двух случаях из трех большинство ошибок обнаруживается в первой половине периода между выходами очередных версий. Будьте готовы начать исправление ошибок немедленно после получения информации об их обнаружении. Что особенно неприятно - несмотря на то, что некоторые из таких ошибок достаточно легко исправить, их последствия могут быть просто разрушительными. Представьте себе, например, пересчет и повторный выпуск миллиона чеков на получение пенсионного пособия.

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

9 Нет
Вероятно, вам не придется исправлять 80% приложения, поскольку решение большой части проблем, связанных с 2000 г., требует изменения лишь малых участков программы. Это, однако, не означает, что поиск таких участков не потребует больших временных затрат.

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

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

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

13 Нет
Опять же тестирование - это "противокомариная сетка", которая увеличивает уверенность в надежности программы. Но не требуйте от него невозможного. Уже упомянутое исследование Адамса, например, показало, что есть ошибки, которые могут остаться незамеченными на протяжении всего периода эксплуатации продукта.


РЕЗУЛЬТАТЫ

11-13 правильных ответов: вы - эксперт

9-10: вы хорошо информированы

7-8: у вас удовлетворительный уровень знаний

6 и менее: вероятно, вам следует освежить в памяти знания о тестировании, анализе влияния и эксплуатации программ.