আমার জন্য এখনই চলমান কিছু থেকে আমার একটি প্রাসঙ্গিক উপাখ্যান আছে । আমি এমন একটি প্রকল্পে আছি যা টিডিডি ব্যবহার করে না। আমাদের কিউএর লোকেরা আমাদের সেদিকে নিয়ে চলেছে, তবে আমরা একটি ছোট পোশাক এবং এটি একটি দীর্ঘ, টানা আউট প্রক্রিয়া ছিল।
যাইহোক , আমি সম্প্রতি একটি নির্দিষ্ট কাজটি করার জন্য একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছি। সেই লাইব্রেরির ব্যবহার সম্পর্কিত একটি সমস্যা ছিল, সুতরাং এটি একই লাইব্রেরির একটি সংস্করণ আমার নিজের উপর লিখতে বাধ্য করা হয়েছিল। মোট হিসাবে, এটি প্রায় 5000 টি এক্সিকিউটেবল কোডের লাইন এবং আমার সময়ের প্রায় 2 মাস শেষ হয়েছিল। আমি জানি কোডের লাইনগুলি একটি দুর্বল মেট্রিক, তবে এই উত্তরের জন্য আমি অনুভব করি এটি বিশালতার একটি সূচক সূচক।
আমার একটি নির্দিষ্ট ডেটা স্ট্রাকচার দরকার ছিল যা আমাকে একটি বিপরীতে সংখ্যক বিট ট্র্যাক করতে দেয়। যেহেতু প্রকল্পটি জাভাতে রয়েছে, তাই আমি জাভা বেছে নিয়েছিলাম BitSet
এবং এটি কিছুটা সংশোধন করেছি (আমারও 0
অগ্রণীদের ট্র্যাক করার দক্ষতার প্রয়োজন ছিল যা জাভা এর বিটসেট কোনও কারণে না করে .....)। ~ 93% কভারেজ পৌঁছানোর পরে আমি কিছু পরীক্ষা লিখতে শুরু করেছি যা আসলে আমার লেখা সিস্টেমটিকে চাপ দেবে। আমার শেষের প্রয়োজনীয়তার জন্য এগুলি যথেষ্ট দ্রুত হবে তা নিশ্চিত করার জন্য আমার কার্যকারিতার কয়েকটি দিকগুলি বেঞ্চমার্ক করা দরকার। আশ্চর্যজনকভাবে, BitSet
বড় বিট সেটগুলির সাথে লেনদেন করার সময় আমি ইন্টারফেস থেকে যে কাজগুলিকে ওভাররাইড করেছিলাম সেগুলির মধ্যে একটি অযৌক্তিকভাবে ধীর ছিল (এই ক্ষেত্রে লক্ষ লক্ষ বিট) in অন্যান্য ওভাররাইড ফাংশনগুলি এই একটি ফাংশনের উপর নির্ভর করে, তাই এটি ছিল বিশাল বোতল ঘাড়।
আমি কি শেষ পর্যন্ত করছেন অঙ্কন বোর্ড যাচ্ছিল, এবং অন্তর্নিহিত কাঠামো নিপূণভাবে একটি উপায় figuring আউট BitSet
, যা একটি হল long[]
। আমি অ্যালগরিদম ডিজাইন করেছি, সহকর্মীদের তাদের ইনপুট চেয়েছি এবং তারপরে আমি কোডটি লেখার বিষয়ে সেট করেছি set তারপরে, আমি ইউনিট পরীক্ষা চালিয়েছি। তাদের মধ্যে কিছু ভেঙে গিয়েছিল এবং যেগুলি আমাকে ঠিক এটি নির্দেশ করার জন্য আমার অ্যালগরিদমটি দেখার দরকার যেখানে আমাকে ঠিক নির্দেশ করেছিল। ইউনিট পরীক্ষা থেকে সমস্ত ত্রুটিগুলি ঠিক করার পরে, আমি বলতে সক্ষম হয়েছি যে ফাংশনটি যেমনটি করা উচিত তেমন কাজ করে। খুব কমপক্ষে, আমি এই আত্মবিশ্বাসী হতে পারি যে এই নতুন অ্যালগরিদম আগের অ্যালগরিদমের পাশাপাশি কাজ করেছিল।
অবশ্যই এটি বুলেট প্রুফ নয়। আমার কোডে যদি কোনও বাগ থাকে যা ইউনিট পরীক্ষাগুলি পরীক্ষা করে না, তবে আমি এটি জানি না। তবে অবশ্যই, সেই একই ত্রুটিটি আমার ধীরগতির অ্যালগরিদমেও থাকতে পারে। তবে , আমি একটি উচ্চ স্তরের আত্মবিশ্বাসের সাথে বলতে পারি যে আমাকে সেই নির্দিষ্ট ফাংশন থেকে ভুল আউটপুট সম্পর্কে চিন্তা করতে হবে না। প্রাক-বিদ্যমান ইউনিট পরীক্ষাগুলি আমাকে সঠিকভাবে তা নিশ্চিত করার জন্য নতুন অ্যালগরিদম পরীক্ষা করার চেষ্টা করার কয়েক ঘন্টা, সম্ভবত কয়েক দিন বাঁচিয়েছিল।
এটি টিডিডি নির্বিশেষে ইউনিট পরীক্ষা করার বিন্দু - এই কথাটি বলতে গেলে, ইউনিট পরীক্ষাগুলি এটি আপনার জন্য টিডিডি এবং টিডিডি-র বাইরে সমস্ত একই কাজ করবে, যখন আপনি কোডটি রিফ্যাক্টিং / বজায় রাখবেন। অবশ্যই এটি নিয়মিত রিগ্রেশন টেস্টিং, ধোঁয়া টেস্টিং, ফাজি টেস্টিং ইত্যাদির সাথে যুক্ত করা উচিত, তবে ইউনিট টেস্টিংয়ের নাম হিসাবে বলা হয়েছে, সম্ভাব্যতম ক্ষুদ্রতম, পারমাণবিক স্তরের জিনিসগুলি পরীক্ষা করে, যা আপনাকে ত্রুটিগুলি পপ আপ করার দিকনির্দেশ দেয়।
আমার ক্ষেত্রে, বিদ্যমান ইউনিট পরীক্ষা ছাড়াই, আমি কোনওভাবে অ্যালগরিদমকে সমস্ত সময় কাজ করে তা নিশ্চিত করার একটি পদ্ধতি নিয়ে আসতে হবে। কোনটি, শেষ পর্যন্ত ... অনেকটা ইউনিট পরীক্ষার মতো শোনাচ্ছে , তাই না?