Рекомендации по отчётам об ошибках
Эффективные отчёты об ошибках и предложения функций критически важны для развития XOOPS. Это руководство помогает вам создавать качественные ошибки.
Перед отправкой отчёта
Заголовок раздела «Перед отправкой отчёта»Проверьте существующие ошибки
Заголовок раздела «Проверьте существующие ошибки»Всегда сначала ищите:
- Перейдите в GitHub Issues
- Поищите ключевые слова, связанные с вашей проблемой
- Проверьте закрытые ошибки - могут быть уже решены
- Посмотрите pull requests - могут быть в разработке
Используйте фильтры поиска:
is:issue is:open label:bug- Открытые ошибкиis:issue is:open label:feature- Открытые предложения функцийis:issue sort:updated- Недавно обновленные ошибки
Это действительно проблема?
Заголовок раздела «Это действительно проблема?»Сначала подумайте:
- Проблема конфигурации? - Проверьте документацию
- Вопрос по использованию? - Спросите на форумах или в сообществе Discord
- Проблема безопасности? - См. раздел #security-issues ниже
- Специфично для модуля? - Сообщите разработчику модуля
- Специфично для темы? - Сообщите автору темы
Типы ошибок
Заголовок раздела «Типы ошибок»Отчёт об ошибке
Заголовок раздела «Отчёт об ошибке»Ошибка - это неожиданное поведение или дефект.
Примеры:
- Вход не работает
- Ошибки базы данных
- Отсутствующая валидация формы
- Уязвимость безопасности
Предложение функции
Заголовок раздела «Предложение функции»Предложение функции - это предложение новой функциональности.
Примеры:
- Добавить поддержку новой функции
- Улучшить существующую функциональность
- Добавить отсутствующую документацию
- Улучшения производительности
Улучшение
Заголовок раздела «Улучшение»Улучшение улучшает существующую функциональность.
Примеры:
- Лучшие сообщения об ошибках
- Улучшенная производительность
- Улучшенный дизайн API
- Улучшенный пользовательский опыт
Документация
Заголовок раздела «Документация»Проблемы документации включают отсутствующую или неправильную документацию.
Примеры:
- Неполная документация API
- Устаревшие руководства
- Отсутствующие примеры кода
- Опечатки в документации
Отчёт об ошибке
Заголовок раздела «Отчёт об ошибке»Шаблон отчёта об ошибке
Заголовок раздела «Шаблон отчёта об ошибке»## ОписаниеКраткое четкое описание ошибки.
## Шаги для воспроизведения1. Первый шаг2. Второй шаг3. Третий шаг
## Ожидаемое поведениеЧто должно происходить.
## Фактическое поведениеЧто происходит на самом деле.
## Окружение- Версия XOOPS: X.Y.Z- Версия PHP: 8.2/8.3/8.4- База данных: MySQL/MariaDB версия- Операционная система: Windows/macOS/Linux- Браузер: Chrome/Firefox/Safari
## СкриншотыЕсли применимо, добавьте скриншоты, показывающие проблему.
## Дополнительный контекстЛюбая другая релевантная информация.
## Возможное исправлениеЕсли у вас есть предложения по исправлению проблемы (опционально).Хороший пример отчёта об ошибке
Заголовок раздела «Хороший пример отчёта об ошибке»## ОписаниеСтраница входа показывает пустую страницу при отказе соединения с базой данных.
## Шаги для воспроизведения1. Остановите сервис MySQL2. Перейдите на страницу входа3. Наблюдайте поведение
## Ожидаемое поведениеПоказать дружественное сообщение об ошибке, объясняющее проблему соединения с базой данных.
## Фактическое поведениеСтраница полностью пуста - нет сообщения об ошибке, нет интерфейса.
## Окружение- Версия XOOPS: 2.7.0- Версия PHP: 8.0.28- База данных: MySQL 5.7- Операционная система: Ubuntu 20.04- Браузер: Chrome 120
## Дополнительный контекстЭто может влиять на другие страницы тоже. Ошибка должна отображаться администраторам или регистрироваться надлежащим образом.
## Возможное исправлениеПроверьте соединение с базой данных в header.php перед отрисовкой шаблона.Плохой пример отчёта об ошибке
Заголовок раздела «Плохой пример отчёта об ошибке»## ОписаниеВход не работает
## Шаги для воспроизведенияЭто не работает
## Ожидаемое поведениеДолжно работать
## Фактическое поведениеНе работает
## ОкружениеПоследняя версияОтчёт о предложении функции
Заголовок раздела «Отчёт о предложении функции»Шаблон предложения функции
Заголовок раздела «Шаблон предложения функции»## ОписаниеЧеткое, краткое описание функции.
## Формулировка проблемыПочему нужна эта функция? Какую проблему она решает?
## Предложенное решениеОпишите идеальную реализацию или UX.
## Рассмотренные альтернативыЕсть ли другие способы достичь эту цель?
## Дополнительный контекстЛюбые макеты, примеры или ссылки.
## Ожидаемое влияниеКак это будет полезно пользователям? Это будет нарушающим изменением?Хороший пример предложения функции
Заголовок раздела «Хороший пример предложения функции»## ОписаниеДобавить двухфакторную аутентификацию (2FA) для учетных записей пользователей.
## Формулировка проблемыС увеличением количества нарушений безопасности многие платформы CMS теперь предлагают 2FA. Пользователи XOOPS хотят более сильную безопасность учетных записей помимо паролей.
## Предложенное решениеРеализовать 2FA на основе TOTP (совместимо с Google Authenticator, Authy и т.д.).- Пользователи могут включить 2FA в своем профиле- Отображение QR-кода для установки- Генерация резервных кодов для восстановления- Требовать код 2FA при входе
## Рассмотренные альтернативы- 2FA на основе SMS (требует интеграции оператора, менее безопасно)- Аппаратные ключи (слишком сложно для обычных пользователей)
## Дополнительный контекстПохоже на реализации в GitHub, GitLab и WordPress.Ссылка: [TOTP Standard RFC 6238](https://tools.ietf.org/html/rfc6238)
## Ожидаемое влияниеУвеличивает безопасность учетной записи. Может быть опциональной изначально, обязательной в будущих версиях.Проблемы безопасности
Заголовок раздела «Проблемы безопасности»НЕ сообщайте публично
Заголовок раздела «НЕ сообщайте публично»Никогда не создавайте публичный отчёт о уязвимостях безопасности.
Сообщите приватно
Заголовок раздела «Сообщите приватно»- Отправьте команде безопасности: security@xoops.org
- Включите:
- Описание уязвимости
- Шаги для воспроизведения
- Потенциальное воздействие
- Вашу контактную информацию
Ответственное раскрытие
Заголовок раздела «Ответственное раскрытие»- Мы подтвердим получение в течение 48 часов
- Мы будем предоставлять обновления каждые 7 дней
- Мы будем работать над сроком исправления
- Вы можете запросить признание за открытие
- Координировать время публичного раскрытия
Пример проблемы безопасности
Заголовок раздела «Пример проблемы безопасности»Тема: [SECURITY] Уязвимость XSS в форме комментариев
Описание:Форма комментариев в модуле Publisher не правильно экранирует введенные пользователем данные,позволяя атаки хранилища XSS.
Шаги для воспроизведения:1. Создайте комментарий с: <img src=x onerror="alert('xss')">2. Отправьте форму3. JavaScript выполнится при просмотре комментария
Воздействие:Злоумышленники могут украсть токены сеанса пользователя, выполнять действия от имени пользователей,или дефэйсить веб-сайт.
Окружение:- XOOPS 2.7.0- Модуль Publisher 1.xЛучшие практики названия ошибки
Заголовок раздела «Лучшие практики названия ошибки»Хорошие названия
Заголовок раздела «Хорошие названия»✅ Страница входа показывает пустую ошибку при отказе соединения с БД✅ Добавить поддержку двухфакторной аутентификации✅ Валидация формы не предотвращает SQL-инъекцию в поле name✅ Улучшить производительность запроса списка пользователей✅ Обновить документацию установки для PHP 8.2Плохие названия
Заголовок раздела «Плохие названия»❌ Ошибка в системе❌ Помогите мне!!❌ Это не работает❌ Вопрос о XOOPS❌ ОшибкаРекомендации по названию
Заголовок раздела «Рекомендации по названию»- Будьте конкретны - Упомяните что и где
- Будьте кратким - Менее 75 символов
- Используйте настоящее время - “показывает пустую страницу” а не “показывала”
- Включите контекст - “в административной панели”, “во время установки”
- Избегайте универсальных слов - Не “исправить”, “помочь”, “проблема”
Лучшие практики описания ошибки
Заголовок раздела «Лучшие практики описания ошибки»Включите основную информацию
Заголовок раздела «Включите основную информацию»- Что - Четкое описание проблемы
- Где - Какая страница, модуль или функция
- Когда - Шаги для воспроизведения
- Окружение - Версия, ОС, браузер, PHP
- Почему - Почему это важно
Используйте форматирование кода
Заголовок раздела «Используйте форматирование кода»Сообщение об ошибке: `Error: Cannot find user`
Фрагмент кода:```php$user = $this->getUser($id);if (!$user) { echo "Error: Cannot find user";}### Включите скриншоты
Для проблем UI включите:- Скриншот проблемы- Скриншот ожидаемого поведения- Аннотируйте, что не так (стрелки, круги)
### Используйте теги
Добавьте теги для категоризации:- `bug` - Отчёт об ошибке- `enhancement` - Запрос улучшения- `documentation` - Проблема документации- `help wanted` - Ищем помощь- `good first issue` - Хорошо для новых участников
---
## После отправки отчёта
### Будьте отзывчивы
- Проверьте комментарии в отчёте- Предоставьте дополнительную информацию при запросе- Протестируйте предложенные исправления- Проверьте, существует ли ошибка в новых версиях
### Следуйте этикету
- Будьте уважительны и профессиональны- Предположите добрые намерения- Не требуйте исправлений - разработчики - волонтеры- Предложите помочь, если возможно- Поблагодарите участников за их работу
### Держите отчёт в фокусе
- Оставайтесь в теме- Не обсуждайте несвязанные ошибки- Ссылайтесь на связанные ошибки вместо этого- Не используйте ошибки для голосования за функции
---
## Что происходит с ошибками
### Процесс сортировки
1. **Создана новая ошибка** - GitHub уведомляет сопровождающих2. **Начальный просмотр** - Проверена четкость и дубликаты3. **Назначение тега** - Категоризирована и приоритизирована4. **Назначение** - Назначена кому-либо при необходимости5. **Обсуждение** - Собрана дополнительная информация при необходимости
### Уровни приоритета
- **Критично** - Потеря данных, безопасность, полный отказ- **Высоко** - Сломана основная функция, влияет на многих пользователей- **Среднее** - Часть функции сломана, есть обходное решение- **Низко** - Незначительная проблема, косметическая, или нишевое использование
### Результаты разрешения
- **Исправлено** - Ошибка разрешена в PR- **Не будет исправляться** - Отклонено по техническим или стратегическим причинам- **Дубликат** - То же самое, что другая ошибка- **Недействительна** - На самом деле не ошибка- **Нужна дополнительная информация** - Ожидание дополнительных деталей
---
## Примеры ошибок
### Пример: Хороший отчёт об ошибке
```markdown## ОписаниеАдминистраторы не могут удалять элементы при использовании MySQL со строгим режимом включенным.
## Шаги для воспроизведения1. Включить `sql_mode='STRICT_TRANS_TABLES'` в MySQL2. Перейти в административную панель Publisher3. Нажать кнопку удаления на любой статье4. Показана ошибка
## Ожидаемое поведениеСтатья должна быть удалена или показать значимую ошибку.
## Фактическое поведениеОшибка: "SQL Error - Unknown column 'deleted_at' in ON clause"
## Окружение- Версия XOOPS: 2.7.0- Версия PHP: 8.2.0- База данных: MySQL 8.0.32 с STRICT_TRANS_TABLES- Операционная система: Ubuntu 22.04- Браузер: Firefox 120
## Скриншоты[Скриншот сообщения об ошибке]
## Дополнительный контекстЭто происходит только со строгим режимом SQL. Работает нормально с параметрами по умолчанию.Запрос находится в классе class/PublisherItem.php:248
## Возможное исправлениеИспользуйте одинарные кавычки вокруг 'deleted_at' или используйте обратные кавычки для всех имен столбцов.Пример: Хороший запрос функции
Заголовок раздела «Пример: Хороший запрос функции»## ОписаниеДобавить конечные точки REST API для доступа только чтения к публичному контенту.
## Формулировка проблемыРазработчики хотят создавать мобильные приложения и внешние сервисы, используя данные XOOPS.Сейчас ограничено API SOAP, который устарел и плохо задокументирован.
## Предложенное решениеРеализовать RESTful API с:- Конечными точками для статей, пользователей, комментариев (только чтение)- Аутентификация на основе токена- Стандартные коды состояния HTTP и ошибки- Документация OpenAPI/Swagger- Поддержка пагинации
## Рассмотренные альтернативы- Улучшенный API SOAP (устаревший, не совместимый со стандартами)- GraphQL (более сложный, может быть в будущем)
## Дополнительный контекстСм. рефакторинг API модуля Publisher для похожих паттернов.Будет согласоваться с современной веб-разработкой.
## Ожидаемое влияниеВключить экосистему сторонних инструментов и мобильных приложений.Улучшит принятие XOOPS и экосистему.Связанная документация
Заголовок раздела «Связанная документация»- Кодекс поведения
- Рабочий процесс разработки
- Рекомендации по pull request
- Обзор взносов
#xoops #issues #bug-reporting #feature-requests #github