О Windows из первых рук: В трех экземплярах, пожалуйста!

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

Раймонд Чен

Однажды один из клиентов заметил, что размер файла, определяемый проводником Windows не меняется, пока приложение, в котором редактируется этот файл, не закроет этот файл. (Проблема была сложнее, но для целей этой статьи подробности будут излишними.)

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

Природа не оговоренного в контракте поведения программы обычно формально не документируется. Наличие формальной документации создает впечатление, что неконтрактная документация становится контрактной. «Что значит, что вы изменили поведение на Х при возникновении определенных условий? У меня есть документ, в котором говорится, что в таких условиях поведение должно быть Y. А в Windows 7 в вообще изменили поведение на Z. Windows больше не ведет себя, как описано в документации».

Сотрудник отдела поддержки поинтересовался, может ли он на основе моей записи в блоге создать статью базы знаний. «Клиент настаивает на официальном документе, чтобы они могли включить эту информацию в свою документацию по продукту,» — сказал он.

Но создание официальной документации идет вразрез с самим принципом явно не контрактного поведения. Один из коллег заметил: «Формальная документация это не то же самое, что документация для клиентов. Возможно это две противоположности».

Запись в блоге это что-то типа неформальной беседы с кем-то на форуме или в раздевалке спортклуба. Но запись в блоге это неформальная беседа с несколькими тысячами человек. Такой неформальный разговор иногда позволяет яснее понять проблему, но это вряд ли можно отнести к формальной документации.

Если поискать в Интернете по ключевым словам «file» (файл), «time» (время), «update» (обновление) и «MSDN», то вы найдете следующую документацию в MSDN: «Метки времени обновляются в разное время и по разным причинам. Гарантируется только то, что метка времени файла корректна, только когда описатель, который используется для изменения, закрыт».

Так что вот ваша формальная документация: ничего на говорится о том, что происходит, а есть только одна обязывающая оговорка, а именно о том, то информация верна только при условии закрытия описателя.

Мой коллега Ааарон Маргосис (Aaron Margosis) часто получает от клиентов запросы документации, в которой бы явно подтверждался тот факт, что плохая идея таковой и является. Например, один из сотрудников отдела поддержки написал: «Для развертывания групповых политик мой клиент использует файлы реестра (.reg), а не объекты групповых политик (GPO). Я стараюсь убедить их, что так делать не нужно, а они в ответ просят предоставить документ, объясняющий, почему их метод плох».

Ответ на этот конкретный вопрос заключается в том, что устанавливаемые вручную REG-файлы чреваты самыми разными проблемами. Они конфликтуют с доменными групповыми политиками. Такие файлы не поддерживают существующие инструменты для управления групповыми политиками, такими как редактор групповых политик или утилита LocalGPO, входящая в состав Security Compliance Manager.

Определение результата применения нескольких REG-файлов может оказаться сложной задачей, если их параметры перекрываются или противоречивы. Вы не сможете использовать такой инструмент, как Результирующий набор политик для изучения действующих параметров и определения конечного результата. Вы не сможете искать объекты GPO для нахождения тех, что влияют на тот или иной параметр.

Более того, после применения REG-файла изменения иногда вступают в силу только после перезагрузки. Вы всего лишь обновляете параметры реестра, не уведомляя соответствующие компоненты об изменении того или иного параметра и те должны проверять новые параметры. В результате все применяемые вами параметры всегда отстают на один шаг.

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

В частности, вы уверены, что вам действительно нужен формальный документ с таким текстом: «Если после установки обновления безопасности Microsoft вам предлагается перезагрузить компьютер, немедленно выполните перезагрузку»? Ситуация кажется очевидной, но как-то клиент настоял, чтобы мы написали соответствующий формальный документ, и только после этого они в своей компании отказались от политики, разрешающей после установки обновления безопасности не перезагружать систему.

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

Raymond Chen

Раймонд Чен (Raymond Chen) — его веб-сайт и одноименная книга «Old New Thing», вышедшая в издательстве Addison-Wesley в 2007 году, рассказывает об истории Windows, программировании с использованием интерфейса Win32 и PowerPoint караоке.