MR
(фишечка из старенького)
Не такая уж и редкая ситуация, когда бизнесу надо построить сложные отчёты на основе, например, списка пользователей сервиса (100k+). Отчёты обычно просят не самые простые как раз потому, что самостоятельно бизнес и не может сам сделать.
Отвлекать основную команду, каждый член которой имеет довольно узкую специализацию, - и не всегда удобно и не всегда есть время. А отчётики зубодробительные нужны вчера.
Для ускорения процесса было бы идеально или запихать всё в Excel (лучше конечно заюзать Excel Power Pivot, подсказывает Иван Повстен) и отдать задачку на какой-нибудь фриланс-бирже, чтобы из данных сформировали всё, что надо. В принципе там за 1-3 тысячу рублей и за несколько часов вполне реально получить практически любого коня с перламутровыми пуговицами. Экономия громадная, - и на времени и на бабле.
Есть одна загвоздка, - данные в отчётиках обычно под NDA и привлечь левого человека за копейки хоть и очень хочется, но вообще нереально. А дать задачу без данных без толку, - исполнитель не въедет в контекст и процесс дебага с ним превратится в мучение на много недель, что полностью аннулирует все бенефиты. Это, кстати, одна из главных причин, почему очень сложно аналитикам устроиться на удалённую рабоу, так как они работают с очень чувствительными данными.
Industry best practice заключается в подходе к этой задаче на основе работы с обезличенным данными. Тестировщики и разработчики должны работать с синтезированными данными, а для воспроизведения багов использовать обезличенные точечные дампы клиентов, переносимых из продакшна на отдельно стоящие стенды. Сама обфускация строится их таким образом, чтобы они вышли из под NDA, но пользоваться ими исполнитель уже смог.
Вручную это делать долго и муторно, поэтому я написал простенький скриптик, который заменяет буквы на случайные, что гарантирует полную невозможность восстановить или расшифровать их. Кроме того, я сделал, чтобы повторяющиеся значения внутри колонок (например статус заказов) в обфусцированном виде также повторялись.
Вот пример исходной таблички:
Номер клиента Номер заказа Клиент Номер ДС СостояниеА вот результат обфусцирования:
83753 31295 Дина Варава 89996748 Передано на Почту России
83744 39212 Алекс Гузик 89995484 В доставке
707610359 707610359 Аникина Дарья 89993430 Передано на Почту России
657597666 657597666 Коломийчук Денис 89993422 Передано на Почту России
83736 31286 Николай Бочкарев 89993075 Передано на Почту России
66533 31184 Фёдор Замятин 89992572 Передано на Почту России
66533 31284 Фёдор Замятин 89213242 Передано на Почту России
Kwsjq tacoocb Fwnod cysvmf Itutvs Humly IY LtqreflvdПолучаем готовую эксельку работающую, с бизнесом кое-что подправляем ещё за пару часов и в итоге бизнес получает практически сразу необходимые данные, а я экономлю время и бабло. В спринт после этого закладываю автоматизацию подготовки такой эксельки или какой-нибудь другой формы.
22776 64670 Uhov Dkoirq 34355175 Svionxkd jw Hitlo Icsjou
21261 74885 Npopm Ktdpk 63688838 W xxwmmehl
444805037 533302151 Almsbsw Hbbtn 50672520 Svionxkd jw Hitlo Icsjou
038783307 867483713 Welvjfxjwa Pqcrp 53311325 Svionxkd jw Hitlo Icsjou
17233 73463 Numgvco Mgxoekph 34871684 Svionxkd jw Hitlo Icsjou
18743 55506 Beyta Bkecibq 02342714 Svionxkd jw Hitlo Icsjou
18743 62415 Beyta Bkecibq 68851814 Svionxkd jw Hitlo Icsjou
Вот скриптик для обфусцирования csv на Python: https://ctorecords.shortcm.li/obfuscate (есть на других языка: php, perl. На днях выложу вариант для node.js и go).
UPDATE от Андрея Копейко для тех, кто не хочет мелочиться: тулза сразу для обфускации сразу всей бд на постгре https://gitlab.com/dalibo/postgresql_anonymizer
А еще и тест-кейсы для них писать нужно, чтобы уменьшить количество ошибок 😉