Блог a1qa

О тестировании и качестве ПО

Тестирование блокчейн: как обеспечить качество смарт-контрактов в dApp

Мир блокчейна и криптовалют в первую очередь ассоциируется с децентрализацией.

В этом и заключается причина роста популярности dApp’ов (decentralized applications): отсутствие централизации исключает единую точку контроля, а значит, несет в себе удобство, приватность информации, безопасность, надежность и экономию ресурсов.

В отличие от централизованных приложений, dApp’ы напрямую соединяют пользователей и разработчиков, не привлекая посредника.

Сейчас самый популярный способ выпустить dApp – это установить его на платформе блокчейн (например, Ethereum). Живыми примерами таких продуктов являются игры, DEX (децентрализованные биржи), маркетплейсы для NFT, гэмблинг, объединенные социальные сети, DeFi (децентрализованные финансы).

В этой статье мы остановимся на тестировании смарт-контрактов (умных договоров), а также разберем, как обеспечить высокое качество децентрализованных приложений.

Преимущества смарт-контрактов

Экономика функционирует за счет сложных договорных соглашений, которые создаются и осуществляются централизованными организациями.

Умные контракты помогают приобрести автономность и независимость от третьих лиц и структур, а также обеспечивают участников договорных цепочек иными преимуществами:

  • надежность;
  • безопасность;
  • точность;
  • экономичность.

Зачем тестировать смарт-контракт?

В случае обнаружения ошибок нельзя изменить код развернутого в сети договора, опубликованного в блокчейн, – в этом случае создается новый контракт.

Даже небольшая ошибка в логике приложения может привести к серьезным последствиям.

Пару лет назад мультиподписные кошельки Ethereum от Parity были заблокированы из-за уязвимостей в смарт-контрактах, а DAO (децентрализованная автономная организация) была взломана злоумышленником.

Конечно, дефекты можно было найти на этапе тестирования до выпуска на рынок.

Что проверяется в смарт-контракте?

  1. Работа метода электронной подписи;
  2. наличие кода контракта и фиксация его изменений;
  3. предмет договора;
  4. инструменты, которые нужны для исполнения контракта;
  5. условия исполнения, зафиксированные в коде договора;
  6. события;
  7. ошибки и отправка сообщений;
  8. изменений состояния договоров, а также их баланса.

Как проверять смарт-контракт?

Нужно смоделировать, учесть и предугадать все возможные условия, которые заложены в логике каждого конкретного договора:

  • какие события должны инициироваться;
  • какие методы должны выполняться;
  • как изменяется состояние и баланс контракта;
  • кому и как произвести перевод средств;
  • какую ошибку вызывать;
  • проверить отправителя сообщения и правильность использования текущего времени.

Например, в работе с Ethereum важно учесть ограничение и расходование величины Gas (стоимость умного договора, которую Ethereum установила за его запуск) при выполнении смарт-контракта.

Это тесно связано с безопасностью соглашений, ведь с практической точки зрения, ситуация, когда в контракте навсегда «застряли» средства, мало отличается от ситуации, когда их украли.

В остальном общий принцип схож с тестированием любого другого кода — создается набор эталонных вызовов методов в предопределенном окружении, для результатов которых прописываются ожидаемые результаты.

Как сделать тестирование еще эффективнее?

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

Часто для бездефектной работы используются практики BDD (Behavior-Driven Development), которые наряду с тестами позволяют создать документацию и примеры использования. Подробнее об этом мы говорили здесь.

Из чего состоит dApp?

Давайте перейдем к вопросу проведения тестирования децентрализованных приложений.

Как известно, любое приложение состоит из back-end’а и front-end’а. Back-end децентрализованного приложения имеет свой внутренний код, который работает на блокчейне.

DApp также состоит из промежуточного звена в виде браузера (например, Toshi) или расширения для него (наподобие MetaMask). Front-end может писаться на любом языке.

Как тестировать dApp?

Несмотря на то что блокчейн-приложения все еще остаются инновационной индустрией, многие методы, которые используются при тестировании иных продуктов, подходят и для dApp.

Визуально между dApp’ом и любым другим приложением никакой разницы нет.

Более того, многие пользователи даже не подозревают, что перед ними приложение, у которого back-end – это блокчейн.

Об особенностях проведения функционального, нагрузочного тестирования и тестирования безопасности, помогающих улучшить качество программных продуктов, мы говорили в предыдущей статье.

Помимо этих проверок проводятся:

  • Тестирование умных контрактов
  • Тестирование транзакций

Особенность в том, что тест-кейсы включают проверки суммы проводимых операций, конвертации, служебных полей, корректность хэша, время проведения транзакции, а также данные об отправителе и получателе.

  • E2E тестирование

Проводится для проверки всей функциональности приложения от начала до конца. Важно, чтобы все интегрированные части dApp работали так, как было задумано. Как правило, тесты проверяют, как реальный пользователь будет взаимодействовать с системой, и стремятся предугадать его/ее поведение.

  • Интеграционное тестирование

Проверяется взаимодействие модулей и систем в целом, а также интеграции данных, которые попадают с front-end’а в back-end.

Список инструментов для тестирования

Безусловно, блокчейн развивается с невероятной скоростью, но он еще далек от совершенства. Почему? Подробнее читайте в нашей предыдущей статье.

Заключительная нота

Избавление от централизации стало мощным трендом и значительно упростило работу во многих отраслях.

P2P-сети нового поколения, DAO и другие dApp’ы, смарт-контракты, а также EOS (децентрализованная ОС) только начинают набирать обороты и определять, каким станет интернет в будущем.

Своевременно проведенное тестирование поможет пользователям без труда работать с технологией блокчейн, а компаниям – занять свое место на постоянно меняющемся, конкурентном рынке и оставить в нем пространство для свежих идей и инноваций.

Получите бесплатную консультацию с экспертами a1qa в области блокчейн и узнайте, как тестирование может помочь улучшить качество вашего программного продукта.

Поделиться статьей: