Тестування програмного забезпечення є однією із досить старих та добре розроблених областей програмної інженерії. Існує багато класичних праць з опису технологій і методів тестування, які широко використовуються для тестування звичайних програмних додатків [1]. Звичайно існуючі підходи до тестування дозволяють отримати програмні продукти з високим рівнем якості, що дозволяє використовувати їх у таких критичних сферах як медицина, транспорт, керування виробництвом, фінанси. Але останнім часом все більшого поширення набувають програмні системи з елементами штучного інтелекту, у яких він є головною частиною програмного додатку. Загальновідомими прикладами можна вважати ChatGPT або машини з автопілотом (Self-driving car). Для таких систем проблема тестування постає у новому ракурсі – бо ціна помилки може бути дуже значною, а традиційні методи тестування не можуть забезпечити належної якості. Як приклад проблеми якості тестування штучного інтелекту можна навести відомий випадок коли ChatGPT видав посилання на неіснуючу публікацію у The Guardian, яку він сам і вигадав, хоча звичайно у цьому випадку не було критичних втрат від помилки у результатах роботи системи штучного інтелекту. Але дуже просто можна уявити абстрактну ситуацію з можливими критичними наслідками, наприклад якщо той же автопілот у дорожній ситуації повинен бути обирати між зіткненням з зображенням людини на плакаті чи з людиною-аніматором у костюмі роботу, і при цьому зробить помилку у виборі. Або простим прикладом важливості результатів роботи програми буде медична експертна система, яка видає якісь рекомендації для лікування хворого. Очевидно, що у таких ситуаціях наслідки помилки системи штучного інтелекту будуть критичними. Таким чином зрозуміло що стрімке проникнення штучного інтелекту у різні сфері людської діяльності вимагає врахування його особливостей при тестуванні відповідних програмних додатків.
Розглянемо проблеми застосування звичайних методів тестування до додатків зі штучним інтелектом докладніше. Однією з самих відомих і досить простих технік тестування є еквівалентне розділення (equivalence class testing), але для систем штучного інтелекту виникає нетривіальна ситуація коли наприклад у випадку неправильного розпізнавання системою образів об’єкт буде помилкового віднесений до не свого класу еквівалентності. Тоді подальші відповідні дії з ним не повинні привести до негативних наслідків – як у прикладі вище з керуванням автомобілем. Очевидно, що тестувальнику потрібно створювати додаткові тести до перевірки таких, хоча й малоймовірних, але все ж можливих ситуацій.
Іншою добре відомою і простою технікою тестування є аналіз граничних значень (boundary value analysis). Розглянемо випадок коли цю техніку потрібно застосовувати для перевірки вихідних значень якоїсь величини, котра у програмі обчислюється нейронною мережею. Але є очевидним що навчена нейронна мережа може моделювати якусь нелінійну функцію з заздалегідь невідомими екстремумами. Відповідно може існувати комбінація вхідних даних, що зумовить отримання вихідного результату за межами тестування, отже виникає питання безпечності застосування отриманих від такого додатку даних.
Ще однією проблемною технікою стає попарне тестування (pairwise testing). Дуже часто системи штучного інтелекту аналізують десятки факторів, у таких випадках тестування повного перебору факторів є досить складною задачею, але замінити його попарним тестуванням є ризикованим спрощенням, бо можна не виявити всі варіанти поведінки додатку.
Розглядаючи особливості використання цих, та інших тестових технік для систем штучного інтелекту стає зрозумілим що тестувальник повинен враховувати особливості застосування різних тестових технік до роботи різних моделей штучного інтелекту. Такий підхід може підвищити якість тестування вищезазначених додатків.
Звичайно необхідно максимально широке застосування автоматизації тестування. Але потрібно розуміти що його мета не просто перебрати максимальну кількість тестових даних, а перевірити різні, відмінні між собою варіанти роботи системи штучного інтелекту.
Також варто зазначити, що можуть виникати проблеми, не пов’язані з тестовими техніками, а зумовлені особливостями роботи додатку, наприклад коли якась система у знеособленому вигляді використовує велику кількість даних, але потім з них можна виділити особисту інформацію.
Перспективним напрямком у тестуванні є застосування інструментів штучного інтелекту для виконання задач тестування [2]. Але у цьому випадку одночасно зі значним підвищенням ефективності тестування виникає цікава проблема як одна система штучного інтелекту взаємодіє з іншою, та на скільки тестувальник може покладатись на отримані таким чином результати.
Розглянути проблеми приводять до логічного висновку що тестувальнику необхідно мати знання з систем штучного інтелекту та використовувати їх у проектуванні тестів, а в цілому методи тестування штучного інтелекту потребують опрацювання і розвитку.
Список використаних джерел:
1. Cem Kaner, Rebecca L. Fiedler Foundations of Software Testing Context -Driven Press, 2013. – 242 p.
2. Adam Leon Smith, Rex Black, James Davenport, Joanna Olszewska, Jeremias Rößler, Jonathon Wright Artificial Intelligence and Software Testing Publisher(s): BCS, The Chartered Institute for IT, 2022. – 150 p.
|