← Назад к вопросам

Как действуешь если находишь свою ошибку в проекте?

1.0 Junior🔥 231 комментариев
#Soft Skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как я действую, обнаружив свою ошибку в проекте

Обнаружение и исправление собственных ошибок — критическая часть профессиональной разработки. Приоритет зависит от серьёзности и влияния на 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 ошибка:

  1. Уведомляю lead/manager: "Обнаружил ошибку в [компоненте]. Серьёзность: [High/Critical]. Исправляю прямо сейчас."
  2. Информирую support, если может повлиять на пользователей
  3. После исправления: "Ошибка исправлена. Откатываю/деплою горячее исправление."

Если это code review замечание:

  1. Благодарю за замечание
  2. Обсуждаю подход (может быть, мне что-то неясно)
  3. Исправляю и обновляю 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

Главный принцип

Профессионализм — это не "не делать ошибок", а быстро их находить и исправлять. Честность, ответственность и желание учиться на ошибках делают разработчика ценным членом команды.