স্মার্ট কন্ট্রাক্ট টেস্টিং
পেজ সর্বশেষ আপডেট: ২৬ ফেব্রুয়ারী, ২০২৬
ইথিরিয়ামের মতো পাবলিক ব্লকচেইনগুলো ইমমিউটেবল, যার ফলে ডিপ্লয়মেন্টের পরে একটি স্মার্ট কন্ট্রাক্ট কোড পরিবর্তন করা কঠিন হয়ে যায়। "ভার্চুয়াল আপগ্রেড" করার জন্য কন্ট্রাক্ট আপগ্রেড প্যাটার্ন বিদ্যমান, তবে এগুলো প্রয়োগ করা কঠিন এবং এর জন্য সামাজিক কনসেন্সাস প্রয়োজন। তাছাড়া, একটি আপগ্রেড শুধুমাত্র একটি ত্রুটি আবিষ্কার হওয়ার পরেই ঠিক করতে পারে—যদি কোনো আক্রমণকারী প্রথমে দুর্বলতাটি আবিষ্কার করে, তবে আপনার স্মার্ট কন্ট্রাক্ট শোষণের ঝুঁকিতে থাকে।
এই কারণগুলোর জন্য, মেইননেট-এ ডিপ্লয় করার আগে স্মার্ট কন্ট্রাক্ট টেস্টিং করা নিরাপত্তার জন্য একটি ন্যূনতম প্রয়োজনীয়তা। কন্ট্রাক্ট টেস্টিং এবং কোডের সঠিকতা মূল্যায়নের জন্য অনেক কৌশল রয়েছে; আপনি কোনটি বেছে নেবেন তা আপনার প্রয়োজনের উপর নির্ভর করে। তবুও, বিভিন্ন টুল এবং পদ্ধতির সমন্বয়ে তৈরি একটি টেস্ট স্যুট কন্ট্রাক্ট কোডের ছোট এবং বড় উভয় ধরনের নিরাপত্তা ত্রুটি ধরার জন্য আদর্শ।
পূর্বশর্ত
এই পেজটি ইথিরিয়াম নেটওয়ার্ক-এ ডিপ্লয় করার আগে কীভাবে স্মার্ট কন্ট্রাক্ট টেস্টিং করতে হয় তা ব্যাখ্যা করে। এটি ধরে নেয় যে আপনি স্মার্ট কন্ট্রাক্ট-এর সাথে পরিচিত।
স্মার্ট কন্ট্রাক্ট টেস্টিং কী?
স্মার্ট কন্ট্রাক্ট টেস্টিং হলো এমন একটি প্রক্রিয়া যার মাধ্যমে যাচাই করা হয় যে একটি স্মার্ট কন্ট্রাক্ট-এর কোড প্রত্যাশা অনুযায়ী কাজ করছে কিনা। একটি নির্দিষ্ট স্মার্ট কন্ট্রাক্ট নির্ভরযোগ্যতা, ব্যবহারযোগ্যতা এবং নিরাপত্তার প্রয়োজনীয়তা পূরণ করে কিনা তা পরীক্ষা করার জন্য টেস্টিং কার্যকর।
যদিও পদ্ধতিগুলো ভিন্ন হতে পারে, বেশিরভাগ টেস্টিং পদ্ধতিতে একটি স্মার্ট কন্ট্রাক্ট-কে এমন কিছু ছোট ডেটা স্যাম্পল দিয়ে এক্সিকিউট করতে হয় যা এটি পরিচালনা করবে বলে আশা করা হয়। যদি কন্ট্রাক্টটি স্যাম্পল ডেটার জন্য সঠিক ফলাফল তৈরি করে, তবে ধরে নেওয়া হয় যে এটি সঠিকভাবে কাজ করছে। বেশিরভাগ টেস্টিং টুল টেস্ট কেস (opens in a new tab) লেখা এবং এক্সিকিউট করার জন্য রিসোর্স প্রদান করে, যাতে যাচাই করা যায় যে একটি কন্ট্রাক্ট-এর এক্সিকিউশন প্রত্যাশিত ফলাফলের সাথে মেলে কিনা।
স্মার্ট কন্ট্রাক্ট টেস্টিং করা কেন গুরুত্বপূর্ণ?
যেহেতু স্মার্ট কন্ট্রাক্টগুলো প্রায়শই উচ্চ-মূল্যের আর্থিক সম্পদ পরিচালনা করে, তাই ছোটখাটো প্রোগ্রামিং ত্রুটিগুলো ব্যবহারকারীদের জন্য বিপুল ক্ষতির (opens in a new tab) কারণ হতে পারে এবং প্রায়শই হয়ে থাকে। তবে কঠোর টেস্টিং আপনাকে একটি স্মার্ট কন্ট্রাক্ট-এর কোডের ত্রুটি এবং সমস্যাগুলো প্রাথমিকভাবে আবিষ্কার করতে এবং মেইননেট-এ লঞ্চ করার আগে সেগুলো ঠিক করতে সাহায্য করতে পারে।
যদিও কোনো বাগ আবিষ্কৃত হলে একটি কন্ট্রাক্ট আপগ্রেড করা সম্ভব, তবে আপগ্রেডগুলো জটিল এবং সঠিকভাবে পরিচালনা না করা হলে ত্রুটি দেখা দিতে পারে (opens in a new tab)। একটি কন্ট্রাক্ট আপগ্রেড করা ইমমিউটেবল নীতির পরিপন্থী এবং ব্যবহারকারীদের উপর অতিরিক্ত বিশ্বাসের অনুমান চাপিয়ে দেয়। বিপরীতে, আপনার কন্ট্রাক্ট টেস্টিং করার জন্য একটি বিস্তৃত পরিকল্পনা স্মার্ট কন্ট্রাক্ট-এর নিরাপত্তা ঝুঁকি কমায় এবং ডিপ্লয় করার পরে জটিল লজিক আপগ্রেড করার প্রয়োজনীয়তা হ্রাস করে।
স্মার্ট কন্ট্রাক্ট টেস্টিংয়ের পদ্ধতিগুলো
ইথিরিয়াম স্মার্ট কন্ট্রাক্ট টেস্টিংয়ের পদ্ধতিগুলো দুটি বিস্তৃত বিভাগে পড়ে: অটোমেটেড টেস্টিং এবং ম্যানুয়াল টেস্টিং। অটোমেটেড টেস্টিং এবং ম্যানুয়াল টেস্টিং অনন্য সুবিধা এবং ট্রেডঅফ অফার করে, তবে আপনি আপনার কন্ট্রাক্টগুলো বিশ্লেষণ করার জন্য একটি শক্তিশালী পরিকল্পনা তৈরি করতে উভয়কে একত্রিত করতে পারেন।
অটোমেটেড টেস্টিং
অটোমেটেড টেস্টিং এমন টুল ব্যবহার করে যা স্বয়ংক্রিয়ভাবে একটি স্মার্ট কন্ট্রাক্ট-এর কোডে এক্সিকিউশনের ত্রুটিগুলো পরীক্ষা করে। অটোমেটেড টেস্টিংয়ের সুবিধা আসে কন্ট্রাক্ট কার্যকারিতা মূল্যায়নের জন্য স্ক্রিপ্ট (opens in a new tab) ব্যবহার করার মাধ্যমে। স্ক্রিপ্ট করা টেস্টগুলো ন্যূনতম মানুষের হস্তক্ষেপের সাথে বারবার চালানোর জন্য শিডিউল করা যেতে পারে, যা অটোমেটেড টেস্টিং-কে ম্যানুয়াল টেস্টিং পদ্ধতির চেয়ে বেশি দক্ষ করে তোলে।
অটোমেটেড টেস্টিং বিশেষত তখন কার্যকর যখন টেস্টগুলো পুনরাবৃত্তিমূলক এবং সময়সাপেক্ষ হয়; ম্যানুয়ালি করা কঠিন হয়; মানুষের ভুলের প্রবণতা থাকে; অথবা গুরুত্বপূর্ণ কন্ট্রাক্ট ফাংশন মূল্যায়নের সাথে জড়িত থাকে। তবে অটোমেটেড টেস্টিং টুলগুলোর কিছু অসুবিধাও থাকতে পারে—এগুলো নির্দিষ্ট কিছু বাগ মিস করতে পারে এবং অনেক ফলস পজিটিভ (opens in a new tab) তৈরি করতে পারে। তাই, স্মার্ট কন্ট্রাক্ট-এর জন্য ম্যানুয়াল টেস্টিংয়ের সাথে অটোমেটেড টেস্টিং যুক্ত করা আদর্শ।
ম্যানুয়াল টেস্টিং
ম্যানুয়াল টেস্টিং মানুষের সাহায্যে করা হয় এবং একটি স্মার্ট কন্ট্রাক্ট-এর সঠিকতা বিশ্লেষণ করার সময় আপনার টেস্ট স্যুটের প্রতিটি টেস্ট কেস একের পর এক এক্সিকিউট করার সাথে জড়িত। এটি অটোমেটেড টেস্টিংয়ের মতো নয় যেখানে আপনি একই সাথে একটি কন্ট্রাক্ট-এ একাধিক বিচ্ছিন্ন টেস্ট চালাতে পারেন এবং সমস্ত ব্যর্থ এবং পাস করা টেস্টগুলো দেখানো একটি রিপোর্ট পেতে পারেন।
ম্যানুয়াল টেস্টিং একজন ব্যক্তি দ্বারা একটি লিখিত টেস্ট প্ল্যান অনুসরণ করে করা যেতে পারে যা বিভিন্ন টেস্ট পরিস্থিতি কভার করে। ম্যানুয়াল টেস্টিংয়ের অংশ হিসেবে আপনি একাধিক ব্যক্তি বা গ্রুপকে একটি নির্দিষ্ট সময়ের মধ্যে একটি স্মার্ট কন্ট্রাক্ট-এর সাথে ইন্টারঅ্যাক্ট করাতেও পারেন। টেস্টাররা প্রত্যাশিত আচরণের বিপরীতে কন্ট্রাক্ট-এর প্রকৃত আচরণের তুলনা করবে এবং যেকোনো পার্থক্যকে বাগ হিসেবে চিহ্নিত করবে।
কার্যকর ম্যানুয়াল টেস্টিংয়ের জন্য উল্লেখযোগ্য রিসোর্স (দক্ষতা, সময়, অর্থ এবং প্রচেষ্টা) প্রয়োজন, এবং মানুষের ভুলের কারণে টেস্ট এক্সিকিউট করার সময় নির্দিষ্ট কিছু ত্রুটি মিস করা সম্ভব। তবে ম্যানুয়াল টেস্টিং উপকারীও হতে পারে—উদাহরণস্বরূপ, একজন মানব টেস্টার (যেমন, একজন অডিটর) এমন এজ কেসগুলো সনাক্ত করতে তার অন্তর্দৃষ্টি ব্যবহার করতে পারে যা একটি অটোমেটেড টেস্টিং টুল মিস করতে পারে।
স্মার্ট কন্ট্রাক্ট-এর জন্য অটোমেটেড টেস্টিং
ইউনিট টেস্টিং
ইউনিট টেস্টিং কন্ট্রাক্ট ফাংশনগুলোকে আলাদাভাবে মূল্যায়ন করে এবং প্রতিটি উপাদান সঠিকভাবে কাজ করে কিনা তা পরীক্ষা করে। ভালো ইউনিট টেস্টগুলো সহজ, দ্রুত চালানোর মতো হওয়া উচিত এবং টেস্ট ব্যর্থ হলে কী ভুল হয়েছে তার একটি পরিষ্কার ধারণা প্রদান করা উচিত।
ইউনিট টেস্টগুলো ফাংশনগুলো প্রত্যাশিত মান প্রদান করে কিনা এবং ফাংশন এক্সিকিউশনের পরে কন্ট্রাক্ট স্টোরেজ সঠিকভাবে আপডেট হয় কিনা তা পরীক্ষা করার জন্য কার্যকর। তাছাড়া, একটি কন্ট্রাক্ট-এর কোডবেসে পরিবর্তন করার পরে ইউনিট টেস্ট চালানো নিশ্চিত করে যে নতুন লজিক যোগ করার ফলে কোনো ত্রুটি দেখা দেয়নি। কার্যকর ইউনিট টেস্ট চালানোর জন্য নিচে কিছু নির্দেশিকা দেওয়া হলো:
স্মার্ট কন্ট্রাক্ট ইউনিট টেস্টিংয়ের জন্য নির্দেশিকা
১. আপনার কন্ট্রাক্ট-এর বিজনেস লজিক এবং ওয়ার্কফ্লো বুঝুন
ইউনিট টেস্ট লেখার আগে, একটি স্মার্ট কন্ট্রাক্ট কী কী কার্যকারিতা অফার করে এবং ব্যবহারকারীরা কীভাবে সেই ফাংশনগুলো অ্যাক্সেস এবং ব্যবহার করবে তা জানা সহায়ক। এটি বিশেষত হ্যাপি পাথ টেস্ট (opens in a new tab) চালানোর জন্য কার্যকর যা নির্ধারণ করে যে একটি কন্ট্রাক্ট-এর ফাংশনগুলো বৈধ ব্যবহারকারীর ইনপুটগুলোর জন্য সঠিক আউটপুট প্রদান করে কিনা। আমরা একটি নিলাম কন্ট্রাক্ট (opens in a new tab)-এর এই (সংক্ষিপ্ত) উদাহরণটি ব্যবহার করে এই ধারণাটি ব্যাখ্যা করব
1constructor(2 uint biddingTime,3 address payable beneficiaryAddress4 ) {5 beneficiary = beneficiaryAddress;6 auctionEndTime = block.timestamp + biddingTime;7 }89function bid() external payable {1011 if (block.timestamp > auctionEndTime)12 revert AuctionAlreadyEnded();1314 if (msg.value <= highestBid)15 revert BidNotHighEnough(highestBid);1617 if (highestBid != 0) {18 pendingReturns[highestBidder] += highestBid;19 }20 highestBidder = msg.sender;21 highestBid = msg.value;22 emit HighestBidIncreased(msg.sender, msg.value);23 }2425 function withdraw() external returns (bool) {26 uint amount = pendingReturns[msg.sender];27 if (amount > 0) {28 pendingReturns[msg.sender] = 0;2930 if (!payable(msg.sender).send(amount)) {31 pendingReturns[msg.sender] = amount;32 return false;33 }34 }35 return true;36 }3738function auctionEnd() external {39 if (block.timestamp < auctionEndTime)40 revert AuctionNotYetEnded();41 if (ended)42 revert AuctionEndAlreadyCalled();4344 ended = true;45 emit AuctionEnded(highestBidder, highestBid);4647 beneficiary.transfer(highestBid);48 }49}সব দেখানএটি একটি সাধারণ নিলাম কন্ট্রাক্ট যা বিডিং পিরিয়ডের সময় বিড গ্রহণ করার জন্য ডিজাইন করা হয়েছে। যদি highestBid বৃদ্ধি পায়, তবে পূর্ববর্তী সর্বোচ্চ দরদাতা তাদের অর্থ ফেরত পায়; বিডিং পিরিয়ড শেষ হয়ে গেলে, beneficiary তাদের অর্থ পাওয়ার জন্য কন্ট্রাক্ট-কে কল করে।
এই ধরনের একটি কন্ট্রাক্ট-এর জন্য ইউনিট টেস্টগুলো বিভিন্ন ফাংশন কভার করবে যা একজন ব্যবহারকারী কন্ট্রাক্ট-এর সাথে ইন্টারঅ্যাক্ট করার সময় কল করতে পারে। একটি উদাহরণ হতে পারে এমন একটি ইউনিট টেস্ট যা পরীক্ষা করে যে নিলাম চলাকালীন কোনো ব্যবহারকারী বিড করতে পারে কিনা (অর্থাৎ, bid() কল সফল হয়) অথবা এমন একটি টেস্ট যা পরীক্ষা করে যে কোনো ব্যবহারকারী বর্তমান highestBid-এর চেয়ে বেশি বিড করতে পারে কিনা।
একটি কন্ট্রাক্ট-এর অপারেশনাল ওয়ার্কফ্লো বোঝা ইউনিট টেস্ট লিখতেও সাহায্য করে যা পরীক্ষা করে যে এক্সিকিউশন প্রয়োজনীয়তা পূরণ করে কিনা। উদাহরণস্বরূপ, নিলাম কন্ট্রাক্টটি নির্দিষ্ট করে যে নিলাম শেষ হয়ে গেলে ব্যবহারকারীরা বিড করতে পারবে না (অর্থাৎ, যখন auctionEndTime, block.timestamp-এর চেয়ে কম হয়)। সুতরাং, একজন ডেভেলপার এমন একটি ইউনিট টেস্ট চালাতে পারে যা পরীক্ষা করে যে নিলাম শেষ হয়ে গেলে bid() ফাংশনে কল সফল হয় নাকি ব্যর্থ হয় (অর্থাৎ, যখন auctionEndTime > block.timestamp)।
২. কন্ট্রাক্ট এক্সিকিউশন সম্পর্কিত সমস্ত অনুমান মূল্যায়ন করুন
একটি কন্ট্রাক্ট-এর এক্সিকিউশন সম্পর্কে যেকোনো অনুমান ডকুমেন্ট করা এবং সেই অনুমানগুলোর বৈধতা যাচাই করার জন্য ইউনিট টেস্ট লেখা গুরুত্বপূর্ণ। অপ্রত্যাশিত এক্সিকিউশনের বিরুদ্ধে সুরক্ষা প্রদান করার পাশাপাশি, টেস্টিং অ্যাসারশনগুলো আপনাকে এমন অপারেশনগুলো সম্পর্কে ভাবতে বাধ্য করে যা একটি স্মার্ট কন্ট্রাক্ট-এর নিরাপত্তা মডেল ভেঙে দিতে পারে। একটি দরকারী টিপ হলো "হ্যাপি ইউজার টেস্ট"-এর বাইরে গিয়ে নেতিবাচক টেস্ট লেখা যা পরীক্ষা করে যে ভুল ইনপুটগুলোর জন্য কোনো ফাংশন ব্যর্থ হয় কিনা।
অনেক ইউনিট টেস্টিং ফ্রেমওয়ার্ক আপনাকে অ্যাসারশন তৈরি করতে দেয়—সহজ স্টেটমেন্ট যা বলে যে একটি কন্ট্রাক্ট কী করতে পারে এবং কী করতে পারে না—এবং এক্সিকিউশনের অধীনে সেই অ্যাসারশনগুলো টিকে থাকে কিনা তা দেখার জন্য টেস্ট চালাতে দেয়। পূর্বে বর্ণিত নিলাম কন্ট্রাক্ট-এ কাজ করা একজন ডেভেলপার নেতিবাচক টেস্ট চালানোর আগে এর আচরণ সম্পর্কে নিম্নলিখিত অ্যাসারশনগুলো তৈরি করতে পারে:
-
নিলাম শেষ হয়ে গেলে বা শুরু না হলে ব্যবহারকারীরা বিড করতে পারবে না।
-
যদি কোনো বিড গ্রহণযোগ্য থ্রেশহোল্ডের নিচে হয় তবে নিলাম কন্ট্রাক্টটি রিভার্ট করে।
-
যে ব্যবহারকারীরা বিড জিততে ব্যর্থ হয় তাদের ফান্ড ক্রেডিট করা হয়
নোট: অনুমানগুলো পরীক্ষা করার আরেকটি উপায় হলো এমন টেস্ট লেখা যা একটি কন্ট্রাক্ট-এ ফাংশন মডিফায়ার (opens in a new tab) ট্রিগার করে, বিশেষ করে require, assert, এবং if…else স্টেটমেন্টগুলো।
৩. কোড কভারেজ পরিমাপ করুন
কোড কভারেজ (opens in a new tab) হলো একটি টেস্টিং মেট্রিক যা টেস্ট চলাকালীন এক্সিকিউট হওয়া আপনার কোডের ব্রাঞ্চ, লাইন এবং স্টেটমেন্টের সংখ্যা ট্র্যাক করে। টেস্ট না করা দুর্বলতার ঝুঁকি কমানোর জন্য টেস্টগুলোর ভালো কোড কভারেজ থাকা উচিত। পর্যাপ্ত কভারেজ ছাড়া, আপনি ভুলভাবে ধরে নিতে পারেন যে আপনার কন্ট্রাক্টটি সুরক্ষিত কারণ সমস্ত টেস্ট পাস করেছে, অথচ টেস্ট না করা কোড পাথগুলোতে এখনও দুর্বলতা থাকতে পারে। তবে উচ্চ কোড কভারেজ রেকর্ড করা এই নিশ্চয়তা দেয় যে একটি স্মার্ট কন্ট্রাক্ট-এর সমস্ত স্টেটমেন্ট/ফাংশন সঠিকতার জন্য পর্যাপ্তভাবে পরীক্ষা করা হয়েছে।
৪. সুগঠিত টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করুন
আপনার স্মার্ট কন্ট্রাক্টগুলোর জন্য ইউনিট টেস্ট চালানোর ক্ষেত্রে ব্যবহৃত টুলগুলোর গুণমান অত্যন্ত গুরুত্বপূর্ণ। একটি আদর্শ টেস্টিং ফ্রেমওয়ার্ক হলো সেটি যা নিয়মিত রক্ষণাবেক্ষণ করা হয়; দরকারী বৈশিষ্ট্য প্রদান করে (যেমন, লগিং এবং রিপোর্টিং ক্ষমতা); এবং অবশ্যই অন্যান্য ডেভেলপারদের দ্বারা ব্যাপকভাবে ব্যবহৃত এবং পরীক্ষিত হতে হবে।
Solidity স্মার্ট কন্ট্রাক্টগুলোর জন্য ইউনিট টেস্টিং ফ্রেমওয়ার্কগুলো বিভিন্ন ভাষায় আসে (বেশিরভাগই JavaScript, Python, এবং Rust)। বিভিন্ন টেস্টিং ফ্রেমওয়ার্কের সাথে কীভাবে ইউনিট টেস্ট চালানো শুরু করবেন সে সম্পর্কে তথ্যের জন্য নিচের কিছু গাইড দেখুন:
- Brownie-এর সাথে ইউনিট টেস্ট চালানো (opens in a new tab)
- Foundry-এর সাথে ইউনিট টেস্ট চালানো (opens in a new tab)
- Waffle-এর সাথে ইউনিট টেস্ট চালানো (opens in a new tab)
- Remix-এর সাথে ইউনিট টেস্ট চালানো (opens in a new tab)
- Ape-এর সাথে ইউনিট টেস্ট চালানো (opens in a new tab)
- Hardhat-এর সাথে ইউনিট টেস্ট চালানো (opens in a new tab)
- Wake-এর সাথে ইউনিট টেস্ট চালানো (opens in a new tab)
ইন্টিগ্রেশন টেস্টিং
যেখানে ইউনিট টেস্টিং কন্ট্রাক্ট ফাংশনগুলোকে আলাদাভাবে ডিবাগ করে, সেখানে ইন্টিগ্রেশন টেস্টগুলো একটি স্মার্ট কন্ট্রাক্ট-এর উপাদানগুলোকে সামগ্রিকভাবে মূল্যায়ন করে। ইন্টিগ্রেশন টেস্টিং ক্রস-কন্ট্রাক্ট কল বা একই স্মার্ট কন্ট্রাক্ট-এর বিভিন্ন ফাংশনের মধ্যে ইন্টারঅ্যাকশন থেকে উদ্ভূত সমস্যাগুলো সনাক্ত করতে পারে। উদাহরণস্বরূপ, ইন্টিগ্রেশন টেস্টগুলো ইনহেরিটেন্স (opens in a new tab) এবং ডিপেন্ডেন্সি ইনজেকশনের মতো বিষয়গুলো সঠিকভাবে কাজ করে কিনা তা পরীক্ষা করতে সাহায্য করতে পারে।
ইন্টিগ্রেশন টেস্টিং কার্যকর যদি আপনার কন্ট্রাক্ট একটি মডুলার আর্কিটেকচার গ্রহণ করে বা এক্সিকিউশনের সময় অন্যান্য অনচেইন কন্ট্রাক্টগুলোর সাথে ইন্টারফেস করে। ইন্টিগ্রেশন টেস্ট চালানোর একটি উপায় হলো একটি নির্দিষ্ট উচ্চতায় করা (Forge (opens in a new tab) বা Hardhat (opens in a new tab)-এর মতো টুল ব্যবহার করে) এবং আপনার কন্ট্রাক্ট ও ডিপ্লয় করা কন্ট্রাক্টগুলোর মধ্যে ইন্টারঅ্যাকশন সিমুলেট করা।
ফর্ক করা ব্লকচেইনটি মেইননেট-এর মতোই আচরণ করবে এবং এতে সংশ্লিষ্ট স্টেট এবং ব্যালেন্সসহ একাউন্ট থাকবে। তবে এটি শুধুমাত্র একটি স্যান্ডবক্সড লোকাল ডেভেলপমেন্ট এনভায়রনমেন্ট হিসেবে কাজ করে, যার মানে হলো লেনদেন-এর জন্য আপনার আসল ETH-এর প্রয়োজন হবে না, উদাহরণস্বরূপ, এবং আপনার পরিবর্তনগুলো আসল ইথিরিয়াম প্রটোকল-কে প্রভাবিত করবে না।
প্রপার্টি-ভিত্তিক টেস্টিং
প্রপার্টি-ভিত্তিক টেস্টিং হলো এমন একটি প্রক্রিয়া যা পরীক্ষা করে যে একটি স্মার্ট কন্ট্রাক্ট কিছু সংজ্ঞায়িত প্রপার্টি পূরণ করে কিনা। প্রপার্টিগুলো একটি কন্ট্রাক্ট-এর আচরণ সম্পর্কে এমন তথ্য নিশ্চিত করে যা বিভিন্ন পরিস্থিতিতে সত্য থাকবে বলে আশা করা হয়—একটি স্মার্ট কন্ট্রাক্ট প্রপার্টির উদাহরণ হতে পারে "কন্ট্রাক্ট-এ গাণিতিক অপারেশনগুলো কখনই ওভারফ্লো বা আন্ডারফ্লো হয় না।"
স্ট্যাটিক অ্যানালাইসিস এবং ডাইনামিক অ্যানালাইসিস হলো প্রপার্টি-ভিত্তিক টেস্টিং এক্সিকিউট করার দুটি সাধারণ কৌশল, এবং উভয়ই যাচাই করতে পারে যে একটি প্রোগ্রামের কোড (এই ক্ষেত্রে একটি স্মার্ট কন্ট্রাক্ট) কিছু পূর্বনির্ধারিত প্রপার্টি পূরণ করে কিনা। কিছু প্রপার্টি-ভিত্তিক টেস্টিং টুল প্রত্যাশিত কন্ট্রাক্ট প্রপার্টি সম্পর্কে পূর্বনির্ধারিত নিয়মগুলোর সাথে আসে এবং সেই নিয়মগুলোর বিপরীতে কোড পরীক্ষা করে, অন্যদিকে অন্যগুলো আপনাকে একটি স্মার্ট কন্ট্রাক্ট-এর জন্য কাস্টম প্রপার্টি তৈরি করতে দেয়।
স্ট্যাটিক অ্যানালাইসিস
একটি স্ট্যাটিক অ্যানালাইজার একটি স্মার্ট কন্ট্রাক্ট-এর সোর্স কোড ইনপুট হিসেবে নেয় এবং একটি কন্ট্রাক্ট কোনো প্রপার্টি পূরণ করে কি না তা ঘোষণা করে ফলাফল আউটপুট দেয়। ডাইনামিক অ্যানালাইসিসের বিপরীতে, স্ট্যাটিক অ্যানালাইসিসে সঠিকতার জন্য বিশ্লেষণ করতে কোনো কন্ট্রাক্ট এক্সিকিউট করার প্রয়োজন হয় না। এর পরিবর্তে স্ট্যাটিক অ্যানালাইসিস এক্সিকিউশনের সময় একটি স্মার্ট কন্ট্রাক্ট নিতে পারে এমন সমস্ত সম্ভাব্য পাথ সম্পর্কে যুক্তি দেয় (অর্থাৎ, রানটাইমে কন্ট্রাক্ট-এর অপারেশনের জন্য এর অর্থ কী হবে তা নির্ধারণ করতে সোর্স কোডের কাঠামো পরীক্ষা করে)।
লিন্টিং (opens in a new tab) এবং স্ট্যাটিক টেস্টিং (opens in a new tab) হলো কন্ট্রাক্টগুলোতে স্ট্যাটিক অ্যানালাইসিস চালানোর সাধারণ পদ্ধতি। উভয়ের জন্যই একটি কন্ট্রাক্ট এক্সিকিউশনের লো-লেভেল রিপ্রেজেন্টেশন বিশ্লেষণ করা প্রয়োজন যেমন কম্পাইলার দ্বারা আউটপুট করা অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি (opens in a new tab) এবং কন্ট্রোল ফ্লো গ্রাফ (opens in a new tab)।
বেশিরভাগ ক্ষেত্রে, স্ট্যাটিক অ্যানালাইসিস একটি কন্ট্রাক্ট-এর কোডে অনিরাপদ কনস্ট্রাক্টের ব্যবহার, সিনট্যাক্স ত্রুটি বা কোডিং স্ট্যান্ডার্ড লঙ্ঘনের মতো নিরাপত্তা সমস্যাগুলো সনাক্ত করার জন্য কার্যকর। তবে, স্ট্যাটিক অ্যানালাইজারগুলো সাধারণত গভীর দুর্বলতাগুলো সনাক্ত করতে অক্ষম বলে পরিচিত, এবং অতিরিক্ত ফলস পজিটিভ তৈরি করতে পারে।
ডাইনামিক অ্যানালাইসিস
ডাইনামিক অ্যানালাইসিস একটি স্মার্ট কন্ট্রাক্ট-এর ফাংশনগুলোতে সিম্বলিক ইনপুট (যেমন, সিম্বলিক এক্সিকিউশন (opens in a new tab)-এ) বা কংক্রিট ইনপুট (যেমন, ফাজিং (opens in a new tab)-এ) তৈরি করে যাতে দেখা যায় যে কোনো এক্সিকিউশন ট্রেস নির্দিষ্ট প্রপার্টিগুলো লঙ্ঘন করে কিনা। এই ধরনের প্রপার্টি-ভিত্তিক টেস্টিং ইউনিট টেস্টগুলো থেকে আলাদা কারণ টেস্ট কেসগুলো একাধিক পরিস্থিতি কভার করে এবং একটি প্রোগ্রাম টেস্ট কেস তৈরির কাজ পরিচালনা করে।
ফাজিং (opens in a new tab) হলো স্মার্ট কন্ট্রাক্টগুলোতে নির্বিচার প্রপার্টি যাচাই করার জন্য একটি ডাইনামিক অ্যানালাইসিস কৌশলের উদাহরণ। একটি ফাজার একটি সংজ্ঞায়িত ইনপুট ভ্যালুর র্যান্ডম বা বিকৃত বৈচিত্র্যসহ একটি টার্গেট কন্ট্রাক্ট-এ ফাংশনগুলোকে ইনভোক করে। যদি স্মার্ট কন্ট্রাক্টটি কোনো এরর স্টেট-এ প্রবেশ করে (যেমন, যেখানে একটি অ্যাসারশন ব্যর্থ হয়), তবে সমস্যাটি ফ্ল্যাগ করা হয় এবং যে ইনপুটগুলো এক্সিকিউশনকে দুর্বল পাথের দিকে নিয়ে যায় সেগুলো একটি রিপোর্টে তৈরি করা হয়।
ফাজিং একটি স্মার্ট কন্ট্রাক্ট-এর ইনপুট ভ্যালিডেশন মেকানিজম মূল্যায়ন করার জন্য কার্যকর কারণ অপ্রত্যাশিত ইনপুটগুলোর অনুপযুক্ত পরিচালনার ফলে অনাকাঙ্ক্ষিত এক্সিকিউশন হতে পারে এবং বিপজ্জনক প্রভাব তৈরি করতে পারে। এই ধরনের প্রপার্টি-ভিত্তিক টেস্টিং অনেক কারণে আদর্শ হতে পারে:
-
অনেক পরিস্থিতি কভার করার জন্য টেস্ট কেস লেখা কঠিন। একটি প্রপার্টি টেস্টের জন্য শুধুমাত্র প্রয়োজন যে আপনি একটি আচরণ এবং সেই আচরণ পরীক্ষা করার জন্য ডেটার একটি রেঞ্জ সংজ্ঞায়িত করুন—প্রোগ্রামটি স্বয়ংক্রিয়ভাবে সংজ্ঞায়িত প্রপার্টির উপর ভিত্তি করে টেস্ট কেস তৈরি করে।
-
আপনার টেস্ট স্যুট প্রোগ্রামের মধ্যে সমস্ত সম্ভাব্য পাথ পর্যাপ্তভাবে কভার নাও করতে পারে। এমনকি ১০০% কভারেজ থাকা সত্ত্বেও, এজ কেসগুলো মিস করা সম্ভব।
-
ইউনিট টেস্টগুলো প্রমাণ করে যে একটি কন্ট্রাক্ট স্যাম্পল ডেটার জন্য সঠিকভাবে এক্সিকিউট করে, তবে স্যাম্পলের বাইরের ইনপুটগুলোর জন্য কন্ট্রাক্টটি সঠিকভাবে এক্সিকিউট করে কিনা তা অজানা থেকে যায়। প্রপার্টি টেস্টগুলো একটি প্রদত্ত ইনপুট ভ্যালুর একাধিক বৈচিত্র্যসহ একটি টার্গেট কন্ট্রাক্ট এক্সিকিউট করে যাতে অ্যাসারশন ব্যর্থতার কারণ হওয়া এক্সিকিউশন ট্রেসগুলো খুঁজে পাওয়া যায়। সুতরাং, একটি প্রপার্টি টেস্ট আরও গ্যারান্টি প্রদান করে যে একটি কন্ট্রাক্ট ইনপুট ডেটার একটি বিস্তৃত ক্লাসের জন্য সঠিকভাবে এক্সিকিউট করে।
স্মার্ট কন্ট্রাক্ট-এর জন্য প্রপার্টি-ভিত্তিক টেস্টিং চালানোর নির্দেশিকা
প্রপার্টি-ভিত্তিক টেস্টিং চালানো সাধারণত একটি প্রপার্টি (যেমন, ইন্টিজার ওভারফ্লো (opens in a new tab)-এর অনুপস্থিতি) বা প্রপার্টিগুলোর সংগ্রহ সংজ্ঞায়িত করার মাধ্যমে শুরু হয় যা আপনি একটি স্মার্ট কন্ট্রাক্ট-এ যাচাই করতে চান। প্রপার্টি টেস্ট লেখার সময় লেনদেন ইনপুটগুলোর জন্য প্রোগ্রামটি যে রেঞ্জের মধ্যে ডেটা তৈরি করতে পারে তা সংজ্ঞায়িত করারও প্রয়োজন হতে পারে।
একবার সঠিকভাবে কনফিগার করা হলে, প্রপার্টি টেস্টিং টুলটি র্যান্ডমভাবে তৈরি করা ইনপুটগুলোর সাথে আপনার স্মার্ট কন্ট্রাক্ট ফাংশনগুলো এক্সিকিউট করবে। যদি কোনো অ্যাসারশন লঙ্ঘন হয়, তবে আপনার এমন কংক্রিট ইনপুট ডেটাসহ একটি রিপোর্ট পাওয়া উচিত যা মূল্যায়নের অধীনে থাকা প্রপার্টি লঙ্ঘন করে। বিভিন্ন টুলের সাথে প্রপার্টি-ভিত্তিক টেস্টিং চালানো শুরু করতে নিচের কিছু গাইড দেখুন:
- Slither-এর সাথে স্মার্ট কন্ট্রাক্ট-এর স্ট্যাটিক অ্যানালাইসিস (opens in a new tab)
- Wake-এর সাথে স্মার্ট কন্ট্রাক্ট-এর স্ট্যাটিক অ্যানালাইসিস (opens in a new tab)
- Brownie-এর সাথে প্রপার্টি-ভিত্তিক টেস্টিং (opens in a new tab)
- Foundry-এর সাথে কন্ট্রাক্ট ফাজিং (opens in a new tab)
- Echidna-এর সাথে কন্ট্রাক্ট ফাজিং (opens in a new tab)
- Wake-এর সাথে কন্ট্রাক্ট ফাজিং (opens in a new tab)
- Manticore-এর সাথে স্মার্ট কন্ট্রাক্ট-এর সিম্বলিক এক্সিকিউশন (opens in a new tab)
- Mythril-এর সাথে স্মার্ট কন্ট্রাক্ট-এর সিম্বলিক এক্সিকিউশন (opens in a new tab)
স্মার্ট কন্ট্রাক্ট-এর জন্য ম্যানুয়াল টেস্টিং
স্মার্ট কন্ট্রাক্ট-এর ম্যানুয়াল টেস্টিং প্রায়শই অটোমেটেড টেস্ট চালানোর পরে ডেভেলপমেন্ট সাইকেলের শেষের দিকে আসে। এই ধরনের টেস্টিং স্মার্ট কন্ট্রাক্ট-কে একটি সম্পূর্ণ ইন্টিগ্রেটেড প্রোডাক্ট হিসেবে মূল্যায়ন করে যাতে দেখা যায় যে এটি প্রযুক্তিগত প্রয়োজনীয়তাগুলোতে নির্দিষ্ট করা অনুযায়ী কাজ করে কিনা।
একটি লোকাল ব্লকচেইন-এ কন্ট্রাক্ট টেস্টিং
যদিও একটি লোকাল ডেভেলপমেন্ট এনভায়রনমেন্টে করা অটোমেটেড টেস্টিং দরকারী ডিবাগিং তথ্য প্রদান করতে পারে, আপনি জানতে চাইবেন যে আপনার স্মার্ট কন্ট্রাক্ট একটি প্রোডাকশন এনভায়রনমেন্টে কীভাবে আচরণ করে। তবে, মূল ইথিরিয়াম চেইনে ডিপ্লয় করার জন্য গ্যাস ফি লাগে—তাছাড়া আপনার স্মার্ট কন্ট্রাক্ট-এ এখনও বাগ থাকলে আপনি বা আপনার ব্যবহারকারীরা আসল অর্থ হারাতে পারেন।
একটি লোকাল ব্লকচেইন-এ (যা ডেভেলপমেন্ট নেটওয়ার্ক হিসেবেও পরিচিত) আপনার কন্ট্রাক্ট টেস্টিং করা মেইননেট-এ টেস্টিং করার একটি প্রস্তাবিত বিকল্প। একটি লোকাল ব্লকচেইন হলো আপনার কম্পিউটারে স্থানীয়ভাবে চলা ইথিরিয়াম ব্লকচেইন-এর একটি কপি যা ইথিরিয়াম-এর এক্সিকিউশন লেয়ার-এর আচরণ সিমুলেট করে। এর ফলে, আপনি উল্লেখযোগ্য ওভারহেড ছাড়াই একটি কন্ট্রাক্ট-এর সাথে ইন্টারঅ্যাক্ট করার জন্য লেনদেন প্রোগ্রাম করতে পারেন।
একটি লোকাল ব্লকচেইন-এ কন্ট্রাক্ট চালানো ম্যানুয়াল ইন্টিগ্রেশন টেস্টিংয়ের একটি রূপ হিসেবে কার্যকর হতে পারে। স্মার্ট কন্ট্রাক্টগুলো অত্যন্ত কম্পোজেবল, যা আপনাকে বিদ্যমান প্রটোকলগুলোর সাথে ইন্টিগ্রেট করার অনুমতি দেয়—তবে আপনাকে এখনও নিশ্চিত করতে হবে যে এই ধরনের জটিল অনচেইন ইন্টারঅ্যাকশনগুলো সঠিক ফলাফল তৈরি করে।
ডেভেলপমেন্ট নেটওয়ার্ক সম্পর্কে আরও জানুন।
টেস্টনেট-এ কন্ট্রাক্ট টেস্টিং
একটি টেস্ট নেটওয়ার্ক বা টেস্টনেট ঠিক ইথিরিয়াম মেইননেট-এর মতোই কাজ করে, তবে এটি এমন ইথার (ETH) ব্যবহার করে যার কোনো বাস্তব-বিশ্বের মূল্য নেই। একটি টেস্টনেট-এ আপনার কন্ট্রাক্ট ডিপ্লয় করার অর্থ হলো যে কেউ ফান্ড ঝুঁকিতে না ফেলেই এর সাথে ইন্টারঅ্যাক্ট করতে পারে (যেমন, ডিএ্যাপ-এর ফ্রন্টএন্ডের মাধ্যমে)।
এই ধরনের ম্যানুয়াল টেস্টিং ব্যবহারকারীর দৃষ্টিকোণ থেকে আপনার অ্যাপ্লিকেশনের এন্ড-টু-এন্ড ফ্লো মূল্যায়ন করার জন্য কার্যকর। এখানে, বিটা টেস্টাররাও ট্রায়াল রান করতে পারে এবং কন্ট্রাক্ট-এর বিজনেস লজিক এবং সামগ্রিক কার্যকারিতা নিয়ে কোনো সমস্যা রিপোর্ট করতে পারে।
একটি লোকাল ব্লকচেইন-এ টেস্টিং করার পরে একটি টেস্টনেট-এ ডিপ্লয় করা আদর্শ কারণ এটি ইথিরিয়াম ভার্চুয়াল মেশিন-এর আচরণের কাছাকাছি। তাই, বাস্তব-বিশ্বের পরিস্থিতিতে একটি স্মার্ট কন্ট্রাক্ট-এর অপারেশন মূল্যায়ন করার জন্য অনেক ইথিরিয়াম-নেটিভ প্রজেক্টের টেস্টনেট-এ ডিএ্যাপস ডিপ্লয় করা সাধারণ।
ইথিরিয়াম টেস্টনেট সম্পর্কে আরও জানুন।
টেস্টিং বনাম ফরমাল ভেরিফিকেশন
যদিও টেস্টিং নিশ্চিত করতে সাহায্য করে যে একটি কন্ট্রাক্ট কিছু ডেটা ইনপুটের জন্য প্রত্যাশিত ফলাফল প্রদান করে, এটি টেস্ট চলাকালীন ব্যবহৃত না হওয়া ইনপুটগুলোর জন্য চূড়ান্তভাবে একই প্রমাণ করতে পারে না। তাই, একটি স্মার্ট কন্ট্রাক্ট টেস্টিং করা "কার্যকরী সঠিকতা" গ্যারান্টি দিতে পারে না (অর্থাৎ, এটি দেখাতে পারে না যে একটি প্রোগ্রাম ইনপুট ভ্যালুগুলোর সমস্ত সেটের জন্য প্রয়োজনীয় আচরণ করে)।
ফরমাল ভেরিফিকেশন হলো প্রোগ্রামের একটি ফরমাল মডেল ফরমাল স্পেসিফিকেশনের সাথে মেলে কিনা তা পরীক্ষা করে সফটওয়্যারের সঠিকতা মূল্যায়ন করার একটি পদ্ধতি। একটি ফরমাল মডেল হলো একটি প্রোগ্রামের একটি বিমূর্ত গাণিতিক উপস্থাপনা, অন্যদিকে একটি ফরমাল স্পেসিফিকেশন একটি প্রোগ্রামের প্রপার্টিগুলো সংজ্ঞায়িত করে (অর্থাৎ, প্রোগ্রামের এক্সিকিউশন সম্পর্কে যৌক্তিক অ্যাসারশন)।
যেহেতু প্রপার্টিগুলো গাণিতিক পরিভাষায় লেখা হয়, তাই অনুমানের যৌক্তিক নিয়মগুলো ব্যবহার করে সিস্টেমের একটি ফরমাল (গাণিতিক) মডেল একটি স্পেসিফিকেশন পূরণ করে কিনা তা যাচাই করা সম্ভব হয়। সুতরাং, ফরমাল ভেরিফিকেশন টুলগুলো একটি সিস্টেমের সঠিকতার 'গাণিতিক প্রমাণ' তৈরি করে বলে বলা হয়।
টেস্টিংয়ের বিপরীতে, ফরমাল ভেরিফিকেশন ব্যবহার করে যাচাই করা যেতে পারে যে একটি স্মার্ট কন্ট্রাক্ট-এর এক্সিকিউশন স্যাম্পল ডেটার সাথে এক্সিকিউট করার প্রয়োজন ছাড়াই সমস্ত এক্সিকিউশনের জন্য একটি ফরমাল স্পেসিফিকেশন পূরণ করে (অর্থাৎ, এতে কোনো বাগ নেই)। এটি কেবল ডজন ডজন ইউনিট টেস্ট চালানোর সময়ই কমায় না, বরং এটি লুকানো দুর্বলতাগুলো ধরতেও বেশি কার্যকর। তবে, ফরমাল ভেরিফিকেশন কৌশলগুলো তাদের বাস্তবায়নের অসুবিধা এবং উপযোগিতার উপর নির্ভর করে একটি স্পেকট্রামের উপর থাকে।
স্মার্ট কন্ট্রাক্ট-এর জন্য ফরমাল ভেরিফিকেশন সম্পর্কে আরও জানুন।
টেস্টিং বনাম অডিট এবং বাগ বাউন্টি
যেমনটি উল্লেখ করা হয়েছে, কঠোর টেস্টিং খুব কমই একটি কন্ট্রাক্ট-এ বাগের অনুপস্থিতির গ্যারান্টি দিতে পারে; ফরমাল ভেরিফিকেশন পদ্ধতিগুলো সঠিকতার শক্তিশালী নিশ্চয়তা প্রদান করতে পারে তবে বর্তমানে এগুলো ব্যবহার করা কঠিন এবং উল্লেখযোগ্য খরচ বহন করে।
তবুও, আপনি একটি স্বাধীন কোড রিভিউ পেয়ে কন্ট্রাক্ট-এর দুর্বলতাগুলো ধরার সম্ভাবনা আরও বাড়িয়ে তুলতে পারেন। স্মার্ট কন্ট্রাক্ট অডিট (opens in a new tab) এবং বাগ বাউন্টি (opens in a new tab) হলো অন্যদের দিয়ে আপনার কন্ট্রাক্টগুলো বিশ্লেষণ করানোর দুটি উপায়।
অডিটগুলো এমন অডিটরদের দ্বারা করা হয় যারা স্মার্ট কন্ট্রাক্ট-এ নিরাপত্তা ত্রুটি এবং দুর্বল ডেভেলপমেন্ট অনুশীলনের ঘটনাগুলো খুঁজে বের করতে অভিজ্ঞ। একটি অডিটে সাধারণত টেস্টিং (এবং সম্ভবত ফরমাল ভেরিফিকেশন) এর পাশাপাশি সম্পূর্ণ কোডবেসের একটি ম্যানুয়াল রিভিউ অন্তর্ভুক্ত থাকবে।
বিপরীতে, একটি বাগ বাউন্টি প্রোগ্রামে সাধারণত এমন একজন ব্যক্তিকে (যাদের সাধারণত হোয়াইটহ্যাট হ্যাকার (opens in a new tab) হিসেবে বর্ণনা করা হয়) আর্থিক পুরষ্কার দেওয়া জড়িত থাকে যে একটি স্মার্ট কন্ট্রাক্ট-এ দুর্বলতা আবিষ্কার করে এবং এটি ডেভেলপারদের কাছে প্রকাশ করে। বাগ বাউন্টিগুলো অডিটের মতোই কারণ এতে স্মার্ট কন্ট্রাক্ট-এ ত্রুটি খুঁজে পেতে অন্যদের সাহায্য চাওয়া জড়িত।
প্রধান পার্থক্য হলো যে বাগ বাউন্টি প্রোগ্রামগুলো বৃহত্তর ডেভেলপার/হ্যাকার কমিউনিটির জন্য উন্মুক্ত এবং অনন্য দক্ষতা ও অভিজ্ঞতাসম্পন্ন এথিক্যাল হ্যাকার এবং স্বাধীন নিরাপত্তা পেশাদারদের একটি বিস্তৃত শ্রেণিকে আকর্ষণ করে। এটি স্মার্ট কন্ট্রাক্ট অডিটের তুলনায় একটি সুবিধা হতে পারে যা মূলত এমন দলগুলোর উপর নির্ভর করে যাদের সীমিত বা সংকীর্ণ দক্ষতা থাকতে পারে।
টেস্টিং টুল এবং লাইব্রেরি
ইউনিট টেস্টিং টুল
-
solidity-coverage (opens in a new tab) - Solidity-তে লেখা স্মার্ট কন্ট্রাক্টগুলোর জন্য কোড কভারেজ টুল।
-
Waffle (opens in a new tab) - উন্নত স্মার্ট কন্ট্রাক্ট ডেভেলপমেন্ট এবং টেস্টিংয়ের জন্য ফ্রেমওয়ার্ক (ethers.js-এর উপর ভিত্তি করে)।
-
Remix Tests (opens in a new tab) - Solidity স্মার্ট কন্ট্রাক্ট টেস্টিংয়ের জন্য টুল। Remix IDE "Solidity Unit Testing" প্লাগইনের অধীনে কাজ করে যা একটি কন্ট্রাক্ট-এর জন্য টেস্ট কেস লিখতে এবং চালাতে ব্যবহৃত হয়।
-
OpenZeppelin Test Helpers (opens in a new tab) - ইথিরিয়াম স্মার্ট কন্ট্রাক্ট টেস্টিংয়ের জন্য অ্যাসারশন লাইব্রেরি। নিশ্চিত করুন যে আপনার কন্ট্রাক্টগুলো প্রত্যাশা অনুযায়ী আচরণ করে!
-
Brownie unit testing framework (opens in a new tab) - Brownie Pytest ব্যবহার করে, একটি বৈশিষ্ট্য-সমৃদ্ধ টেস্ট ফ্রেমওয়ার্ক যা আপনাকে ন্যূনতম কোডসহ ছোট টেস্ট লিখতে দেয়, বড় প্রজেক্টগুলোর জন্য ভালোভাবে স্কেল করে এবং অত্যন্ত এক্সটেন্ডেবল।
-
Foundry Tests (opens in a new tab) - Foundry Forge অফার করে, একটি দ্রুত এবং নমনীয় ইথিরিয়াম টেস্টিং ফ্রেমওয়ার্ক যা সাধারণ ইউনিট টেস্ট, গ্যাস অপ্টিমাইজেশন চেক এবং কন্ট্রাক্ট ফাজিং এক্সিকিউট করতে সক্ষম।
-
Hardhat Tests (opens in a new tab) - ethers.js, Mocha, এবং Chai-এর উপর ভিত্তি করে স্মার্ট কন্ট্রাক্ট টেস্টিংয়ের জন্য ফ্রেমওয়ার্ক।
-
ApeWorx (opens in a new tab) - ইথিরিয়াম ভার্চুয়াল মেশিন-কে টার্গেট করা স্মার্ট কন্ট্রাক্টগুলোর জন্য পাইথন-ভিত্তিক ডেভেলপমেন্ট এবং টেস্টিং ফ্রেমওয়ার্ক।
-
Wake (opens in a new tab) - শক্তিশালী ডিবাগিং ক্ষমতা এবং ক্রস-চেইন টেস্টিং সাপোর্টসহ ইউনিট টেস্টিং এবং ফাজিংয়ের জন্য পাইথন-ভিত্তিক ফ্রেমওয়ার্ক, যা সেরা ব্যবহারকারীর অভিজ্ঞতা এবং পারফরম্যান্সের জন্য pytest এবং Anvil ব্যবহার করে।
প্রপার্টি-ভিত্তিক টেস্টিং টুল
স্ট্যাটিক অ্যানালাইসিস টুল
-
Slither (opens in a new tab) - দুর্বলতা খুঁজে বের করতে, কোড বোঝার ক্ষমতা বাড়াতে এবং স্মার্ট কন্ট্রাক্টগুলোর জন্য কাস্টম বিশ্লেষণ লেখার জন্য পাইথন-ভিত্তিক Solidity স্ট্যাটিক অ্যানালাইসিস ফ্রেমওয়ার্ক।
-
Ethlint (opens in a new tab) - Solidity স্মার্ট কন্ট্রাক্ট প্রোগ্রামিং ভাষার জন্য স্টাইল এবং নিরাপত্তা সর্বোত্তম অনুশীলনগুলো প্রয়োগ করার জন্য লিন্টার।
-
Cyfrin Aderyn (opens in a new tab) - ওয়েব3 স্মার্ট কন্ট্রাক্ট নিরাপত্তা এবং ডেভেলপমেন্টের জন্য বিশেষভাবে ডিজাইন করা রাস্ট-ভিত্তিক স্ট্যাটিক অ্যানালাইজার।
-
Wake (opens in a new tab) - দুর্বলতা এবং কোড কোয়ালিটি ডিটেক্টর, কোড থেকে দরকারী তথ্য বের করার জন্য প্রিন্টার এবং কাস্টম সাবমডিউল লেখার সাপোর্টসহ পাইথন-ভিত্তিক স্ট্যাটিক অ্যানালাইসিস ফ্রেমওয়ার্ক।
-
Slippy (opens in a new tab) - Solidity-এর জন্য একটি সহজ এবং শক্তিশালী লিন্টার।
ডাইনামিক অ্যানালাইসিস টুল
-
Echidna (opens in a new tab) - প্রপার্টি-ভিত্তিক টেস্টিংয়ের মাধ্যমে স্মার্ট কন্ট্রাক্টগুলোতে দুর্বলতা সনাক্ত করার জন্য দ্রুত কন্ট্রাক্ট ফাজার।
-
Diligence Fuzzing (opens in a new tab) - স্মার্ট কন্ট্রাক্ট কোডে প্রপার্টি লঙ্ঘন সনাক্ত করার জন্য কার্যকর অটোমেটেড ফাজিং টুল।
-
Manticore (opens in a new tab) - EVM বাইটকোড বিশ্লেষণ করার জন্য ডাইনামিক সিম্বলিক এক্সিকিউশন ফ্রেমওয়ার্ক।
-
Mythril (opens in a new tab) - টেইন্ট অ্যানালাইসিস, কনকোলিক অ্যানালাইসিস এবং কন্ট্রোল ফ্লো চেকিং ব্যবহার করে কন্ট্রাক্ট দুর্বলতা সনাক্ত করার জন্য EVM বাইটকোড অ্যাসেসমেন্ট টুল।
-
Diligence Scribble (opens in a new tab) - Scribble হলো একটি স্পেসিফিকেশন ভাষা এবং রানটাইম ভেরিফিকেশন টুল যা আপনাকে প্রপার্টিগুলোর সাথে স্মার্ট কন্ট্রাক্টগুলো টীকা করতে দেয় যা আপনাকে Diligence Fuzzing বা MythX-এর মতো টুলগুলোর সাহায্যে স্বয়ংক্রিয়ভাবে কন্ট্রাক্টগুলো পরীক্ষা করতে দেয়।
সম্পর্কিত টিউটোরিয়াল
- বিভিন্ন টেস্টিং প্রোডাক্টের একটি ওভারভিউ এবং তুলনা _
- স্মার্ট কন্ট্রাক্ট টেস্টিং করতে কীভাবে Echidna ব্যবহার করবেন
- স্মার্ট কন্ট্রাক্ট-এর বাগ খুঁজে পেতে কীভাবে Manticore ব্যবহার করবেন
- স্মার্ট কন্ট্রাক্ট-এর বাগ খুঁজে পেতে কীভাবে Slither ব্যবহার করবেন
- টেস্টিংয়ের জন্য কীভাবে Solidity কন্ট্রাক্ট মক করবেন
- Foundry ব্যবহার করে Solidity-তে কীভাবে ইউনিট টেস্ট চালাবেন (opens in a new tab)
আরও পড়ুন
- ইথিরিয়াম স্মার্ট কন্ট্রাক্ট টেস্টিংয়ের একটি গভীর গাইড (opens in a new tab)
- কীভাবে ইথিরিয়াম স্মার্ট কন্ট্রাক্ট টেস্টিং করবেন (opens in a new tab)
- ডেভেলপারদের জন্য MolochDAO-এর ইউনিট টেস্টিং গাইড (opens in a new tab)
- কীভাবে একজন রকস্টারের মতো স্মার্ট কন্ট্রাক্ট টেস্টিং করবেন (opens in a new tab)
টিউটোরিয়াল: ইথিরিয়াম-এ স্মার্ট কন্ট্রাক্ট টেস্টিং
- একটি লোকাল, মাল্টি-ক্লায়েন্ট টেস্টনেট-এ কীভাবে একটি ডিএ্যাপ তৈরি এবং টেস্টিং করবেন – একটি লোকাল টেস্টনেট-এ একটি স্মার্ট কন্ট্রাক্ট ডিপ্লয় করা এবং টেস্ট করার ওয়াকথ্রু।
- টেস্টিংয়ের জন্য কীভাবে Solidity স্মার্ট কন্ট্রাক্ট মক করবেন – কীভাবে মক ডেটা ব্যবহার করতে হয় এবং ইউনিট টেস্টিং বাস্তবায়ন করতে হয় সে সম্পর্কে ইন্টারমিডিয়েট টিউটোরিয়াল।
- স্মার্ট কন্ট্রাক্ট টেস্টিং করতে কীভাবে Echidna ব্যবহার করবেন – ফাজিং এবং স্মার্ট কন্ট্রাক্ট টেস্টিংয়ের উন্নত পদ্ধতি।