Аудит кодовой базы мобильного приложения
Аудит — это не расширенный код-ревью. Код-ревью смотрит на конкретный PR. Аудит кодовой базы отвечает на вопрос: «можно ли с этим кодом жить следующие 2–3 года, добавлять фичи без постоянных регрессий, онбордить новых разработчиков за разумное время?» Это анализ системного технического долга, а не точечных багов.
Что входит в аудит
Архитектурная связность. Смотрим на dependency graph: есть ли циклические зависимости между модулями, нарушены ли границы слоёв, зависит ли UI от конкретных сетевых библиотек напрямую. Для iOS — проверяем разделение на feature modules или хотя бы соблюдение MVVM/VIPER в рамках одного таргета. Для Android — Clean Architecture с Use Cases, или всё свалено в Activity. Инструменты: Xcode Dependency Graph, Android Studio Module Dependencies, ArchUnit для автоматизированной проверки.
Тестовое покрытие. Смотрим не только процент, но и что именно покрыто. 80% coverage на тривиальных геттерах и 10% на бизнес-логике — хуже, чем 30% правильных тестов на Use Cases и ViewModels. Проверяем наличие интеграционных тестов (UI, XCUITest, Espresso), моков для сетевых зависимостей, тестов на edge cases (пустой список, ошибка сети, таймаут).
Управление зависимостями. CocoaPods vs SPM, Gradle catalogs, устаревшие версии. Библиотеки с известными CVE — проверяем через OWASP Dependency-Check или снапшот из pod outdated / ./gradlew dependencyUpdates. Особо смотрим на библиотеки, которые запрашивают избыточные разрешения (Analytics SDK, Ad SDK) — они могут нарушать App Store/Play Store privacy policies.
Производительность и утечки памяти. Статический анализ не заменяет профилировщик, но показывает паттерны: синхронные задачи на main thread, image создаётся без кеширования в цикле, URLSession создаётся per-request вместо синглтона. Для Flutter — const конструкторы не используются там, где должны, дорогие вычисления в build().
Безопасность. Автоматизированный анализ через MobSF (Mobile Security Framework) или Semgrep с мобильными правилами. Ищем: hardcoded API keys в коде или plist, логирование чувствительных данных, небезопасные IPC (exported Activities без permission), использование устаревших алгоритмов (MD5, SHA1 для критичных операций).
Инструменты
| Задача | iOS | Android |
|---|---|---|
| Статический анализ | SwiftLint, Periphery (неиспользуемый код) | Detekt, Android Lint |
| Зависимости/CVE | pod audit + OWASP DC |
OWASP Dependency-Check |
| Сложность кода | SonarQube | SonarQube |
| Безопасность | MobSF | MobSF |
| Утечки памяти | Instruments (Leaks) | LeakCanary |
SonarQube интегрируется в CI и считает цикломатическую сложность, дублирование кода, cognitive complexity. Функция с complexity > 15 — кандидат на рефакторинг, это не вкусовщина, это измеримый риск.
Periphery для iOS — находит неиспользуемые функции, классы, протоколы. В большой кодовой базе накапливаются тысячи строк мёртвого кода, которые читают, поддерживают и боятся удалить.
Формат результата аудита
Отчёт с четырьмя уровнями: Critical (немедленное исправление — утечка данных, crasher), High (следующий спринт — архитектурный риск, security issue), Medium (технический долг, планируется), Low (рекомендации по качеству).
Дополнительно — дорожная карта: что рефакторить сначала, что можно отложить, какие изменения несут наибольший риск регрессии. Аудит без плана действий — бессмысленный документ.
Сроки — 3–5 дней на проект среднего размера. Крупные проекты (300k+ строк, несколько таргетов/модулей) — до 2 недель.







