Как написать модульный тест для ВП, которые содержат функцию LabVIEW Tick Count (ms)?

Есть ВП, выходы (индикаторы) которого зависят не только от входов, но и от значений функций "Tick Count". Проблема в том, что он не дает одинаковых результатов для одних и тех же входных данных. каждый раз, когда я запускаю его, он дает разные результаты. поэтому модульный тест, который фиксирует только входные и выходные данные, потерпит неудачу. Итак, вопрос в том, как написать модульный тест для этой ситуации?

Я не могу включить ВП в вопрос, так как он содержит несколько ВПП, а функции «счетчика тиков» распределены по всем уровням ВПП.

EDIT1: я написал оболочку, которая вычитает выходные значения двух последовательных запусков, чтобы исключить базовое время отсчета (которое не определено в этой функции), но это портит выходные данные.


person Kamran Bigdely    schedule 21.11.2013    source источник
comment
Как количество тиков (или локальное время компьютера) меняет вывод вашего кода? Не могли бы вы поделиться фрагментом кода, который работает неправильно.   -  person Ton Plomp    schedule 22.11.2013


Ответы (2)


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

Есть несколько способов проверить недетерминированные функции: например, можно проверить, что генератор случайных чисел выдает значения, равномерно распределенные с некоторым допуском, или проверить, что функция настройки часов соответствует серверу ntp с некоторым допуском. Но я думаю, что ваша команда будет счастливее, если вы сможете сделать базовый код детерминированным.

Ваша идея использовать условное отключение хороша, но я бы добавил дополнительный шаг создания ВП-оболочки, а затем поиск и замену им всего родного Tick Count. Таким образом, вы можете вносить любые изменения в Tick Count в одном месте. Если по какой-то причине код фактически использует количество тиков для чего-то другого, кроме профилирования (например, он используется для заполнения генератора псевдослучайных чисел), вы можете иметь свой «тестовый/отладочный» случай, который читается из уведомителя, который вы вводите набор фальшивых тиков засчитывается из вашего тестового кода. Уведомления отлично подходят для чего-то подобного.

person Robert Calhoun    schedule 01.12.2013

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

person Ton Plomp    schedule 23.11.2013
comment
Я не хочу/не могу изменять тестируемый ВП (и, возможно, усложнять его). Меня попросили написать модульные тесты без изменения/модификации ВП. - person Kamran Bigdely; 30.11.2013
comment
Другой способ - поместить функцию подсчета тиков в структуру Conditional Disable в случае Default и указать правильные значения в случае UNIT_TEST, но опять же это требует изменения тестируемого VI, чего я не должен делать. - person Kamran Bigdely; 30.11.2013