Как проверить посещение массива вне границ, используя sonarqube? - PullRequest
0 голосов
/ 06 июня 2018

Как проверить, может ли массив выходить за пределы, используя sonarqube?В существующих правилах нет ничего об этом.Настраиваемое правило?

Я хочу найти посещение массива без проверки индекса.

Пример несовместимого кода

String[] spiltResults = chatString.split(ch);
result = spiltResults[0];

Совместимое решение

String[] spiltResults = chatString.split(ch);
if(spiltResults.length > 0){
    result = spiltResults[0];
}

1 Ответ

0 голосов
/ 06 июня 2018

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

Однако есть несколько проблем:

  1. Относительно легко проверить, что всегда есть явная проверка.

  2. Сложнее проверить, что проверка верна.

  3. Очень трудно проверить, что правильное действие предпринято, когда индексное выражение выходит за пределы.

  4. Очень трудно иметь дело с кодом, который пропустил программистчек, который не нужен, поднял чек из петли или что-то подобное.

Вот в чем дело.Если вы можете реализовать пользовательское правило, которое выполняет 1) и 2), но не 3) и 4), то результатом будет то, что вы поощряете программистов писать некрасивый код с избыточными проверками, чтобы SonarCube «просто заткнулся».Это плохо, и, вероятно, хуже для реального качества кода, чем вообще не реализовывать правило.

Лучшим подходом является тщательное тестирование.Вы должны делать это в любом случае.(Полагаться на анализатор кода, чтобы найти ваши ошибки - плохая идея.)

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


FWIW, скорее всего, SonarCube не имеет стандартного правила для этого.Такое правило приведет к слишком большому количеству ложных срабатываний, чтобы быть полезным для реальных кодовых баз.

...