Доброто изискване
Накратко: Доброто изискване е нужно, еднозначно, пълно, единично, осъществимо, проверимо и вярно. Наборът изисквания трябва и да не си противоречи. Лошото изискване е дефект, който се хваща с четене, преди да има код.
Проблем
„Отстъпката се показва ясно“
Изискването е едно изречение: „Отстъпката се показва ясно в количката.“ Дизайнерът я слага със сив шрифт под сумата. Тестерът я вижда: показана е, четлива е, минава. Собственикът я вижда на пускането и пита къде е червеният зачертан ред, който е искал.
Всеки е прочел „ясно“ по своему. Никой не е сбъркал, а продуктът пак не е това, което трябваше.
Дефектът е в изречението. Той може да се хване с четене, преди някой да е нарисувал или написал нещо.
Идеята
Какво прави едно изискване добро
Стандартът ISO/IEC/IEEE 29148 изрежда качествата на доброто изискване. Ето ги с магазина:
| Качество | Значи | Пример за нарушение |
|---|---|---|
| Необходимо (necessary) | махнеш ли го, нещо важно липсва | „Логото е в горния ляв ъгъл“, записано като изискване, което никой не е поискал. |
| Уместно (appropriate) | нивото на детайла пасва; не казва как, когато трябва да каже какво | „Поръчката се пише в таблица с три колони“ на ниво „какво трябва на счетоводството“. |
| Еднозначно (unambiguous) | чете се само по един начин | „Кодът важи веднъж“: на клиент или на поръчка? |
| Пълно (complete) | не трябва нищо повече, за да се разбере и провери | „Връщане до 14 дни“: от кога? |
| Единично (singular) | казва едно нещо | „Показва сумата и позволява смяна на адреса.“ |
| Осъществимо (feasible) | може да се направи с времето, парите и технологиите | наличност в реално време от доставчици без връзка |
| Проверимо (verifiable) | има начин да се докаже, че е изпълнено | „Количката се отваря бързо.“ |
| Вярно (correct) | казва точно нуждата | „Над 50 €“, когато собственикът иска „от 50 €“. |
| Съответстващо (conforming) | следва формата, приет в екипа | всички изисквания са „И-номер, изречение, мерило“, а това е абзац без номер. |
Не учи таблицата наизуст. Важните въпроси са три: разбира ли се по един начин, може ли да се провери и това ли е нуждата.
По-точно, за любопитните
Деветте качества по-горе са от второто издание на ISO/IEC/IEEE 29148 (2018), за отделно изискване. Английските имена: necessary, appropriate, unambiguous, complete, singular, feasible, verifiable, correct, conforming. Българските са превод на курса.
Списъкът се е менял между изданията и между източниците. По-стари текстове изреждат и „проследимо“ (traceable) и „без решение вътре“ (implementation-free). Проследимостта тук е в отделен модул, а „без решение вътре“ е част от „уместно“: решението е грешка, когато е на ниво, на което трябва нужда.
IREB CPRE има свой списък с качества, близък, но не със същите имена. Ако се готвиш за изпит, учи списъка от програмата, по която се явяваш. Идеята в двата е една: изискването трябва да се разбира по един начин, да може да се провери и да казва истинската нужда.
Пробвай
Кое качество липсва?
Идеята
Думите-капани
Някои думи почти винаги значат дефект. Когато ги видиш, спри:
- „бързо“, „удобно“, „лесно“, „ясно“, „модерно“: няма мерило. Всеки ги чете по своему, и никой тест не може да падне. Това е непроверимо.
- „и т.н.“, „и други“, „при нужда“: списъкът е отворен. Програмистът ще допише своето, тестерът своето. Това е непълно.
- „ако е възможно“, „по възможност“, „където е уместно“: вратичка. Изискване, което може да не се изпълни, без да е нарушено, не е изискване. И това е непроверимо.
- „веднъж“, „над“, „до 14 дни“: думи, които се четат по два начина. Това е двусмислено.
- „потребителят“, „системата позволява“: кой точно? Клиент, служител, всеки посетител? Това е изискване без роля.
- „бутон“, „таблица“, „в браузъра“ в изискване за нужда: решение вместо нужда.
- И когато две изисквания казват различни неща за един и същ случай, те противоречат си.
Шестте вида са същите, които ще избираш в задачите по-долу.
Идеята
Как се поправя
Поправката не е по-хубава дума. Тя е мерило, условие и роля. Едно изискване на решението обикновено има тези части:
[кога] [кой] [трябва да] [какво прави] [с какво] [колко добре]
„Количката се отваря бързо“ става:
„Когато клиентът отвори количката, страницата се показва за под 2 секунди в 95 % от случаите, при 500 клиенти едновременно, на мобилна мрежа.“
„Кодът важи веднъж“ става:
„Клиентът може да ползва всеки промо код в една платена поръчка. Втори опит със същия код се отказва със съобщението „Кодът вече е ползван“.“
Изреченията станаха по-дълги, и това е цената. Но сега всеки ги чете по един начин, и тестерът знае какво да провери. Най-силната проверка е примерът: „Мария плаща с ЕСЕН10 днес и утре пак. Какво става?“
По-точно, за любопитните
IREB CPRE препоръчва шаблони за изречения на изисквания. Сред най-известните в практиката е EARS (Easy Approach to Requirements Syntax): „When [събитие], the [system] shall [отговор]“, „While [състояние], …“, „If [нежелано събитие], then …“. В английските спецификации думата shall значи задължително, should препоръчително, may по избор.
29148 дава и списък с думи и конструкции, които да се избягват, например: превъзходни степени („най-добрият“), субективни думи („удобен“), неясни местоимения („то“), вратички („ако е възможно“, „където е приложимо“), думи за пълнота, които не могат да се проверят („всички“, „винаги“, „никога“), и отрицания, когато може да се каже какво трябва.
Пробвай
Рецензирай: количката
Отбележи думите, които правят изискването лошо, и избери какъв е проблемът във всяка.
Натисни думите, които са проблем; отново, за да махнеш отметката. Със стрелките се минава от дума на дума.
Проблемите в текста
- „бързо“ непроверимо: Колко бързо, на какво устройство, при колко клиенти? Без число няма тест, който да падне. По-добре: „95 % от отварянията са под 2 секунди при 500 клиенти едновременно“.
- „удобна“ непроверимо: Удобна за кого и как се мери? Може да стане „нов клиент плаща без помощ за под 2 минути“ или да се свърже с конкретно изискване за достъпност.
- „и т.н.“ непълно: Какво още? Промо кодът, точките, срокът за доставка? Програмистът ще допише своето, тестерът своето. Списъкът трябва да е затворен.
Три поправки: число за времето („под 2 секунди при 500 клиенти“), мерило за удобството („нов клиент плаща без помощ за под 2 минути“) и затворен списък: сумата, доставката, отстъпката и точките, и нищо друго.
Идеята
Наборът изисквания
Всяко изискване може да е добро само по себе си, а наборът пак да е лош. 29148 изрежда и качествата на целия набор:
- пълен (complete): има всичко нужно. Липсват ли връщането, отказът или складът, наборът е непълен, колкото и хубаво да е всяко изречение;
- непротиворечив (consistent): две изисквания не казват различно за един и същ случай;
- осъществим (feasible): всичко заедно може да се направи с времето и парите;
- разбираем (comprehensible): ясно е какво се очаква от системата като цяло;
- може да се валидира (able to be validated): може да се покаже, че наборът ще покрие нуждите на бизнеса.
Противоречията са коварни, защото всяко от двете изисквания изглежда добро. „Безплатна доставка над 50 €“ на страница 3 и „без такса от 50 € включително“ на страница 17 минават поотделно всяка рецензия. Хващат се, когато ги търсиш за един и същ случай: точно 50,00 €.
Упражнение
Рецензия на изискванията
1. Промо кодове. Изискванията за промо кодовете, както са дошли от срещата.
Отбележи всяко място, което прави изискването лошо.
Натисни думите, които са проблем; отново, за да махнеш отметката. Със стрелките се минава от дума на дума.
Проблемите в текста
- „Потребителят“ без роля: Кой потребител: всеки посетител, регистриран клиент, служител на магазина? От това зависи кой може да ползва кода и кой не.
- „и т.н.“ непълно: Само промо кодове ли, или и ваучери, и точки за лоялност? Отвореният списък не може да се провери докрай.
- „веднъж“ двусмислено: Веднъж на клиент или веднъж на поръчка? Двете четения дават различни отговори, когато клиентът поръча втори път с кода. Точно тази грешка вече видяхме.
- „Ако е възможно,“ непроверимо: Вратичка: ако отстъпката не се показва, винаги може да се каже „не беше възможно“. Изискването или се иска, или не.
Поправено: „Регистриран клиент може да ползва промо код в една платена поръчка. Отстъпката се показва в количката като отделен ред със сумата.“ Ваучерите и точките са в свои изисквания.
2. Доставка. Четири изисквания от спецификацията на доставката, от различни страници.
Отбележи проблемите и избери вида на всеки. Внимавай за изисквания, които си противоречат.
Натисни думите, които са проблем; отново, за да махнеш отметката. Със стрелките се минава от дума на дума.
Проблемите в текста
- „над 50 €“ противоречи: И-27 казва „от 50 € включително“. При количка за точно 50,00 € двете изисквания дават различна цена. Собственикът е казал „от 50 €“, затова И-12 се поправя.
- „Ако е възможно,“ непроверимо: Вратичка: такова изискване не може да падне на тест. Или доставката се изчислява автоматично, или трябва да се каже кога не.
- „в браузъра на клиента“ решение вместо нужда: Къде се смята цената е решение на екипа. Нуждата е „клиентът вижда цената на доставката преди плащането“.
- „от 50 € включително“ противоречи: Противоречи на И-12 при точно 50,00 €. В набора не може да останат и двете: едното се поправя, а другото може да се махне като дублиращо.
И-12 и И-27 стават едно: „Доставката е 0,00 € при поръчка от 50,00 € включително, иначе е 4,90 €.“ И-13 губи „ако е възможно“. И-14 става „Клиентът вижда цената на доставката в количката, преди да плати“, а къде се смята, решава екипът.
3. Връщане. Изискванията за връщане на продукт.
Отбележи всяко място, което прави изискването лошо.
Натисни думите, които са проблем; отново, за да махнеш отметката. Със стрелките се минава от дума на дума.
Проблемите в текста
- „до 14 дни“ двусмислено: От кога: от поръчката, от плащането или от получаването? Законът в ЕС брои от получаването на стоката, и изискването трябва да го казва.
- „бързо“ непроверимо: За колко дни? Законът в ЕС дава на търговеца най-много 14 дни, след като клиентът е заявил отказа. Магазинът може да обещае по-малко, но с число.
- „лесен за всички“ непроверимо: Как се мери „лесен“, и кои са „всички“? Може да стане конкретно изискване: например клиент с четец на екрана връща продукт сам.
Поправено: „Клиентът може да заяви връщане до 14 дни от получаването на пратката. Магазинът връща парите до 14 дни от заявката.“ А „лесен за всички“ се заменя с конкретни изисквания за достъпност, които могат да се проверят.
Тест
Провери се
Свързани уроци
Раздел „Свързани уроци“- Нужно отпреди: Добре дошъл · Защо програмите грешат · Какво е качество · Видове изисквания
- Продължава в: Когато таблицата е по-ясна · Доброто стори: INVEST · Критерии за приемане · Какво, не как
- Задачи по темата: Изисквания