Вы профессиональный разработчик? Теперь вот вам вопрос — кто обычно находит ошибки в вашем коде? Вы, ваш партнер по парному программированию, ваши коллеги во время проверки кода, система непрерывной интеграции или ваш клиент ?
Тизер — как далеко этот код попадет в вашу цепочку кодов, прежде чем будет обнаружена ошибка?
final BigDecimal summary = BigDecimal.ZERO;
public void add(final BigDecimal value) {
summary.add(value);
}
И этот?
public class SharedLock {
private static long count = 0L;
public synchronized void increment() {
count++;
}
}
Ошибки, которые попадают в производство, очевидно, являются самыми смущающими и самыми дорогими, чтобы их исправить. Но даже к ошибкам, обнаруженным ранее в линейке, все еще прикреплены ценовые и репутационные метки.
Такие практики, как модульное тестирование, отладка или парное программирование, могут устранить множество проблем. Функциональные ошибки и проблемы интернационализации или стиля кода могут быть достаточно надежно обнаружены и локализованы с использованием этих методов.
Однако, когда дело доходит до проверки многопоточной корректности , уязвимостей в системе безопасности , потенциальных узких мест производительности или плохих практик , эти инструменты и методы быстро показывают свои пределы.
Конечно, у меня в рукаве есть решение, которое нужно показать только сейчас, когда я повредил ваш характер, и вы почти чувствуете, что ошибки могут быть обнаружены в основном только случайно. Прежде чем я сделаю свой фокус, ознакомьтесь со следующим фрагментом кода. Можете ли вы обнаружить ошибку там?
/**
* Fills given region with red color
*/
private void paintRed(final Rectangle clip, final Graphics g) {
g.setColor(Color.red);
if (clip!=null) return;
g.fillRect(clip.x, clip.y, clip.height, clip.width);
}
Вы нашли ошибку? Было ли это легко? Отлично сработано! А как насчет второго бага ? На самом деле в коде есть две ошибки. Не могли бы вы попробовать еще раз?
Нирвана программистов
И вот мы пришли с решением. Внимательно посмотрите на следующую пару скриншотов:
Признаете ли вы примеры?
Теперь гораздо проще обнаружить проблемы, верно? Разве не круто, чтобы проблемы были выделены прямо в коде? Познакомьтесь со статическим анализом кода — инструментом, который внимательно читает ваш код, чтобы найти подозрительные фрагменты и отбросить их вам. Либо приятно выделено в редакторе
или объединены в интерактивный отчет, который предлагает несколько вариантов действий.
За кулисами вы могли видеть, что IntelliJ IDEA анализирует ваш исходный код в абстрактном синтаксическом дереве (AST) и обновляет AST каждый раз, когда вы касаетесь клавиатуры, чтобы в любой момент дать вам самое важное уведомление.
Фоновый механизм статического анализа кода многократно сравнивает AST вашего кода с базой данных, содержащей около 700 (семисот!) Шаблонов известных проблем, ошибок или стилей, и выделяет каждое появление любых ошибок в вашем коде, чтобы вы могли их увидеть. ,
Пальцы готовы, давайте начнем исправление
Посмотрев на выделенную проблему, нажмите Control + F1, и вы получите подробное описание того, что может произойти, если вы не разберетесь в беспорядке, созданном вами или кем-то еще.
Некоторые проблемы могут быть автоматически быстро решены для вас. Нажмите Alt + Enter и выберите исправление во всплывающем меню.
Нажатие клавиши « Вправо» в меню даст вам возможность вызвать соответствующее быстрое исправление для всех случаев появления ошибок, подавить обнаружение ошибки в заданной области или вообще отключить обнаружение ошибки. Таким образом, вы можете быстро настроить список ошибок, которые вы хотите, чтобы механизм поиска.
Вы также можете перейти прямо к экрану конфигурации анализа и изменить параметры профиля контроля напрямую.
Выберите, какие ошибки должны быть проверены в какой части вашего проекта. Очень гибкий И мощный!
Еще не все
Статический анализ кода в IntelliJ IDEA не ограничивается Java. Есть и другие интересные технологии, которые могут извлечь выгоду из этой техники — HTML, SQL, CSS, Hibernate, JPA, GWT и многие другие.
И вы также можете научить IntelliJ IDEA своим собственным шаблонам ошибок, характерным для вашего конкретного проекта.
Но об этом позже. Подпишитесь на RSS-канал JetBrains Zone и следите за обновлениями!
Резюме
Я показал вам, как смести ошибки с вашего кода в самом начале всей цепочки кода — задолго до того, как вы сохраните файл на диск в первый раз. Мы рассмотрели принципы и методы статического анализа кода и продемонстрировали некоторые опции, которые доступны в IntelliJ IDEA , честно говоря, одной из самых острых программ парного программирования для поиска ошибок, которые вы можете получить сегодня.