# Таксономия проблем и health score для SPFx ## Severity | Severity | Определение | Примеры в SPFx | |---|---|---| | **critical** | Ломает основной сценарий, потеря данных, утечка, падение веб-парта | Веб-парт показывает «Something went wrong» / пустой блок; сохранение затирает чужие данные; токен или данные пользователя в консоли | | **high** | Основная функция не работает, обхода нет | При 403 бесконечный спиннер; фильтр возвращает не те элементы; на 429 веб-парт падает вместо повтора | | **medium** | Работает с заметными проблемами, обход есть | Вёрстка ломается только в колонке 1/3; нет индикатора загрузки; >5 с до первого контента | | **low** | Косметика | Отступ не по сетке Fluent; опечатка; ховер не в цвет темы | ## Категории и что проверять ### 1. Functional - Все состояния данных: `ok`, `empty`, `many` (пагинация, >100/5000 элементов), `forbidden`, `notfound`, `error`, `slow`. - Троттлинг (`throttled`, HTTP 429): есть ли повтор с `Retry-After`, нет ли шторма запросов. - Property pane: пустые обязательные свойства → понятный плейсхолдер «Настройте веб-парт», а не падение; крайние значения; смена свойства без перезагрузки обновляет рендер. - `mode=edit` vs `mode=read`: в режиме редактирования нет сломанных интерактивов. - Двойной клик/двойная отправка, устаревшие данные после повторного открытия. ### 2. Visual - Ширины контейнера: 320 (колонка 1/3, вертикальная секция), 640 (1/2), 1024 (full), 375 (мобильный). - Горизонтальный overflow, обрезанный текст без многоточия, наезжающие элементы. - Темы: светлая и тёмная/инвертированная секция — цвета берутся из темы (`semanticColors`), а не захардкожены. - Иконки Fluent отображаются (не квадратики — значит, не вызван `initializeIcons`). ### 3. UX - Индикатор загрузки (Shimmer/Spinner) при `slow`. - Сообщения об ошибках понятные и на языке пользователя, не «Error: [object Object]». - Пустое состояние объясняет, что делать. - Подтверждение перед удалением. ### 4. Content / локализация - Обе локали; нет ключей локализации вместо текста, `undefined`, английских строк в русском интерфейсе. - Даты и числа в формате локали. ### 5. Performance - Время до первого контента в сценарии `ok` < 3 с на харнессе. - Число запросов к данным за рендер (ищи N+1: запрос на каждый элемент). - Повторные рендеры не вызывают повторных запросов. ### 6. Console - Необработанные исключения, `unhandledrejection`. - Предупреждения React о `key`, обновлении размонтированного компонента. - Упавшие запросы (кроме ожидаемых в сценариях ошибок). ### 7. Accessibility - Нарушения axe уровня serious/critical. - Всё доступно с клавиатуры, фокус видим, модалки (Panel/Dialog) не ловят фокус навсегда. - Подписи у полей ввода, `aria-label` у иконок-кнопок. - Контраст в обеих темах. ### 8. SharePoint integration (только `--tenant`) - Нет конфликтов стилей со страницей (глобальные селекторы в scss, `:global`). - Работает рядом с другими веб-партами, в нескольких экземплярах на одной странице. - Права реального пользователя совпадают с ожиданиями. - Неожиданные не-GET запросы. ## Health score Каждая категория 0–100, затем взвешенное среднее только по **протестированным** категориям (непротестированные исключаются, оценка помечается «предварительная»). Одна корневая причина — одна проблема, одна категория (первая подходящая по списку выше), без двойных вычетов. **Console:** 0 ошибок → 100; 1–3 → 70; 4–10 → 40; 11+ → 10. **Остальные:** старт 100; critical −25, high −15, medium −8, low −3; минимум 0. | Категория | Вес | |---|---| | Functional | 25% | | Visual | 10% | | UX | 15% | | Content | 5% | | Performance | 10% | | Console | 15% | | Accessibility | 15% | | SharePoint integration | 5% (только `--tenant`) | `score = Σ(оценка × вес) / Σ(веса протестированных)`, округлить до целого.