একজন বিকাশকারী হিসাবে একটি কোড পর্যালোচনার জন্য প্রস্তুত হচ্ছে?


10

আমি এখানে কিছু ধারণা খুঁজছি।

আমি নিবন্ধটি পড়েছি কীভাবে কোড পর্যালোচনাগুলি বাহিত হওয়া এবং কোড পর্যালোচনা হওয়া উচিত , কী কী সুবিধা রয়েছে? যা খুব তথ্যপূর্ণ ছিল তবে নীচের প্রশ্নে আমার আরও স্পষ্টতা দরকার need

আমার প্রশ্নটি হ'ল,

  1. লক্ষ্য বিকাশকারী হওয়ার কারণে, আপনি কোনও কোড বিকাশকারীকে তার কোডটি পর্যালোচনা করার আগে অন্তর্ভুক্ত করতে পারে এমন কয়েকটি সেরা অনুশীলনের পরামর্শ দিতে পারেন।

    • বর্তমানে আমি নিম্নলিখিত পদ্ধতিগুলি অনুশীলন করি

      • যৌক্তিক প্রবাহের জন্য পিপিটি
      • বিস্তারিত মন্তব্য।

সমস্যা: যদিও আমি উপরোক্ত পদ্ধতিগুলি প্রয়োগ করেছি, তারা পর্যালোচনাতে সহায়তা করে না। আমার যে সমস্যার মুখোমুখি হয়েছিল তা হ'ল, যখন নির্দিষ্ট যুক্তি উল্লেখ করা হয়, তখন আমি বাস্তবায়ন এবং প্রবাহের সন্ধান করি এবং প্রসেসে খুব বেশি সময় নষ্ট হয় এবং আমি মানুষের স্নায়ুতে পড়ে যাই।

আমি মনে করি যে অনেক বিকাশকারী আমি যা যাচ্ছি তার মধ্য দিয়ে যাচ্ছিল।


2
একটি মাত্র: আপনার কোডে বোকা জিনিস করবেন না।
BЈовић

1
KISS: কোডটি যদি সহজ হয় তবে আপনার মস্তিষ্ক এগুলি সব পরিচালনা করতে সক্ষম হয়।
mouviciel

আপনি যখন আপনার সংস্থায় কোড পর্যালোচনা করেন, তখন সাধারণত কে সভার নেতৃত্ব দেন? আপনি বা আপনার কাজ পর্যালোচনা করছেন এমন একজন ব্যক্তি? আমি জিজ্ঞাসা করি কারণ আইএমওতে কোড পর্যালোচনা সভাটি বিট এবং কোডের টুকরোগুলি অনুসন্ধানে সময় ব্যয় করার জায়গা নয় এমনকি আপনি যদি জিনিসগুলি সন্ধান করতে সত্যই দ্রুত থাকেন তবে।
DXM

@ ডিএক্সএম উত্তরের জন্য ধন্যবাদ। এটি আমার টিএল বৈঠকে নেতৃত্ব দেবে।
কার্তিক শ্রীনিবাসন

@ কার্তিক: কে, অংশটি ভাল। সুতরাং আপনার প্রশ্নের উপর ভিত্তি করে, আপনি কীভাবে কোড পর্যালোচনার জন্য প্রস্তুত এমন উচ্চমানের কোড লিখবেন এবং উত্পাদন করবেন তা জিজ্ঞাসা করছেন না। পরিবর্তে, আপনার প্রধান উদ্বেগ হ'ল: "আমি বাস্তবায়ন এবং প্রবাহের সন্ধান করি এবং খুব বেশি সময় নষ্ট হয়"। আপনি কি এ সম্পর্কে বিস্তারিত বলতে পারেন? যদি টিএল এর সামনে কোড থাকে এবং সভার নেতৃত্ব দিচ্ছে তবে আপনি কেন অনুসন্ধান করছেন?
DXM

উত্তর:


8

ওপি প্রদত্ত বিবরণগুলির উপর ভিত্তি করে, মনে হচ্ছে প্রশ্নটি মনে হচ্ছে, "আমি কীভাবে নিজের কোড শিখব যাতে এক্স খুঁজে পেতে বা ওয়াইয়ের ব্যাখ্যা দেওয়ার জন্য জিজ্ঞাসা করা হলে আমি দ্রুত প্রতিক্রিয়া জানাতে সক্ষম হয়েছি।"

কয়েকটি পরামর্শ যা আমি ভাবতে পারি:

  • কোডিংয়ের সময় আপনার নিজের কোড শিখতে এবং বুঝতে সময় লাগবে। এটিই হতে পারে আপনার টিএল আপনার কাছে এতগুলি শব্দ না পাওয়ার চেষ্টা করছে। বর্তমান প্রকল্পের একটি টিএল হওয়ার কারণে, আমি গত 11 মাসে প্রচুর কোড পর্যালোচনা করেছি এবং কিছু নিজস্ব বিকাশকারীকে "নিজস্ব কোড বেস" বা অন্য কোথাও (গুগল) অনুসন্ধান করার জন্য কিছু বিকাশকারীদের অনুশীলন লক্ষ্য করেছি g , ইত্যাদি ...) এবং এটিকে অনুলিপি / আটকান Pers ব্যক্তিগতভাবে, আমি এটি দাঁড়াতে পারছি না কারণ তাদের কোডটি সাধারণ ইউনিট পরীক্ষায় পাস করার সময় তারা বুঝতে পারে না যে এটি আসলে কী করছে, তাই আমাদের কখনই নিশ্চিত হয় না যে সেখানে নেই ' টি কিছু বাউন্ডারি কেস বা প্রত্যাশিত ব্যর্থতার শর্ত যা ঘটতে পারে।

  • পূর্ববর্তী বিবৃতিটির একটি অনুসন্ধি হিসাবে, আপনার যদি অনুলিপি / পেস্ট করতে হয় তবে আপনি আগে লিখেছেন এবং আপনি বুঝতে পেরেছেন কেবল কোড অনুলিপি / পেস্ট করার চেষ্টা করুন। অন্যান্য লোকের ধারণা "ধার" করা অবশ্যই ঠিক আছে তবে সেক্ষেত্রে তাদের কোড লাইনটি লাইন দিয়ে আবার লিখুন কারণ আপনি যখন এটি লিখছেন, আপনি এটি কী করেন সে সম্পর্কে আরও ভাল ধারণা অর্জন করতে পারবেন। আপনি যদি বাহ্যিক এপিআইগুলি ব্যবহার করে থাকেন, যদি আপনার কাছে সেই এপিআই ব্যবহার করে এমন উদাহরণ রয়েছে তবে রেফারেন্স সন্ধান করতে এবং সেই এপিআই কীভাবে কাজ করে তা শিখতে কয়েক মিনিট সময় নিন। কেবল ধরে নিবেন না যে এটি যদি আগে কাজ করে তবে এটি আপনার পরিস্থিতিতেও কাজ করবে।

  • পড়ুন এবং DRY নীতি প্রেম করতে শিখুন । আপনি কপি / পেস্ট করার লোভনীয় অনেক সময় একটি সাধারণ স্থানে স্থাপন করা যেতে পারে (পৃথক ফাংশন, পৃথক শ্রেণি, পৃথক গ্রন্থাগার ...)

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

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

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

  • যদি উপরের সমস্ত আইটেম পরে, আপনি এখনও নিজেকে সমস্যার মধ্যে খুঁজে? আপনি কি দলে নতুন এবং প্রচুর লিগ্যাসি কোড নিয়ে কাজ করতে বলেছেন? সেক্ষেত্রে, এটি হতে পারে যে আপনার টিএল একটি এ being হচ্ছে এবং আপনি সভার আগে তাকে সহজ হতে এবং জড়িত প্রত্যেকের সময় নষ্ট না করার জন্য তাকে জিজ্ঞাসা করে সক্রিয় হয়ে উঠতে পারেন। নতুন ব্যক্তিরা যখন একটি দলে যোগ দেয়, তখন টিএলটির যথেষ্ট ধৈর্য থাকা দরকার কারণ একটি নতুন প্ল্যাটফর্ম, নতুন পণ্য, নতুন মানুষ, নতুন পরিবেশে কাজ করা একজন নতুন ব্যক্তির কাছ থেকে অনেক ঘনত্ব নেয় এবং সেই ব্যক্তি শুরুর দিকে কিছু বিবরণ হারিয়ে ফেলবে। নকশাকৃত হিসাবে কাজ করে এবং আপনার টিএলকে এটি গ্রহণ করা উচিত।

  • যদি উপরের সমস্ত আইটেম পরে, আপনি এখনও মনে করেন যে আপনার কাছে ভয়ঙ্কর কোড পর্যালোচনা রয়েছে। আপনার টিএল সাথে কথা বলুন। কখনও কখনও কোডগুলি পর্যালোচনা সভার প্রকৃতির কারণে লোকেরা খারাপ লাগে যখন আসলে টিএল আপনার সাথে পুরোপুরি খুশি হয়। আমি যখন কোড পর্যালোচনা করি, তখন আমার লক্ষ্য হ'ল কী পরিবর্তন করা দরকার তা হাইলাইট করা, আপনি পরিবর্তনগুলি বুঝতে পেরেছেন এবং নিশ্চিত হন তা নিশ্চিত করুন। অনেক সময় আমার কাছে ভদ্র হওয়ার সময় হয় না এবং কিছু লোক প্রতিরক্ষামূলক হয় এবং আমার প্রতিটি মন্তব্যের উত্তর দেওয়ার চেষ্টা করে। এই পরিস্থিতিতে কোড পর্যালোচনা সভা বন্ধ হয়ে যায় তাই আমি তাদের বাধা দেয় এবং এগিয়ে চলেছি। সাধারণত, সভার পরে আমি নতুন লোকদের সাথে প্রক্রিয়াটি বুঝতে পেরেছি এবং এটি ব্যক্তিগত কিছু নয় তা নিশ্চিত করার জন্য তাদের সাথে কথা বলব। কয়েকটি কোড পর্যালোচনার পরে লোকেরা সাধারণত অনেক বেশি স্বাচ্ছন্দ্য বোধ করে।


"আপনি বোঝেন না এমন কোড অনুলিপি করুন এবং পেস্ট করবেন না" এর জন্য +1। এটা অসহনীয়! "আপনার টিএল এর সাথে কথা বলুন" এর জন্যও +1
মার্ক জে

@ ডিএক্সএম প্রশ্নের সূক্ষ্ম সূক্ষ্মতা বোঝার আপনার ক্ষমতাটি খুব পেশাদার ছিল যা আপনার উত্তরটি উল্লেখ না করা খুব তথ্যমূলক এবং বর্ণনামূলক। মন = ফুঁক!
কার্তিক শ্রীনীভাসন

@ ডিএক্সএম আপনার রেফারেন্স থেকে "অন্যদিকে, আপনি যদি এসআরপি অনুসরণ করেন (বা অন্তত অনুসরণ করার চেষ্টা করেন) এবং প্রতিটি শ্রেণি / ক্রিয়াকলাপকে কেবল একটি জিনিসের জন্য দায়বদ্ধ করেন তবে আপনার কোড ছোট এবং খুব পঠনযোগ্য হবে।" তুমি আমাকে চেনো কি দেওয়া যাবে * SRP গড়? * আমি কোডটি স্বচ্ছতা আরেকটি আকর্ষণীয় পোস্ট দেখেছি এখানে
কার্তিক শ্রীনিবাসন

1
@ কার্তিকস্রিনিবাসাসন - প্রসঙ্গে একটি প্রীতি ব্যবহার করা হয়েছে যেখানে কোনও পদ্ধতি বা শ্রেণি একটি জিনিসের জন্য দায়ী। উদাহরণস্বরূপ, এমন একটি পদ্ধতি যা সংখ্যাগুলি একসাথে যুক্ত করে তাতেও গড় ফিরে পাওয়া উচিত নয়। : সরল অনুসন্ধান পাওয়া যায় নি এই en.wikipedia.org/wiki/Single_responsibility_principle
Ramhound

10

অনুশীলনগুলি পৃথক, তবে আমার অভিজ্ঞতায়:

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

  • কোডটি পর্যালোচনার আগেই পর্যালোচকগুলিতে প্রস্তুত এবং বিতরণ করা হয়। এটি সাধারণত একটি নিরপেক্ষ তৃতীয় পক্ষ দ্বারা সম্পন্ন হয়, সম্ভবত কোড পর্যালোচনা সুবিধার্থক। যদি মুদ্রিত হয়, কোডটি যথেষ্ট ছোট হওয়া উচিত যে লাইনগুলি প্রায়শই মোড়ানো হয় না তবে এত বড় যে সকলেই সহজেই এটি পড়তে পারে। যদি এটি লাগে তবে এটি ল্যান্ডস্কেপ ফর্ম্যাটে মুদ্রণ করুন।

  • কোড লাইন নম্বর সহ মুদ্রিত বা প্রদর্শন করা উচিত । সাধারণত, সংখ্যাটি এক ফাইল থেকে পরের ফাইলটিতে চালিয়ে যাওয়া উচিত। "Foo.c এর লাইন 238" এর চেয়ে "লাইন 3502" উল্লেখ করা এত সহজ, এবং সংখ্যাগুলি থাকার ফলে প্রত্যেককে এই লাইনগুলি সন্ধান করতে সময় নষ্ট না করে নির্দিষ্ট লাইনগুলি সম্পর্কে কথা বলতে দেয়।

  • বিটিডব্লিউ অবশ্যই স্পেসিলেটর থাকা উচিত । তার কাজ হ'ল পর্যালোচনাটি মিনটিয়ায় জড়িয়ে পড়তে বাধা দেওয়া, ব্যক্তিগত বা উত্তপ্ত হওয়া থেকে রোধ করা এবং পর্যালোচনাটির দৈর্ঘ্য কঠোরভাবে সীমাবদ্ধ করা।

  • লেখক হিসাবে, আপনাকে অবশ্যই পর্যালোচনা সভার আগে কোডটি পর্যালোচনা করা উচিত । আপনি যে পরিবর্তনগুলি বলতে চাইতেন সেগুলি লিখুন যদি এটি অন্য কারও কোড ছিল। এটি আপনার কোডটির স্মৃতিটিকে জগ করে তোলে যা আপনি সম্ভবত কয়েকদিনে না দেখেছেন এবং এটি আপনাকে নিজের কোডটি সমালোচনামূলক চোখে দেখার অনুশীলন করতে সহায়তা করে। পর্যালোচক এবং লেখক হিসাবে দু'টি পর্যালোচনা করার পরে, আপনি দেখতে পাবেন যে আপনার নিজস্ব নোটগুলি আরও গ্রুপের সাথে আরও মিলবে।

  • পর্যালোচনা চলাকালীন নোট নিতে প্রস্তুত থাকুন । এটি আপনার প্রধান উদ্বেগ হওয়া উচিত নয় - অন্য কারও গ্রুপের সাথে সম্মত হওয়া ক্রিয়া আইটেমগুলি রেকর্ড করা উচিত যাতে আপনি কোডটি ব্যাখ্যা করতে এবং প্রতিক্রিয়া শোনার দিকে মনোনিবেশ করতে পারেন। তবে এমন সময় আসবে যখন আপনি কিছু মূল্যবান প্রতিক্রিয়া পাবেন যা কোনও অ্যাকশন আইটেম নয় এবং আপনার যখন এই জাতীয় জিনিসগুলি ঘটে তখনই তা ঠিক করা উচিত।

  • মনে রাখবেন এটি ব্যক্তিগত নয়। পর্যালোচনা চলাকালীন অনুভূতি (এবং অভিনয়) রক্ষণাত্মকতা এড়ানো কঠিন। আপনার কোডটি ব্যাখ্যা করা ভাল, যদি আপনি মনে করেন এটি ভুল বুঝে গেছে তবে অন্য যে কোনও কিছুর চেয়েও কেবল শোনার চেষ্টা করুন।


আমি একটি জিনিস যুক্ত করব: "লাইন 3502" একটি বড় লাল চিহ্ন হবে। খুব দীর্ঘ ফাইল থাকা অবশ্যই একটি খারাপ জিনিস।
BЈовић

2
@ ভিজেও: কালেব ফাইলগুলিতে লাইন নম্বরগুলি চালিয়ে যাওয়ার পরামর্শ দিয়েছিল, সুতরাং 3502 লাইনটি foo.c- এর 238 লাইনে আসলেই রয়েছে line
হেইনজি

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

1
@ থমাস ওউইনস রেখা নম্বরগুলি সম্পূর্ণরূপে পর্যালোচনা চলাকালীন পর্যালোচিত কোডে কোনও অবস্থান বর্ণনা করার উদ্দেশ্যে হয়। এটি "ফাইল foo.c, লাইন 123" ব্যবহার করার চেয়ে দ্রুত এবং কম ত্রুটি-প্রবণ এবং ওপি বিশেষত কোড সন্ধানের জন্য কম সময় ব্যয় করার বিষয়ে জিজ্ঞাসা করে। বিষয়গুলি ফাইল দ্বারা ট্র্যাক করা উচিত সম্মত হন। আইএমই, পর্যালোচনাগুলি ক্লাসগুলির একটি গ্রুপকে কভার করে, সম্ভবত দুটি বৃহত্তর বা এক ডজন ছোট ছোট বিষয়। 3500+ লাইনগুলি একবারে পর্যালোচনা করার জন্য অনেক বেশি - কেবলমাত্র এই বিন্দুটি তৈরি করার চেষ্টা করা হয়েছিল যে সংখ্যাগুলি একটি ফাইল থেকে পরেরটিতে অবিরত থাকবে।
কালেব

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

3

অন্যান্য উত্তরে যুক্ত করার জন্য আরও একটি বিষয়: আনুষ্ঠানিক কোড পর্যালোচকদের আরও সহজ করার জন্য , প্রচুর অনানুষ্ঠানিক কোড পর্যালোচনা পরিচালনা করুন ! এই ক্ষেত্রে:

"আরে বব, আমি কীভাবে foo () ফাংশনটি বাস্তবায়িত করেছি তা আপনাকে দেখাতে পারি?" "আরে স্টিভ, আপনি কি এই শ্রেণীর চিত্রটি একবার দেখে নিতে পারেন এবং আপনি কী মনে করেন তা আমাকে জানান?" "আরে ক্যারেন, আপনি কি এই সমস্যার মধ্য দিয়ে আমাকে ভাবতে সহায়তা করতে পারেন? আমার মনে হয় আমি একটি ভাল সমাধান পেয়েছি, তবে আমি আপনার সহায়তা ব্যবহার করতে পারি ..."

এটি একটি নিয়মিত অভ্যাস করুন। আপনি যখন ডিজাইন প্রক্রিয়া শুরুর দিকে আপনার সহকর্মীদের জড়িত করেন, আপনি:

  • সম্পর্ক তৈরি করুন
  • সমস্যাটি সম্পর্কে নতুন অন্তর্দৃষ্টি অর্জন করুন
  • সমস্যা / সমাধানের হাত থেকে ব্যাখ্যা করার আপনার ক্ষমতা উন্নত করুন
  • ফর্মাল কোড পর্যালোচনায় পরে সময় সাশ্রয় করুন

টিম গঠনের জন্য +1 এবং সমস্যাটি ব্যাখ্যা করার জন্য আপনার ক্ষমতা উন্নত করুন। এটা সত্যিই একটি দুর্দান্ত ধারণা!
কার্তিক শ্রীনিবাসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.