Юніт-тестування з Caraya test framework для LabVIEW

Створення додатків, бібліотек, інсталяторів

Юніт-тестування з Caraya test framework для LabVIEW

Postby Kosist on 14 Jun 2017, 01:04

В минулому пості я трохи розповів про такий інструмент для юніт-тестування, як JKI VI Tester. Але, як я згадував, існує ще один фреймворк для юніт тестування від JKI – це Caraya тест фреймворк. Інтро та прості приклади його використання можна подивитися в цьому відео від Jim Kring.
Якщо бути точним, JKI називає Caraya “Assertion and unit test framework for :labview: ”, оскільки результат тесту визначається результатом «assertion» - твердження, деякої умови. Це твердження має бути правильним в певній ділянці коду, а якщо ця умова не виконується, програма буде генерувати виключення, помилку. Тобто по-суті, це ті ж самі перевірки деяких умов в коді, але які можуть використовуватися тест фреймворком при тестуванні коду. “Design by contract” – це один із підходів у дизайні програм, тому кому цікаво, той може більше детально загуглити цю тему в мережі.
Перейдемо безпосередньо до Caraya. Як і JKI VI Tester, цей тест фреймворк є безкоштовним, і встановити його можна з VIPM.
caraya labview vipm.PNG
Після установки, функції Caraya знаходяться в палітрі функцій JKI Toolkits.
Які ж основні особливості Caraya?
В першу чергу – це те, що можна легко перетворити будь-який код модуль в тест модуль, за допомогою буквально пари функцій, та без необхідності писати якусь додаткову «обгортку» для нього.
Під час написання коду, багато :labview: розробників – надіюся, що я не помиляюся – створюють деякі додаткові віайки, в які «накидаються» різноманітні код-модулі, і тестується їхня робота – оскільки не завжди можна протестувати код модуль сам по собі. І ідея Caraya – це перетворення цих віайок, «пісочниць» з якими ми граємося, у повноцінні юніт тести.

Розглянемо простий приклад використання Caraya.
Уявімо, що нам необхідно створити код модуль, який би видаляв дубліковані значення з числового масиву. І, необхідно виконати такі вимоги:
1. Якщо вхідний масив пустий, повинна генеруватися помилка з кодом 5001;
2. Якщо вхідний масив не має дублікованих значень, значення не модифікуються;
3. Якщо вхідний масив має дубліковані значення, вони видаляються з масиву (окрім першого входження значення).
Отже, можна створити два код модулі – перший буде виконувати перевірку на умову пустого масиву, а другий буде містити перший код модуль, і імплементувати решту вимог.
caraya labview check empty array template.png
caraya labview check empty array template.png (20.37 KiB) Viewed 580 times
caraya labview remove dublicates template.png
Після того, як шаблони віайок підготовлені, слідуючи принципу test driven development, можна створити для них тести.
Створимо пусту :vi: , і помістимо туди дві функції з палітри CarayaDefine Test.vi, і Asser Error.vi. Після цього, помістимо туди наш шаблон код модулю, який будемо тестувати, і під’єднаємо всі необхідні входи-виходи функцій.
caraya labview test check empty array.png
Все, тест готовий!
Тепер, запустимо нашу :vi: .
caraya labview exec check array empty false.png
І ми бачимо вікно Caraya, яке містить список тестів, і результат їх виконання. Тести не пройшли, оскільки наш код модуль пустий. Час створити другий тест.
Знову таки, створимо нову віайку, і закинемо туди функцію Define Test.vi, та дві функції Assert Equal_Variant.vi. І в цій віайці ми імплементуємо перевірку відразу двох вимог.
caraya labview test remove duplicates.png
Після того, як тест-віайка буде імплементована, запустимо її.
caraya labview exec remove dublicates false.png
Результат тесту – Fail, як і очікувалося. Бачимо, що у вікні Caraya відображається інформація про наші дві тест умови.
Перейдемо до імплементації наших двох основних код модулів.
caraya labview check empty array implementation.png
caraya labview remove duplicates implementation.png
Тепер, знову запустимо їх, одну за одною.
caraya labview exec check array empty true.png
caraya labview exec remove dublicates true.png
Бачимо, що тести пройшли успішно, а значить, наш код функціонує згідно вимог!

Отже, що можна сказати?
1. Не потрібно запускати ніякий додатковий інструмент – вікно Caraya запускається лише тоді, коли ми запускаємо на виконання наші тест-віайки.
2. Тести створюються швидко (звичайно, все залежить від умов перевірки);
3. Одна тест-віайка може містити декілька тест процедур, а не лише одну. Ну, або ж ми можемо імплементувати кожну тест процедуру в окремій віайці – це питання стилю;
4. Виконання тестів надзвичайно швидке – на це також роблять акцент автори Caraya. І це – великий плюс.

А якщо нам потрібен тест-звіт? Немає проблем! Створимо Test Suite.
Для цього, ми створимо третю віайку, куди добавимо дві інші функції – Define Test Suite.vi і Destroy Test Suite.vi.
Взагалі, Test Suite використовується саме для генерації тест звітів, оскільки об’єднати декілька тест модулів в один можна і без нього. Достатньо лише викликати їх із однієї віайки.
Але, Define Test Suite.vi також дозволяє виконувати тести в так званому «тихому» режимі, коли ми не будемо бачити вікно Caraya (для цього використовується вхід функції “Interactive”). Якщо тест не пройде, то на виході функцій буде генеруватися помилка (значення якої можна задавати вручну для кожного assertion).
До речі, також не обов’язково використовувати Define Test.vi в тест модулях – без цієї функції Caraya вікно буде неактивним, і в разі непроходження тесту буде генеруватися помилка (код помилки, по замовчуванню, 1).
Отже, коли наша Test Suite віайка є готова, запустимо її.
caraya labview test suite implementation.png
caraya labview test suite pass result.png
Бачимо, що Caraya вікно містить інформацію про наші три тести, поділені на дві групи; а також генерується тест звіт.
Тест звіт має наступний вигляд.
caraya labview test report.PNG


По-суті, це і все коротке інтро щодо використання Caraya.
Цим тема Caraya не вичерпується, оскільки я взагалі не зачіпав тему "TDD project example», який можна також встановити з VIPM. Цей проект містить приклад використання Caraya, символів проекту для запуску/пропуску тестів, і головне – приклад Pre-Build Action для виконання тестів перед білдом проекту. Дуже гарно ця тема розписана в цьому пості – TDD in LabVIEW - a Caraya approach, тому я рекомендую обов’язково ознайомитися із цією темою.
Як і інші JKI тулкіти, Caraya доступна в GitHub репозиторії, звідки можна скачати її вихідний код, імплементувати свої функції, і т.д.

Можу сказати, що мені Caraya подобається тим, що вона проста у використанні, і дозволяє дійсно швидко оформлювати віайки в код модулі. А юніт тестування, як я вже це писав раніше, необхідне для написання надійного, та функціонально правильного коду. І чим зручніший інструмент, який ми використовуємо для написання тестів, тим легшим та швидшим буде цей процес; і з більшим бажанням ми цим будемо займатися.
Attachments
Caraya Example.zip
(62.49 KiB) Downloaded 40 times
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 759
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 224
CLAD I/O VIP students

Return to Створення додатків

Who is online

Users browsing this forum: No registered users and 3 guests

cron