Сценарий 12: Оценка технического долга

Сценарий 12: Оценка технического долга

Технический лидер выявляет и определяет приоритеты технического долга.

Быстрый старт

# Выберите сценарий технического долга
/select 12

Выявление технического долга

Общий показатель технического долга

> Рассчитать показатель технического долга

╭─────────────── Сводка по техническому долгу ───────────────────────────╮
│                                                                      │
│  Общий показатель технического долга: 34/100 (умеренный)               │
│                                                                      │
│  Распределение по категориям:                                         │
│                                                                      │
│  Долг сложности:      42%  ████████░░                                │
│    - 23 функции превышают порог сложности                            │
│    - 5 функций длиннее 300 строк                                     │
│                                                                      │
│  Долг дублирования:     28%  █████░░░░░                              │
│    - обнаружено 15 кластеров клонов                                  │
│    - около 450 продублированных строк                                │
│                                                                      │
│  Долг связанности:       35%  ███████░░░                             │
│    - 8 циклических зависимостей                                      │
│    - 12 модуля с высокой связанностью                                │
│                                                                      │
│  Долг документации:      31%  ██████░░░░                             │
│    - покрытие комментариями 67% (целевой показатель: 80%)            │
│    - 23 публичные функции без документации                           │
│                                                                      │
╰──────────────────────────────────────────────────────────────────────╯

Основные проблемные участки

> Найти участки с высокой концентрацией технического долга

╭─────────────── Проблемные участки ───────────────────────────────╮
                                                                 
  Топ-10 файлов по плотности долга:                               
                                                                 
  #  Файл                              Показатель  Проблемы      
  ────────────────────────────────────────────────────────────── 
  1  src/backend/tcop/postgres.c       78          Сложность, объём 
  2  src/backend/parser/gram.y          72          Сгенерирован, сложный 
  3  src/backend/executor/execMain      65          Сложность       
  4  src/backend/optimizer/plan.c       61          Связанность     
  5  src/backend/catalog/pg_type.c      58          Дублирование    
                                                                 
  Рекомендация: сосредоточьтесь на пяти самых проблемных файлах для достижения максимального эффекта 
                                                                 
╰─────────────────────────────────────────────────────────────────╯

Категории технического долга

Долг по сложности

> Найти элементы долга по сложности

╭─────────────── Долг по сложности ─────────────────────────────╮
                                                               
  Функции с высокой сложностью:                                
                                                               
  🔴 exec_simple_query()           CC: 47                      
     Оценка времени рефакторинга: 4-8 часов                    
     Влияние: Высокое (ключевой путь выполнения запросов)      
                                                               
  🔴 ExecInitNode()                CC: 32                      
     Оценка времени рефакторинга: 2-4 часа                     
     Влияние: Среднее (функция диспетчеризации)                
                                                               
  Глубоко вложенный код:                                       
    - 5 функций с глубиной вложенности > 5                     
    - 12 функций с глубиной вложенности > 4                    
                                                               
  Общий долг по сложности: ~40 часов                           
                                                               
╰───────────────────────────────────────────────────────────────╯

Долг по связанности

> Найти проблемы связанности

╭─────────────── Долг по связанности ───────────────────────────╮
│                                                               │
│  Циклические зависимости:                                     │
│                                                               │
│  🔴 executor ↔ optimizer                                      │
│     Файлы: execMain.c, createplan.c                           │
│     Влияние: Сложность порядка компиляции, трудности тестирования │
│                                                               │
│  🔴 catalog ↔ utils                                           │
│     Файлы: pg_class.c, relcache.c                             │
│     Влияние: Сложность инициализации                          │
│                                                               │
│  Функции с высокой расходимостью (> 20 зависимостей):         │
│    ProcessQuery()        зависит от 34 модулей                │
│    PostgresMain()        зависит от 28 модулей                │
│                                                               │
│  Функции с высокой сходимостью (> 50 вызывающих):             │
│    palloc()              89 вызывающих                        │
│    ereport()             156 вызывающих                       │
│                                                               │
╰───────────────────────────────────────────────────────────────╯

Долг по устаревшему коду

> Найти устаревшие шаблоны кода

╭─────────────── Устаревший код ────────────────────────────────╮
│                                                               │
│  Обнаруженные устаревшие шаблоны:                             │
│                                                               │
│  🟡 Объявления функций в старом стиле: 12                     │
│     Пример: void func() вместо void func(void)                │
│                                                               │
│  🟡 Неявные преобразования типов: 45                          │
│     Риск: Потеря данных или неопределённое поведение          │
│                                                               │
│  🔴 Закомментированные блоки кода: 23                         │
│     Общее количество строк: ~340                              │
│     Рекомендация: Удалить или задокументировать              │
│                                                               │
│  🟡 Комментарии TODO/FIXME: 156                               │
│     FIXME: 34                                                 │
│     TODO: 89                                                  │
│     HACK: 12                                                  │
│     XXX: 21                                                   │
│                                                               │
╰───────────────────────────────────────────────────────────────╯

Приоритизация

Матрица приоритизации технического долга

> Приоритизируйте элементы долга по степени влияния и трудозатратам

╭─────────────── Матрица приоритизации ───────────────────────╮
│                                                              │
│                  Низкие затраты   Высокие затраты            │
│                 ┌─────────────┬─────────────┐                │
│   Высокое       │  БЫСТРЫЕ    │  КРУПНЫЕ    │                │
│   влияние       │  ПОБЕДЫ     │  ПРОЕКТЫ     │                │
│                │  ───────────│  ───────────│                │
│                │  • Удаление  │  • Рефакторинг │             │
│                │    мёртвого │    postgres   │              │
│                │    кода     │    .c         │              │
│                │  • Исправление│ • Разделение│              │
│                │    документации│  крупных   │              │
│                │             │    модулей   │              │
│                ├─────────────┼─────────────┤                │
│   Низкое       │  ДОПОЛНЕНИЯ │  ИЗБЕГАТЬ   │                │
│   влияние      │  ───────────│  ───────────│                │
│                │  • Очистка  │  • Глубокий  │               │
│                │    стиля    │    рефакторинг│              │
│                │  • Обновление│  рабочего    │               │
│                │    комментариев│ кода       │              │
│                │             │             │                │
│                └─────────────┴─────────────┘                │
│                                                              │
╰──────────────────────────────────────────────────────────────╯

Примеры вопросов

  • «Рассчитать показатель технического долга»
  • «Найти участки с высоким уровнем долга»
  • «Показать элементы долга, связанные со сложностью»
  • «Найти проблемы с связанностью»
  • «Определить приоритеты долга по степени влияния»
  • «Найти комментарии TODO/FIXME»

Связанные сценарии