arch-researcher/README.md
2026-04-27 23:44:22 +05:00

5.2 KiB
Raw Permalink Blame History

Legacy Analyzer

Методический инструментарий диагностики архитектурного состояния унаследованных программных систем на языках C++ и JavaScript/TypeScript.

Назначение

Инструмент реализует следующий pipeline анализа:

Collector → MetricsEngine → DependencyAnalyzer → DecisionEngine → Reporter
Модуль Ответственность
Collector Обход файловой структуры, идентификация модулей
MetricsEngine CCN, NLOC, число параметров (через lizard)
DependencyAnalyzer Граф зависимостей, coupling_in/out, instability, циклы (через networkx)
DecisionEngine Классификация риска, выбор стратегии модернизации
Reporter Генерация JSON и HTML отчётов

Установка

pip install lizard networkx
# Опционально — AST-анализ C++ через libclang:
# pip install libclang
# Ubuntu: sudo apt install clang libclang-dev

Использование

# Базовый запуск
python main.py /path/to/your/project

# С кастомными параметрами
python main.py /path/to/project \
    --output my_report \
    --formats json html \
    --ccn-warn 15 \
    --ccn-critical 25 \
    --verbose

# Только JSON
python main.py /path/to/project --formats json

Программный API

from analyzer import Analyzer
from config import AnalyzerConfig, ThresholdConfig

config = AnalyzerConfig(
    output_dir="report",
    thresholds=ThresholdConfig(ccn_warn=12, ccn_critical=25),
)

report = Analyzer(config).run("/path/to/project")

print(f"Системный риск: {report.system_risk_level.name}")
print(f"Стратегия: {report.recommended_system_strategy.name}")

for decision in report.decisions[:10]:  # Топ-10 проблемных модулей
    print(f"  {decision.module_name}: {decision.risk_level.name}")

Выходные файлы

После анализа в директории legacy_report/ (или указанной через --output) создаются:

  • report.json — машинно-читаемый отчёт (для CI/CD)
  • report.html — человекочитаемый отчёт с таблицами и карточками

Метрики

Метрика Формула / источник Порог warn / critical
CCN McCabe (1976) > 10 / > 20
NLOC Строк без комментариев > 50 / > 100
Параметры функции > 5 / > 8
C_out (fan-out) Число исходящих рёбер модуля > 5 / > 10
C_in (fan-in) Число входящих рёбер модуля > 10 / > 20
Instability (I) C_out / (C_in + C_out), Martin (2018) > 0.7 / > 0.9

Стратегии модернизации

Уровень риска Стратегия Описание
LOW Оставить Модуль в удовлетворительном состоянии
MEDIUM Рефакторинг Локальное улучшение без изменения архитектуры
HIGH Реинжиниринг Перестройка архитектуры с сохранением логики
CRITICAL Замена Полная переработка или замена модуля

Структура проекта

legacy_analyzer/
├── main.py                    # CLI точка входа
├── analyzer.py                # Главный оркестратор (фасад)
├── config.py                  # Конфигурация и пороговые значения
├── models.py                  # Доменные модели данных
├── core/
│   ├── collector.py           # Сбор файловой структуры
│   ├── metrics_engine.py      # Вычисление метрик
│   └── dependency_analyzer.py # Граф зависимостей
└── reporters/
    ├── reporter.py            # Фасад репортеров
    ├── json_reporter.py       # JSON отчёт
    └── html_reporter.py       # HTML отчёт