Дефектите и докладът за тях
Накратко: Докладът за дефект е писмо до човек, който не е видял грешката. Трябва да може да я повтори от първия път: кратки стъпки, очаквано по правилото и получено от системата. Тежестта казва колко вреди дефектът, приоритетът колко бързо да се оправи; двете са преценка и често се разминават.
Проблем
„Доставката не работи“
Тестерът пише в системата за дефекти: „Доставката не работи. Спешно!“ Програмистът пробва количка за 30 € и вижда 4,90 €. Пробва 70 € и вижда 0,00 €. Всичко е наред. Затваря доклада с „не се възпроизвежда“.
Седмица по-късно клиент се оплаква, че е платил доставка за поръчка точно за 50,00 €. Тестерът го е видял първи. Но докладът му не казваше нито сумата, нито какво е очаквал, нито какво е получил.
Идеята
Докладът е писмо до някой, който не е бил там
Докладът за дефект (defect report) има една работа: друг човек да повтори грешката от първия път и да разбере защо е грешка. Затова добрият доклад има:
- заглавие, което казва грешката: „Доставката е 4,90 € за поръчка точно 50,00 €“, не „Доставката не работи“;
- стъпки: най-късият път до грешката, с точните данни. Нито една излишна стъпка;
- очаквано: какво казва правилото. Безплатна доставка;
- получено: какво направи системата. 4,90 €;
- среда: версия, браузър, устройство, когато имат значение;
- тежест и приоритет (следващите карти);
- връзка към изискването и към тестовия случай, който го е хванал.
Едно нещо доклад не съдържа: кой е виновен. Дефектът е в продукта, не в човека.
По-точно, за любопитните
CTFL v4.0.1, раздел 5.5, дава типичното съдържание на доклада: уникален номер, заглавие с кратко описание, дата, автор и организация, обект на теста и среда, контекст (тестов случай, дейност, техника), описание на отказа, за да може да се възпроизведе и разреши, със стъпки, логове и снимки, очакван и получен резултат, тежест, приоритет, състояние и препратки. Програмата казва и целите: информация за поправката, начин да се следи качеството на продукта и идеи за подобряване на процеса.
Идеята
Жизненият път на един дефект
Докладът не свършва, когато е написан. Той минава през няколко състояния:
- Нов: тестерът го пише.
- Отворен: на прегледа (triage) екипът приема, че е дефект, и му дава приоритет.
- В работа: програмистът търси причината и я поправя.
- Поправен: поправката е във версията за тестване.
- Проверен: потвърждаващият тест минава, и регресионните около него също.
- Затворен.
Отклоненията са също толкова важни. Отхвърлен: не е дефект, системата прави каквото казва правилото (тогава може би правилото е грешно, и това е въпрос към анализатора). Дубликат: вече го има. Отложен: дефект е, но няма да се поправя сега. Отворен отново: потвърждаващият тест пак пада.
По-точно, за любопитните
Имената на състоянията се различават между екипите и инструментите (Jira, Azure DevOps, GitHub Issues). CTFL не налага определени имена: важното е, че процесът по дефектите е договорен и всеки знае какво значи всяко състояние и кой го сменя.
Пробвай
Подреди пътя
Подреди състоянията на дефекта от доклада до затварянето.
Поправен: поправката е във версията за тестванеНов: тестерът пише докладаЗатворенОтворен: на прегледа приемат, че е дефект, и му дават приоритетВ работа: програмистът търси причината и я поправяПроверен: потвърждаващият тест минава, регресионните също
Приоритетът се дава на прегледа, преди някой да е почнал работа. „Проверен“ значи потвърждаващ тест и регресия, не думата на програмиста.
Идеята
Тежест и приоритет не са едно и също
Двете се бъркат постоянно:
- Тежестта (severity) е колко вреди дефектът: на клиента, на парите, на данните. Обикновено я предлага тестерът, защото е видял вредата. Скала: критична, висока, средна, ниска.
- Приоритетът (priority) е колко бързо да се оправи. Решава го бизнесът или продуктовият собственик, защото зависи от плана, от клиентите, от рекламата. Скала: висок, среден, нисък.
Те често се разминават. Правописна грешка в името на магазина вреди малко, но се поправя днес. Грешна годишна справка вреди много, но има 10 месеца до следващата.
И двете са преценка, не факт. Два добри тестера могат да дадат различна тежест, и това е нормално. Важното е да можеш да кажеш защо.
Пробвай
Тежест или приоритет?
Пробвай
Първият доклад
В задачите долу магазинът не е съвсем правилен. Във всяка има по една скрита грешка, нарочно сложена в иначе вярната система. В модула за Gherkin такава версия с една грешка се казва мутант: сценариите ти я хващаха, ако паднат на нея. Тук грешката вече е хваната. Знаеш горе-долу къде е. Твоята работа е докладът.
Как работи задачата:
- сглобяваш стъпките от речника на функционалността и пишеш стойностите;
- с Опитай пускаш стъпките на системата с грешката и виждаш какво дава;
- избираш очаквано (какво казва правилото) и получено (какво видя);
- даваш тежест и приоритет.
Проверката пуска стъпките ти срещу системата с грешката (там грешката трябва да се появи) и срещу правилната (там не трябва). Заглавието се проверява само отчасти: да не е празно и да не е „не работи“. Тежестта и приоритетът се сверяват с примерния доклад, който виждаш след опита си.
Намери сума, при която грешката се вижда, и напиши доклада.
при поръчки доста под 50 €
Правилото: Доставката е безплатна при поръчка от 50 € включително, иначе е 4,90 €. Празна количка не се поръчва.
Стъпки за възпроизвеждане
- Още няма стъпки. Добави ги от речника отдолу.
Стъпките са от речника на функционалността, както в сценариите. Стойностите се пишат в самата стъпка: сумата като 50,00.
Примерният доклад
- Заглавие
- Доставката е безплатна за поръчка от 30,00 €
- Стъпки за възпроизвеждане
- Дадено количка за 30,00 €
- Когато поръчам
- Очаквано
- доставката е 4,90 €
- Получено
- доставката е безплатна
- Тежест
- висока. Поръчката минава и клиентът е доволен, но магазинът губи по 4,90 € на всяка поръчка между 5 € и 50 €, а те са повечето. Нищо не е спряло, затова не е критична, но вредата е голяма и расте с всеки час.
- Приоритет
- висок. Парите се губят още днес. Поправя се веднага, без да се чака следващото планирано пускане.
Грешката се вижда само между 5 € и 50 €: под 5 € и правилната система, и тази с грешката взимат 4,90 €, а от 50 € и двете не взимат нищо. Затова докладът с 3,00 € не възпроизвежда нищо. Стъпките на добрия доклад са две, а очакването е числото от правилото, 4,90 €. „Поръчката е приета“ е вярно и за двете системи и не показва разликата.
Идеята
Как намираш най-късите стъпки
Видял си грешката след 12 стъпки: добави, махни, смени количеството, сложи код, махни кода. Програмистът не трябва да минава през всичките. Преди да пишеш, стесни:
- махни стъпка и пробвай пак. Грешката още ли е там? Значи стъпката не трябва;
- смени една стойност наведнъж. При 30 € грешката я има, при 3 € не: значи е в сумата, и знаеш приблизително къде е границата;
- запиши точните данни. Не „някаква сума“, а 30,00 €. Не „няколко бройки“, а 8 и после 3.
Това е и разликата между „при мен работи“ и „поправено от първия път“.
Упражнение
Доклади за дефекти
1. Таксата за доставка. Грешката е в цената на платената доставка.
Напиши доклад, по който грешката се оправя от първия път.
в цената на платената доставка
Правилото: Доставката е безплатна при поръчка от 50 € включително, иначе е 4,90 €. Празна количка не се поръчва.
Стъпки за възпроизвеждане
- Още няма стъпки. Добави ги от речника отдолу.
Стъпките са от речника на функционалността, както в сценариите. Стойностите се пишат в самата стъпка: сумата като 50,00.
Примерният доклад
- Заглавие
- Платената доставка струва 4,99 € вместо 4,90 €
- Стъпки за възпроизвеждане
- Дадено количка за 20,00 €
- Когато поръчам
- Очаквано
- доставката е 4,90 €
- Получено
- доставката е 4,99 €
- Тежест
- ниска. Клиентът плаща 9 цента повече. Поръчката минава и нищо не се губи: вредата е малка.
- Приоритет
- среден. Малка вреда, но цената не е обявената 4,90 €: клиентите се оплакват, а за защитата на потребителите това е грешна цена. Поправя се в следващото пускане, а някои екипи биха я пуснали и веднага.
При 60 € доставката е безплатна и в двете системи, така че грешката не се вижда. Трябва сума под 50 €. Тежестта е ниска, защото са 9 цента. Приоритетът е преценка: обявената цена е 4,90 €, и някои екипи биха поправили веднага. Затова и „висок“ се приема.
2. Единадесетата бройка. Грешката е около горната граница на количката.
Напиши доклад, по който грешката се оправя от първия път.
когато количката мине горната граница
Правилото: В количката може да има най-много 10 бройки от един продукт. Добавяне над 10 се отказва със съобщение, а количката остава същата. Добавя се поне 1 бройка.
Стъпки за възпроизвеждане
- Още няма стъпки. Добави ги от речника отдолу.
Стъпките са от речника на функционалността, както в сценариите. Стойностите се пишат в самата стъпка: сумата като 50,00.
Примерният доклад
- Заглавие
- Количката приема 11-а бройка от един продукт
- Стъпки за възпроизвеждане
- Дадено в количката има 10 бройки от продукта
- Когато добавя 1 бройка
- Очаквано
- добавянето е отказано
- Получено
- добавянето е прието
- Тежест
- ниска. Клиентът взима една бройка повече от лимита. Лимитът пази наличността в разпродажба, но една бройка не я изчерпва, а сумата и плащането са верни.
- Приоритет
- нисък. Случва се рядко: само когато някой иска точно 11. Влиза в плана заедно с другите малки поправки, освен ако не наближава разпродажба.
При 9 бройки и още 1 количката става 10, и правилната система също го позволява. Грешката е на 11. Това е класическият пример за ниска тежест и нисък приоритет: истинска грешка, която може да чака, освен ако не наближава разпродажба.
3. Отказът, който изпразва. Грешката е в това, което остава в количката след отказ.
Напиши доклад, по който грешката се оправя от първия път.
в това, което остава в количката след отказ
Правилото: В количката може да има най-много 10 бройки от един продукт. Добавяне над 10 се отказва със съобщение, а количката остава същата. Добавя се поне 1 бройка.
Стъпки за възпроизвеждане
- Още няма стъпки. Добави ги от речника отдолу.
Стъпките са от речника на функционалността, както в сценариите. Стойностите се пишат в самата стъпка: сумата като 50,00.
Примерният доклад
- Заглавие
- Количката се изпразва, когато добавянето мине лимита от 10 бройки
- Стъпки за възпроизвеждане
- Дадено в количката има 8 бройки от продукта
- Когато добавя 3 бройки
- Очаквано
- в количката има 8 бройки от продукта
- Получено
- в количката има 0 бройки от продукта
- Тежест
- средна. Отказът е правилен, но клиентът губи бройките, които вече е сложил, и трябва да ги търси отново. Пари не се губят и поръчката е възможна, затова не е висока.
- Приоритет
- висок. Удря точно клиентите, които купуват много, и точно в разпродажба, когато лимитът се стига най-често. Мнозина ще се откажат, вместо да пълнят количката отново.
Отказът е правилен и в двете системи, затова „добавянето е отказано“ не показва разликата. Разликата е в бройките, които остават: 8 срещу 0. „Дадено празна количка“ преди „в количката има 8 бройки“ е излишна стъпка: втората отменя първата. Приоритетът е висок или среден, защото удря клиентите, които купуват най-много.
Тест
Провери се
Свързани уроци
Раздел „Свързани уроци“- Нужно отпреди: Защо програмите грешат · Нивата на тестване · Видовете тестване · План и тестване по риск
- Продължава в: Тестовете в CI · Промо кодове: от заявката до пускането
- Задачи по темата: Нива, видове и процес