Страница 1 из 1

JKI VI Tester - інструмент для тестування LabVIEW коду

Добавлено: 04 июн 2017, 01:25
Kosist
Unit testing – дуже важлива частина розробки будь-якого софту. По-суті, unit testing – це тестування окремих модулів коду. Це можна робити як вручну, так і автоматизовано.
Для :labview: існує три найбільш популярних інструменти для юніт-тестування. Це звичайно ж Unit Test Framework від NI,JKI VI Tester від JKI, а також Caraya Unit Test Framework теж від JKI (для юніт-тестування та assertions).
Хотілося б привести простий приклад роботи з JKI VI Tester.
На відміну від NI Unit Test Framework, JKI VI Tester безкоштовний. Встановити його можна за допомогою VI Package Manager. Після встановлення, тулкіт доступний в меню Tools -> VI Tester.
vi_tester_vipm.PNG
Принцип роботи JKI VI Tester доволі простий. Можна створювати Test Cases, та Test Suites (які містять в собі Test Cases). Test Cases зазвичай можуть містити в собі тести для конкретного модулю/функціоналу.
При створенні Test Case, в проект добавляється клас, який містить setUp.vi, tearDown.vi, vi-приклад у вигляді vi-шаблону testExample.vit.
У setUp.vi та tearDown.vi можна добавляти код, який буде проводити ініціалізацію якихось параметрів для тесту, та їх деініціалізацію. Таким чином, при запуску тесту виконується послідовність setUp.vi – test.vi - tearDown.vi.
Щоб створити новий тест, достатньо клацнути правою кнопкою на testExample.vit -> New from Tempate. Потрібно не забувати, що всі віайки-тести повинні містити префікс test на початку назви віайки.
Ну а далі, у створеній віайці можна писати сам тест. При встановленні тулкіту, в палітру функцій JKI Toolkits добавляються API функції для роботи з VI тестером. Їх і треба використовувати для створення тесту, а саме логіки – при якій умові тест буде пройдений, або ж ні.
Приведу простий приклад того, як використовувати тулкіт.
Нехай потрібно створити модуль, який буде інкрементувати числовий суфікс рядку. І, повинен зберігатися такий функціонал:
- Якщо рядок пустий, буде генеруватися помилка (5005);
- Якщо рядок не містить числового суфіксу, він буде створений (string -> string_01);
- Якщо рядок уже містить числовий суфікс, він буде інкрементований (string_02 -> string_03).
Отже, вимоги нам відомі, можна створити шаблон віайки.
vi_tester_2.png
Тепер, запустимо сам тестер. Для цього вибираємо Tools -> VI Tester -> Test VIs…
Оскільки проект ще не містить тести, список тестів пустий.
vi-tester_1.png
Добавимо тест.
Для цього вибираємо Tools -> VI Tester -> New -> Test Case…, і зберігаємо створений клас, який тепер містить у нашому проекті.
vi_tester_3.png
Тепер, ми можемо створити три тести, на основі наших вимог. Створюємо, зберігаємо віайку, і зберігаємо проект.
test_01.png
test_02.png
test_03.png
Переходимо до вікна VI Tester, тиснемо кнопку Reload – і бачимо наші тести. Запускаємо їх, і бачимо що всі вони мають статус Fail (само собою, оскільки наш модуль ще не імплементований).
vi_tester_5.png
Тепер, імплементуємо наші вимоги. Перше – це перевірка умови пустого рядку, і генерація помилки.
vi_tester_implementation_01.png
Зберігаємо зміни віайки, запускаємо тест. Тепер, один тест із трьох виконався успішно.
vi_tester_6.png
Імплементуємо ще дві вимоги відразу, і запускаємо тести. Всі тести пройшли успішно, а значить, наш модуль імплементований вірно.
vi_tester_implementation_02.png
vi_tester_7.png
Звичайно, що такий простий функціонал швидше можна було б перевірити вручну. Але уявімо, що модуль повинен виконувати більше вимог. З часом він може мінятися – а значить, треба перевіряти його функціонал повністю. І таких модулів у проекті можуть бути десятки, а то і сотні – і іноді зміна однієї з віайок може нашкодити декільком іншим.
А написавши один раз тест, і потім використовуючи його для автоматичного тестування коду, ми збережемо купу часу для тестування, а головне – будемо впевнені, що імплементовані алгоритми працюють.

Також, за допомогою VI Tester можна імплементувати запуск тестеру із проекту – наприклад, при білді коду в бібліотеку, чи exe. За допомогою Pre-Build Action, та VI Tester API віайки будуть тестуватися автоматично, таким чином гарантуючи, що код буде функціональним.
Ще однією особливістю VI Tester є те, що по-перше, він має відкритий вихідний код (на GitHub є доступний репозитарій), а по-друге, оскільки він є об’єктно-орієнтованим, то це означає, що можна модифікувати тест-алгоритми так, як це потрібно.

Підсумовуючи все вищесказане, як на мене, VI Tester – гарний інструмент, який повинен бути на озброєнні у будь-якого :labview: розробника, оскільки він реально здатний полегшити життя, та допоможе писати код надійно і правильно.