Мир блокчейна и криптовалют в первую очередь ассоциируется с децентрализацией.
В этом и заключается причина роста популярности dApp’ов (decentralized applications): отсутствие централизации исключает единую точку контроля, а значит, несет в себе удобство, приватность информации, безопасность, надежность и экономию ресурсов.
В отличие от централизованных приложений, dApp’ы напрямую соединяют пользователей и разработчиков, не привлекая посредника.
Сейчас самый популярный способ выпустить dApp – это установить его на платформе блокчейн (например, Ethereum). Живыми примерами таких продуктов являются игры, DEX (децентрализованные биржи), маркетплейсы для NFT, гэмблинг, объединенные социальные сети, DeFi (децентрализованные финансы).
В этой статье мы остановимся на тестировании смарт-контрактов (умных договоров), а также разберем, как обеспечить высокое качество децентрализованных приложений.
Преимущества смарт-контрактов
Экономика функционирует за счет сложных договорных соглашений, которые создаются и осуществляются централизованными организациями.
Умные контракты помогают приобрести автономность и независимость от третьих лиц и структур, а также обеспечивают участников договорных цепочек иными преимуществами:
- надежность;
- безопасность;
- точность;
- экономичность.
Зачем тестировать смарт-контракт?
В случае обнаружения ошибок нельзя изменить код развернутого в сети договора, опубликованного в блокчейн, – в этом случае создается новый контракт.
Даже небольшая ошибка в логике приложения может привести к серьезным последствиям.
Пару лет назад мультиподписные кошельки Ethereum от Parity были заблокированы из-за уязвимостей в смарт-контрактах, а DAO (децентрализованная автономная организация) была взломана злоумышленником.
Конечно, дефекты можно было найти на этапе тестирования до выпуска на рынок.
Что проверяется в смарт-контракте?
- Работа метода электронной подписи;
- наличие кода контракта и фиксация его изменений;
- предмет договора;
- инструменты, которые нужны для исполнения контракта;
- условия исполнения, зафиксированные в коде договора;
- события;
- ошибки и отправка сообщений;
- изменений состояния договоров, а также их баланса.
Как проверять смарт-контракт?
Нужно смоделировать, учесть и предугадать все возможные условия, которые заложены в логике каждого конкретного договора:
- какие события должны инициироваться;
- какие методы должны выполняться;
- как изменяется состояние и баланс контракта;
- кому и как произвести перевод средств;
- какую ошибку вызывать;
- проверить отправителя сообщения и правильность использования текущего времени.
Например, в работе с Ethereum важно учесть ограничение и расходование величины Gas (стоимость умного договора, которую Ethereum установила за его запуск) при выполнении смарт-контракта.
Это тесно связано с безопасностью соглашений, ведь с практической точки зрения, ситуация, когда в контракте навсегда «застряли» средства, мало отличается от ситуации, когда их украли.
В остальном общий принцип схож с тестированием любого другого кода — создается набор эталонных вызовов методов в предопределенном окружении, для результатов которых прописываются ожидаемые результаты.
Как сделать тестирование еще эффективнее?
В случае со смарт-контрактами наиболее верным решением будет проведение
автоматизации тестирования, особенно учитывая большое количество валидаций при отработке контрактов, быстрый рост и трансформацию сети, наличие множества узлов и их всевозможные комбинации.
Часто для бездефектной работы используются практики BDD (Behavior-Driven Development), которые наряду с тестами позволяют создать документацию и примеры использования.
Из чего состоит dapp?
Давайте перейдем к вопросу проведения тестирования децентрализованных приложений.
Как известно, любое приложение состоит из back-end’а и front-end’а. Back-end децентрализованного приложения имеет свой внутренний код, который работает на блокчейне.
DApp также состоит из промежуточного звена в виде браузера (например, Toshi) или расширения для него (наподобие MetaMask). Front-end может писаться на любом языке.
Как тестировать dapp?
Несмотря на то что блокчейн-приложения все еще остаются инновационной индустрией, многие методы, которые используются при тестировании иных продуктов, подходят и для dApp.
Визуально между dApp’ом и любым другим приложением никакой разницы нет.
Более того, многие пользователи даже не подозревают, что перед ними приложение, у которого back-end – это блокчейн.
Об особенностях проведения функционального, нагрузочного тестирования и тестирования безопасности, помогающих улучшить качество программных продуктов, мы говорили в предыдущей статье.
Помимо этих проверок проводятся:
- Тестирование умных контрактов
- Тестирование транзакций
Особенность в том, что тест-кейсы включают проверки суммы проводимых операций, конвертации, служебных полей, корректность хэша, время проведения транзакции, а также данные об отправителе и получателе.
Проводится для проверки всей функциональности приложения от начала до конца. Важно, чтобы все интегрированные части dApp работали так, как было задумано. Как правило, тесты проверяют, как реальный пользователь будет взаимодействовать с системой, и стремятся предугадать его/ее поведение.
- Интеграционное тестирование
Проверяется взаимодействие модулей и систем в целом, а также интеграции данных, которые попадают с front-end’а в back-end.
Безусловно, блокчейн развивается с невероятной скоростью, но он еще далек от совершенства. Почему? Подробнее читайте в нашей предыдущей
статье.
Заключительная нота
Избавление от централизации стало мощным трендом и значительно упростило работу во многих отраслях.
P2P-сети нового поколения, DAO и другие dApp’ы, смарт-контракты, а также EOS (децентрализованная ОС) только начинают набирать обороты и определять, каким станет интернет в будущем.
Своевременно проведенное тестирование поможет пользователям без труда работать с технологией блокчейн, а компаниям – занять свое место на постоянно меняющемся, конкурентном рынке и оставить в нем пространство для свежих идей и инноваций.
Получите бесплатную консультацию с экспертами компании «Точка качества» в области блокчейн и узнайте, как тестирование может помочь улучшить качество вашего программного продукта.