Статический анализ кода html

Статический анализ кода

Часто можно сказать, насколько код программы корректен, даже не запуская её. Процесс исследования исходного кода без запуска называют статическим анализом или линтингом, а программу, которая это делает — статическим анализатором или линтером.

Самый популярный линтер для JavaScript — это ESLint. Он находит участки кода, которые могут потенциально привести к ошибкам, и сообщает об этом.

Как пользоваться

Чтобы воспользоваться ESLint, нужно установить его через менеджер зависимостей в папке проекта:

 npm install --save-dev eslint npm install --save-dev eslint     

После установки нужно инициализировать конфигурационный файл . eslintrc . json :

 npx eslint --init npx eslint --init     

В созданный файл можно добавлять правила, по которым линтер будет работать. Обычно используют стандартную конфигурацию, поверх которой добавляют правила, подходящие для конкретного проекта.

  // . "extends": "eslint:recommended", // . >  // . "extends": "eslint:recommended", // . >      

Теперь можно добавить в package . json новый скрипт, который будет запускать статический анализ:

  // . "scripts":  "lint": "eslint ./**/*.js" > // . >  // . "scripts":  "lint": "eslint ./**/*.js" > // . >      

После запуска линтера командой npm run lint , в консоли появится результат его работы.

Для наглядности положим в папку проекта JavaScript-файл с ошибками, которые ESLint способен отловить.

 // script.js let x = 12 // Сравнения с -0 запрещены стандартной конфигурацией ESLint// При запуске он выведет ошибкуif (x === -0)  console.log("Hello!")> // script.js let x = 12 // Сравнения с -0 запрещены стандартной конфигурацией ESLint // При запуске он выведет ошибку if (x === -0)  console.log("Hello!") >      

Как понять

Линтер — это программа, которая разбирает исходный код на стандартизированные кусочки, а потом даёт эти кусочки на проверку специальным плагинам. Плагин получает разобранный участок кода и проверяет его на корректность по ряду правил, которые определены в этом плагине.

Советы линтера — это не абсолютная истина. Скорее подсветка спорных моментов, на которые стоит обратить внимание.

Типичные проблемы, которые отлавливают линтеры:

  • неоднозначности, которые могут быть понятны автору, но запутают других разработчиков (например, присваивание в условном операторе);
  • особенности языка, которые легко забыть, но просто проверить автоматически (например, проверка результата вызова typeof);
  • потенциальные проблемы производительности (например, ожидание асинхронной функции в цикле);
  • использования не принятых в языке конструкций (например, неявное приведение типов);
 // проблему в такой функции можно отловить статическим анализомasync function parseFiles(files)  const data = [] // parseFile будет вызываться последовательно // сначала будет обработан первый файл // потом второй, третий и так далее for (const file of files)  const parsed = await parseFile(file) data.push(parsed) > return data> // линтер может предложить переписать функцию такasync function parseFiles(files)  // parseFile вызовется для всех файлов почти одновременно const data = await Promise.all(files.map((file) => parseFile(file))) return data> // проблему в такой функции можно отловить статическим анализом async function parseFiles(files)  const data = [] // parseFile будет вызываться последовательно // сначала будет обработан первый файл // потом второй, третий и так далее for (const file of files)  const parsed = await parseFile(file) data.push(parsed) > return data > // линтер может предложить переписать функцию так async function parseFiles(files)  // parseFile вызовется для всех файлов почти одновременно const data = await Promise.all(files.map((file) => parseFile(file))) return data >      

Подобные исправления не всегда будут корректны, иногда разработчику правда нужно обрабатывать файлы последовательно. Но чаще всего, это не так. Статический анализатор обратит внимание программиста на это место, а программист уже решит — актуальна ли эта проблема для конкретного кейса.

Статический анализатор работает только с исходными текстами программы, но никогда не запускает само приложение. Поэтому, не все проблемы можно отловить линтингом. Статический анализ — это отличное дополнение к другим способам проверки кода: код-ревью, юнит и интеграционным тестам.

Источник

ТОП бесплатных инструментов для статического анализа кода

ТОП бесплатных инструментов для статического анализа кода

Когда человеку нужен инструмент для статического анализа кода, он в первую очередь вспоминает о таких коммерческих решениях, как Fortify или Veracode. А что насчет бесплатных программ? Платные инструменты стоят слишком дорого для маленьких компаний или внештатных специалистов по безопасности. По этой причине в этой статье был собран список популярных бесплатных программ, которые выполняют статический анализ кода.

Brakeman

  • Предмет анализа: Ruby.
  • Необходимые компоненты: Ruby и Gem. Установка компонентов с помощью команды «gem install Brakeman».
  • Как использовать инструмент: команда «brakeman application_path».
  • Комментарий: это лучшая программа для статического анализа кода Ruby. Она ориентирована на анализ так называемых «on rails» приложений.

NodeJsScan

  • Предмет анализа: NodeJs.
  • Необходимые компоненты: для работы инструмента нужен только Python.
  • Как использовать инструмент: команда «python NodeJsScan.py -d ».
  • Комментарий: этот сканер определяет множество ложных срабатываний. Он получает периодические обновления от разработчиков.

RIPS

  • Предмет анализа: PHP.
  • Необходимые компоненты: для работы инструмента нужен только PHP.
  • Как использовать инструмент: RIPS – это веб-приложение, написанное на PHP. Пользователю нужно установить Apache HTTP и запустить программу.
  • Комментарий: это прекрасный сканер. Он способен обнаружить множество возможных проблем. К сожалению, его новая версия не является бесплатной, поэтому при желании использовать данную программу человеку придется приобрести ее платную версию.

Findbugs

  • Предмет анализа: Java.
  • Необходимые компоненты: для работы инструмента нужен Java SE.
  • Как использовать инструмент: необходимо открыть приложение jar и выбрать папку для анализа исходного кода.
  • Комментарий: Findbugs – это сканер общего назначения. Он способен обнаружить разные ошибки и недочеты в коде. В частности, программа имеет встроенный модуль безопасности, который может найти проблемы, связанные с уязвимостью, такие как возможность атак XSS и SQLi.

Microsoft FxCop

  • Предмет анализа: .Net.
  • Необходимые компоненты: для работы инструмента нужен .Net.
  • Как использовать инструмент: человек открывает приложение и выбирает файлы exe или dll.
  • Комментарий: это хороший сканер, он способен обнаружить большинство уязвимостей. Программа будет анализировать скомпилированные файлы. Если у пользователя уже есть код, ему нужно будет его скомпилировать.

JsHint

  • Предмет анализа: JavaScript.
  • Необходимые компоненты: для работы инструмента нужен .NodeJs. Чтобы установить его, пользователь вводит команду «npm install -g jshint».
  • Как использовать инструмент: команда «jshint application_path».
  • Комментарий: сканер обнаруживает множество ошибок. Он способен найти «плохой код», который часто отвечает за неисправную работу или ложные срабатывания (LOL).

CodeCrawler

  • Предмет анализа: C#.
  • Необходимые компоненты: для работы инструмента нужен .Net.
  • Как использовать инструмент: пользователь открывает папку приложения с исходным кодом.
  • Комментарий: сканер обнаруживает множество ложных срабатываний.

YASCA

  • Предмет анализа: Net, Java, C/C++, HTML, JavaScript, ASP, ColdFusion, PHP, COBOL.
  • Необходимые компоненты: для работы инструмента нужен msi.
  • Как использовать инструмент: команда «yasca.exe application_path».
  • Комментарий: это многоязычный сканер. Он обнаруживает большое количество ложных срабатываний, а также способен найти неточности в коде.

Visual Code Grepper

  • Предмет анализа: C++, C#, VB, PHP, Java и PL/SQL.
  • Необходимые компоненты: для работы инструмента нужен msi.
  • Как использовать инструмент: пользователь открывает приложение и выбирает исходный код.
  • Комментарий: это многоязычный сканер. Он способен обнаружить много ложных срабатываний, но меньше, чем тот же YASCA.

Graudit (Only Linux)

  • Предмет анализа: ASP, JSP, Perl, PHP, Python.
  • Необходимые компоненты: ничего не нужно – пользователь скачивает приложение и начинает сканирование.
  • Как использовать инструмент: команда «graudit application_path».
  • Комментарий: этот сканер использует базу данных, основанную на регулярных выражениях. Его самое большое преимущество заключается в том, что приложение можно легко настроить для поиска пользовательских проблем. Используя имеющуюся базу данных по умолчанию, пользователь обнаруживает много ложных срабатываний, хотя некоторые реальные проблемы не всегда могут быть выявлены.

Code Warrior (Only Linux)

  • Предмет анализа: C, C#, PHP, Java, Ruby, ASP, JavaScript.
  • Необходимые компоненты: пользователь скачивает программу и скомпилирует код.
  • Как использовать инструмент: человек открывает приложение и выбирает исходный код.
  • Комментарий: Как и RIPS, этот сканер является веб-приложением. Однако пользователю не нужен Apache, достаточно запустить сам сканер, и браузер автоматически откроется. Затем человек выбирает исходный код. Программа способна обнаружить много проблем и ложных срабатываний.

Источник

Читайте также:  Как раскомментировать строки в html
Оцените статью