Мир блокчейна и криптовалют в первую очередь ассоциируется с децентрализацией.
 
 В этом и заключается причина роста популярности 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 (децентрализованная ОС) только начинают набирать обороты и определять, каким станет интернет в будущем.
 
 Своевременно проведенное тестирование поможет пользователям без труда работать с технологией блокчейн, а компаниям – занять свое место на постоянно меняющемся, конкурентном рынке и оставить в нем пространство для свежих идей и инноваций.
 
 
Получите бесплатную консультацию с экспертами компании «Точка качества» в области блокчейн и узнайте, как тестирование может помочь улучшить качество вашего программного продукта.