Test Engineering Notes
3.81K subscribers
177 photos
2 videos
648 links
Україномовний канал про технічні аспекти тестування, розподілені системи, блокчейн.

Консультації з автоматизації, менторинг, тестові співбесіди - @al8xr
Download Telegram
My Hardest Bug Ever

#testing #bug

Сьогодні пропоную до вашою уваги майже детективну історію. Історію про те, як розробник гри Crash Bandicoot намагався "упіймати" баг, що стирав усі сейви з гри при завантаженні. Девелопер витратив майже 6 тижнів на дебаг. Але бага все ще з'являлася - причому досить рандомно.
А в результаті виявилося - що проблема дещо в іншому ...
24👍5
The curious case of the missing period

#engineering #bug

В цю пʼятницю пропоную до вашої уваги історію про те, які проблеми може спричинити відсутність однієї коми в листі (та при чому тут SMTP протокол).

Тим, хто тестує різного роду розсилки - це must-read!
👍15
🥳 Ювілей каналу та зламані індекси

#anniversary #databases #bug

Вчора каналу Test Engineering Notes виповнилося 3 роки! Стартуючи канал, я й не думав, що буду писати так довго 😄. А ще - я навіть не сподівався, що канал виросте аж до 3500+ підписників! 🎉

Дякую вам усім за те, що продовжуєте читати! А я буду продовжувати ділитись з вами технічними та складними штуками зі світу тестування й інженерії.

То ж, не буде гаяти час - перейдемо до справи!

💼 Справа про зламані індекси в базі

Сьогодні я хочу поділитися з вами цікавим матеріалом - "When Postgres Indexing Went Wrong”. Ця стаття розповідає, як оптимізація перфомансу може піти не так, як планувалося. (Як часто й буває).

Була в одній компанії Postgres база даних, величенька за розмірами (десь мільярди рядків). Щоб зробити запити більш швидкими, розробники створювали індекси. Але просто індекси, а в паралелі - за допомогою CREATE INDEX CONCURRENTLY. Перфоманс запитів покращився, можна святкувати!!!

Але трохи згодом, почалися проблеми зі швидкістю запитів в базу. Швидкість яка поступово росла. Перфоманс бази бідкався, розробники розводили руками.

🔍 Що ж сталося?

- паралельна індексація проходить в два етапи: спочатку створюється індекс на основі снапшоту стану бази, а потім Postgres обробляє всі зміни, які пропустив.
- паралельна індексація - асинхронна та …. може ТИХО ВПАСТИ й залишити по собі зламаний індекс!
- у випадку компанії проблема була гіршою - бо дані були розділені між багатьма розділами (partitions)

❗️Як цього уникнути?

- користуйтеся флагом CONCURRENTLY, коли створюєте індекси в продакшені
- моніторьте індекси та перевіряйте їх вручну (за допомогою EXPLAIN ANALYZE)

Памʼятаймо: чим більше ми знаємо про системи та як вони можуть впасти - тим краще ми зможемо запобігти помилкам.
👍27🔥124🌚2
The most mysterious bug I solved at work

#bug

Пропоную до вашої уваги історію про вельми цікавий баг. Історію в своєму блозі розповів Cadence Ember.

Про систему

Одного разу Cadence працював кимось між розробником, тестувальником та сапортом. Продукт, над яким він працював був типу Patient Management Software. В цьому софті лікар міг створити електронне направлення до іншого лікаря. Частину даних про паціента отримували зі сторонніх систем - то ж лікарю треба було тільки заповнити декілька полів у формі, згенерувати у форматах HL7, XML чи PDF та відправити.

Про баг

Раз на два - чотири тижні, система кидала помилку на етапі відправки електронного відправлення:

Illegal Character entity: expansion character (code 0x2) not a valid XML character

Зазвичай, фіксити таку помилку можна було SQL скриптом, що видаляв "\u0002" із бази даних. Але Cadence вирішив знайти першопричину проблеми.

У пошуках відповідей

Що значить символ 0х2? Як ви знаєте, кожна літера тексту представлена числом у компʼютері. Числа нижче 31 використовуються для невидимих "керуючих символів". Керуючі символи були важливі в часи телетайпів - коли символи передавались одним потоком й треба було розрізняти розмітку тексту. Символ 0х2 - це початок тексту, а 0х3 - кінець тексту.

Провівши свої дослідження ще більше, Cadence зрозумів, що символ 0х2 чомусь виникає в кінці першого рядка тексту:


development. Physically, his well-
being is healthy, so likely needs


Тобто дефіс чомусь перетворюється на символ 0х2!

В чому була проблема

Виявляється, браузери та програми працюють з PDF текстами по різному. Автор спробував працювати з PDF з текстом з дефісами в Google Chrome, Mozilla Firefox, Microsoft Edge та Acrobat Reader.

Й саме браузер Edge перетворював дефіс на символ 0х2 ... коли скопіювати текст з PDF файлу відкритого в браузері в систему створення лікарських направлень.

Як пофіксили? Помилку виправили на стороні продукту самого розробника - шляхом автоматичної заміни символу 0х2 на дефіс.
👍23🤯5🔥1