За межамі пакета абонентскай службы: тэставанне проблем, з якімі фактычна сталкаюцца корыстнікі
Чаму высокі показнік пакрыцы коду можа маскаваць непераблікованыя формы несправнасці, тры відэжы тэстаў, якія ён спрыяе, і як пісаць тэсты, якія захоўваюць рэальную працездатнасць.
Запрос даўнейшага адчыткі, калі всі тэсты працуюць правільна і адчытка павернення працяйства становіць больш чым 98%, здаецца надзеяным. Але калі API вяртае null, калі інтэрфейс чакаў об’ект, запит выкааняецца не па правілу на медленнай мобільной з’яўе, або хтось два разы нажме кнопку адправкі, фронтэнд ператвараецца ў порожні экран. Пытанне пасля аналізу заўжды адно: як гэта могло зламацца, калі файл быў павнэсткай перакрыты? У этой статыце пояснюецца, што на самай працяйности адчытка меруе, якія шаблоны тэставаў падвышаюць яе без дадатковага захавання, і як перакрыць увагу на тыя апбіекты, якія справды маюць значэнне.
Што меруе адчытка працяйности, і чаго яна не меруе
Інструмент аналізу паверання фіксае, якія лініі, галузі і функцыі былі выкананы пад час адчынення тэстаў. Гэта ўсё. Ён не ведае, чыя-небудзь асэрцыі пераканаліся рэзультатам, чы выхадныя данныя падабяліся да рэальных трафікаў, чы код працуе правільна, калі ў залежнасцях выйшлі проблемы. Выкананне і перакананне — гэта два разныя якості, а аналіз паверання фіксуе толькі першую.
Прыдатны аналагія — гэта перакананне будынку, пад час якога хтось праходзіць праз кожную камеру з лямпачкай. Кожная камера была адвідавана, пры тым ніхто не пераканаў дах пад штормам. Высокая ступень паверання паведамляе вас пра тое, што вашы тэсты адвідавалі код, але не пра тое, што яны яго пераканалі.
Тры патэрны, якія збільшаюць паверання без дадачы большай бяспекі
Калі цэлью стае паказвальнік у вялічыне працэнта, людзі оптымізуюць тэсты для яго задоволення з мінімальнымі зусіллямі. Паўтараючыся тры патэрны.
Міраж «шчаслівага шляху»
Уявіце саблейт, які парсуе вхідныя даны корыстніка і апдэюе стан. Яго тэст працуюць з чыстам, правільнаям строкай, пераканальваецца ў спадзеваны выхід і досягае павальнага пакрыцчя галузей. Але ён ніколі не працуюць з порожняй строкай, незвычнымі символамі, аргументам undefined, медленным адказом чырага паспрацаванага JSON. Кожны рядок запускаўся, але не было пераканальваннях вхідных дадзеных, якія спрычыняюць проблемы ў рэальных умовах.
Компонент з занадта большым колькасцю тэстаў
Хутчэй, кожны вызов API, прадастальнік контексту і вярстаныя дзецавы элементы заменяюцца на фіктычныя аналогіі. Адзиненне тэстаў завершваецца за калькі мілісэкунд і пакрывае ўсе можлівыя варыянты адрасавання. Аднак у рэальных умовах асалівы пункт вяртае данні, якія трохі адрозніяя ад тых, якія прыпускаліся ў маках, або бібліятэкі зменяе спосаб выдачы запускаемых імі ўпадакоў пасля апдэйта. Тэсты продовжаюць праходзіць, таму што яны работаюць толькі з вашымі сабе прыпускамі, а першая рэальная інтеграцыя выконваецца ў браузеры корыстніка.
Тэсты без значамых асерцый
Найслабейшы варіант выклікаецца пад строгімі трэбаваннямі, такімі як неабходны порог у 90% для всіх членоў команды. Тэсты вызываюць функціі толькі для фіксаціі запуска і майже не абавязуюцься нічым. Звястка стае зелёной, хоць няма жадных пераканальнікаў межы кодам і будучымі зменамі логіки.
Як тэставаць прыменне заместо ліній коду
Тэсты, якія выявляюць багі раней, чым яны стануць ведамымі для корыстнікаў, сфокусаваны на тым, што робіць система, а не на тых лініях коду, якія ў яе включаны.
- Тэстуецца станы і пераходы системы, а не адзінкавыя функцыі. Корыстнікаў не цікавіць, чы раней запускалася якаясь дапаможная функцыя. Їх цікавіць тое, што будзе, калі сетка знікне на паўпаце заполнення формы, або калі яны практычна захочуць выйсці з сторанніцы, калі завантажэнне файла ўсё яшчэ трывае. Неабходна пераканаліцься ў роботе індыкатараў завантажэння, станах абяканняў, можлівасці павторных спроб і механізмах абароны ад бяканняў.
- Прагтаваце інтэграцыю там, дзе яна ўжо практычная. Мімікрацыя справжніх зовнішнях элементаў, такіх як платежная прамежулка трэцьяго сторонньага апарату, є разумной. Мімікрацыя власных внутрашняых дапаможных функцый чы слоя дадзэнняяў больш за ўсё маскіруе багі, якія існуюць межы ўсімі гэтымі элементамі. Дазвольце компанентам і модулям працаваць разам насколькі це дазволяюць вартасцы.
Спаднейшая, добра апранаваная тэхніка — це тэставанне мутацыямі, пад час якога намеравана зменяецца код (змена умовы, адключэнне лініі) і пераканальваецца, чы не паўстаюць проблемы ў тэстах. Мутацыі, якія перазстаюць, паказваюць код, які выкананы, але не перакананы, што якраз і є там, чаго паверхнева пераканальваецца не можа паказаць. Па конкрэтнымі деталям на рывень компанентоў адзірніце этыя антипатэрны працы з тэставаннем у React, якія ствараюць хыбную паверу.
Іспользованне пераканальвання як сігналу, а не канцэпту
Рэгламент тэставання не ўсуецца. Низкая цыфра ў критычным модулі являе сабою справжню паведамленне пра апасцярожнасць, а звіт можа адкрыць шляхі коду, якія ніхто абсалютна не тэстуе. Проблема пачынаецца, калі практычна цэль стае процэнтам, таму што гэта стварае прыорітет колькасці над строгасцю.
Система з рэгламентам тэставання ў розмяре ад 65% , якая сфокусаваная на рызыковых процесах, складных бізнес-правілах і механізмах вярнення пасля аберанцэй, запобідзіць набагато большаму колькасці інцидэнтав, чым нестабільная система з рэгламентам 95%, побудаваная на стандартных сценарыях і макетах. Перш чым дадзіць тэст, кращым пытаннем, чым «каторыя лініі коду не прабаваны?», є «каторую рэалістычную аберанцю гэты тэст зможа выявіць?»
Ключовыя выводы
- Рэгламент тэставання паказвае, каторы код быў запрацоўаны, а не чы робілася пераканальнае тэставанне яго працы.
- Вхідныя даны стандартных сценарыяў, інтэнсівнае внутрашняе макетаванне і тэсты без пераканальных проверак усе падвышаюць цыфру рэгламентавання, але не зменшаюць рызык.
Спакульна літэратура
- Beyond Bundle Size: Finding What Actually Makes Your Web App Slow — Чаму скорачэнне кілабайтав рэдка калі-небудзь выправляе медленную прыстойкую, і як відстежваць рэальны час чакання на серверах, у процесах водоспаднага типу, практыках гідратацыі, скрытых скрыптах і з’явох трэціх сторон.
- Beyond P95: Мерыявленне латэнсу, які насправды перажываюць вашыя корыстувальнікі — Чаму здаровы показнік P95 можа існаваць разам з повольным продуктом, як час чакання ў черзі і розпад пакетаў захоўваюцца ад дашбордаў, і як відлік часу за кожным крокам паканчывае гэру з адказваннем за латэнс. —