Сергей Мартыненко

Байки для оруженосца


Скачать книгу

– понурился Армигер.

      – Если беспокоит – не чеши. Лучше маслом помажь, – порекомендовал Заяц.

      – Погоди, – вмешался Чеширский, – не путай его. Давайте я выдвину несколько гипотез – и, после того, как Армигер кивнул, продолжил, – вероятно, вас смущает, что их часто рекомендуют, но редко пишут; что есть юзкейсы, а есть диаграмма юзкейсов, что если есть BPML и IDEF, то зачем нужен текстовый формат?

      – И если их так настойчиво рекомендуют, то они должны иметь массу преимуществ.

      – Главное преимущество вариантов использования, это то, что они варианты использования, – отрезал Шляпник и демонстративно посмотрел на свою коллекцию часов.

      – А разве это не одно и то же? – робко возразил Армигер.

      – Так ты еще, чего доброго, скажешь, что «разработка требований» и «требования к разработке», – одно и то же, – вмешался Заяц.

      – Так ты еще скажешь, – проговорила, не открывая глаз, Соня, – будто «тестирование производительности» и «производительность тестирования», – одно и то же.

      – Придержите коней, коллеги, – остановил их Кот, – наш шляпных дел мастер хочет сказать, что варианты использования, в отличие от многих других форм записи требований, не столько говорят, какими качествами должна обладать система, сколько постулируют, как она используется.

      – И что?!

      – А вот это интересный момент, – подключился Шляпник, – смотри. Приходит на собеседование программист. SQL знает, базы данных проектировал. Даем задание: «База данных должна содержать историю курсов валют Центробанка. Спроектируйте необходимые таблицы». Обычно рисуют что-то вроде такого.

      Поля:

      идентификатор записи;

      код валюты;

      курс по отношению к базовой валюте;

      начало действия курса.

      Заметим, выдвинутым требованиям разрабатываемая система отвечает. История курсов хранится. Вот только есть проблема. Программист не думал, что систему будут использовать. Запросы на выборку из этой таблицы оказываются достаточно сложны. Какой курс действовал первого апреля? А какой сейчас? И далее претенденты начинают городить сложные SELECT-конструкции. В условиях стресса на собеседовании это приводит к любопытным результатам. Некоторые исписывают пару листов. А всего то нужно добавить в таблицу одно поле «Дата окончания действия» и для выборки будет достаточно простого запроса с тривиальным:

      where <дата на которую производится выборка> between <Начало действия курса> and <Окончание действия курса>

      Бывают и более интересные прецеденты.

      Шляпник повернулся к Зайцу:

      – Помнишь программиста, который предлагал в одной таблице хранить актуальные данные, а во вспомогательной сделать архив?

      – А то! – откликнулся его напарник.

      – А тут-то что не так? – спросил Армигер.

      – Да вроде и ничего, даже выигрыш по производительности небольшой должен быть, – принял эстафету Заяц. – Все бы ничего. Ровно до тех пор, пока во время эксплуатации не потребуется