воскресенье, 27 июля 2008 г.

Тестирование баз данных - поделитесь опытом

Я начал дискуссию под этим названием на сервисе "Мой круг" и вот что из этого получилось

Вопросы:
Кто и как тестирует БД - поделитесь опытом.
Что тестируется?
Как тестируется?
Какие инструменты и технологии используются?
Всказывайте свой опыт, а не ссылки в Google или Яндексе

Светлана Ефимова автоматизация производства

А зачем отдельно тестировать базу данных? Если она построена с использованием 3-й нормальной формы, то насколько мне известно, MSSQL сервер сам проверит соблюдение основных правил построения и выскажется, если найдет что-то не верным. Да и ErWin на эту тему тоже подсказки выдает, по-моему.
И потом сейчас есть много методик тестирования программного обеспечения.

Александр Лещинский Quis custodiet ipsos custodes?

Re: Светлана Ефимова

Нормализовать все-таки - до 4... И 3НФ - не цель, а средство, и кроме отнормализованной базы важны (иногда - жизненно) еще и индексы. И, скажу по секрету, работа базы на 100 записей с 10 транзациями в минуту сиьно отличается от нее же - но с 100 лямами записей и 10 транзакций в секунду. Иногда и денормализовывать приходится... И не пользоваться МСовским ужасом, летящим на крыльях ночи. Да и база это не только таблицы,это еще и сторедки, и вьюхи, которые (криво сделанные) могут убить все остальное правильное

Светлана Ефимова автоматизация производства

Re: Александр Лещинский

Конечно, конечно. И индексы, и хранимые процедуры, и представления - это все я для себя включаю в базу данных. И сейчас работаю с базами, занимающими от 30Гб и выше. Та что с этими проблемами сталкивалась лично. Да, наверно, Oracle лучше, чем MS, но он значительно дешевле и на мой взгляд, проще в использовании. И выбирать SQL-сервер надо, конечно, по потребностям пользователя.
Иногда и денормализация нужна, но в этом случае мне кажется, лучше OLAP-кубы использовать. Или что-нибудь подобное.

Александр Лещинский Quis custodiet ipsos custodes?

Да, я забыл ответить на вопрос
Тестирование - глазами... а потом - стресс-текст на тушке предполагаемого объема и интенсивности пользования

Андрей Архангельский Программист, разработчик БД

Re: Светлана Ефимова

И потом сейчас есть много методик тестирования программного обеспечения.

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

Светлана Ефимова автоматизация производства

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

Я использую для тестирования собственно базы данных:
сначала визуальная проверка корректности всех отношений,
а потом после создания базы данных - ввод данных причем и последовательный (начиная со справочников и заканчивая оперативными данными) и наоборот, ввожу заведомо некорректные оперативные данные и проверяю все ли ссылки у меня правильно работают.
Для проверки скорости работы при больших объемах - надо ввести как минимум 1000 записей в таблицы с оперативными данными.

А разве в инете нет методик тестирования программного обеспечения? Составление TEST-Case и отработка по ним всех веточек работы ПО.

Андрей Архангельский Программист, разработчик БД

Re: Светлана Ефимова

а потом после создания базы данных - ввод данных

Сколько, какие, сколько человек это делает, какое у них образование?

ввожу заведомо некорректные оперативные данные

Как узнать какие данные некоректные?

Для проверки скорости работы при больших объемах - надо ввести как минимум 1000 записей в таблицы с оперативными данными.

У меня минимальный размер транзакции - 100000 записей. А ввожу 2-3 млн. записей. Измерением скорости занимается сама БД (есть встроенные таблицы)

А разве в инете нет методик тестирования программного обеспечения? Составление TEST-Case и отработка по ним всех веточек работы ПО.

Еще раз повторяю! Как тестировать ПО я знаю. Я говорю о тестированиее БД.
Я ведь не только здесь этот вопрос задаю. На нескольких специализированных форумах за 2 недели ни одного ответа.

Светлана Ефимова автоматизация производства

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

Данные для меня некорректны
1. неверные ссылки на справочники. Если можно ввести неверное значение в поле ссылки (если быть точной, то значение отсутствует в справочнике и может быть введено в ссылке). Значит отсутствует ссылочная целостность.
2. нет проверки на типы данных.
3. неверно обрабатывается 0 и пусто
4. Если должны быть ограничения по вводу данных (например, нельзя вводить в заданное поле отрицательных значений), это тоже должно быть проверено. Правда обычно такие вещи сейчас на базу не вешают.
5. Проверка на обязательность заполнения.
6. Проверка на уникальность индексов (если у вас в базе должны быть уникальные индексы)
Хватит?


Диана Рысина неотразимый программист-психоаналитик

Господа, вы все намешали в кучу. Что именно обсуждаем: выбор СУБД; адекватность построения Инфологической модели; достаточную степень нормализации или оптимизация физической модели?
"Котлеты отдельно, мухи отдельно..." (с) Путин В.В.


Александр Лещинский Quis custodiet ipsos custodes?

Re: Диана Рысина

Мы обсуждаем "Как проверить, что все работает как надо"

Диана Рысина неотразимый программист-психоаналитик

Re: Александр Лещинский

Видимо, уже никому не надо...

Андрей Архангельский Программист, разработчик БД

Re: Диана Рысина

Никто ничего не мешает.
Придумали БД. Сделали БД. Хотим убедится что БД выполняет свои функции.
Главная функция БД - если кто-то внес в БД данные, то мы должны найти их унифицированным для ЭТОЙ БД способом. ВСЕ!
Все остальные мухи и котлеты отдельно.

Как говорил мой хороший знакомый Кушниренко Анатолий Георгиевич (из МГУ) "Бессмысленно обсуждать производительность неработающей программы".

Точно также бессмысленно тестировать БД на производительность, если внесенные данные "пропадают в туне" и через год работы количество "мусора" в БД достигает 50%.

Андрей Архангельский Программист, разработчик БД

Re: Светлана Ефимова

Мне кажется у Вас идеальная БД. Могу ли я ознакомится со структурой этой БД и тогда в моей книге появится единственный пример правильно спроектированной БД.
Судя по Вашим высказываниям у Вас суперинструменты для разработки, которые могут создавать любые отчеты. У меня этих инструментов нет. Поэтому буду благодарен, если Вы покажете мне структуру Вашей БД и ответите на возможные впоследствие вопросы.

P.S. Ответа на эту просьбу не последовало

Дискуссия на форумах sql.ru, ibase.ru, source.ru и др. были еще короче!!!


Понравилась статья? Добавь в социальные закладки!

пятница, 25 июля 2008 г.

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

"Абстракция исполнения лежит в основе всего понятия "алгоритма" настолько глубоко, что обыч­но ее считают само собой разумеющейся и оставляют без внимания. Ее назначение в том, чтобы сопо­ставлять между собой различные вычисления. Иначе говоря, она предоставляет нам способ осмыс­ливания конкретного вычисления как элемента большого класса различных вычислений; мы можем отвлечься от взаимных отличий элементов такого класса и, руководствуясь определением класса в целом, высказывать утверждения, применимые к каждому его элементу, а следовательно, справед­ливые и для конкретного вычисления, которое мы хотим рассматривать.

Чтобы разъяснить, что подразумевается под "вычислением", я опишу сейчас невычислительную конструкцию "получения" (я преднамеренно не употребляю термина "вычисление"), например, наибольшего общего делителя чисел 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-сервисы. Но ошибки, которые пользователи внесли в эти БД, лежат в архитектуре БД и неумении разработчиков применять самые элементарные понятия програмирования.



Понравилась статья? Добавь в социальные закладки!