exponenta event banner

Обнаружение мертвого и постоянно свернутого кода

Во время моделирования тестового файла приложение Fixed-Point Converter обнаруживает мертвый код или код, который постоянно свернут. Приложение использует информацию о покрытии кода при преобразовании кода из кода MATLAB ® с плавающей запятой в код MATLAB с фиксированной запятой. Проверка результатов покрытия кода позволяет убедиться в том, что тестовый файл выполняет алгоритм надлежащим образом.

Приложение вставляет встроенные комментарии в код с фиксированной точкой, чтобы отметить мертвые и непереведенные области. Он включает информацию об покрытии кода в созданный HTML-отчет преобразования с фиксированной точкой. Редактор приложения отображает строку с цветовым кодированием слева от кода. В этой таблице описывается цветовое кодирование.

Цвет панели покрытияУказывает
Зеленый

Одна из следующих ситуаций:

  • Функция точки входа выполняется несколько раз, а код - несколько раз.

  • Функция точки входа выполняется один раз, а код - один раз.

Различные оттенки зеленого обозначают различные диапазоны счетчиков выполнения строк. Самый темный оттенок зеленого указывает на самый высокий диапазон.

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

Что такое мертвый код?

Мертвый код - это код, который не выполняется во время моделирования. Мертвый код может быть результатом следующих сценариев:

  • Защитный код, содержащий предполагаемые угловые футляры, которые не достигнуты

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

  • Недостаточный диапазон испытательного стенда

  • Постоянное складывание

Обнаружить мертвый код

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

  1. В локальной папке, доступной для записи, создайте функцию myFunction.m.

    function y = myFunction(u,v)
        %#codegen
        for i = 1:length(u)
            if u(i) > v(i)
                y=bar(u,v);
            else
                tmp = u;
                v = tmp;
                y = baz(u,v);
            end
        end
    end
    
    function y = bar(u,v)
        y = u+v;
    end
    
    function y = baz(u,v)
        y = u-v;
    end
    
  2. В той же папке создайте тестовый файл, myFunction_tb.

    u = 1:100;
    v = 101:200;
    
    myFunction(u,v);
    
  3. В галерее приложений откройте конвертер Fixed-Point.

  4. На странице «Выбор исходных файлов» перейдите к myFunction и нажмите кнопку «Открыть».

  5. Нажмите кнопку Далее. На странице Define Input Types выберите созданный тестовый файл. myFunction_tb. Щелкните Автоопределить типы ввода (Autodefine Input Types).

  6. Нажмите кнопку Далее. На странице Преобразовать в фиксированную точку (Convert to Fixed-Point) щелкните Анализ (Analyze), чтобы смоделировать функции точки входа, собрать информацию о диапазоне и получить предлагаемые типы данных.

    Строка с цветовым кодированием в левой части окна редактирования указывает, выполняется ли код. Код в первом условии оператора if не выполняется во время моделирования, поскольку u никогда не превышает v. bar функция никогда не выполняется, так как оператор if никогда не выполняется. Эти части алгоритма отмечены красной полосой, указывающей, что они являются мертвым кодом.

  7. Чтобы применить предлагаемые типы данных к функции, нажмите кнопку Преобразовать.

    Преобразователь фиксированной точки генерирует функцию фиксированной точки, myFunction_fixpt. Сгенерированный код с фиксированной точкой содержит комментарии вокруг частей кода, идентифицированных как мертвый код. На панели «Результаты проверки» предлагается использовать более тщательный тестовый стенд.

    Когда преобразователь Fixed-Point обнаружит мертвый код, рассмотрите возможность редактирования тестового файла таким образом, чтобы алгоритм выполнялся в полном диапазоне. Если тестовый файл уже отражает весь диапазон входных переменных, попробуйте отредактировать алгоритм, чтобы исключить мертвый код.

  8. Закройте преобразователь фиксированных точек.

Исправить мертвый код

  1. Отредактируйте тестовый файл myFunction_tb.m включение более широкого круга вводимых ресурсов.

    u = 1:100;
    v = -50:2:149;
    
    myFunction(u,v);
    

  2. Снова откройте преобразователь с фиксированной точкой.

  3. Используя ту же функцию и отредактированный тестовый файл, повторите процесс преобразования.

  4. После нажатия кнопки Analyze на этот раз строка покрытия кода показывает, что все части алгоритма выполняются с новыми диапазонами ввода тестового файла.

    Чтобы завершить процесс преобразования и преобразовать функцию в фиксированную точку, щелкните Преобразовать (Convert).