понедельник, 2 августа 2010 г.

Что не следует делать при создании программного продукта

Это перевод Things not to do when writing software. Автор: Ларри Остерман.

Я решил начать со старой боевой истории. ДЕЙСТВИТЕЛЬНО старой истории. Из далёких дней Windows 1.0. Что-то такое, что никогда не случится в эти дни.

Примерно 2 месяца до выхода Windows 1.0 в свет (так что сейчас на дворе август/сентябрь 1985-го). Microsoft объявила о Windows за 18 месяцев до этой точки, и мы попали в тиски прессы о vaporware. Поэтому команда разработчиков была под огромным давлением, чтобы выпустить Windows так быстро, как это вообще возможно в человеческих силах и с максимальным набором функций.

Во всяком случае, как я уже сказал, было около 2 месяцев до времени отгрузки коробок. А разработчик, который был ответственен за менеджер памяти Windows, вошёл в понедельник утром и объявил, что он только что сделал commit новой версии менеджера памяти, которая поддерживает сброс перемещаемых блоков памяти с данными на диск (до этого момента Windows имела возможность удалить сегмент кода из памяти при её нехватке и перезагрузить его позже, если в нём будет необходимость - но не было аналогичной возможности для сегментов данных).

Стив Балмер, который был главным разработчиком проекта в тот момент, мог только сказать: “Ok, я хочу уволить SOB. Я ОЧЕНЬ хочу уволить SOB, но нам нужна эта возможность”. (прим.пер.: понятия не имею, как переводится SOB. В голову не приходит ничего лучше SOB = Son of a bitch = "этого сукиного сына").

Что не следует делать при создании программного продукта, часть 2

(Сначала я хотел сделать это отдельным постом, но потом решил объединить всё в один пост, потому что это покажет обратную сторону монеты).

Вот ещё одна история о Windows 1.0. В этот раз - о системе печати. Разработчик системы печати, видимо, был впечатлён примером выше, поэтому он решил переписать систему печати в Windows за 2 недели до отправки в производство.

Тогда чаще всего разработчик тестировал печать открытием файла в Блокноте, печати его на матричном принтере Epson MX-80 в своём офисе, и, если это работало, он делал commit изменения. Но Windows 1.0 поддерживала много возможностей шрифтов, которые Блокнот не использовал. Вещи вроде шрифтов с переменной шириной. Жирный текст и курсив. И подчёркивание. Соответственно, ничего из этого обычно не тестировалось.

Ну, Linne’ Puller, глава тестирования печати в Windows, был просто в ужасе, когда он узнал об этом изменении и молил, чтобы ему дали возможность протестировать его прежде, чем изменение войдёт в финальный исходный код Windows. Разработчик системы печати согласился, но он не видел в этом смысла - ведь он уже хорошо протестировал своё изменение.

Linne и Valorie Holden (другой тестер системы печати в Windows) работали всю ночь, а на следующее утро они вошли в кабинет разработчика и плюхнули ему на стол стопку бумаги высотой в фут (около 30 см).

“Ага, это результаты тестов, да? Это ж огромная куча бумаги - вы не могли выбрать отсюда только примеры с ошибками?”

“Нет, потому что всё это - и ЕСТЬ ошибки”.

“Ой”.

Разумеется, это изменение не вошло в финальную версию. В очередной раз тестеры спасли разработчиков.

И теперь - полный отказ от ответственности, прежде чем мой пост будет взят в качестве доказательства, что в Microsoft не умеют работать: это старая боевая история. Ей уже больше двадцати лет. Команда Windows в те времена была известна как группа ковбоев (что, на самом деле, и является причиной, почему Стив Баллмер в итоге оказался отвечающим за группу).

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

Сегодня, задолго до того, как проект попадает в состояние, которое было тогда в Windows, проект ПЛОТНО блокируется. Все новые функции и возможности рассматриваются советом по DCR (Design Change Request - запрос на изменение дизайна), который состоит из разработчиков, управленцев И тестировщиков. И все три должны поставить своё согласие до начала кодирования новой функции.

Кроме того, команда тестирования принимает непосредственное участие в разработке новых функций. Как минимум, до того, как значительные изменения будет внесено в исходники, происходит процесс, который прошли Linne и Valorie. Теперь он официально закреплен в то, что мы теперь называем "smoke tests". Каждая группа в Microsoft имеет свою версию этих тестов (и некоторые называют их по-своему: buddy build или private tests), но все они имеют некоторую форму процесса, который позволяет команде тестировщиков наложить вето или комментарий на качество изменения. Возможно, потом я напишу, как выглядит у нас “обычный” день изнутри...

Обязательное личное замечание: Valorie Holden была летним стажёром, чья стажировка растянулась до декабря - она была моей подругой в колледже, которая пришла на летнюю подработку в Microsoft тестировщиком. Мы обручились в декабре 1985 года. И мы счастливо женаты на протяжении последних 17-ти лет.

5 комментариев:

  1. > которая поддерживает сброс перемещаемых блоков памяти с данными на диск

    Это действительно смело. Я немного возился в Windows 1.03, в познавательных целях. :) Это действительно древняя система, которая кажется даже мышь не поддерживала (хотя сейчас это покажется нонсенсом) и могла работать на компьютерах без жёсткого диска, грузясь с дискет. Соответственно, свап на дискеты это смело. :)

    ОтветитьУдалить
  2. Ну, мыши не были сколько-то ни было распространены на PC в то время. В 1984 Дворак в своём обзоре только появившегося тогда Макинтоша (который имел мышь) сказал: "There is no evidence that people want to use these things".

    Однако, Windows 1.0 поддержку мышей вообще-то имела: "Therefore, Windows 1.0 included original device drivers for video cards, a mouse, keyboards, printers and serial communications".

    ОтветитьУдалить
  3. В курсе. У одного моего знакомого был компьютер Olivetty (не помню модель), но ещё с чисто текстовым адаптером и DOS'ом какой-то более древней версии, чем знаменитый 3.30. Так вот, у того компьютера была мышь, но она не требовала драйверов, потому что была подключена в клавиатуру и при движении имитировала нажатие стрелок, кнопки ввод, esc... Что показывает, что мыши не только появились не сразу, но и прошли определённый путь эволюции. :)

    ОтветитьУдалить
  4. P.S. Не знаю, какая там была поддержка, но 1.03 мою com'овскую мышь не распознала. :)

    ОтветитьУдалить
  5. Экие вы шустрые ... "распознала" .... это ж не Windows 95 (и даже не 3.0). Наверняка надо было нужные драйвера для мыши установить. И не "какие-нибудь", а вполне определенные. И мышь лучше было взять MS, а не PC ....

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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