Перейти к содержанию

Одинаковый код во взаимоисключаемых ветках ветвления кода

Дублируются блоки в разных ветках оператора "Если", оператора Попытка...Исключение и условного оператора "?"

Часто это является последствиями неверного или незаконченного "копипаста".

Примеры неверных условий

Если ПервоеУсловие() Тогда
    ВызовФункции("Строка", 10); // ошибка
ИначеЕсли ВтороеУсловие() Тогда
    ВызовФункции("Строка", 10); // ошибка
КонецЕсли;

или

Попытка
    ДругаяФункция(); // ошибка
Исключение
    ДругаяФункция(); // ошибка
КонецПопытки;

или

Выражение = ?(Условие, А + 2, А+2); // ошибка

или более сложный вариант дублирования

Если ПервоеУсловие() Тогда
    ДругаяФункция(); // ошибка
ИначеЕсли ВтороеУсловие() Тогда
    А = ВызовФункции(ВложенныйВызов("Строка", 1)); // ошибка
ИначеЕсли ТретьеУсловие() Тогда
    ДругаяФункция(); // ошибка
Иначе
    А = ВызовФункции(ВложенныйВызов("Строка", 1)); // ошибка
КонецЕсли;

Согласно Common Weakness Enumeration потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как - CWE-570 - CWE-571

См. также - Правило Совпадающие/одинаковые тела методов - Правило Дублирование одинаковых/похожих блоков кода - Правило Одинаковые условия в последовательности вида "Если (....) ИначеЕсли (....) ИначеЕсли (....)". - MSC12-C. Detect and remove code that has no effect or is never executed - MITRE, CWE-489 - Leftover Debug Code - MITRE, CWE-570 - Expression is Always False - MITRE, CWE-571 - Expression is Always True - MISRA C:2004, 13.7 - Boolean operations whose results are invariant shall not be permitted. - MISRA C:2012, 14.3 - Controlling expressions shall not be invariant