Celestia
May 6, 2023

Вступ до тестування модульного програмного забезпечення блокчейну

Наявні помилки та типові проблеми в виробничих мережах — це проблеми, які загрожують стійкості децентралізованих блокчейнів. Це особливо важлива проблема, враховуючи кількість користувачів і програм, які залежать від цих блокчейнів. Ми хочемо висвітлити тему, яка недостатньо обговорюється і, що більш важливо, недостатньо використовується як критичний компонент у забезпеченні стабільності блокчейну.

У цій статті буде обговорено важливість тестування блокчейнів і стратегії їх ефективного тестування.

Коротко про головне

  • Надійність блокчейн-мереж передбачає ретельне тестування типів вузлів, налаштувань і продуктивності всієї мережі для безпеки та надійності.
  • Завдяки підвищеній гнучкості налаштувань вузлів у модульних блокчейнах важливо посилити методи тестування, які підтримують безпеку та надійність мережі.
  • Ефективні стратегії тестування включають модульне, інтеграційне та системне тестування.
  • Проблеми при тестуванні модульних блокчейнів включають складність, проблеми взаємодії та відсутність стандартизованих фреймворків.

Важливіть тестування блокчейнів

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

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

Кожен тип вузла повинен бути протестований окремо, а потім як частина мережі в цілому. Оскільки кожен тип вузла можна налаштувати, процес тестування також повинен включати тестування налаштувань.

Стратегії тестування для блокчейнів

Про що слід пам'ятати при проведенні процесів тестування

Усі команди, Celestia Labs не є винятком, мають обмежені людські можливості для розподілу по кожному аспекту розробки програмного забезпечення. Оскільки розробка блокчейну відбувається швидко, тестування вважається нижчим пріоритетом порівняно з доставкою нових функцій. Навіть з огляду на обмежений час тестування, команди повинні пам’ятати, що тестування може бути ефективним, якщо вони дотримуються простих вказівок:

  1. Вичерпне тестування неможливо. Ви не можете охопити все, але ви можете охопити багато, визначивши пріоритетність тестування елементів високого ризику.
  2. Знаходьте та виправляйте помилки якомога раніше. У міру просування помилки від специфікації* до тестової мережі та основної мережі її виправлення стає все дорожчим.
  3. Будь-яка автоматизація краще, ніж жодна. При проведенні наскрізного тестування великої мережі автоматизація стає вирішальною.
  4. Протестуйте програмне забезпечення на внутрішніх розробниках перед публікацією. Переконавшись, що програмне забезпечення стабільне перед надсиланням у тестову мережу, ви зменшите роботу та розчарування для спільноти.
  5. Ручне тестування краще, ніж відсутність тестування. Хоча ручне тестування не є масштабованим довгостроковим рішенням, воно все одно корисне для короткострокових цілей. Ви завжди можете запровадити автоматизацію пізніше.

Примітка*: Ось практичний приклад того, як Габріель Блаут (керівник групи та дослідник Rollkit) виявив помилку в специфікаціях.

Піраміда тестування блокчейну

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

Для ефективного тестування блокчейнів можна використовувати такі стратегії:

1. Модульне тестування

Модульне тестування передбачає тестування кожного модуля окремо, щоб переконатися, що він працює правильно. Прикладом модуля в цьому контексті є заголовок celestia-node, який інкапсулює, як заголовки поширюються між різними вузлами в мережі. Це має вирішальне значення для блокчейнів, оскільки дозволяє тестувати налаштування кожного модуля.

Ця стратегія тестування допомагає виявити будь-які проблеми в модулі до його інтеграції в мережу. Оскільки модульні блокчейни поєднуються з модульним дизайном програмного забезпечення, тестування кожного компонента окремо є дуже корисним.

2. Тестування інтеграції

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

Прикладом міжмодульного тестування є тестування вузла з іншим вузлом. У випадку Celestia ми зазвичай тестуємо light node, синхронізуючи та відбираючи вибірку з одного bridge node. Обидва вони написані з одного репозиторію коду, але об’єднані по-різному.

Тестування інтеграції допомагає виявити будь-які проблеми у взаємодії між модулями та мережею.

Часто на цьому рівні тестування очікується підготовка невеликої мережі вузлів для тестування на одній машині.

3. Тестування системи

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

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

Хорошим прикладом помилок, виявлених на системному рівні для Celestia, була невідповідність ключів під час подання транзакцій або простих перевірок балансу вузлами DA. Функціональна помилка була виявлена під час навантажувального тестування функції PayForBlob. Системні тести часто виявляють помилки, які блок/інтеграція не можуть виявити, незважаючи на простоту сценарію та іноді не пов’язані з метою тестування плану тестування.

Іншим прикладом є помилковий результат, виявлений під час тестування випуску системи, де вузол DA працював як зазвичай, але після ретельного аналізу виявилося, що це не так.

Крім того, тестування системи допомагає переконатися, що мережа здатна обробляти велику кількість транзакцій і користувачів.

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

Цей рівень тестування вважається найдорожчим і не повинен мати таке ж покриття, як модуль/інтеграція. Особливо для модульних блокчейнів, оскільки при розробці системних тестів слід враховувати більше контексту.

Ми розглянемо цей рівень тестування більш детально в другій частині цієї серії.

Майбутнє тестування модульних блокчейнів

Оскільки блокчейни продовжують розвиватися, тестування також має розвиватися. З’являться нові стратегії та фреймворки тестування, а існуючі вдосконалюватимуться. Процес тестування стане більш автоматизованим і спрощеним, що скоротить час і вартість тестування.

У міру того, як блокчейни набувають більшого поширення, потреба в стандартизованих платформах тестування стане більш очевидною. Стандартизовані фреймворки допоможуть масштабувати тестування для більшої кількості типів мереж і випадків використання. Якщо вам сподобався цей вступний пост, у другій частині ми пояснимо, як Celestia Labs використовує інструмент під назвою Testground для проведення широкомасштабних тестів мережі.

Українська спільнота

Приєднуйтесь до нашаго Telegram каналу, щоб читати всі новини та апдейти про Celestia українською. Також, підписуйтесь на наш Twitter. Ми будемо раді Вас бачити!