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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Метки
Android (1)courses (1)HR (1)iOS (1)java (1)kaizen (2)QA (7)QualityLab (1)selenium (1)softwaretesting (1)sql (4)TestSuites (1)usability (2)БАГИ (1)Исследовательское тестирование (2)Истории поинт (6)Курс тестирования для начинающих (1)Мнемоники (1)Мнемоники в тестировании (1)Нина Агеева (4)ПОИНТ (26)ПРомо-вебинар (1)Роман Буданов (3)Скриншот (1)Тестирование (9)Тестирование ПО (1)Тренер (11)Туры (1)автоматизация (2)алгоритмы (1)баг (1)безопасность (1)введение в тестирование (1)домашки (1)займемсяпоинтом (1)игры (1)идеальный мир (1)интернет (1)истории выпускников (6)как надо тестировать (2)конференция (1)котик (1)курс для начинающих тестировщиков онлайн (1)мобилки (2)мобильное тестирование (2)настройка мозгов (1)начинающий тестировщик (4)негативное тестирование (2)организация тестирования (1)персонажи (1)планирование (1)постановка мозгов (2)работа над ошибками (1)рабочий процесс (1)радиоСаня (1)режим разработчика (2)резюме (1)сопроводительное письмо (1)тайм-менеджмент (1)тестировани (1)тестирование usability (2)тестирование безопасности (1)тестирование мобильных приложений (1)тестировщик (4)улучшайзинг (1)ученик (2)фреймворки (1)чит лист (1)что должен делать тестировщик (1)
С 15.07 по 9.09, ОНЛАЙН Зарегистрироваться