গুগল টেস্ট অটোমেশন কনফারেন্স ২০১৬, নভেম্বর ১৫-১৬, সানিভেল, ক্যালিফর্নিয়া - দ্বিতীয় পর্ব

গুগল টেস্ট অটোমেশন কনফারেন্স ২০১৬, নভেম্বর ১৫-১৬, সানিভেল, ক্যালিফর্নিয়া -  দ্বিতীয় পর্ব
সোমবার, ডিসেম্বর ৫, ২০১৬

আমার আগের লেখায় কনফারেন্সের সেটআপ নিয়ে লিখেছিলাম। আজকে লিখবো কনফারেন্সে দেয়া বিভিন্ন লেকচার বা টকের উপর। এই লেখায় আমি প্রত্যেকটা লেকচারের রেফারেন্স লিংক দিয়ে দিবো। লিংকে ক্লিক করলেই ইউটুবে লেকচার গুলো শুরু হবে। সবচেয়ে ভালো হবে যদি কেউ লেকচার গুলো ইউটুবে নিজেই শুনে নেন।

সব লেকচার যে ভালো ছিলো তা কিন্ত মোটেও না। কিছু কিছু ১৫ মিনিট কিংবা ৩০ মিনিটের লেকচার অসম্ভব একঘেঁয়ে আর বিরক্তিকর ছিল।  সত্যি বলতে এক একসময় মনে হয়েছে, স্পিকার ঠিক করার আগে গুগলের উচিত ডেমো লেকচার শুনে নেয়া।  টপিক ভালো, আকর্ষণীয় টাইটেল হলেই তো আর হয় না, স্পিকারের ডেলিভারিও একটা বড় ব্যাপার।

যাই হোক, আমি মোট ২০ টি লেকচার থেকে আমার কাছে ইন্টারেষ্টিং মনে হয়েছে, এমন মাত্র ৬ টা নিয়েই লিখছি।

এই মহিলা গুগলের অ্যাড সেন্স টিমে কাজ করেন।  ২০০৫-এ যোগ দেয়ার পর এখন পর্যন্ত তাঁর দেখা টেস্টিংয়ের বিবর্তন কি রকম হয়েছে তার উপর কথা বললেন। খুব ইন্টারেষ্টিং। ২০০৫-২০০৬-এর দিকে গুগল কিভাবে অনেককিছুই প্রোডাকশনে টেস্ট করতো শুনে অনেকেই অবাক হয়েছে।  তখন মাসে ২/১ বার কোড রিলিজ হতো।  ওই সময় নাকি ডেভেলপার-টেস্ট ইঞ্জিনিয়ার রেশিও ১০:১ ছিল!

এখন সেই রেশিও  কত সেটা  না বললেও তাঁর কথা থেকে মনে হয়েছে এই তফাৎ এখন অনেক কমে এসেছে। এখন টেস্টের কোড কাভারেজ ৭০% হওয়ার পাশাপাশি প্রতি সপ্তায়েই নাকি কোড রিলিজ হয়। গুগল অটোমেটেড টেস্টের উপর কতটা জোর দেয় তা বোঝাতে বললেন যে গত ২ বছরে নাকি শুধু তাঁর টিমে, খালি ইন্টিগ্রেশন টেস্টের সংখ্যাই নাকি ১৫৮% বৃদ্ধি পেয়েছে। প্রায় ১০০০-এর বেশি টেস্ট কেস আছে।  টেস্টিং মেশিন নাকি ১০০জিবি RAM ছাড়িয়েছে।

আরেকটা খুব ইন্টারেস্টিং তথ্য ছিল গুগল তার নতুন ফিচার টেস্ট করার জন্য নাকি কেনারী টেস্ট করে থাকে। কেনারী একটা পাখির নাম। আগের দিনে কয়লা খনির শ্রমিকরা নাকি খনিতে কোনো বিষাক্ত গ্যাস আছে কিনা তা দেখার জন্য খাঁচায় ভরে কেনারী পাখি রেখে দিতো। পাখি মারা গেলে বা চিৎকার করলে বোঝা যেত খনিতে কাজ করা নিরাপদ না। কেনারী পাখির অজান্তে যেভাবে এই টেস্ট করা হতো, সেভাবেই যদি কোনো ফিচার প্রোডাক্শনে রিলিজ দেয়ার আগে আসল কিছু ইউসারকে না জানিয়ে এই ফিচার ব্যবহার করতে দিয়ে টেস্ট করা হয়  - তাকে কেনারী টেস্ট বলে।

এই ভদ্রলোক জার্মানি থেকে পড়াশুনা শেষ করে কয়েক জায়গায় কাজ করে এখন ক্যাপিটাল ওয়ান ব্যাংকে ডেভ-অপস টিম লিড।  "Whats on your wallet?" - টাইটেলে শুরু করা লেকচারে নিজেদের ক্রেডিট কার্ডের একটু বিজ্ঞাপণ করলেও আসলে বলতে চাইলেন যে এখন সবার মানি-ব্যাগে নাকি আর ক্রেডিট কার্ড থাকে না।  মোবাইলেই নাকি সবাই (মোবাইলে পে এপ ব্যবহার করে) পেয়মেন্ট করে ফেলে। অদূর ভবিষ্যতে লোকজন নাকি আর মানিব্যাগ ব্যবহারই করবে না! শুধু মোবাইল ফোন আর লাইসেন্স নিয়ে ঘোরাফেরা করবে। 

একটা ব্যাংকের মোবাইল এপ হিসাবে তাঁদের অনেক বেশি টেস্টিং করতে হয়।  কোনোরকম যেন বাগ না থাকে সেটা নিশ্চিত করতে হয়।  সামান্য UI বাগ-ও নাকি চরম ক্ষতির কারণ হতে পারে। আর তাই তাঁরা কী কী টুল ব্যবহার করেন, তার একটা লিস্ট দিয়ে দিলেন। আমি নিচে তুলে দিলাম:


  • বেহেভিওরাল ড্রিভেন টেস্ট (BDD) -র জন্য : Cucumber 
  • UI আর layout টেস্টের জন্য : Galen 
  • ফাংশনাল টেস্টিং-র জন্য: Selenium WebDriver 
  • মোবাইল এপ টেস্টিংয়ের জন্য : Appium 

সবশেষে যেটা বললেন, সেটা আমার কাজের জায়গায়ও আমরা চরম ভাবে প্রয়োজন বোধ করি। একটা ড্যাশবোর্ড।  সব ধরণের টেস্ট করা হলেও, একটা ড্যাশবোর্ডে সব রেজাল্ট থাকাটা খুব জরুরি। এটা ম্যানেজমেন্টের জন্য যেমন দরকারি, তেমনি বিভিন্ন টিমের মধ্যে কাজের  সমন্বয়ের জন্যও প্রয়োজনীয়। ক্যাপিটাল ওয়ান নাকি এরকম একটা ড্যাশবোর্ড (Hygieia  - গ্রিক স্বাস্থ্যের দেবীর নামে নাম) তৈরি করেছে। এই ড্যাশবোর্ড নাকি Jenkins, Selenium, JMeter ইত্যাদি টুলের রেজাল্ট নিয়ে এসে রিপোর্ট তৈরি করতে পারে!! আর এই কনফারেন্সে তারা ঘোষণা দিয়ে জানালো যে  এই ড্যাশবোর্ড ওপেন-সোর্স, অর্থাৎ সবার জন্য উন্মুক্ত!! আমরা ভাবছি ব্যবহার করে দেখবো।  

Hygieia ড্যাশবোর্ড 


এই লোকের লেকচারের আইডিয়া খুবই সিম্পল। অল্প কথাতেই বলে শেষ করা যাবে।  তাঁর দাবি হচ্ছে, যেসব টেস্ট গত এক মাসে অনেক বেশিবার চালানো হয়েছে (ধরা যাক, ১০০ বার) আর প্রতিবারই টেস্টগুলো ১০০% পাশ করেছে, সেইসব "এভারগ্রিন" টেস্ট কেস গুলো আসলে চালানোর দরকার নাই।  ডেভেলপাররা নিজেদের কোড ব্রাঞ্চে নিশ্চিন্তেই এইসব টেস্ট বাদ দিয়ে দিতে পারেন। অবশ্য এও বললেন যে, মেইন ব্রাঞ্চে কোড চেক-ইন করে অবশ্য সব টেস্টই রান করা উচিত। তাঁদের কাজের জায়গায় এই নীতি ব্যবহার করে অনেক কম সময়েই টেস্টিং শেষ করা গেছে।


ড. আতিফ মেমোনের নাম আমি আগেই শুনেছিলাম। ওনার রিসার্চ পেপারও আমি সম্ভবত পড়েছি। যাই হোক, উনি সাবাটিকালে ছুটি নিয়ে গুগলে ভিসিটিং স্কলার হিসাবে ৬-৭ মাস কাজ করেছেন। আর জন মিক্কো ছিলেন গুগলে উনার ম্যানেজার।  জন মিক্কো-র টিমের কাছে গত প্রায় ২-৩ বছরের গুগলে রান করা সব টেস্ট কেস,  টেস্টের রেজাল্ট, কোড চেঞ্জ-এর হিস্টরি বা ইতিহাস আছে! এখানে বলে নেই, গুগল নাকি প্রতি ২০ মিনিটে ৩.৫ মিলিয়ন টেস্ট কেস চালায়!! অবিশ্বাস্য হলেও এটা নাকি সত্যি (বিশ্বাস না হলে উপরের লিংকে গিয়ে লেকচারটা শুনে আসুন)।  এই টেরাবাইট ডেটা প্রফেসর মেমোনের কাছে তুলে দিয়ে নাকি মিক্কো বলেছিলেন, "যান দেখেন আপনি কিছু বের করতে পারেন কিনা, জানায়েন আমাকে"  - ড.মেমোন বেশ কিছু ইন্টারেস্টিং জিনিস বের করেছেন। আর তার উপরই এই লেকচার। 

ওনার মূল কাজ ছিল flaky টেস্ট কেস গুলো কিভাবে না চালিয়েই বের করা যায় সেটা খোঁজা। Flaky টেস্ট কী সেটা বলে নেই: একটা টেস্ট কেস, যেটা কিনা যেই কোড টেস্ট করছে, তার কোনো পরিবর্তন ছাড়াই - যদি একবার ফেল করে, আবার পরে কখনো পাস করে - তাকে flaky টেস্ট বলে।  গুগলের ৩.৫ মিলিয়ন টেস্ট কেসের মধ্যে ১.৫% টেস্ট কেস, অর্থাৎ প্রায় বায়ান্ন হাজার পাঁচশ টেস্ট কেসের নাকি কোনো না কোনো ধরণের flaky ভাব আছে।  অর্থাৎ, কোনো নিশ্চিত কারণ ছাড়াই এইসব টেস্ট কেস চালালে কখনো ফেল করে, আবার কখনোবা পাস করে।

ফ্লেইকি টেস্ট কেস কেন হয় সেটা নাকি এখনো রহস্য! এটা নিয়ে নাকি পি.এইচডি থিসিস-ও হচ্ছে।  

কোনো টেস্ট আসলে ফেল করলো, নাকি তা flaky হওয়ায় ফেল করছে সেটা জানা জরুরি। কেননা, টেস্ট ফেল করার পরও একটা কোড কি মার্জ করা ঠিক হবে কিনা, কিংবা প্রোডাক্শনে রিলিজ করা যাবে কিনা, সিদ্ধান্ত নেয়ার দরকার আছে। যদি flaky হওয়ায় ফেল করে তাহলে পাত্তা না দিলেও চলবে, তবে আসলেই ফেল করে থাকলে তার কারণ খুঁজতে হবে।  

কোনো টেস্ট ফেল করলে গুগল ১০ বার একই টেস্ট রান করে।  যদি এই ১০ রানের কোনো একবার টেস্টটা পাস করে, তাহলে সেটা flaky হিসাবে চিহ্নিত করা হয়।  আর না করলে তখন আসল ফেল হিসাবে রিপোর্ট করা হয়।  এই পদ্ধতি কাজে দিলেও খুব  এফিশিয়েন্ট না।  ১০ বার একই টেস্ট রান করা তো আসলে রিসোর্সের অপচয়।  টেস্ট রান না করেই কিভাবে তা flaky কিনা বের করা যায়, সেটা নিয়েই তাঁরা কাজ করেছেন। আমি কয়েকটা পয়েন্ট দিয়ে দিচ্ছি, তবে আমি মনে করি আপনার ৩০ মিনিট খরচ করে লিংকে গিয়ে লেকচারটা শুনে আসা উচিত।

  • যদি কোনো নির্দিষ্ট সময়ে কোনো টেস্ট খুব বেশিবার পাস-থেকে-ফেল, কিংবা ফেল-থেকে-পাস করে, তাহলে সেটা ফ্লেইকি। 
  • ফ্লেইকি টেস্ট কেস অন্য টেস্টের সাথে রেজাল্ট হিস্ট্রিতে আলাদা হয়।  অর্থাৎ, কোড কমিট করার পর রান করা টেস্ট গুলোর রেজাল্ট ইতিহাস ঘাঁটলে দেখা যাবে, ফ্লেইকি টেস্ট গুলো অন্য টেস্ট গুলো থেকে আলাদা, কোনো প্যাটার্ন ফলো করছে না। 
  • একটা কোড কমিট বা কোড পরিবর্তন -এর সাথে যদি টেস্ট গুলোর দূরত্ব অনেক হয় (আক্ষরিক অর্থেই, অর্থাৎ, রান করা টেস্ট গুলো যদি পরিবর্তন করা কোডের আওয়তার বাইরে হয়) আর সেগুলো যদি ফেল করে, তাহলে মোটামুটি নিশ্চিত যে ঐ টেস্ট গুলো ফ্লেইকি টেস্ট
এছাড়াও আরো অনেক মজার তথ্য আছে।  যেমন কোনো কোডে একই সময়ে ২ জনের বেশি প্রোগ্রামার কাজ করলে নাকি কোডে ভুল থাকার সম্ভবনা অনেক বেশি, এবং সেই কোডের টেস্ট কেস গুলো আসলেই ফেল করে।  অর্থাৎ, এইক্ষেত্রে ফেল করা টেস্ট ফ্লেইকি নয়। 

গুগল ডেভেলপার প্রোডাক্টস টিমের সদস্য নিরঞ্জন তুলপুলেদের মূল কাজ নাকি কিভাবে ডেভেলপারদের প্রোডাক্টিভিটি বা এক্সপেরিয়েন্স ভালো করা যায়, সেটা নিয়ে কাজ করা, বিভিন্ন টুল তৈরী করা।  এন্ড্রয়েড ডেভলপারদের জন্য তাঁদের তৈরি করা বিভিন্ন টুল কিভাবে আসলে আদতে এন্ড্রয়েড এপ গুলোর মান বাড়াচ্ছে সেটা নিয়ে আলোচনা করলেন।  বেশ ইন্টারেষ্টিং লেকচার।  এন্ড্রয়েড এপ টেস্ট করা কতটা চ্যালেঞ্জিং সেটা বোঝাতে বললেন যে, আজকের বাজারে বিভিন্ন নির্মাতার তৈরি করা ২,৫০০-র বেশি এন্ড্রয়েড ডিভাইসের মডেল আছে, ১০০'র বেশি OS ভার্সন আছে, বিভিন্ন দেশে মোবাইল ফোনের ৭০০'র বেশি অপারেটর ও তাদের নেটওয়ার্ক আছে - সব কম্বিনেশন মিলিয়ে যদি কোনো এন্ড্রয়েড এপ টেস্ট করতে হয়, তাহলে ১০০ মিলিয়ন পার্মুটেশন সম্ভব!! 

এই বিরাট চ্যালেঞ্জ কিছুটা মোকাবেলা করার জন্য তাঁদের টিম যা করছে তার কিছু নমুনা বললেন। যেমন:
  • ফায়ারবেস টেস্ট ল্যাব (Firebase test lab) -  এই ল্যাবে কোনো এন্ড্রয়েড এপ টেস্ট করার জন্য আসল ডিভাইস ছাড়াও বিভিন্ন এমুলেটর আছে।  যে কেউ তাদের এপ দিনে ৫ ঘন্টার জন্য বিনামূল্যে টেস্ট করতে পারবেন। এর বেশি করতে চাইলে,  আসল ডিভাইসের জন্য ঘন্টায় $৫ আর এমুলেটরের জন্য ঘন্টায় $১ দিয়ে ভাড়া দিয়ে টেস্ট করা যাবে। 
  • এসপ্রেসো টেস্ট রেকর্ডার (Espresso Test Recorder) - এই টুল ইন্স্টল্ করা মেশিনে, কোনো এন্ড্রয়েড ফোন কানেক্ট করে, সেই ফোনে কোনো এপ ব্যবহার করলে, টুলটা নিজে থেকেই এপ এর সাথে ইউসার-র করা ইন্টারঅ্যাকশন গুলো রেকর্ড করে ফেলে। শুধু রেকর্ডই না, টেস্ট স্ক্রিপ্ট তৈরি করে।  পরে সেই স্ক্রিপ্ট ব্যবহার করে বারবার টেস্ট চালানো যায়।  
  • গুগল প্লে স্টোর এখন তাদের স্টোরে কোনো এপ পাবলিশ করার আগে ডেভেলপারদের ফ্রি তে বিভিন্ন ডিভাইসে এপ টেস্ট করা সহ, প্রি-লঞ্চ বাগ রিপোর্ট,  সিকিউরিটি টেস্ট ইত্যাদি করতে দিচ্ছে।  মূল উদ্দেশ্য হচ্ছে, এপ গুলোর মান বাড়ানো।  
এখন পর্যন্ত শুধু এন্ড্রয়েড ফোনের জন্য হলেও আপেলের iOS -এর জন্যও ভবিষ্যতে এমন টুল তৈরির চিন্তা তাদের নাকি আছে !

ইমানুয়েলের লেকচার টা খুব মজার ছিল।  শুধু কনটেন্ট না , প্রেসেন্টেশনও ভালো ছিল।  কিভাবে অডিয়েন্সকে একটা লেকচারে মগ্ন করা যায়, সেটা দেখার জন্য হলেও লিংকে গিয়ে লেকচারটা দেখে আসুন।  API টেস্ট করতে গিয়ে কিভাবে ৩ ঘন্টার টেস্ট এরা ৩ মিনিটে নামিয়ে এনেছে, এটাই আলোচনা করেছে।  মূল আইডিয়া অনেকটা এইরকম:
  • আলাদা টেস্ট এনভায়রনমেন্ট থাকা উচিত।  
  • টেস্টের জন্য আলাদা ডাটাবেস থাকা উচিত। 
  • অন্য কম্পোনেন্টের উপর নির্ভরতা কমাতে টেস্ট স্টাব ব্যবহার করা উচিত (কিভাবে সেটা আমি অবশ্য বুঝি নাই, হয়তো API টেস্টাররা বুঝবে)
  • ডাটাবেসে টেস্ট ডেটা শূন্য থেকে তৈরি করা উচিত। প্রোডাকশন ডেটা ব্যবহার ঠিক না। 
  • সম্ভব হলে পুরো ডেটাবেস মেমরি তে রান করা উচিৎ (এটাও আমি কিভাবে সম্ভব বুঝি নাই)
  • একবার তৈরি করা টেস্ট ডেটা বার বার ব্যবহার করা উচিত, প্রতিবার আগের ডেটা মুছে নতুন করে টেস্ট ডেটা তৈরি করার দরকার নাই। 
  • টেস্টগুলো প্যারালেল রান করা উচিত। তবে খুব সাবধানে থ্রেড সংখ্যা ঠিক করতে হবে, প্যারালেল করতে গিয়ে আবার রান কন্ডিশন, ডেডলক তৈরি করা যাবে না।  
  • মেশিনের হার্ডওয়্যার আপডেট করতে হবে।  
যাই হোক, শেষ করি।  প্রায় ৩ দিন ধরে, একটু সময় পেলেই  অল্প অল্প করে এই পোস্ট লিখছি। আমার কাজের জায়গায় এই কনফারেন্সের উপর একটা প্রেসেন্টেশন দিতে হবে। কোম্পানির টাকায় কনফারেন্সে ঘুরে আসার কারণে আর কি। লিখে সবার সাথে শেয়ার করার পাশাপাশি আমার প্রেজেন্টেশন একটা প্রাকটিসও হচ্ছে।

ধন্যবাদ,
--ইশতিয়াক


সিস্টেম ডিজাইনের উপর সম্ভাব্য ইন্টারভিউ প্রশ্নের জন্য যেভাবে প্রিপারেশন নিতে পারেন

সিস্টেম ডিজাইনের উপর সম্ভাব্য ইন্টারভিউ প্রশ্নের জন্য যেভাবে প্রিপারেশন নিতে পারেন ১৪ এপ্রিল, শুক্রবার, ২০১৭ সাইফুল ভাই লোকটা খুবই মজার,...