Аудит кодової бази веб-програми
Аудит кодової бази — системний аналіз накопленого технічного боргу, архітектурних проблем та ризиків. Відрізняється від ревью тим, що охоплює весь проект, а не окремий PR. Результат — пріоритизований список дій, а не просто список проблем.
Що включає аудит
1. Статичний аналіз коду 2. Залежності та уязвимості 3. Покриття тестами 4. Продуктивність збірки 5. Архітектурні паттерни 6. Документація та API-контракти
Статичний аналіз: TypeScript/JavaScript
# TypeScript: строга перевірка
npx tsc --noEmit --strict
# ESLint: аналіз якості
npx eslint . --ext .ts,.tsx --format=json > eslint-report.json
# Пошук мертвого коду
npx ts-prune # неиспользовані экспорти
npx knip # неиспользовані залежності та файли
# Дублікати коду
npx jscpd --min-tokens 50 --reporters html src/
Аналіз залежностей
# npm audit
npm audit --json > audit-report.json
# Застаріле пакеты
npm outdated --json
# Аналіз розміру bundle
npx @next/bundle-analyzer
# Або
npx webpack-bundle-analyzer stats.json
# Ліцензії залежностей (ризики GPL у комерційних проектах)
npx license-checker --summary --onlyAllow "MIT;ISC;BSD;Apache-2.0"
Покриття тестами
# Jest
npx jest --coverage --coverageReporters=json-summary
# Пороги покриття
# У jest.config.ts:
coverageThreshold: {
global: {
branches: 60,
functions: 70,
lines: 70,
statements: 70,
},
},
Архітектурний аналіз: що шукати
// ПРОБЛЕМА: God Component (компонент робить все)
// 500+ строк, множество useEffect, прямі API-виклики в компоненті
// ПРОБЛЕМА: Prop drilling через 4+ рівні
<App user={user}>
<Layout user={user}>
<Sidebar user={user}>
<UserMenu user={user} /> // краще: Context або Zustand
// ПРОБЛЕМА: Циркулярні залежності
// utils → services → utils (може вызвать неочевідні баги)
npx madge --circular src/
// ПРОБЛЕМА: Великі файли
find src -name "*.ts" -o -name "*.tsx" | xargs wc -l | sort -n | tail -20
PHP/Laravel аудит
# PHPStan: статичний аналіз
./vendor/bin/phpstan analyse --level=5 app/
# PHP Insights
php artisan insights
# Пошук N+1 запитів (Clockwork, Laravel Debugbar)
# config/debugbar.php: 'capture_ajax' => true
# Неіспользовані маршрути
php artisan route:list --format=json | python3 -c "
import json, sys
routes = json.load(sys.stdin)
print(f'Total routes: {len(routes)}')
"
Звіт по аудиту
Структура документа:
# Аудит кодової бази MyProject — 2024-03
## Резюме
- **Критичні проблеми:** 3
- **Важні проблеми:** 12
- **Рекомендації:** 24
- **Технічний борг (оцінка):** 120 годин
## Критичні проблеми
### 1. SQL Injection в UserController.php:142
**Ризик:** Утечка всієї БД
**Приклад:** `DB::raw("SELECT * FROM users WHERE name = '{$name}'")`
**Рішення:** Використовувати параметризовані запити
**Приоритет:** Виправити негайно
### 2. Секрети в репозиторії
**Файл:** .env.example містить реальні API-ключі
**Рішення:** Ротація ключів, додавання в .gitignore
## Важливі проблеми
### 1. Покриття тестами: 23%
**Поточне:** 23% строк, 18% гілок
**Мета:** 60%+ строк, 50%+ гілок
**Оцінка:** 40 годин
## Дорожна карта
| Квартал | Задачі | Годин |
|---|---|---|
| Q1 2024 | Критичні + безопасність | 30 |
| Q2 2024 | Рефакторинг архітектури | 50 |
| Q3 2024 | Тести + документація | 40 |
Аудит середної кодової бази (50–200 файлів) — 3–7 робочих днів. Крупний проект (500+ файлів) — 2–4 тижні.







