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

Консультації з автоматизації, менторинг, проведення співбесід - @al8xr
Download Telegram
Про читання професійної літератури

#reading

Як заставити себе читати?

Коротко - НІЯК. Не треба цього робити.
Крім книжок, можна читати статті або дослідницькі роботи. Крім читання - можна проходити курси чи дивитись доповіді.
Кожен обирає сам - який формат пізнання підходить краще.

Для того. щоб читати та дізнаватись нове - потрібна мотивація.

Мотивація може бути або внутрішня - "хочу дізнатись більше чи опанувати нові навички".
Або ж зовнішня - "якщо не опаную навички - звільнять, поріжуть ЗП, не отримаю підвишення".
Спробуйте дізнатись, що Вас мотивує саме зараз. Якщо нічого - не читайте. В житті є безліч не менш важливих справ.

Як читати великі за обсягом книжки?

Великі книжки - це, зазвичай, або довідники, або монументальні твори.
В будь-якому випадку краще мати відповіді на питання - нащо ви читаєте ту чи іншу книжки? Які бенефіти вона принесе Вам прямо зараз?
В залежності від відповіді - ви зможете обрати як Вам краще читати книжку. Чи повністю від початку до кінця. Чи - як довідник.

- Нема нічого поганого, якщо Ви прочитаєте окремі розділи книжки. Розділи, які Вас найбільше цікавлять в конкретний момент часу. Завжди можна повернутись до книжки трохи пізніше. Або змінити одну книжку на іншу.
- Виділяйте кожного дня трохи часу (іноді з таймером) та читайте. Краще - з короткими нотатками. Ще краще - записуйте конкретні action points з кожного розділу: що Ви можете застосувати в роботі прямо зараз. Та пробуйте застосувати одразу. Поки знання ще "свіжі".
- Немає нічого гіршого, коли спеціаліст читає книжку "бо так сказали люди" або "бо її всі читають, вона в усіх підбірках".
Можливо ця книжка Вам не підійде. Не засмучуйтесь. Завжди можна знайти іншу книжку іншого автора.
👍40🔥11
Github Copilot - з чого почати?

#ai #engineering

Минулого тижня я нарешті встановив собі Github Copilot та почав ним користуватись для робочих задач.

Якщо ви, як і я, тільки вивчаєте цей інструмент, то маю для вас декілька статей, що розповідають про його чарівні можливості.

- How to use GitHub Copilot: Prompts, tips, and use cases
- Using GitHub Copilot in your IDE: Tips, tricks, and best practices
- Using GitHub Copilot Effectively

Трохи згодом розповім про свій особистий досвід користування.
🔥178
Python Big O: the time complexities of different data structures in Python

#python #algo

Для тих, кому було цікаво розібратись яка складність (за часом виконання) в структурах даних Python.
👍14
Forwarded from DOU | QA
Test Engineering Notes — Vol. 13. Про роботу з flaky-тестами, баги в IoT-операційках та Postgres

Чи може ШІ замінити тестувальника, пошук багів в Hubris, чому X вимкнув двоетапну аутентифікацію через SMS, Git для дебагінгу та інші цікаві теми зі світу QA — в новому дайджесті від Олександра Романова 👉 https://dou.ua/goto/sJ4B
👍91
Technology Trends for 2024

#engineering

Всім привіт. Я нарешті повернувся після невеличкої паузи.
Сьогодні я б хотів обговорити цікаву статтю про тренди в технологіях 2023 року порівняно із 2022 від O`Reilly.

Коротко:
- 92% розробників використовує ШІ для написання базового коду
- усі втомились від мікросевісів та починають нові проєкти як моноліти
- кількість PR'ів у Github репозиторії - знизилася (бо стало менше вільного часу після ковіду)
- Python не втратив у популярності, Rust - набрав
- LangChain фреймворк набирав популярності разом із ChatGPT та подібними
- Більше людей почали користуватись PowerBI
- Теми безпеки мереж - найбільш актуальні
- у web девелопменті все ще править React
- найпопулярніші сертифікації CompTIA A+ / Security + та AWS Solution Architect
👍28❤‍🔥1
Корисне з GitHub - 5

#github #selection

Доброго ранку! Олександр на зв'язку.
Приніс для вас чергову порцію цікавих репозиторіїв, які можна подивитись та почитати. (Для тих, кому нічого вчити 😉).

- Якщо ви цікаветесь тим, як працюють відомі системи "під капотом" - то можна почитати system-design-primer або system-design-101.
- Якщо ви прагнете стати хорошим сіньйором чи навіть лідом, то можна подивитись на колекції порад path-to-senior-engineer-handbook та resources-to-become-a-great-engineering-leader.
- Якщо ви хочете трохи поринути в світ LLM систем типу ChatGPT - можна почати з llm-course та hands-on-llms. Далі можна копати в AI загалом на ai-notes.
- Чи може ви готуєтесь до співбесід? Тоді вам знадобляться підбірки interviews та coding-interview-university.
- Для тих, хто працює з блокчейном - awesome-blockchain та awesome-blockchain-testing.
21👍5🔥3❤‍🔥1
Про знання своїх інструментів

#interview #testing #tools

Багато хто зараз шукає роботу та проходить інтерв'ю. Задачки на LeetCode це звичайно круто, але не забувайте також про інструменти.
Бо кожен інструмент, який ви вказуєте в своєму CV - це привід задати Вам питання.

Якщо ви говорите про інструменти тестування чи бібліотеки для автоматизації - ви повинні знати їх можливості. Навіть, якщо ви не користуєтесь усім функціоналом.

Крім того, треба завжди мати відповіді на питання:
- "а чому саме цей інструмент?"
- "які є альтернативи?"
- "чому альтернативи нам не підійшли?"

Відповіді типу "ну, це зараз модно та усі користуються", "так сказав Заратустра на конференції", чи "так скалося історично" - не підходять. Вони лише покажуть, що ви не задаєте питань та не прагнете покращити інструменти чи процеси. (Тут я кажу більше про мідл - сіньйорних людей. Для трейні чи джуніора це може бути прийнятно).

То ж ще раз - вивчайте свої інструменти. Знайте їх сильні та слабкі сторони.

Вдалого усім тестування!
👍234🔥4
3 Critical Skills You Need to Grow Beyond Senior Levels in Engineering

#career

Чи вистачить лише технічних знань, для того, щоб стати рости до сіньйора й вище?
Скоріш за все - ні.

Пропоную сьогодні почитати - які додаткові скіли ще треба прокачувати.

TL;DR
- вміння масштабувати себе
- вміння працювати з невизначеністю
- вміння впливати без авторитету

Читати все таки треба, бо в статті даються поради як це все розвивати.
👍28🔥4
Test Failures Should Be Actionable

#testing #engineering

Коротка нотатка від Titus Winters, автора книги "Software Engineering At Google".

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

В pytest ці меседжі дуже легко писати та конфігурувати.
👍14🔥2
Software Quality Metrics for Project Delivery Survey

#testing #engineering #helpneeded

Друзі!
Я зараз роблю дослідницьку роботу з теми тестування.
А саме - з метрик тестування.
Тому хотів би попросити вас пройти невеличке опитування.

Дуже дякую всім за допомогу!
7👍5
50 shades of Fibonacci

#coding #interview #python

Одна з найчастіших задач, яку дають на перевірку навичок програмування автоматизатора на співбесіді - це обчислення послідовності Фібоначчі.

Для тих, хто забув - це послідовність типу 0, 1, 1, 2, 3, 5, 8, 13, 21, ..., що описується формулою:
F(n) = F(n-1) + F(n-2), де F(0) = 0 та F(1) = 1.

Виявляється, одну й ту саму задачу можна вирішити по-різному. Кожне рішення покаже ваш рівень розуміння задачі, мови програмування та тестування негативних кейсів.

Перед тим, як дивитись приклади - пропоную самим спробувати написати код.

1. Простий та наївний підхід - обчислюємо так, як написано у формулі (з рекурсією):
def fib(n: int) -> int:
return fib(n-1) + fib(n-2)


Але тут можна легко отримати RecursionError: maximum recursion depth exceeded

2. Покращуємо код, додаючі перевірку базових кейсів:
def fib(n: int) -> int:
if n < 2:
return n
return fib(n-1) + fib(n-2)


3. Можна також застосувати техніку мемоїзації (тобто замість обчислень знову й знову - запам'ятовуємо проміжні результати):
from typing import Dict

memo: Dict[int, int] = {0: 0, 1: 1}
def fib(n: int) -> int:
if n not in memo:
memo[n] = fib(n - 1) + fib(n - 2)
return memo[n]


4. Мемоїзація також є "вбудована" в сам Python:
from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n: int) -> int:
if n < 2:
return n
return fib(n - 1) + fib(n - 2)


5. Замість рекурсії - можна вирішити задачу з циклом:
def fib(n: int) -> int:
if n == 0:
return n
last: int = 0
next: int = 1
for _ in range(1, n):
last, next = next, last + next
return next


P.S. Можна ще обчислити за допомогою генераторів, але цей спосіб розберемо в наступних нотатках.
👍35❤‍🔥41🥴1
Простий репорт для Python та не тільки

#automation

Вчора я дізнався, що є такий цікавий проєкт як ctrf.io або ж Common Test Report Format.
Його творці пропонують легкий вид тестового репорту в форматі JSON, який потім можна відображати як частину сторінки тест рану на Github.

Oleksii Ostapov з QAMania вже навіть створив плагін pytest-common-test-report-json, що працює з CTRF.
Собі на проєкт я це інтегрував.
Все дуже швидко й просто - зайняло десь до години часу.

Почитати та подивитись, що це таке - можна в статті на DOU.
11👍5❤‍🔥1👏1
⚡️ 1 червня стартує практичний тренінг, на який я б 100% пішов (як-би було трішки більше вільного часу). Сподіваюсь все-таки доєднатись до наступних груп.

Це тренінг від Олександри Ковальової — Test Design Techniques: Black Box Testing.

Кому це буде цікаво: усім інженерам, які хочуть дійсно розібратись як застосовувати техніки тест-дизайну в роботі, а не просто читати в книжці.
В Олександри просто купа досвіду в тестуванні та викладанні. То ж за якість тренінгу можна не перейматись.

Формат: прямі трансляції з можливістю переглянути відео.

Розклад: 1.06, 8.06 та 15.06 (10:00-15:00) — 3 заняття щосуботи протягом 3 тижнів.

🦄 Деталі та реєстрація отут => https://bit.ly/4e0xJDQ
5👏3👎1
Playwright interview questions ...

#automation #testing

Серія з двох статей, де Adrian Maciuc ділиться поганими та хорошими питаннями з Playwright.

Допоможе краще зрозуміти інструмент та бути готовим до подібних питань на співбесіді.
- Playwright Interview Questions that you are going to hate
- Playwright interview questions that you are going to love

А для СІНЬЙОРІВ автоматизаторів, чи тих, хто дуже хоче ними стати - маю ще більш цікаву новину.

Олександр Хотемський з каналу Hot Testing наступного місяця буде проводити майстерклас з Playwright. Тільки практика, ніякої теорії.
Деталі можна почитати тут! Доєднуйтесь. Це хороша можливість розібратись з фреймворком та наступного дня вже йти робити на ньому проєкти)))
10👍8❤‍🔥2
Forwarded from DOU | QA
Test Engineering Notes — Vol. 14: Про тестування сервісів в Meta, 10Х-інженерів та інтро в перфоманс-інженерію

Пустий S3-бакет може завдати збитків на тисячі доларів, як писати коміт-меседжи та свій форматер коду, метрики перфомансу фронтенду, розбір різних структур даних в Python — це та багато іншого читайте у новому QA-дайджесті 👉 https://dou.ua/goto/Nr2V
🔥122
Корисне з GitHub - 6

#github #selection

Доброго ранку! Сьогодні пропоную поглянути на декілька корисних підбірок з GitHub.

🛠 project-based-learning - для тих, хто вивчає мову програмування та не вистачає реальних задач для практики.
📚 The Algorithms - набір найвідоміших алгоритмів, що написані на різних мовах програмування.
🐧 The Art of Command Line - одна сторінка, що розповідає як працювати з командним рядком.
🆓 free-for.dev - величезний лист різних інструментів та сервісів, що допоможуть в розробці (усе безкоштовно).
🐍 30 Days of Python - покроковий туторіал з мови Python для тих, хто віддає перевагу самостійному навчанню. А тут - можна подивитись на купу корисних утиліт та невеличких програм (для натхнення).
🔥196
Знайти співробітників з найбільшою зарплатнею

#python #interview #coding

Всім привіт.
Сьогодні я прийшов до вас із задачею. Цю задачу можна вирішити для тренування, а можна навіть дати на співбесіді. Бо задача вкрай нескладна та можна швидко отримати рішення. Відповідь покаже рівень знання мови програмування.

Задача


"Уявімо, що ви працюєте в HR департаменті великої компанії. Вам прилетіла задача написати новий ендпоінт, який буде повертати всіх співробітників, що мають ЗП більше, ніж $100,000 на рік. Поверніть результат у вигляді набору з двох елементів - імені працівника та його зарплати".

Вхідні дані - це map такого вигляду:

employees = {'Alice': 100000, 'Bob': 99817, 'Carol': 122908, 'Frank': 88123, 'Eve': 93121}


Рішення буде наприклад таким:

top_earners = []  
for key, val in employees.items():
    if val >= 100000:
        top_earners.append((key,val))
print(top_earners)


Але існує трохи більш елегантне рішення, що показує можливості мови Python:

top_earners = [(k, v) for k, v in employees.items() if v >= 100000]
print(top_earners)


Або навіть:

top_earners = list(filter(lambda x: x[1] >= 100000, employees.items()))
print(top_earners)


Як бачите, на кожну проблему може бути декілька варіантів рішень. Але не забувайте PEP20 - "There should be one-- and preferably only one --obvious way to do it."

А як буде виглядати рішення на вашій улюбленій мові програмування?
👍193🔥2
Queueing - An interactive study of queueing strategies

#engineering

Сьогодні хочу поділитись, мабуть, найкращим візуальним поясненням навіщо нам черги в computer science та в Web технологіях.
🔥18👍2
Коротко про базові типи даних в Python

#python

Сьогодні невеличкий розбір базових типів даних в Python. Здається, тема надто проста, але як завжди, є невеличкі деталі. Я наприклад не часто працюю з нескінченностями, тому не знав, шо у float можна отримати такі дані.

Цілочисленні - int. Подивитись, який же найбільший integer можна з sys.maxsize
import sys

a = 100500
print(f"a = {a} та має тип {type(a)}")
print(f"максимальний розмір типу int: {sys.maxsize}")


Замість окремих float / double - Python має тільки float.
b = 123.456
print(f"b = {b} та має тип {type(b)}")


Крім float, є можливість працювати комплексними числами, а також з decimal / fraction.
c = 100 + 5j
print(f"c = {c} та має тип {type(c)}")

from decimal import Decimal
from fractions import Fraction

dec = Decimal("0.1")
print(f"dec = {dec} та має тип {type(dec)}")

frac = Fraction(1, 3)
print(f"frac = {frac} та має тип {type(frac)}")

Float дозволяє отримати трохи більш цікаві дані - такі як NaN чи нескінченність.
nan = float("nan")
print(f"nan = {nan} та має тип {type(nan)}")
inf = float("inf")
neg_inf = float("-inf")
print(f"inf = {inf} та має тип {type(inf)}")
print(f"neg_inf = {neg_inf} та має тип {type(neg_inf)}")


Якщо не подобається float, можна застосувати math. Результат той же.
import math
print(f"Те ж саме з math.inf - {math.inf == inf}")


Строки в Python бувають трьох типів - звичайні, сирі (raw) та форматовані.
single_quote_string = 'Hello, World!'
double_quote_string = "Hello, World!"
print(f"Python дозволяє строки з будь-якими лапками: {single_quote_string == double_quote_string}")

raw_string = r"\tRaw \n string"
well_done_string = "\tWell-done \n string"
print(f"raw_string = {raw_string}")
print(f"well_done_string = {well_done_string}")

formatted = f"{a} + {b} = {a + b}"
print(f"formatted = {formatted}")
print(f"formatted з фігурними дужками = {{{formatted}}}")


Результат в консолі:
a = 100500 та має тип <class 'int'>
максимальний розмір типу int: 9223372036854775807
b = 123.456 та має тип <class 'float'>
c = (100+5j) та має тип <class 'complex'>
dec = 0.1 та має тип <class 'decimal.Decimal'>
frac = 1/3 та має тип <class 'fractions.Fraction'>
nan = nan та має тип <class 'float'>
inf = inf та має тип <class 'float'>
neg_inf = -inf та має тип <class 'float'>
Те ж саме з math.inf - True
Python дозволяє строки з будь-якими лапками: True
raw_string = \tRaw \n string
well_done_string = Well-done
string
formatted = 100500 + 123.456 = 100623.456
formatted з фігурними дужками = {100500 + 123.456 = 100623.456}
13👍6
The curious case of the missing period

#engineering #bug

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

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