Инструменты статического анализа кода
Инструменты статического анализа кода проверяют исходный код без его выполнения, автоматически обнаруживая ошибки, уязвимости безопасности и запахи кода.
В двух словах
Статический анализ кода (SCA) проверяет код без его выполнения. Такие инструменты как ESLint (JS), Pylint (Python) и SonarQube (мультиязыковая платформа) автоматически находят баги, проблемы безопасности и запахи кода. Их интегрируют в CI/CD как качественные заставки.
Краткое описание
Статический анализ кода - это автоматизированная проверка исходного кода без его выполнения. Инструменты проверяют синтаксис, семантику, стандарты кодирования, уязвимости безопасности и метрики качества кода. Анализ осуществляется через сопоставление паттернов, анализ потока данных и абстрактную интерпретацию. SCA-инструменты обычно встраивают в CI/CD-конвейеры и используют как качественные заставки, которые блокируют слабый код при слиянии.
Зачем нужен статический анализ?
- Автоматизация: находит ошибки быстрее, чем ручные ревью
- Согласованность: единые стандарты кодирования в команде
- Безопасность: выявляет уязвимости до развёртывания в продакшене
- Обучение: новые разработчики учатся на основе обратной связи инструментов
- Метрики: измеримое качество кода во времени
Обзор инструментов
| Инструмент | Язык | Тип | Особенность |
|---|---|---|---|
| ESLint | JavaScript/TS | Linter | Крайне гибкий, система плагинов |
| Prettier | JavaScript/TS | Formatter | Авторитарный, форматирование |
| Pylint | Python | Linter | Соответствие PEP-8, полнофункциональный |
| Black | Python | Formatter | Без компромиссов, PEP-8 |
| SonarQube | Multi | Platform | Панель управления качеством кода |
| SpotBugs | Java | Linter | Находит ошибки в Java |
| Checkstyle | Java | Linter | Стандарты кодирования |
| RuboCop | Ruby | Linter | Ruby Style Guide |
ESLint (JavaScript/TypeScript)
Установка
npm install --save-dev eslint
npx eslint --init
Конфигурация
// .eslintrc.js
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
rules: {
'no-unused-vars': 'error',
'no-console': 'warn',
'@typescript-eslint/no-explicit-any': 'warn',
},
};
Примеры ошибок
// Ошибка ESLint: no-unused-vars
const unused = 42;
// Ошибка ESLint: no-console
console.log('Debug output');
// Ошибка ESLint: prefer-const
var x = 5;
Pylint (Python)
Установка
pip install pylint
Конфигурация
# .pylintrc
[MASTER]
disable=C0111,C0103
[FORMAT]
max-line-length=100
[BASIC]
good-names=i,j,k,ex,Run,_
Запуск
pylint mymodule.py
SonarQube (Multi-Language)
Установка (Docker)
docker run -d --name sonarqube -p 9000:9000 sonarqube
Конфигурация
# SonarQube Scanner
sonar-scanner \
-Dsonar.projectKey=my-project \
-Dsonar.sources=src \
-Dsonar.host.url=http://localhost:9000
Quality Gate
- Coverage: > 80%
- Duplications: < 3%
- Security Rating: A
- Reliability Rating: A
Интеграция в CI/CD
GitHub Actions
name: Code Quality
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm run lint
- run: npm run test:coverage
GitLab CI
code_quality:
image: sonarsource/sonar-scanner-cli
script:
- sonar-scanner
only:
- merge_requests
- main
Лучшие практики
- Ранняя интеграция: внедряйте SCA на ранних этапах разработки
- Пользовательские правила: адаптируйте правила под проект, не оставляйте стандарты как есть
- Автоматическое исправление: используйте авто-fix для простых проблем
- Quality Gates: блокируйте сборку при критических ошибках
- Регулярные обновления: обновляйте инструменты и правила регулярно
Ключевые моменты для экзамена
- Статический анализ кода проверяет исходный код без его выполнения
- Инструменты: ESLint (JS), Pylint (Python), SonarQube (Multi)
- Linter vs Formatter: linter проверяет, formatter форматирует
- Интеграция в CI/CD как качественная застава
- Автоматизация проверок качества кода
FAQ
1. Что такое статический анализ кода?
2. В чём разница между Linter и Formatter?
3. Что такое ESLint?
4. Что такое Pylint?
5. Что такое SonarQube?
6. Как интегрировать SCA в CI/CD?
7. Что такое Quality Gate?
8. Что такое Prettier?
9. Что такое Black?
10. SCA против Tests?
11. SCA против Code Review?
12. Когда начать использовать SCA?
13. Можно ли адаптировать правила?
14. Что такое SpotBugs?
15. Какова производительность SCA?
Продолжение пути обучения по качеству ПО
Следующая статья в пути обучения по качеству ПО посвящена Качеству ПО и поддерживаемости — как достичь поддерживаемого кода через хорошую архитектуру, документацию и тесты.
Источники
Рекомендуемые книги по качеству ПО
Если ты хочешь углубиться в статический анализ, инструменты и качество ПО, рекомендуем следующие книги:
Keine Bücher für Kategorie "software-engineering" gefunden.



