🤔 Чому тестувальнику не варто плутати причинність та кореляцію
#testing #criticalthinking
Коли ми тестуємо софт, особливо сучасні великі й складні системи, ми часто можемо плутати дві речі - причинність та кореляцію подій.
З одного боку, є причинність - показує звʼязок між двома явищами, при якому одне явище (причина) за певних умов породжує інше явище (наслідок). З іншого боку, кореляція - це статистичний звʼязок чи залежність між явищами, коли зміна однієї величини супроводжується зміною іншої.
Іншими словами - кореляція, це коли дві події відбуваються разом, а причинність, це коли одна подія є причиною іншої.
😱 Окей, цікаво - але нащо це в тестуванні?
Часто ми можемо зустріти таку помилку (у себе чи в команді): “Ми зробили деплой версії 1.0.1 на продакшн, система зламалася — значить, причина у версії 1.0.1!”. В цьому прикладі можна побачити кореляцію між двома подіями (деплоєм та поламаною системою), але не обовʼязково причинність.
Чому? Бо ми працюємо зі складними системами з великою кількістю компонентів. Компоненти працюють одночасно; між компонентами існують явні та неявні залежності.
Але якщо причинність і існує, вона може бути тимчасовою (так співпало). Або ж - система зламалася внаслідок дії зовсім іншої причини (не того, що ми задеплоїли нову версію).
Ще цікавіше стає, коли в цей коктейль додається дрібка упередженості. Завдяки упередженості вибору, ми можемо обрати найпростіше пояснення причинності. Або ж - вірити тому, що, очікуємо побачити (на основі минулого досвіду).
🤯 Як дослідити причинність виникнення помилок (багів)
👉 Намагайтеся відділити спостереження від пояснення. Замість швидкого рішення “Деплой спричинив збій” можна сформулювати події по-іншому: “Помилка сталася після деплою”.
👉 Задайте собі та команді просте питання: “А що ще змінилося в процесі деплою?”. Можливо, стався сплеск навантаження, або хтось змінив базу.
👉 Спробуйте сформулювати кілька можливих гіпотез (пояснень) щодо причини помилки.
👉 Протестуйте гіпотези про причинність подій. Чи можете ви відтворити помилку, задеплоївши ту саму версію знову? Чи зникне помилка, якщо ви повернетеся до попередньої версії? Чи можливо ізолювати проблему?
При роботі з причинністю та кореляцією треба памʼятати, що остання може бути лише підказкою, а не прямим доказом. Помилка може бути спричинена одночасною взаємодією багатьох компонентів. Деякі з цих компонентів можуть не мати логів і метрик, що це підтверджують. (Якщо цих логів немає - треба задуматися над тим, щоб їх додати.)
Інколи, інтуїція тестувальника спрацьовує й причина помилки дійсно є першим, що прийшло в голову. Але зазвичай, ситуації більш складні та нетривіальні.
Досліджуйте баги, шукайте докази причин і наслідків. Слова архітекторів та девелоперів про “тут так точно не може бути” - це не доказ.
Post #799
2.5K
- ❤ 17
- 👍 5
- 🔥 3