পরীক্ষায় কোনও ভুল কীভাবে সংশোধন করবেন, লেখার প্রয়োগের পরে


21

টিডিডি-তে কর্মের সর্বোত্তম কোর্সটি কী, যদি যুক্তিটি সঠিকভাবে প্রয়োগ করার পরে, পরীক্ষাটি এখনও ব্যর্থ হয় (কারণ পরীক্ষায় কোনও ভুল রয়েছে)?

উদাহরণস্বরূপ, ধরুন আপনি নিম্নলিখিত ফাংশনটি বিকাশ করতে চান:

int add(int a, int b) {
    return a + b;
}

ধরুন আমরা নিম্নলিখিত পদক্ষেপে এটি বিকাশ করেছি:

  1. পরীক্ষা লিখুন (এখনও কোনও কাজ নেই):

    // test1
    Assert.assertEquals(5, add(2, 3));
    

    সংকলনের ত্রুটির ফলাফল।

  2. একটি ডামি ফাংশন বাস্তবায়ন লিখুন:

    int add(int a, int b) {
        return 5;
    }
    

    ফলাফল: test1পাস।

  3. অন্য পরীক্ষার কেস যুক্ত করুন:

    // test2 -- notice the wrong expected value (should be 11)!
    Assert.assertEquals(12, add(5, 6));
    

    ফলাফল: test2ব্যর্থ, test1এখনও পাস।

  4. বাস্তব প্রয়োগ লিখুন:

    int add(int a, int b) {
        return a + b;
    }
    

    ফলাফল: test1এখনও পাস, test2এখনও ব্যর্থ (থেকে 11 != 12)।

এই বিশেষ ক্ষেত্রে: এটা কি ভাল হবে:

  1. সঠিক test2, এবং দেখুন যে এটি এখন পাস, বা
  2. বাস্তবায়নের নতুন অংশটি মুছে ফেলুন (যেমন উপরের # 2 ধাপে ফিরে যান), সঠিক করুন test2এবং এটিকে ব্যর্থ হতে দিন, এবং তারপরে সঠিক প্রয়োগটি পুনঃপ্রবর্তন করুন (উপরের পদক্ষেপ # 4)।

বা অন্য কিছু, চালাক উপায় আছে?

আমি যখন বুঝতে পারি যে উদাহরণস্বরূপ সমস্যাটি তুচ্ছ, তবুও আমি জেনেরিক ক্ষেত্রে কী করতে হবে তা সম্পর্কে আগ্রহী, যা দুটি সংখ্যা সংযোজনের চেয়ে জটিল হতে পারে।

সম্পাদনা (@ থমাস জাঙ্কের জবাবে):

এই প্রশ্নের কেন্দ্রবিন্দু টিডিডি এমন ক্ষেত্রে কী পরামর্শ দেয়, ভালো কোড বা পরীক্ষা (যা টিডিডি-এর চেয়ে আলাদা হতে পারে) অর্জনের জন্য "সর্বজনীন সেরা অনুশীলন" কী নয়।



5
স্পষ্টতই, আপনার টিডিডিতে আপনার টিডিডি করা দরকার।
blrfl

17
যদি কেউ আমাকে জিজ্ঞাসা করেন যে আমি কেন টিডিডি সম্পর্কে সন্দেহ করি তবে আমি তাদের এই প্রশ্নটিতে দেখাব। এটি কাফকেস্কে।
ট্রাবেনফুচস

@ ব্ল্রফ্ল যা এক্সবিট আমাদের বলেছে »আমি টিডিডি টিডিডিতে রেখেছি যাতে আপনি টিডিডিংয়ের সময় টিডিডি করতে পারেন D: ডি
টমাস জাঙ্ক

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

উত্তর:


31

একেবারে সমালোচনামূলক বিষয় হ'ল আপনি পরীক্ষাটি পাস এবং ব্যর্থ উভয়ই দেখেন।

আপনি পরীক্ষাটি ব্যর্থ করার জন্য কোডটি মুছে ফেলুন কিনা তা সত্ত্বেও কোডটি পুনরায় লিখুন বা ক্লিপবোর্ডে এটি লুকিয়ে রাখুন কেবল এটির পরে পেস্ট করুন তবে কিছু যায় আসে না। টিডিডি কখনই বলেনি যে আপনাকে কিছু টাইপ করতে হবে। এটি পরীক্ষার পাসটি কেবল তখনই পাস করতে জানতে চায় এবং এটি ব্যর্থ হয় কেবল তখনই ব্যর্থ হয়।

পরীক্ষাটি পাস এবং ব্যর্থ উভয়ই দেখানো হচ্ছে আপনি কীভাবে পরীক্ষাটি পরীক্ষা করেন। কখনও কখনও এমন পরীক্ষার উপর নির্ভর করবেন না যা আপনি কখনও করেন নি do


রেড বারের বিরুদ্ধে রিফ্যাক্টরিং আমাদের একটি কার্যকরী পরীক্ষার পুনর্নির্মাণের জন্য আনুষ্ঠানিক পদক্ষেপ দেয়:

  • পরীক্ষা চালান
    • সবুজ বার নোট করুন
    • পরীক্ষা করা হচ্ছে কোড ভাঙ্গা
  • পরীক্ষা চালান
    • লাল বারটি নোট করুন
    • রিফ্যাক্টর পরীক্ষা
  • পরীক্ষা চালান
    • লাল বারটি নোট করুন
    • কোডটি পরীক্ষা না করে আন-ব্রেক করুন
  • পরীক্ষা চালান
    • সবুজ বার নোট করুন

তবে, আমরা একটি কার্যকরী পরীক্ষাটি রিফ্যাক্টর করছি না। আমাদের একটি বাগি পরীক্ষার রূপান্তর করতে হবে। একটি উদ্বেগ হ'ল কোড যা চালু হয়েছিল যখন কেবলমাত্র এই পরীক্ষায় এটি আচ্ছাদিত। পরীক্ষা শেষ হওয়ার পরে এই জাতীয় কোডটি আবার ঘূর্ণিত করা উচিত এবং পুনরায় প্রবর্তন করা উচিত।

যদি এটি না হয়, এবং কোডটি কভারেজ অন্যান্য পরীক্ষাগুলির কারণে উদ্বেগের বিষয় নয়, আপনি পরীক্ষাকে রূপান্তর করতে পারেন এবং এটি একটি সবুজ পরীক্ষা হিসাবে পরিচয় করিয়ে দিতে পারেন।

এখানে কোডটিও আবার ঘুরিয়ে দেওয়া হচ্ছে তবে পরীক্ষায় ব্যর্থ হওয়ার কারণ মাত্র। এটি কেবল বগি পরীক্ষার আওতায় থাকা সমস্ত কোড প্রবর্তনের জন্য যথেষ্ট না হলে আমাদের আরও বড় কোড রোল ব্যাক এবং আরও পরীক্ষার প্রয়োজন need

একটি সবুজ পরীক্ষা প্রবর্তন

  • পরীক্ষা চালান
    • সবুজ বার নোট করুন
    • পরীক্ষা করা হচ্ছে কোড ভাঙ্গা
  • পরীক্ষা চালান
    • লাল বারটি নোট করুন
    • কোডটি পরীক্ষা না করে আন-ব্রেক করুন
  • পরীক্ষা চালান
    • সবুজ বার নোট করুন

কোড ভঙ্গ করা কোড মন্তব্য করা বা অন্যত্র সরিয়ে নেওয়া যেতে পারে কেবল এটির পরে পেস্ট করার জন্য। এটি আমাদের পরীক্ষার কভারগুলির কোডের সুযোগ দেখায়।

এই শেষ দুটি রানের জন্য আপনি ঠিক আবার সাধারণ লাল সবুজ চক্রের মধ্যে ফিরে আসছেন। আপনি কোডটি আন-ব্রেক না করে পরীক্ষা পাসের পরিবর্তে টাইপ করার পরিবর্তে কেবল পেস্ট করছেন। সুতরাং নিশ্চিত হয়ে নিন যে আপনি পরীক্ষার পাস করার জন্য কেবল পর্যাপ্ত পেস্ট করছেন।

এখানে সামগ্রিক প্যাটার্নটি হ'ল পরীক্ষার রঙটি আমরা প্রত্যাশা করার পরিবর্তিত। নোট করুন যে এটি এমন একটি পরিস্থিতি তৈরি করে যেখানে সংক্ষিপ্তভাবে আপনার অবিশ্বাস্য সবুজ পরীক্ষা রয়েছে। বাধা পেতে এবং আপনি এই পদক্ষেপগুলিতে কোথায় আছেন তা ভুলে যাওয়ার বিষয়ে সতর্ক হন।

রেড বার লিঙ্কটি আলিঙ্গন করার জন্য রাবারডাককে আমার ধন্যবাদ ।


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

@ গোলেজট্রোল আমার মনে হয় আমার উত্তরটিও একই কথা বলেছে তাই আমি আপনার প্রতিক্রিয়ার প্রশংসা করব যে এটি অস্পষ্ট কিনা।
jonrsharpe

@ জোনারশপে আপনার উত্তরটিও বেশ ভাল, এবং এটি পড়ার আগেও আমি এটি উত্সাহিত করেছি। তবে যেখানে কোডটি ফেরত দেওয়ার ক্ষেত্রে আপনি খুব কঠোর, সেখানে ক্যান্ডিডআরঞ্জ আরও বাস্তববাদী পদ্ধতির পরামর্শ দেয় যা আমার কাছে আরও আবেদন করে।
GolezTrol

@ গোলেজট্রোল আমি কোডটি কীভাবে ফিরিয়ে আনব তা আমি বলিনি ; এটি মন্তব্য, কাটা এবং আটকানো, এটি স্ট্যাশ, আপনার আইডিই এর ইতিহাস ব্যবহার; এটা আসলে কোন ব্যাপার না। গুরুত্বপূর্ণ জিনিস হ'ল কেন আপনি এটি করছেন: যাতে আপনি সঠিক ব্যর্থতা পেয়ে যাচ্ছেন তা পরীক্ষা করতে পারেন । আমি সম্পাদনা করেছি, আশা করি স্পষ্ট করে দেবেন।
jonrsharpe

10

সামগ্রিক লক্ষ্য কী , আপনি অর্জন করতে চান?

  • সুন্দর পরীক্ষা নিচ্ছেন?

  • মেকিং সঠিক বাস্তবায়ন?

  • ধর্মীয়ভাবে টিটিডি করছেন ?

  • উপরের কেউই না?

সম্ভবত আপনি নিজের সম্পর্ককে পরীক্ষা এবং পরীক্ষার দিকে ঝুঁকছেন।

পরীক্ষাগুলি কোনও প্রয়োগের সঠিকতার বিষয়ে কোনও গ্যারান্টি দেয় না । সমস্ত পরীক্ষায় উত্তীর্ণ হওয়ার বিষয়ে কিছুই বলা যায় না, আপনার সফ্টওয়্যারটি যা করা উচিত তা করে কিনা; এটি আপনার সফ্টওয়্যার সম্পর্কে কোনও অত্যাবশ্যকীয় বিবৃতি দেয় না।

আপনার উদাহরণ গ্রহণ:

সংযোজনের "সঠিক" বাস্তবায়নটি কোডের সমতুল্য হবে a+b। এবং যতক্ষণ না আপনার কোড এটি করে, আপনি বলবেন অ্যালগরিদম এটি যা করে তাতে সঠিক এবং সঠিকভাবে প্রয়োগ করা হয়।

int add(int a, int b) {
    return a + b;
}

উপর প্রথম দর্শনে , আমরা উভয় সম্মত হবে, যে এই হল একটি ছাড়াও এর প্রয়োগে নির্মিত।

তবে আমরা সত্যিই যা করছি তা বলছে না যে এই কোডটি বাস্তবায়ন হ'লaddition এটি কেবল একটি নির্দিষ্ট ডিগ্রির মতো আচরণ করে : পূর্ণসংখ্যার ওভারফ্লো সম্পর্কে ভাবেন ।

পূর্ণসংখ্যার ওভারফ্লো কোডে ঘটে তবে ধারণার মধ্যে নয় addition। সুতরাং: আপনার কোডটি ধারণার মতো একটি নির্দিষ্ট পরিমাণে আচরণ করে addition, তবে তা নয় addition

বরং এই দার্শনিক দৃষ্টিভঙ্গির বেশ কয়েকটি পরিণতি রয়েছে।

এবং একটি হ'ল, আপনি বলতে পারেন, পরীক্ষাগুলি আপনার কোডের প্রত্যাশিত আচরণের অনুমানের চেয়ে বেশি কিছু নয় । আপনার কোড পরীক্ষা, আপনি পারে (সম্ভবত) কখনই নিশ্চিত, আপনার করা বাস্তবায়ন হয় ডান , সেরা আপনি বলতে পারে, যে কি ফলাফল আপনার কোড ছিল সরবরাহ করে বা দেখা হয়নি হয়েছে আপনার প্রত্যাশা; এটি আপনার কোডটি ভুল হতে পারে, তা হোন, আপনার পরীক্ষাটি ভুল হয়েছে বা তা উভয়ই ভুল are

দরকারী পরীক্ষাগুলি কোডটি কী করা উচিত সে সম্পর্কে আপনার প্রত্যাশাগুলি ঠিক করতে সহায়তা করে: যতক্ষণ না আমি আমার প্রত্যাশা পরিবর্তন না করি এবং যতক্ষণ না পরিবর্তিত কোড আমাকে প্রত্যাশা করে ফলাফল দেয়, আমি নিশ্চিত হতে পারি যে আমি যে অনুমানগুলি নিয়েছিলাম ফলাফলগুলি কার্যকর হতে পারে বলে মনে হচ্ছে।

এটি আপনাকে সাহায্য করবে না, যখন আপনি ভুল অনুমান করেছিলেন; কিন্তু আরে! কমপক্ষে এটি সিজোফ্রেনিয়াকে প্রতিরোধ করে: যখন কোনও ফলাফল না পাওয়া উচিত তখন বিভিন্ন ফলাফল আশা করা।


TL; ড

টিডিডি-তে কর্মের সর্বোত্তম কোর্সটি কী, যদি যুক্তিটি সঠিকভাবে প্রয়োগ করার পরে, পরীক্ষাটি এখনও ব্যর্থ হয় (কারণ পরীক্ষায় কোনও ভুল রয়েছে)?

আপনার পরীক্ষাগুলি কোডের আচরণ সম্পর্কে অনুমান। আপনার বাস্তবায়ন সঠিক বলে মনে করার যদি আপনার কাছে উপযুক্ত কারণ থাকে তবে পরীক্ষাটি ঠিক করুন এবং দেখুন যে অনুমানটি ধারণ করে holds


1
আমি মনে করি সামগ্রিক লক্ষ্যগুলি সম্পর্কে প্রশ্নটি বেশ গুরুত্বপূর্ণ, এটি আনার জন্য ধন্যবাদ। আমার জন্য, সর্বোচ্চ প্রিওগুলি নিম্নলিখিত: 1. সঠিক বাস্তবায়ন ২. "দুর্দান্ত" পরীক্ষা (বা, আমি বরং বলব, "দরকারী" / "ভাল ডিজাইন করা" পরীক্ষা)। আমি এই দুটি লক্ষ্য অর্জনের সম্ভাব্য সরঞ্জাম হিসাবে টিডিডিকে দেখছি। সুতরাং, যদিও আমি এই প্রশ্নটির প্রসঙ্গে ধর্মীয়ভাবে টিডিডি অনুসরণ করতে চাই না, আমি বেশিরভাগ ক্ষেত্রে টিডিডি দৃষ্টিভঙ্গিতে আগ্রহী। আমি এটি পরিষ্কার করতে প্রশ্নটি সম্পাদনা করব।
আটলিও

সুতরাং, আপনি কি এমন একটি পরীক্ষা লিখবেন যা ওভারফ্লোর জন্য পরীক্ষা করে এবং যখন এটি ঘটে তখন পাস হয় বা যখন এটি ঘটে তখন তা ব্যর্থ করে দেবেন কারণ অ্যালগরিদম সংযোজন এবং ওভারফ্লো ভুল উত্তর দেয়?
জেরি যেরেমিয়া 1

1
@ জেরি জেরেমিয়া আমার বক্তব্য: আপনার পরীক্ষাগুলি যা কাভার করা উচিত তা আপনার ব্যবহারের ক্ষেত্রে নির্ভরশীল। ব্যবহারের ক্ষেত্রে যেখানে আপনি একক অঙ্কের একগুচ্ছ যোগ করেন, অ্যালগরিদম যথেষ্ট ভাল । যদি আপনি জানেন, খুব সম্ভবত যে আপনি "বড় সংখ্যা" যুক্ত করেছেন, তবে datatypeএটি স্পষ্টতই ভুল পছন্দ। একটি পরীক্ষা প্রকাশ করে যে: আপনার প্রত্যাশাটি big বড় সংখ্যার পক্ষে কাজ করে «এবং বেশ কয়েকটি ক্ষেত্রে এটি পূরণ হয় না। তাহলে প্রশ্ন উঠবে কীভাবে এই মামলাগুলি মোকাবেলা করা যায়। তারা কি কর্নার কেস? হ্যাঁ, তাদের সাথে কীভাবে আচরণ করবেন? সম্ভবত কিছু কোয়ার্ড ক্লজ বৃহত্তর জঞ্জাল রোধ করতে সহায়তা করে। উত্তরটি প্রাসঙ্গিকভাবে আবদ্ধ।
থমাস জাঙ্ক

7

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


আমরা কীভাবে পরীক্ষা করতে পারি যে আমাদের প্রত্যাশার কারণে পরীক্ষাটি ব্যর্থ হচ্ছে?
বাসিলিভস

2
@ বাসিলিভস আপনাকে: ১. ব্যর্থতার কারণ কী হওয়া উচিত তা নিয়ে একটি অনুমান করা; 2. পরীক্ষা চালানো; এবং 3. ফলাফল ব্যর্থতার বার্তা পড়ুন এবং তুলনা করুন। কখনও কখনও এটি আপনাকে আরও অর্থবহ ত্রুটি দেওয়ার জন্য পরীক্ষার পুনর্লিখনের উপায়গুলিও বোঝায় (উদাহরণস্বরূপ, তারা উভয় একই জিনিস পরীক্ষা করলেও assertTrue(5 == add(2, 3))কম কার্যকর ফলাফল দেয় assertEqual(5, add(2, 3)))।
jonrsharpe

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

1
@ বাসিলিভস কি? ৩ য় ধাপে আপনার অনুমানটি হবে "পরীক্ষাটি ব্যর্থ হয় কারণ 5 টি 12 এর সমান নয়" । পরীক্ষা চালানো আপনাকে দেখাবে যে পরীক্ষাটি সেই কারণেই ব্যর্থ হয়েছে কিনা, কোন ক্ষেত্রে আপনি এগিয়ে চলেছেন, বা অন্য কোনও কারণে, কোন ক্ষেত্রে আপনি কেন এটি নির্ধারণ করেছেন। সম্ভবত এটি কোনও ভাষার সমস্যা, তবে আপনি কী পরামর্শ দিচ্ছেন তা আমার কাছে অস্পষ্ট।
jonrsharpe

5

এই বিশেষ ক্ষেত্রে, আপনি যদি 12 কে 11 এ পরিবর্তন করেন এবং পরীক্ষাটি এখন পাস হয় তবে আমি মনে করি আপনি পরীক্ষার পাশাপাশি বাস্তবায়নেরও একটি ভাল কাজ করেছেন, সুতরাং অতিরিক্ত হুপের মধ্য দিয়ে যাওয়ার খুব বেশি দরকার নেই।

যাইহোক, একই সমস্যাটি আরও জটিল পরিস্থিতিতে দেখা দিতে পারে যেমন আপনার সেটআপ কোডটিতে কোনও ভুল থাকলে। সেক্ষেত্রে, আপনার পরীক্ষা ঠিক করার পরে, সম্ভবত আপনার বিশেষায়িত পরীক্ষায় ব্যর্থ হওয়ার জন্য আপনার বাস্তবায়নটিকে এমনভাবে পরিবর্তনের চেষ্টা করা উচিত, এবং তারপরে পরিবর্তনটি ফিরিয়ে নেওয়া উচিত। যদি বাস্তবায়নটিকে ফিরিয়ে দেওয়া যদি এটি করার সহজতম উপায় হয় তবে তা ঠিক। আপনার উদাহরণে, আপনি পরিবর্তন a + bকরতে পারেন a + aবা a * b

বিকল্পভাবে, আপনি যদি দৃ slightly়ভাবে দাবিটি পরিবর্তন করতে পারেন এবং পরীক্ষাটি ব্যর্থ দেখতে পান, যা পরীক্ষার পরীক্ষায় বেশ কার্যকর হতে পারে।


0

আমি বলব, এটি আপনার প্রিয় সংস্করণ নিয়ন্ত্রণ সিস্টেমের ক্ষেত্রে:

  1. আপনার কার্য ডিরেক্টরিতে আপনার কোড পরিবর্তনগুলি রেখে পরীক্ষার সংশোধন করুন।
    একটি সম্পর্কিত বার্তা দিয়ে প্রতিশ্রুতিবদ্ধ Fixed test ... to expect correct output

    এর সাথে git, git add -pএটির জন্য পরীক্ষা এবং বাস্তবায়ন একই ফাইলটিতে ব্যবহারের প্রয়োজন হতে পারে , অন্যথায় আপনি সম্ভবত দুটি ফাইল পৃথকভাবে মঞ্চস্থ করতে পারেন।

  2. বাস্তবায়ন কোডটি প্রতিশ্রুতিবদ্ধ।

  3. পদক্ষেপ 1 এ করা প্রতিশ্রুতি পরীক্ষা করতে সময়মতো ফিরে যান এবং পরীক্ষাটি আসলে ব্যর্থ হয় তা নিশ্চিত করে

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.