Как проверить операторы SQL и обеспечить их качество? - PullRequest
3 голосов
/ 03 февраля 2010

В настоящее время я работаю над некоторыми отчетами по бизнес-аналитике. Данные выбираются обычными инструкциями SQL SELECT. Заявления становятся все более и более сложными.

Данные, о которых я хочу сообщить, частично важны для бизнеса. Поэтому я чувствовал бы себя лучше, если бы мог что-то сделать, чтобы доказать правильность и качество операторов SQL.

Я знаю, что есть несколько способов сделать это для кода приложения. Но что я могу сделать, чтобы достичь этих целей на уровне SQL?

Заранее спасибо.

Ответы [ 5 ]

7 голосов
/ 03 февраля 2010

Мне неизвестны какие-либо доказательства QA на уровне SQL, которые вы могли бы сделать, поскольку вы ищете намерение (семантику) запроса, а не синтаксическую правильность.

Я бы написал небольшой тестовый комплект, который принимает оператор SQL и запускает его в известной тестовой базе данных, а затем сравнивает результат с набором справочных данных expecetd (электронная таблица, простой файл CSV и т. Д.).

Для получения бонусных баллов оберните это в модульном тесте и включите в процесс непрерывной сборки.

Если вы используете электронную таблицу или CSV для справочных данных, возможно, вы сможете пройтись по ней вместе с бизнес-пользователями, чтобы собрать их требования перед написанием SQL-кода (т.е. разработка с использованием тестирования).

1 голос
/ 03 февраля 2010

Будем рады прочитать ответы на этот вопрос. Просто проверить, работает оператор или нет, работает он или нет. Вы также можете проверить по требованию, возвращает ли он эти 14 столбцов в указанном порядке.

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

Иногда вы можете смотреть на вещи так, чтобы сказать вам, если все правильно. Иногда я добавляю небольшое ограничение where в запрос отчета, чтобы получить набор результатов, который я могу проверить вручную. (Говорят только записи за несколько дней). Затем я вхожу в таблицы базы данных индивидуально и проверяю, соответствуют ли они тому, что есть у меня. Например, если я знаю, что за этот период времени было 12 встреч для клиента, это результат, который я получил? О, я получил 14, хм, должно быть, одному из объединений нужно больше ограничивающих данных (есть две записи, и я хочу только самую последнюю) Или я получил 10, затем я выясняю, что исключает другие два (обычно объединение, которое должно быть левым соединением или условием где) Должны ли эти двое отсутствовать в бизнес-правилах, которые мне дали, или нет.

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

Я внимательно слежу за количеством результатов, прохожу и добавляю соединения и условия. Поднимались ли они вверх или вниз, если так, то это то, что я хотел.

Если у меня есть место, которое в настоящее время возвращает данные, с которыми, как я ожидаю, мои пользователи будут сравнивать этот отчет, я посмотрю там. Например, если они могут искать на веб-сайте доступных докладчиков, а я выполняю экспорт клиенту данных докладчиков, итоговые значения между ними лучше совпадают или могут объясняться различными бизнес-правилами.

При составлении отчетов пользователи отчета часто имеют лучшее представление о том, что должны сказать данные, чем разработчик. Я всегда прошу одного из них взглянуть на данные QA и подтвердить правильность отчета. Они будут часто говорить такие вещи, как то, что случилось с проектом XYZ, это должно быть в этом отчете. Тогда вы знаете, чтобы посмотреть на этот конкретный случай.

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

1 голос
/ 03 февраля 2010

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

1 голос
/ 03 февраля 2010

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

Построить эти случаи на более сложных условиях будет очень трудно, хотя - отчетность печально известна постоянно меняющимися требованиями.

0 голосов
/ 02 августа 2012

Довольно сложно проверить правильность SQL.У меня есть идея написать программу, которая вставляет полуслучайные данные в базу данных.Поскольку программа генерирует данные, программа также может выполнять вычисления изнутри и производить ожидаемый результат.Запустите SQL и сравните, если программа выдаст тот же результат, что и SQL.

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

Написание программы модульного теста для вычисления результата может занять много времени, но по крайней мере у вас есть программа для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...