Источник: Freedman Club
Сегодня трудно найти человека, который не слышал о биткойн или криптовалютах вообще.
Все говорят о цифровых деньгах, но чтобы полностью понять их, нужно разобраться в технологии, лежащей в их основе – технологии blockchain.
Сегодня многие отрасли промышленности, как большие, так и малые, внедряют Blockchain-приложения.
И, как и любой технологии, blockchain необходимо тестирование, чтобы гарантировать надлежащее функционирование.
В противном случае можно оказаться в той же ситуации, что и Ethereum, второй самый известный публичный blockchain после биткойн.
Еще в 2016 году эта криптовалюта в размере 280 миллионов долларов была заблокирована и недоступна из-за технической ошибки.
По-видимому, ошибка была случайно вызвана пользователем, и, как результат, этот пользователь получил доступ к нескольким кошелькам.
Всю эту ситуацию можно было бы избежать, если бы Ethereum был надлежащим образом протестирован до выпуска в общественность.
Как бы то ни было, multisignature-кошельки Ethereum от Parity оказались замороженными из-за недостатка безопасности.
Как избежать ошибки и протестировать Blockchain-приложение
Blockhain по-прежнему является относительно новой технологией, которая уникальна во многих аспектах.
Хотя многие методы, применяемые при обычном регулярном тестировании веб-приложений, такие как тестирование безопасности, функциональное тестирование или интеграционное тестирование, по-прежнему актуальны, тестирование блокчейн-приложений имеет свои особенности и должно включать следующие типы тестирования:
1. Тестирование смарт-контрактов
Смарт-контракт — это программный модуль в сети Blockchain, который автоматически завершает транзакцию с использованием ранее определенных условий.
Чтобы проверить смарт-контракты, нужно учитывать и моделировать все возможные условия для каждого отдельного контракта.
Учитывая количество узлов и их комбинации, а также то, как быстро сеть растет и изменяется, необходимо, чтобы тестировщики применяли автоматизацию во время тестирования приложений на основе Blockchain.
2. Нефункциональное тестирование
Другие аспекты применения блокчейн, которые необходимо тестировать – это его производительность, целостность и скрытность.
Это может зависеть от нескольких факторов, включая размер сети, размер транзакции и многое другое.
3. Тестирование пользователей сети и узлов
Наиболее важным элементом Blockchain является ledger (бухгалтерская книга).
В Там записываются все криптовалютные последовательности и транзакции, которые затем распределяются по всем узлам, чтобы каждый мог видеть их идентичность.
Для этого, однако, участникам Blockchain необходим консенсус даты и времени, когда каждая транзакция присоединилась к сети.
Консенсусный протокол необходимо протестировать, чтобы проверить, действительно ли все происходит в нормальных условиях, когда все узлы терпят неудачу и когда в сети недостаточно узлов в течение определенного времени.
Это можно проверить с помощью узлов Byzantine. В принципе, этот узел является членом блокчейн, который пытается преднамеренно нарушить его операции, например, не пересылая сообщения дальше другим членам.
Что можно и нужно тестировать?
Что именно требует тестирования в Blockchain-приложениях? Очевидно, есть некоторые ограничения, так что вот он список нескольких вещей, которые можно проверить:
1. Размер блока
В 2010 году Сатоши Накамото представил ограничение размера блока в 1 МБ.
Этот предел остался и до настоящего времени, хотя он был предметом многочисленных дискуссий в биткойн-сообществе. Что произойдёт при превышении максимального размера блока?
В рамках решения биткойн представляет нам хардфорк (резкое изменение протокола, которое отменяет/проверяет ранее допустимые/недействительные блоки и транзакции).
Масштабирование состоит из двух противоречий. С одной стороны, разработчики и пользователи хотели сохранить максимальный размер блока 1 МБ, но получить лучший алгоритм сжатия данных, в то время как другая сторона, майнеры, выступала за увеличение максимального размера блока до 8 МБ.
Биткойн и Bitcoin Cash имеют разные преимущества, поскольку один более безопасен, а другой быстрее.
Проблема, которая нуждается в тестировании здесь, заключается в том, как будет работать Blockchain при увеличении максимального размера блока или использовании различных алгоритмов сжатия.
2. Пропускная способность
В теории (в идеальных условиях) максимальная пропускная способность Blockchain биткойна — 7 транзакций в секунду, тогда как на практике она колеблется между 3 и 4.
Это довольно мало. К примеру, максимальная пропускная способность Visa составляет 58 000, а средняя — 2 000, и даже Ethereum может достигать 20 транзакций в секунду. Почему Биткойн этого не может?
3. Безопасность
Одним из первых вопросов новичка, который встречается с биткойн, становится вопрос, насколько это безопасно. Это очень правильный вопрос.
Большая часть внимания здесь, похоже, заключается в установлении личности участника, но что произойдёт, когда они становятся скомпрометированными?
Опять же, возвращаясь к сравнению биткойн и Bitcoin Cash, один ориентирован больше на безопасность, а другой — на время, необходимое для завершения транзакции.
4. Размер цепи
На момент написания этой статьи количество блоков в сети биткоин составило около 522 600.
Нет ограничений на размер цепочки, поэтому можно проверить как производительность, так и функциональность, а также то, что произойдет, если цепочка будет временно нарушена (например, когда два майнера получат два разных, но оба действительных решения для одного и того же блока в то же время).
5. Стойкость
Распределённая система может давать только два варианта: вернуться к самой последней доступной ссылке в цепочке или предоставить ошибку. Вопрос в том, что делать, если конец цепочки не доступен?
Очевидно, что есть много других вещей, которые тестировщики могут получить в свои руки, когда дело доходит до тестирования приложений, связанных с Blockchain, но эти пять дают хороший обзор того, что можно и нужно тестировать.
Тестирование является обязательным
Хотя Blockchain развивается с колоссальной скоростью, технология все еще далека от совершенства.
Чтобы приблизиться к совершенству, разработчики и участники Blockchain должны применять целостный подход к приложениям, основанным на этой технологии.
Лучший способ сделать это — проверить его тщательно и последовательно.