Blokzincir Test Süreçleri
Blokzincir nedir ve nasıl çalışır?
Dağıtık Kayıt Defteri Teknolojisi (DKT) (Distributed Ledger Technology) çoklu ağ katılımcıları ya da düğümler tarafından yönetilen merkezi olmayan bir veritabanını temsil eder. Blokzincir, işlemlerin özet (hash) değiştirilemez bir kriptografik imza ile bir blok içerisinde kaydedildiği bir DKT çeşididir. Blokzincir teknolojisi, güvenli ödemeler ve finans başta olmak üzere [1] nesnelerin interneti, enerji ve sağlık gibi birçok sektörde kullanılır.
Blokzincirde işlemler zaman sıralı bloklar halinde gruplanır. Her blok önceki blokun özetini, zaman damgasını ve işlemlerini içerir. Güven merkezi olmayan bir yapıya sahiptir, yani işlemleri doğrulayan merkezi bir otorite bulunmaz. Onun yerine blokzincir ağındaki her düğüm blokzincirin yerel kopyasını saklar ve düğümler işlemin doğruluğu üzerinde anlaşırsa işlemin doğru olduğu varsayılır. Blokzincir işlem akışı aşağıda gibidir [2] (bkz. Şekil 1):
1. Son kullanıcı bir işlem talebinde bulunur.
2. İşlemin temsil edildiği bir blok üretilir.
3. Blok ağdaki tüm düğümlere gönderilir.
4. Düğümler işlemi doğrular.
5. Blok, blokzincire eklenir ve yapılan değişiklik ağda yayımlanır.
6. İşlem tamamlanır.
Geleneksel merkezi çözümlere kıyasla, blokzincirin değişmezlik, güvenlik, hata toleransı ve şeffaflık avantajları bulunmaktadır. Ancak, dağıtık yapısı ve işlem doğrulama karmaşıklığı nedeniyle ölçekleme sorunları yaşanabilmektedir; ağdaki düğüm sayısının artması ve blok boyutunun büyümesi ile gecikme süresinin artması, iş/zaman oranının düşmesi, vb. nedenlerle başarım olumsuz etkilenebilmektedir [3].
Blokzincir Test İhtiyacı ve Zorlukları
Blokzincir-tabanlı bir uygulamanın test edilmesi, kalitesi ve güvenirliğinin sağlanması açısından önemlidir. Teknolojisinin değiştirilemez doğası ve ölçekleme sorunları nedeniyle, blokzincirin test edilmesi standart yazılım uygulamalarının testinden daha kritiktir ve bu testler oldukça farklıdır. Her yazılım uygulamasında olduğu gibi, blokzincir uygulamasının test stratejisinin belirlenmesi kritik öneme sahiptir. Bunun için blokzincir teknolojisi ve yazılım uygulamaları hakkında derinlemesine bilgi birikimi gerekir. Kalitesiz bir test stratejisi etkisiz blokzincir uygulama testine yol açarak güvenirliğini ve kalitesini riske atar. Blokzincir uygulamaları test etmek için blokzincir özelinde geliştirilen doğru test aracının kullanılması gerekir.
Fonksiyonel, güvenlik, performans ve entegrasyon testleri gibi standart test tekniklerine ek olarak, blokzinciri test etmek için bazı özel test tekniklerine ihtiyaç duyulur [4], [5], [2].
- Application Programming Interface (API) testi: Uygulamaların etkileşimi ile blokzincir ekosistemi girdi ve çıktıları denetlenerek istek ve cevapların doğru bir şekilde formatlanmasını ve işlenmesini sağlar.
- Fonksiyonel test: Tüm kullanım senaryoları ve ilgili iş süreçleri değerlendirilerek uygulamanın doğru çalıştığının kontrol edilmesidir. Blokzincirde fonksiyonel test ile blok boyutu, zincir uzunluğu, veri iletiminin doğruluğu ve blok eklemenin doğru yapılıp yapılmadığı kontrol edilir. Ayrıca blokzincirin düzgün çalışmasını sağlamak için ağdaki düğümlerin birbirinden bağımsız olarak test edilmesi gerekir. Düğümler arasında konsensüs olduğunun ve ağdaki işlemlerin doğru bir şekilde sıralandığının doğrulanması son kullanıcının istikrarını ve üretkenliğini sağlayacaktır.
- Entegrasyon testi: Farklı sistem ve ortamlar arasında blokzincir uygulamalarının entegrasyonu zordur. Bu nedenle, entegrasyon testi arayüzler veya sistem bileşenleri arasındaki entegrasyonun beklendiği gibi çalıştığını doğrulamak açısından gereklidir.
- Başarım testi: Blokzincir uygulamalardaki en önemli ölçütlerden biri hızdır. Ağ boyutu ve işlem sayısına göre gecikme süresi ve başarım değişkenlik gösterir. Başarım testi darboğazların tespiti, başarım metrikleri tanımlama ve uygulamanın canlıya alınması için hazır olup olmadığını değerlendirmek için gereklidir. Ana başarım metrikleri okuma gecikme süresi, okuma iş/zaman oranı, işlem gecikme süresi ve işlem iş/zaman oranı gibi metrikleri içerebilir. Blok ve zincir boyutunu test etmek de önemlidir.
- Güvenlik testi: Güvenlik testi, kullanıcı seviyesi, ağ seviyesi ve madencilik seviyesinde güvenlik zafiyetlerine sahip blokzincir uygulamaların geliştirilmesini önlemede kritiktir. Bu bağlamda, örneğin, ödeme veya üçüncü şahıs ağ geçidi, blokzincir hafıza ve veri bütünlüğü testi, akıllı sözleşme uygulanabilirliği ve spesifikasyona uyumluluk kontrolleri değerlendirilebilir.
- Akıllı Sözleşme Testi: Bu özelleştirilmiş test akıllı sözleşmelerin gerçek-zamanlı işlem denetimini gerçekleştirmesi nedeniyle geleneksel testlere göre oldukça farklı ve önemlidir. Sözleşme bir güvenlik zafiyeti veya hatalı bir şekilde oluşturulursa düzeltilmesi mümkün değildir.
Blokzincir Test Araçları ve Altyapıları
Blokzincir test araçları, servisleri ve altyapı örnekleri aşağıda özetlenmiştir [6], [7], [8]:
· Blokzincir Testnet: Gerçek fon veya ana zinciri kullanmadan deneysel ve test amaçlı olarak kullanılan bir blokzincir örneğidir.
· BitcoinJ: Test faaliyetlerine ve gerçek Bitcoin (BTC) ağı ile etkileşim olanağı sağlayan BTC-tabanlı uygulamalar için geliştirilmiş bir Java-tabanlı kütüphanedir.
· Corda: Junit ile yazılmış birim, entegrasyon, duman, yük test araçları olan açık kaynak DKT platformudur.
· Embark: Farklı sistemlerde çalışan merkezi olmayan uygulamalar (decentralized applications (dApps)) için geliştirilmiş test altyapısıdır. Ethereum Virtual Machine (EVM) blokzincire otomatik olarak akıllı sözleşmeleri konuşlandırır.
· Ethereum Tester: Blokzincir uygulamalarını geliştirmek için kullanılan, kurulumu kolay olan bir açık kaynak test kütüphanesidir. Ethereum ve blokzincir-tabanlı uygulamaları ve çeşitli test gereksinimleri test etmek için API desteği sağlar.
· Ethereum Testnet: Ethereum testnet’e Ropsten, Kovan, ve Rinkeby örnek verilebilir. Ropsten canlı bir Ethereum ana ağ (mainnet)’a benzerliği nedeniyle genelde tercih edilen çözümdür. Ancak, doğrulama yönteminin Ethereum’unkine benzer olması nedeniyle Kocan ve Rinkeby’ye göre daha az güvenilirdir; bu nedenle spam ataklarına karşı zafiyeti bulunmaktadır. Öte yandan, Kocan ve Rinkeby daha düşük zincir veri boyutları destekler ve gerçek ether madenciliğini destekleyemez.
· Exonum Testkit: Senkron bir sistemde ağ operasyonu ve konsensüs algoritmasından bağımsız olarak API ve işlem yürütme testleri için kullanılır.
· Ganache (eski adı Testrpc): Ethereum sözleşmeleri yerel olarak test etmek için kullanılır.
· Hyperledger Composer: Blokzincir uygulama geliştirmede kullanılan bir açık kaynak araçtır. Etkileşimli otomatik birim ve sistem testine olanak sağlamaktadır.
· IBM Hyperledger: Docker ve Hyperledger Composer tarayıcısı ile blokzincir ağını modelleme ve test etmede kullanılan bir açık kaynak araçtır. Otomatik sistem testleri, etkileşimli testleri ve otomasyon birim testlerini desteklemektedir.
· Manticore: Python arayüzü ile ikilileri (binaries) analiz etmede ve Ethereum akıllı sözleşmeleri test etmede kullanılan açık kaynak ve platform bağımsız dinamik sembolik yürütme altyapısıdır.
· Populus: Ethereum sözleşmelerini test etmede kullanılan bir Python altyapısıdır.
· Truffle: dApps geliştirmek için kullanılan bir Ethereum-tabanlı blokzincir test altyapısıdır. Otomatik sözleşme testi için JavaScript ve Solidity ile otomatik test yazımına olanak sağlar.
Öte yandan SAP Blockchain, Blocko, Blockstream, ve Peer Ledger gibi blokzincir test hizmetleri (Blockchain-as-a-Service (BaaS)) veren şirketler de bulunmaktadır.
Sonuçlar
Blokzincir sisteminin güvenirliğini sağlamak için yüksek veri bütünlüğü, güvenlik, güvenilirlik ve düğüm gizliliğinin sağlanması gerekmektedir. Bu nedenle blokzinciri test etmek kritiktir. Blokzincir testleri API, fonksiyonel, performans, güvenlik, düğüm, akıllı sözleşme, ve entegrasyon testi olarak özetlenebilir. Yazılım altyapıları, yazılım araçları ve bulut tabanlı blokzincir hizmetler dahil olmak üzere piyasada çeşitli blokzincir test araçları bulunmaktadır. Şirketin stratejisi ve test ihtiyacına göre uygun blokzincir test aracı seçilmelidir.
Referanslar
[1] https://www.fintechnews.org/more-central-banks-are-testing-blockchain-technology/
[2] https://www.guru99.com/blockchain-testing.html
[3] S. Fan, S. Ghaemi, H. Khazaei ve P. Musilek, «Performance Evaluation of Blockchain Systems: A Systematic Survey,» IEEE Access, 2020
[4] https://www.softwaretestingmaterial.com/blockchain-testing-tutorial/
[5] https://binaryinformatics.com/testing-blockchain-application/
[6] https://azevedorafaela.com/tag/corda-tests/
[7] https://www.impactqa.com/blog/5-topmost-tools-for-blockchainapp-testing/