Думай, как машина или зачем тестировщику алгоритмическое мышление?

Всем привет, народ!

Хочу с вами поделиться познавательной инфой по поводу седьмого задания в домашке вебинар SQL на ПОИНТ

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

Ситуация следующая: имеем 3 таблицы: с пользователями, с описанием товаров и с покупками пользователей (1 строка-1 покупка), необходимо найти всех пользователей, которые покупали только те товары, что выпущены в определённой стране в определенный год. В задании БД, конечно, другая, но структура и смысл задачи остались неизменны.

Ситуация эта случилась с моей коллегой. Девочка сукель знала, в принципе, неплохо, но на чисто техническом уровне-знала много операторов и могла их применять. К месту и не очень) А вот логическая сторона построения запросов хромала, в чем ее обвинять не могу и не стану — ну не поставлены у человека мозги, что тут поделаешь.

В общем, суть да дело-возилась девочка с задачей около часу (тестировщик-птица гордая, пока не приспичит — за помощью не пойдет!), написала соответствующий запрос и с задачей справилась. Ну справилась и справилась, умница и молодец, честь ей и хвала.

Но потом мне стало интересно, и я спросил у нее, какой запрос она наваяла. Она скинула мне текст запроса, и я одновременно восхитился и озадачился! Восхитился тем, по какому пути пошла коллега, а озадачился тем, что реализовано всё это было крайне неоптимально.

Решать данную задачу человек решил через сравнение общего количества товаров у пользователя и количества товаров у пользователя, подходящих под условие задачи!

Т.е., для каждого пользователя через подзапросы у нас определялись значения “общее кол-во купленных им товаров” и “кол-во купленных им товаров, подходящих под условие”, потом эти два значения сравнивались между собой (через IF-THEN-ELSE!) и, пользователь, для которого эти значения были равны, попадал в результирующую выборку. Ну превосходно же! Я действительно был в восхищении-мне бы такое даже в голову не пришло))

Но решение это столь же неоптимально, сколь и гениально! Посему мой внутренний перфекционист взбунтовался и потребовал от меня выдать на-гора более красивый и простой вариант. Я посидел, немного поскрипел извилинами и сделал всё проще и, на мой скромный взгляд, изящнее —  одним-единственным подзапросом отсёк всех пользователей, которые купили хотя бы один товар, не подходящий под условие и вывел всех остальных.

Решил я сравнить производительность наших запросов, дабы удостовериться в том, что мой запрос действительно легче и быстрее. Думал, мой запрос будет обрабатываться шустрее хотя бы в пару раз, но результат меня очень удивил. 2 миллисекунды в моём запросе против 11 миллисекунд в запросе коллеги. Разница в 5.5 раз! Пять с половиной, КАРЛ!!!

Да, вы можете сказать, что на этих величинах такая разница значения не имеет. Но есть один нюанс — тестирование проводилось на нашей ПОИНТовской базе, на которой студенты учат сукель — а она маленькая. А теперь представьте себе БД какого-нибудь фейсбука или алиэкспресса, с их тысячами пользователей и миллионами связанных сущностей. Представили? То-то же! На таких объемах данных эта разница в быстродействии уже начинает приобретать вес (и весьма ощутимый!), не так ли?)

И ведь человек это сделал не из-за того, что чего-то не знает или недостаточно опытен в написании запросов, а из-за того, что не умеет думать, как машина.

Просто потому, что у нее не поставлено логическое “машинное” мышление. Ну, в принципе, оно и ожидаемо — этому мало где учат.

И вот эту вопиющую несправедливость мне хочется исправить в меру своих возможностей. Именно поэтому в моём будущем курсе лекций по SQL я буду, кроме обучения SQL, учить вас и логическому “машинному” мышлению)

Кстати, скоро выйдет бесплатный промо-вебинар этого курса! Если интересно — заполни вот эту коротенькую формочку

Заполнять тут!

Всем резиновых дедлайнов и смачных блокеров, народ!

#ятренерпоинт

Метки
#Тестирование ПО (3)Android (1)Cache (1)Cookie (1)courses (1)HR (1)iOS (2)istqb (1)ISTQB FL (1)java (1)Jedi Point (10)JSON (1)kaizen (2)pairwise (1)QA (14)QualityLab (1)REST API (1)selenium (1)SOAPUI (1)SOAP UI (1)softskills (1)softwaretesting (1)SQA Days-25 (1)sql (5)TestSuites (1)usability (2)web (1)XML (1)Анна Палей (1)БАГИ (1)Исследовательское тестирование (2)Истории поинт (8)Команда разработки (1)Курс тестирования для начинающих (1)Кэш (1)Лаборатория Качества (1)Мнемоники (1)Мнемоники в тестировании (1)Наталья Руколь (1)Нина Агеева (4)ПОИНТ (39)ПРомо-вебинар (1)Подготовка к istqb (1)Роман Буданов (3)Скриншот (3)Таблица решений (1)Тестирование (16)Тестирование ПО (3)Тест менеджмент (1)Тренер (11)Туры (1)автоматизация (2)алгоритмы (1)баг (1)безопасность (1)бесплатный вебинар (1)введение в тестирование (1)граничные значения (1)декомпозиция (1)домашки (1)займемсяпоинтом (1)игры (1)идеальный мир (1)интернет (1)истории выпускников (8)как надо тестировать (2)комбинаторика (1)конференция (1)котик (1)курс для начинающих тестировщиков онлайн (1)лайфхак (1)минутка юмора (1)мобилки (3)мобильное тестирование (4)настройка мозгов (1)начинающий тестировщик (7)негативное тестирование (2)обучение (1)обучение тестированию (8)организация тестирования (1)персонажи (1)планирование (1)постановка мозгов (2)работа над ошибками (1)рабочий процесс (1)радиоСаня (1)режим разработчика (3)резюме (1)сертификация ISTQB FL (1)скринкаст (1)сопроводительное письмо (1)с чего начать (1)тайм-менеджмент (1)тест дизайн (1)тестировани (1)тестирование usability (2)тестирование безопасности (1)тестирование веб (2)тестирование игр (3)тестирование мобильных приложений (1)тестировщик (5)улучшайзинг (1)ученик (2)фреймворки (1)чеклист (3)чит лист (1)что должен делать тестировщик (1)ятренерпоинт (1)
С 3.02 по 6.04, ОНЛАЙН Зарегистрироваться