Тестирую задачу на поиск дубликатов. Дубликаты определяются по конкретным правилам, и коэффициент соответствия зависит от того, попадает ли фамилия / имя / отчество в соответствующий справочник, или нет.
А еще в компонентах ФИО бывают опечатки, и это тоже влияет на коэффициент. А длина компонента на это влиять, наоборот, НЕ должна…
В общем, для тестирования мне нужно проанализировать справочник фамилий и набрать себе оттуда тестовых данных под разные сценарии — короткая фамилия, длинная, и так далее.
Раньше мне нужно было бы изучать это все на глаз или размышлять, как самой написать код. Но сейчас эту работу можно отдать ИИ! Причем я пошла к обычному текстовому чату с моими вопросами (а не к Курсору), и его вполне хватило.
Сначала я решила поискать самое длинное значение в справочнике. Справочник фамилий очень большой (вы себе даже не представляете, насколько они разнообразны!), так что я решила подсветить ИИ его вес, вдруг это важно:
У меня есть файл на 17 мб, в нем данные вида (структура справочника изменена для статьи, но смысл отражает):
НАЗИН;М;
НАЗИНА;Ж;
Как табличка в несколько колонок. Как мне найти самое длинное значение в первое колонке?
У меня винда, греп не установлен, через winget есть аналоги нынче? или надо поставить цигвин?
Ну да, раньше я анализировала файлы с помощью регулярных выражений и Cygwin, ещё до ИИ новомодных! Правда, файлики были поменьше размером, что тоже влияло. В общем, Cygwin чатик высмеял и предложил другие решения (ответ сокращен):
Ставить Cygwin в 2026 году точно не нужно — это тяжелое и устаревшее решение.
Поскольку у вас 17 МБ (это очень маленький объем для современных ПК) и уже открыта Giga IDE, а на Windows есть встроенный PowerShell, решить эту задачу можно моментально и без установки лишнего софта.
Вот 3 простых и быстрых способа на выбор:
——————————
Способ 1. Написать 4 строчки кода прямо в IDE (Самый быстрый и удобный)
…
——————————
Способ 2. Через встроенный Windows PowerShell (Без установки программ)
В Windows есть мощная консоль PowerShell, которая справится с этим в одну строчку.
1. Откройте поиск Windows, введите PowerShell и запустите его.
2. Скопируйте и выполните следующую команду (замените путь к файлу):
Get-Content "C:\path\to\your\file.txt" | ForEach-Object { $_.Split(';')[0] } | Sort-Object Length -Descending | Select-Object -First 5
Что делает эта команда:
Она читает файл, разбивает каждую строчку по ;, берет первый элемент, сортирует всё по длине от большего к меньшему и выводит топ-5 самых длинных значений (на случай, если будет несколько одинаковых по длине). Для файла 17 МБ это займет около 3–5 секунд.
——————————
Способ 3. Через Git Bash (Если вы ставили Git)
…
Меня, конечно, заинтересовал первый способ, создать Scratch File в IDE и запустить его. Вот только он у меня не завелся, ошибку отдала чату, он вроде переписал, и снова не сработало…
Я решила не тратить на это время и попробовала вариант с PowerShell. И ведь сработало же! Тогда я пошла искать нижнюю границу:
(цитирую способ 2, общалась с телеграм-ботом)
хороший способ! а самую короткую запись как найти?
Чатик и такой вариант написал, и разжевал все изменения:
Вариант для PowerShell (Топ-5 самых коротких, без пустых)
Скопируйте и вставьте эту команду в синее окно PowerShell:
Get-Content "C:\path\to\your\file.txt" | ForEach-Object { $_.Split(';')[0].Trim() } | Where-Object { $_ -ne "" } | Sort-Object Length | Select-Object -First 5
Что изменилось:
1. Добавилось .Trim() — убирает случайные пробелы по краям.
2. Добавился блок Where-Object { $_ -ne "" } — он выкидывает пустые значения, чтобы они не мешались в топе.
3. Из Sort-Object убрали -Descending — теперь первыми идут самые короткие слова.
Потом мне понадобилось немного усложнить логику:
А если я хочу самое длинное первое слово среди тех, у кого в 3 колонке было значение "1"?
И снова скрипт на PowerShell отлично сработал. Также для проверки граничных значений мне надо было найти данные ровно на 6 символов, и тут чат помог:
Напиши скрипт, который выведет 10 первых строк файла, у которого в 1 ячейке 6 символов. И как его исправить, чтобы было меньше 4 символов? (это я решила сразу другую границу проверить)
А потом мне надо было найти путаницу букв, анаграммы. И при этом чтобы оба значения были справочные. Сначала я сходила к Курсору:
Можешь открыть файл C:\tmp\test.csv и найти там все строки, в которых в первой ячейке ПОЧТИ одинаковые данные, но буквы перепутаны местами?
Например ШУМИЛИНА и ШУЛИМИНА обе есть в этом файле, расстояние - 1 буква. Я хочу видеть все такие строки и столько у каждой расстояние перепутанных букв (включая расстояние 0)
Посмотрела, что он там пишет, а он написал:
Думаю, как сделать… Тут нужен скрипт на питоне! Пишу скрипт… Ой, питона нету, хм хм, тогда сделаю через PowerShell…
Сделал, но немного не так, как мне бы хотелось. А токенов при этом выжрал ой-ей-ей! Поэтому я попробовала запросить скрипт у обычного чатика и вернулась к телеграм-боту.
Но для начала я установила питон, ведь ИИ сказал, что на нем будет лучше всего выполнить задачу. Потом уже пошла к боту:
Как мне найти все анаграммы в файле C:\tmp\fname.csv?
Структура айла:
ГАДАВИЯ;Ж;
ГАДАД;М;
То есть чтобы значение во второй ячейке (М/Ж) совпадало и слово в первой ячейке тоже совпадало, но у него 2 буквы перепутаны местами. Но чтобы оба слова при этом были из файла!
Разбить ответ надо по расстоянию между перепутанными буквами: соседние буквы поменяли местами, через одну, и так далее.
Через питон или павершелл
И ведь не зря питон поставила! Вот что сказал чат:
Для решения этой задачи Python подходит идеально. Написать такой алгоритм на PowerShell можно, но он будет работать значительно медленнее и код получится очень громоздким. На Python мы можем применить хитрую оптимизацию, благодаря которой скрипт найдет все пары за долю секунды.
Python-скрипт
Создайте на компьютере файл, например find_anagrams.py, и вставьте в него следующий код:
…
Как запустить этот скрипт на Windows: …
Что вы получите на выходе? …
Скрипт отработал на ура, столько данных мне собрал, сколько я бы никогда не наскребла вручную! А уж сколько нового я узнала о фамилиях и именах )))
Потом я пошла тестировать дальше. И мне понадобились новые кейсы — когда оба значения справочные, но есть опечатка или пропуск буквы. И снова поиск таких данных вручную занял бы кучу времени, так что я пошла к ИИ, начать решила с пропуска:
Напиши скрипт (питон или павершелл), который найдет в файле такие строки, где в первой ячейке одно и то же слово, но в одной из ячеек пропущена 1 буква — то есть одно слово включает в себя другое, но длиннее на 1 символ, но этот пропущенный символ может быть даже в середине строки.
И вот уже он выдает мне скрипт на питоне! А потом дошли до опечаток:
Напиши скрипт (питон или павершелл), который найдет в файле такие строки, где в первой ячейке одно и то же слово, и ровно 1 символ у них отличается. Результат отсортировать по длине строки.
ИИ и тут помог, выдав очередной скрипт на питоне. Вот только этот скрипт работал подозрительно долго, искал и искал данные, я уже чай попила, другие задачки поделала… Так и написала боту:
Этот скрипт ищет пары уже полчаса
И бот выдал мне оптимизированную версию!
Ваш скрипт «завис», потому что даже с группировкой по длине, если в файле много слов одной длины (например, 100 000 имен длиной 7 символов), количество сравнений внутри этой группы всё равно остается огромным (N^2).
Чтобы ускорить поиск пар с расстоянием Левенштейна = 1 для 3 миллионов строк, нужно отказаться от «честного» сравнения каждого с каждым. Используйте хеширование (метод «удаления одного символа»): …
Идея алгоритма: …
Оптимизированный скрипт: …
Потом я искала две опечатки и сразу указала в промпте, чтобы оптимизировал свой вариант:
Напиши скрипт (питон или павершелл), который найдет в файле такие строки, где в первой ячейке одно и то же слово, и ровно 2 символа у них отличаются. Результат отсортировать по длине строки, но чтобы работал не полчаса. В файле много строк, оптимизируй скрипт под это условие
И снова результат готов меньше, чем за минуту!
Итого
ИИ — просто незаменимый помощник в работе! Я с его то помощью пару дней анализировала данные и составляла тест-кейсы, а сколько бы времени потратила без него?
Мне все равно бы понадобилась автоматизация, чтобы найти граничные значения или тестовые данные “надо, чтобы она значения были в файле, но…”. Вот только сама бы я писала бы эти скрипты не пару минут, а пару часов каждый. И это в лучшем случае!
По крайней мере те громоздкие питон-скрипты, с павершеллом и гуглом я бы справилась быстрее. Но в языке программирования помощь ИИ была просто спасением!
PS — эта статья написана в помощь студентам моего курса «Применение ChatGPT в тестировании»

Комментариев нет:
Отправить комментарий