Як тестують антивірусне ПЗ

Як тестують антивірусне ПЗ

Останні років п'ять я займаюся тим, що допомагаю робити тестування системних додатків швидше і дешевше. По молодості (будучи юн і гірник) я намагався просто працювати швидше руками і уважніше головою, але поступово прийшло розуміння, що у ручного тестування є межа ефективності: для відділу з керівника та двох тестувальників це приблизно 30 фіч на місяць. Здавалося б - немає проблем, адже існує добре відпрацьований шлях щодо нещадної автоматизації тестування - одне позбавлення від регресу дасть з лишком свобдного часу, виберемо просто систему з того, що є на ринку, впровадимо і будемо жити щасливо. І тут життя заявляє: «Ні».


І справа не в тому, що всі системи автотестів мають фатальний недолік, або не відповідають простому списку вимог, породженому моєю буйною фантазією (посилання на мої вимоги), або не можуть відобразити всю неймовірну складність юзеркейсів використання - нехитрий аналіз говорить нам, що набір юзер-кейсів будь-якого антивірусу зобов'язаний включати відносно прості кроки:

  1. Розгортання на чисту машину
  2. Перевірка статичних характеристик файлів антивірусу
  3. Лікування та детектування різноманітних загроз
  4. Деінсталяцію
  5. Повторна інсталяція
  6. Оновлення старої версії
  7. Сумісність інсталяції з антивірусними рішеннями конкурентів
  8. Тести самозахисту

Особливо хочеться відзначити пункт про сумісність - для мене здавалося нормальним, що антивірус - це хтось зі списку kaspersky, drweb, eset, symantec, etc, але світ не стояв на місці і користувачі нового покоління чого тільки не знайшли для себе - тепер доводиться парсити сторінку download.cnet.com/s/antivirus з популярними закачуваннями за тиждень і тестуватися з тим що актуально.

Як видно всі кейси прямо напрошуються на автоматизацію.

Але в тестуванні системного софту, і антивірусів в тому числі, існує пара проблем:

  • Робота на залізі відрізняється від роботи в vm, серед тестових машин можуть і повинні бути як фізичні, так і віртуальні середовища.
  • Друга проблема тестування системного софту відзначена ще в 2013 році талановитим дослідником Фрідлянд Ю.М. і звучить вона як «забезпечення підтримки перезавантаження в системі автотестів».

Майже місяць формувань різноманітних запитів до пошукових систем привів мене до факту, що інших релевантних відповідей на питання «як робити автотести з перезавантаженням» крім презентації до дипломного проекту наших партнерів немає. Про боги, подумав я, прочитавши той pdf - тягнути цілий TFS з усією супутньою інфраструктурою Microsoft заради життя після перезавантаження?

За що мені це?

І я почав вивчати інші рішення. Так-так, я дійсно дивився docker, читав про ci на основі jenkins, пробував і розчаровувався - або рішення повністю не підходило, або кількість необхідних суміжних технологій до вивчення давало в перспективі унікально-модифіковане непідтримуване рішення (або підтримуване штатом висококласних фахівців), я змінював проекти і роботодавців (на все більш іменитих звичайно ж), але скрізь бачив одне і те ж - тестувати системний функціонал (оновлення драйверів, вимикання ОС, лікування вірусів, перевірка автозавантаження) руками було найбільш швидким, надійним і дешевим способом.

А потім я відкрив для себе python. На одній цій технології виявилося можливим написати простий менеджер віртуальних машин (import pysphere), веб-інтерфейс до нього (import web2py), агента тестування - win32 службу (import win32service), що доставляється на віртуалку через iso образ, і самі тести, зібрані в окремі exe-файли через pyinstaller (щоб не вчитися, щоб піддешитися, зібрані в окремі exe-файли). Концептуально це все виглядає наступним чином:

Все це добро підтримується 1 фахівцем зі знанням 1 технології, bus-фактор мінімальний, чому я невимовно радий.

Результати роботи тестів збираються до сторінки денного звіту:

Таким ось нехитрим чином ми позбулися приблизно за півроку розробки свого велосипеда від регрес і смоук-тестів, на ручні тести падає тільки новий функціонал, від чого у всього відділу тестування зморшки розгладилися, а волосся стало м'яким і шовковистим, чого і вам бажаю.

Власне, після набору деякої кількості нових фіч, продукт віддається зондер-команді - бета-тестерам і через фідбек у техпідтримці якість доводиться до небувалих висот.