E
Engee на старт!
@engee_com4.1K подп.
2.7Kпросмотров
65.9%от подписчиков
24 февраля 2026 г.
📷 ФотоScore: 3.0K
🔧 Тестирование кода в Engee без ручной рутины Тестирование ПО-в-контуре (SIL) – важный элемент рабочего процесса кодогенерации. Ведь нам необходимо проверить, что модель и код считаются одинаково. Обычный процесс SIL-тестирования выглядит так: включили настройку создания проверочной Си-функции, сгенерировали код, запустили скрипт, вставили Си-функцию, запустили симуляцию, сравнили результаты. Это занимает время. А если моделей много, то легко запутаться что с чем сравнивать, что уже сделано, а что еще надо проверить. Надо как-то избавится от этой головной боли. В идеале хочется нажать кнопку и пойти пить кофе, а тестирование выполнится само собой. Что будем использовать Слышим тестирование - применяем библиотеку Test.jl. А что тестируем? Надо проверить сразу несколько вещей: 1️⃣Код вообще генерируется? 2️⃣Создается ли проверочная Си-функция? 3️⃣Эквивалентность работы модели и кода Чтобы не рушить тестовую обвязку модели будем делать ее копию. И это тоже предмет тестирования. Для работы с моделями будем использовать программное управление моделями. Как это работает? Используя Test.jl, создадим наборы тестов, которые будут выполнять наше тестирование поэтапно: @testset verbose = true "SIL" begin @testset "Code Generation" begin @test SILAutomation.buildCUT(CUT)==true @test isfile(CUT*"_verification.engee") end SILAutomation.buildCUT(CUT) SILAutomation.buildSILHarness(SIL_Harness,CUT, MIL_Harness) @testset "SIL Equality" begin (MR,SR) = SILAutomation.runSims(MIL_Harness,SIL_Harness) (sync,equal) = SILAutomation.compare_signals(MR["filtered"],SR["C Function.1"]) @test sync==true @test equal==true end end А все манипуляции с моделями спрячем в отдельный модуль SILAutomation. ⚠️ ВАЖНО - Как правильно сравнить сигналы Нельзя просто сравнить два сигнала численно и сказать, что они равны. Надо проверить, что они синхронизированы по времени, а значения не различаются больше чем на ошибку. Написали такую функцию: function compare_signals(sig_one,sig_two) Ds = collect(sig_one); Rs = collect(sig_two); Cmp = isapprox.(Ds, Rs) issynched = all(Cmp.time) issimilar = all(Cmp.value) return (issynched, issimilar) end Что мы получили в итоге В результате сделали утилиту, которая ✅запускает и проверяет генерацию кода ✅Собирает обвязку SIL ✅Запускает симуляции тестов и корректно сравнивает результаты Теперь можно спокойно запускать тесты и идти пить кофе, а Engee все сделает за вас! 📎 Скачать себе все файлы утилиты можно тут 🎓 Школа моделирования уже стартовала! 🧑‍💻 Расписание бесплатных тренингов
2.7K
просмотров
2631
символов
Да
эмодзи
Да
медиа

Другие посты @engee_com

Все посты канала →
🔧 Тестирование кода в Engee без ручной рутины Тестирование — @engee_com | PostSniper