Skip to content
IRC-CodingIRC-Coding
Static Code AnalysisESLintSonarQubePylintSpotBugsCI/CDКачество кода

Static Code Analysis Tools: ESLint, SonarQube, Pylint

Инструменты статического анализа кода: ESLint, SonarQube, Pylint, SpotBugs. Автоматизированная проверка качества и интеграция CI/CD.

S

schutzgeist

3 min read
Static Code Analysis Tools: ESLint, SonarQube, Pylint

Инструменты статического анализа кода

Инструменты статического анализа кода проверяют исходный код без его выполнения, автоматически обнаруживая ошибки, уязвимости безопасности и запахи кода.

В двух словах

Статический анализ кода (SCA) проверяет код без его выполнения. Такие инструменты как ESLint (JS), Pylint (Python) и SonarQube (мультиязыковая платформа) автоматически находят баги, проблемы безопасности и запахи кода. Их интегрируют в CI/CD как качественные заставки.

Краткое описание

Статический анализ кода - это автоматизированная проверка исходного кода без его выполнения. Инструменты проверяют синтаксис, семантику, стандарты кодирования, уязвимости безопасности и метрики качества кода. Анализ осуществляется через сопоставление паттернов, анализ потока данных и абстрактную интерпретацию. SCA-инструменты обычно встраивают в CI/CD-конвейеры и используют как качественные заставки, которые блокируют слабый код при слиянии.

Зачем нужен статический анализ?

  • Автоматизация: находит ошибки быстрее, чем ручные ревью
  • Согласованность: единые стандарты кодирования в команде
  • Безопасность: выявляет уязвимости до развёртывания в продакшене
  • Обучение: новые разработчики учатся на основе обратной связи инструментов
  • Метрики: измеримое качество кода во времени

Обзор инструментов

ИнструментЯзыкТипОсобенность
ESLintJavaScript/TSLinterКрайне гибкий, система плагинов
PrettierJavaScript/TSFormatterАвторитарный, форматирование
PylintPythonLinterСоответствие PEP-8, полнофункциональный
BlackPythonFormatterБез компромиссов, PEP-8
SonarQubeMultiPlatformПанель управления качеством кода
SpotBugsJavaLinterНаходит ошибки в Java
CheckstyleJavaLinterСтандарты кодирования
RuboCopRubyLinterRuby 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?

Linter проверяет ошибки и запахи кода, Formatter автоматически форматирует код.

3. Что такое ESLint?

Linter для JavaScript/TypeScript с системой плагинов и обширной конфигурацией.

4. Что такое Pylint?

Linter для Python, проверяет соответствие PEP-8 и качество кода.

5. Что такое SonarQube?

Мультиязыковая платформа для качества кода с панелью управления и качественными заставками.

6. Как интегрировать SCA в CI/CD?

Встройте linter или scanner в конвейер, блокируйте сборку при ошибках.

7. Что такое Quality Gate?

Пороги, которые должны быть соблюдены, чтобы код мог быть слит.

8. Что такое Prettier?

Авторитарный formatter для JavaScript/TypeScript, форматирует автоматически.

9. Что такое Black?

Бескомпромиссный formatter для Python, соответствует PEP-8.

10. SCA против Tests?

SCA проверяет структуру кода, тесты проверяют поведение. Они дополняют друг друга.

11. SCA против Code Review?

SCA автоматизирован, Code Review ручной и проверяет архитектуру.

12. Когда начать использовать SCA?

На ранних этапах проекта, перед коммитом и в конвейере CI/CD.

13. Можно ли адаптировать правила?

Да, адаптируйте под проект и команду, не оставляйте стандарты без изменений.

14. Что такое SpotBugs?

Linter для Java, находит типичные ошибки Java и уязвимости безопасности.

15. Какова производительность SCA?

Быстро, от секунд до минут. Может быть распараллелен.

Продолжение пути обучения по качеству ПО

Следующая статья в пути обучения по качеству ПО посвящена Качеству ПО и поддерживаемости — как достичь поддерживаемого кода через хорошую архитектуру, документацию и тесты.

Источники

  1. https://eslint.org/
  2. https://pylint.pycqa.org/
  3. https://www.sonarqube.org/

Рекомендуемые книги по качеству ПО

Если ты хочешь углубиться в статический анализ, инструменты и качество ПО, рекомендуем следующие книги:

Keine Bücher für Kategorie "software-engineering" gefunden.

Назад к блогу
Share:

Nächster Artikel in Качество программного обеспечения

Weiterlesen
Качество ПО и UX: Usability и Accessibility

Похожие статьи