Правильная ссылка на эту страницу
http://az-design.ru/Projects/AzBook/000.shtml

Несколько замечаний для руководителей и разработчиков

       "Абстракция исполнения лежит в основе всего понятия "алгоритма" настолько глубоко, что обычно ее считают само собой разумеющейся и оставляют без внимания. Ее назначение в том, чтобы сопоставлять между собой различные вычисления. Иначе говоря, она предоставляет нам способ осмысливания конкретного вычисления как элемента большого класса различных вычислений; мы можем отвлечься от взаимных отличий элементов такого класса и, руководствуясь определением класса в целом, высказывать утверждения, применимые к каждому его элементу, а следовательно, справедливые и для конкретного вычисления, которое мы хотим рассматривать.
       Чтобы разъяснить, что подразумевается под "вычислением", я опишу сейчас невычислительную конструкцию "получения" (я преднамеренно не употребляю термина "вычисление"), например, наибольшего общего делителя чисел 111 и 259. Она состоит из двух картонных карточек, расположенных одна поверх другой. На верхней карточке написан текст "НОД(111,259) =". Чтобы получить от конструкции ответ, мы поднимаем верхнюю карточку и кладем ее слева от нижней, на которой теперь можно прочесть текст "37".
       Простота карточной конструкции является большим достоинством, но она омрачается двумя недостатками — мелким и крупным. Мелкий недостаток состоит в том, что хотя эту конструкцию можно в самом деле использовать для получения наибольшего общего делителя чисел 111 и 259, но помимо этого она мало на что пригодна. Однако крупный недостаток в том, что, как бы тщательно мы ни проверяли устройство конструкции, наша вера в то, что она вырабатывает правильный ответ, может основываться только на нашем доверии к ее создателю: он мог ошибиться либо при проектировании своей машины, либо при изготовлении нашего конкретного экземпляра.
"

Эдгар Дейкстра "Дисциплина программирования"

       Гениальные слова! Для молодых программистов, которые не то что книги этой не читали, но и имени такого не слышали, даю бесплатный совет — прочитайте их ещё раз. Не грех читать их каждый день на ночь, особенно когда появляется желание "срубить денег по легкому" и "сварганить проект за пару дней, где-нибудь в гараже".
       Сколько раз мои заказчики (часто будучи сами программистами) говорили мне "Разработай структуру и клиентское приложение, а данные набьют девочки". Они даже не задумывались о тестировании базы данных. Для них важнее был дизайн интерфейса клиентского приложения, чем правильность базы данных. Некоторые, особенно продвинутые, используют различного рода генераторы для создания большого объема данных, на которых они якобы тестируют базу данных. Такого рода испытания могут проверить в лучшем случае производительность базы данных, но ничего не говорят о достоверности данных в ней. Но, как говорил Кушниренко Анатолий Георгиевич: "бессмысленно говорить о производительности НЕРАБОТАЮЩЕЙ программы".
       В случае баз данных если выдаваемые данные неверные, например "Иванов Анастасия Георгиевич", или известно, что данные есть, но найти их невозможно, то можно говорить, что база данных "не работает" или "не выполняет своих функций".
       Кто-то скажет — это пользователь ввел всякую ерунду, причем здесь программист.
       На самом деле, в подавляющем большинстве случаев именно программист где-то упростив, где-то сократив, где-то чего-то не учел, где-то не разьяснив как поступать в конкретной ситуации дал возможность пользователю ввести в базу данных НЕПРАВИЛЬНЫЕ данные.
       В качестве простых примеров:

БД "ГИБДД Москвы 2002г." — всего 4451000 записей.
       1) Дата рождения указана как 00000 или 000037 (или т.п.) — 50487 записей. Ошибки по другим полям также исчисляются тысячами.
       2) Имя "Александр" введено 153-мя способами, отчество "Владимирович" — 117-ю способами, и т.д.

БД "ГИБДД Москвы 2005г." — всего 8366000 записей по автомобилям.
       1) Автомобилей "ВАЗ-2109" в г.Москве всего 4 штуки!!! Остальные нужно искать как модель="ВАЗ", марка="2109"
       2) Для автомобилей "ВАЗ" формально правильных VIN-кодов всего 12 штук!!! Остальные записаны РУССКИМИ буквами. Хотя стандарт по VIN-кодам начинается с описания символов, которые можно использовать для обозначения. Исключены такие символы как O, I и др., которые можно спутать с цифрами. Функция, которая позволяет вводить правильный VIN-код при любой раскладке клавиатуры занимает 30 строк текста и пишется за 10 минут.

БД "Прописка Москвы и МО 2005г." - всего 23 млн. записей.
       1) В БД не менее 20% записей являются мусором, т.е. для одного человека существует более одной записи. Рекорд — 1536 записей для одного человека. Какая из них верная?
       2) Примерно 2% адресов представляют собой набор из нескольких различных адресов.

       Такие примеры можно приводить до бесконечности. "Быстренько сварганенная" база данных очень скоро превращается в кучу мусора, занимая место на диске, расходуя ресурсы процессора и работников. А так как БД не тестируются (по крайней мере мне не удалось найти какие-либо методы и методики ни в интернете, ни опрашивая посетителей профессиональных форумов), то пользователь (заказчик) получает красивую ПУСТУЮ коробочку с многочисленными "бантиками" и радуется когда может найти в ней свое имя. То, что он не может найти только что введенные данные или в "приход" записывается записывается один товар, а в "расход" — другой товар с таким же названием, — относиться на плохую работу девочки-оператора, которая в институт не попала, потому что по русскому языку ей поставили тройку (только чтобы не плакала), которая лингвистику не изучала, работу с информацией не изучала, классификацию не изучала. Она не изучала множество дисциплин, который должен был изучить архитектор БД (или привлечь специалистов по конкретной предметной области) и предусмотреть механизмы для предотвращения подобных ошибок.
       База Данных (БД) — это прежде всего данные. Только реальные данные и в достаточном (реальном) количестве подтверждают ваши теории и предположения относительно структуры, алгоритмов и вашего представления о предметной области. Выборка из таблицы в 10 записей и таблицы в 10 миллионов записей требует совершенно разных подходов как к структуре БД, так и к интерфейсу пользователя. Насколько это затратно можно оценить на следующем примере:
       Создавая банковскую систему, которая должна выдавать кредиты жителям г.Москвы и Московской области, необходимо наполнить ее 25 миллионами достоверных реальных записей (число жителей в г.Москве и Московской области) или хотя бы приблизится по порядку к ней. И тестируется в данном случае не производительность системы, а возможность спутать одного кредитора с другим. Т.е. нужно ответить на вопрос - можете ли вы однозначно идентифицировать своего клиента. Стоимость одной ошибки здесь равна размеру кредита плюс репутация банка.
       Программисты, которые разрабатывали эти БД сдали на отлично экзамен как минимум по одному современному языку программирования. Они будут жонглировать нормальными формами и достоинствами таких чудо-технологий как .NET и Web-сервисы. Но ошибки, которые пользователи внесли в эти БД, лежат в архитектуре БД и неумении (или нежелании) разработчиков применять самые элементарные понятия програмирования.
       Таким образом, основная цель этой книги показать как разрабатываются надежные базы данных, т.е. базы данных, данных в которых можно доверять.

Архангельский Андрей





Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Projects/AzBook/000.shtml