Аудит кодової бази мобільного додатку
Аудит — це не розширене код-ревью. Код-ревью дивиться на конкретний 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% покриття на тривіальних геттерах і 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) — вони можуть порушувати privacy policies App Store/Play Store.
Продуктивність та утечки пам'яті. Статичний аналіз не заміняє профілер, але показує паттерни: синхронні задачи на main thread, image створюється без кеширування у циклі, URLSession створюється per-request замість синглтона. Для Flutter — const конструктори не використовуються там, де повинні, дорогі обчислення в build().
Безпека. Автоматизований аналіз через MobSF (Mobile Security Framework) або Semgrep з мобільними правилами. Шукаємо: hardcoded API keys у коді або plist, логування чутливих даних, небезпечні IPC (exported Activities без дозволу), використання застарілих алгоритмів (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. Функція зі складністю > 15 — кандидат на рефакторинг, це не вкусовщина, це вимірний ризик.
Periphery для iOS — знаходить невикористані функції, класи, протоколи. У великій кодовій базі накопичуються тисячі строк мертвого коду, які читають, підтримують та бояться видалити.
Формат результата аудиту
Звіт з чотирма рівнями: Critical (негайне исправління — витік даних, crasher), High (наступний спринт — архітектурний ризик, security issue), Medium (технічний борг, планується), Low (рекомендації по якості).
Додатково — дорожна карта: що рефакторити спочатку, що можна відкласти, які зміни несуть найбільший ризик регресії. Аудит без плану дій — безглуздий документ.
Терміни — 3–5 днів на проект середнього розміру. Крупні проекти (300k+ строк, кілька таргетів/модулів) — до 2 тижнів.







