Как действуешь если находишь свою ошибку в проекте?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Как я действую, обнаружив свою ошибку в проекте
Обнаружение и исправление собственных ошибок — критическая часть профессиональной разработки. Приоритет зависит от серьёзности и влияния на production.
Оценка серьёзности ошибки
Прежде всего определяю масштаб проблемы:
Критические ошибки (data loss, security, down time):
- Потеря данных в БД
- SQL injection / RCE уязвимость
- API падает для всех пользователей
- Утечка конфиденциальных данных
Действие: немедленное исправление, горячее исправление в production.
Серьёзные ошибки (функция работает неправильно):
- Платёж обработан неверно
- Расчёт скидки некорректный
- Бизнес-логика нарушена
Действие: срочное исправление в текущий спринт.
Обычные ошибки (ненужный импорт, неоптимальный код):
- Неиспользуемые переменные
- Неправильный порядок операций в UI
- Грамматические ошибки в тексте
Действие: включить в следующий коммит или PR.
Процесс исправления
Шаг 1: Осмотр и документирование
# ❌ Обнаружил ошибку в коде
def calculate_discount(price, discount_rate):
return price * discount_rate # Ошибка: нужно вычесть из цены!
# Правильно:
def calculate_discount(price, discount_rate):
return price * (1 - discount_rate)
Примечание: открываю issue в внутреннем трекере с описанием:
- Описание проблемы
- Место в коде
- Влияние на функциональность
- Если production — добавляю метку "Critical"
Шаг 2: Изоляция проблемы
Отделяю ошибку в отдельную ветку (если development):
# Если это production issue
git checkout -b hotfix/discount-calculation
# Если это development
git checkout -b fix/discount-calculation
Когда работаю в feature ветке, делаю новый коммит с исправлением.
Шаг 3: Написание тестов
ПЕРВЫЙ ТАМ пишу падающий тест, проверяющий ошибку:
import pytest
from app.services import calculate_discount
def test_calculate_discount_correctly():
# Дано: цена $100, скидка 20%
price = 100
discount_rate = 0.2
# Ожидаемо: получим $80
expected = 80
# Получаем
result = calculate_discount(price, discount_rate)
# Проверяем
assert result == expected
def test_discount_edge_cases():
# 0% скидка = полная цена
assert calculate_discount(100, 0) == 100
# 100% скидка = 0
assert calculate_discount(100, 1) == 0
Тест падает → вижу ошибку в коде.
Шаг 4: Исправление
Исправляю минимальный код для прохождения тестов:
def calculate_discount(price: float, discount_rate: float) -> float:
"""Вычисляет цену после применения скидки.
Args:
price: исходная цена
discount_rate: размер скидки (0.0 - 1.0)
Returns:
Цена после скидки
"""
if not (0 <= discount_rate <= 1):
raise ValueError("Discount rate must be between 0 and 1")
return price * (1 - discount_rate)
Шаг 5: Запуск полного тестового набора
# Все тесты должны пройти
pytest tests/ -v
# Проверка покрытия
pytest tests/ --cov=app --cov-report=html
# Линтинг
ruff check .
black --check .
# Type checking
mypy .
Шаг 6: Code Review
Создаю PR с:
- Кратким описанием ошибки
- Объяснением причины
- Ссылкой на issue
- Скриншотом/видео (если UI)
## Issue
Исправляет #123 — неверный расчёт скидки
## Проблема
Функция `calculate_discount` возвращала произведение, вместо вычитания скидки из цены.
## Решение
Заменил `price * discount_rate` на `price * (1 - discount_rate)`
## Tests
- ✅ Все существующие тесты проходят
- ✅ Добавлены новые тесты для edge cases
- ✅ Coverage: 95%
Коммуникация с командой
Если это production ошибка:
- Уведомляю lead/manager: "Обнаружил ошибку в [компоненте]. Серьёзность: [High/Critical]. Исправляю прямо сейчас."
- Информирую support, если может повлиять на пользователей
- После исправления: "Ошибка исправлена. Откатываю/деплою горячее исправление."
Если это code review замечание:
- Благодарю за замечание
- Обсуждаю подход (может быть, мне что-то неясно)
- Исправляю и обновляю PR
Запрет на отрицание
Никогда не говорю:
- "Это не моя ошибка"
- "Это баг в [framework/library]"
- "Я не знал об этой функции"
Вместо этого:
- "Ошибка была в моём коде, я исправил"
- "Я неправильно использовал API"
- "Спасибо за замечание, буду помнить в будущем"
Post-Mortem (для критических ошибок)
После исправления критической ошибки:
## Post-Mortem: Issue #123
### Root Cause
Неправильная математика в функции calculate_discount()
### Impact
- 2 часа downtime
- 500 некорректных транзакций
### Fix
- Исправлена формула скидки
- Добавлены интеграционные тесты
### Prevention
- Code review перед merge
- E2E тесты для платежей
- Monitoring скидок в production
Главный принцип
Профессионализм — это не "не делать ошибок", а быстро их находить и исправлять. Честность, ответственность и желание учиться на ошибках делают разработчика ценным членом команды.