আপনি কখন টিডিডিতে "রিয়েল" কোডটি লেখেন?


147

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

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

সম্পাদনা করুন: যারা উত্তর দিয়েছেন তাদের সকলকে ধন্যবাদ। আপনার সমস্ত উত্তর আমাকে প্রচুর সাহায্য করেছে। আমি যা জিজ্ঞাসা করছি বা বিভ্রান্ত হয়েছিল সে সম্পর্কে বিভিন্ন ধারণা রয়েছে বলে মনে হয় এবং সম্ভবত এটি রয়েছে তবে আমি যা বলছিলাম তা ছিল, বলুন আমার স্কুল তৈরির জন্য একটি আবেদন রয়েছে।

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

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

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

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

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

বা, সম্ভবত এই শো আমি এখনও বিভ্রান্ত করছি।


193
টিডিডির পরে লোকেরা রাতের জন্য বাড়িতে যায়।
25:42

14
আপনি যে কোডটি লিখেছেন তা কেন আসল নয় বলে আপনি মনে করেন?
গায়ো

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

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

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

উত্তর:


243

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

আপনি "ফিরে যান" এবং "রিয়েল কোড" লিখবেন না। এটি সমস্ত বাস্তব কোড। আপনি কি ফিরে যান এবং অন্য পরীক্ষা যে যোগ বাধ্য করে আপনাকে পরিবর্তন অর্ডার এখন পরীক্ষা পাস করার জন্য আপনার কোড।

আপনি প্রতিযোগিতা করার আগে আপনি কত কোড লিখবেন? কোনটিই নয়। আপনি একটি ব্যর্থ পরীক্ষা ছাড়াই শূন্য কোড লিখুন যা আপনাকে আরও কোড লিখতে বাধ্য করে

প্যাটার্নটি লক্ষ্য করুন?

আসুন আশা করি যে এটি সহায়তা করে simple (অন্য) সাধারণ উদাহরণ দিয়ে চলুন।

Assert.Equal("1", FizzBuzz(1));

সহজ পিয়াজি

public String FizzBuzz(int n) {
    return 1.ToString();
}

আপনি কি রিয়েল কোড কল করবেন না, তাই না? আসুন একটি পরীক্ষা যুক্ত করুন যা একটি পরিবর্তনকে বাধ্য করে।

Assert.Equal("2", FizzBuzz(2));

আমরা নির্বোধের মতো কিছু করতে পারি if n == 1, তবে আমরা বুদ্ধিমান সমাধানে চলে যাব।

public String FizzBuzz(int n) {
    return n.ToString();
}

কুল। এটি সমস্ত ফিজবজ নম্বরগুলির জন্য কাজ করবে। পরবর্তী ইনপুট এমন কী যা উত্পাদন কোডটি পরিবর্তন করতে বাধ্য করবে?

Assert.Equal("Fizz", FizzBuzz(3));

public String FizzBuzz(int n) {
    if (n == 3)
        return "Fizz";
    return n.ToString();
}

এবং আবার. এমন একটি পরীক্ষা লিখুন যা এখনও পাস হবে না।

Assert.Equal("Fizz", FizzBuzz(6));

public String FizzBuzz(int n) {
    if (n % 3 == 0)
        return "Fizz";
    return n.ToString();
}

এবং এখন আমরা তিনটির সমস্ত গুণক (যা পাঁচটির গুণকও নয়, আমরা এটি নোট করব এবং ফিরে আসব) coveredেকে রেখেছি।

আমরা "বাজ" এর জন্য এখনও একটি পরীক্ষা লিখিনি, সুতরাং এটি লিখি।

Assert.Equal("Buzz", FizzBuzz(5));

public String FizzBuzz(int n) {
    if (n % 3 == 0)
        return "Fizz";
    if (n == 5)
        return "Buzz"
    return n.ToString();
}

এবং আবারও, আমরা জানি যে আমাদের আরও একটি মামলা পরিচালনা করতে হবে।

Assert.Equal("Buzz", FizzBuzz(10));

public String FizzBuzz(int n) {
    if (n % 3 == 0)
        return "Fizz";
    if (n % 5 == 0)
        return "Buzz"
    return n.ToString();
}

এবং এখন আমরা 5 এর সমস্ত গুণককে হ্যান্ডেল করতে পারি যা 3 এর গুণকও নয়।

এই অবধি অবধি, আমরা রিফ্যাক্টরিং পদক্ষেপটি অগ্রাহ্য করছি, তবে আমি কিছু সদৃশ দেখতে পাচ্ছি। এখন এটি পরিষ্কার করা যাক।

private bool isDivisibleBy(int divisor, int input) {
    return (input % divisor == 0);
}

public String FizzBuzz(int n) {
    if (isDivisibleBy(3, n))
        return "Fizz";
    if (isDivisibleBy(5, n))
        return "Buzz"
    return n.ToString();
}

কুল। এখন আমরা সদৃশটি সরিয়ে দিয়ে একটি নামযুক্ত ফাংশন তৈরি করেছি। আমরা পরবর্তী পরীক্ষাটি কী লিখতে পারি যা কোডটি পরিবর্তন করতে আমাদের বাধ্য করবে? ঠিক আছে, আমরা মামলাটি এড়িয়ে চলেছি যেখানে সংখ্যাটি 3 এবং 5 উভয় দিয়ে বিভাজ্য। আসুন এখন এটি লিখি।

Assert.Equal("FizzBuzz", FizzBuzz(15));

public String FizzBuzz(int n) {
    if (isDivisibleBy(3, n) && isDivisibleBy(5, n))
        return "FizzBuzz";
    if (isDivisibleBy(3, n))
        return "Fizz";
    if (isDivisibleBy(5, n))
        return "Buzz"
    return n.ToString();
}

পরীক্ষাগুলি পাস, তবে আমাদের আরও নকল আছে। আমাদের কাছে বিকল্প রয়েছে, তবে আমি কয়েকবার "স্থানীয় স্থানীয় পরিবর্তনশীল" প্রয়োগ করতে যাচ্ছি যাতে আমরা পুনর্লিখনের পরিবর্তে রিফ্যাক্টর করছি।

public String FizzBuzz(int n) {

    var isDivisibleBy3 = isDivisibleBy(3, n);
    var isDivisibleBy5 = isDivisibleBy(5, n);

    if ( isDivisibleBy3 && isDivisibleBy5 )
        return "FizzBuzz";
    if ( isDivisibleBy3 )
        return "Fizz";
    if ( isDivisibleBy5 )
        return "Buzz"
    return n.ToString();
}

এবং আমরা প্রতিটি যুক্তিসঙ্গত ইনপুট কভার করেছি, কিন্তু অযৌক্তিক ইনপুট সম্পর্কে কী ? আমরা 0 বা একটি নেতিবাচক পাস হলে কি হবে? সেই পরীক্ষার মামলাগুলি লিখুন Write

public String FizzBuzz(int n) {

    if (n < 1)
        throw new InvalidArgException("n must be >= 1);

    var isDivisibleBy3 = isDivisibleBy(3, n);
    var isDivisibleBy5 = isDivisibleBy(5, n);

    if ( isDivisibleBy3 && isDivisibleBy5 )
        return "FizzBuzz";
    if ( isDivisibleBy3 )
        return "Fizz";
    if ( isDivisibleBy5 )
        return "Buzz"
    return n.ToString();
}

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

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

  • নেতিবাচক
  • শূন্য
  • এক
  • দুই
  • তিন
  • চার
  • পাঁচ
  • ছয় (3 টির নন ত্রিভুয়াল একাধিক)
  • নাইন (3 স্কোয়ার)
  • দশ (5 টির তুচ্ছ একাধিক)
  • 15 (3 এবং 5 এর একাধিক)
  • 30 (3 এবং 5 এর তুচ্ছ একাধিক)

3
মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
maple_shaft

47
যদি না আমি এই উত্তরটিকে পুরোপুরি ভুল বুঝি: "আমরা এন == 1 এর মতো নির্বোধ কিছু করতে পারি, তবে আমরা বুদ্ধিমান সমাধানে চলে যাব" " - পুরো জিনিস ছিল নির্বোধ। আপনি যদি সামনের দিকে জানেন তবে <spec> না এমন কোনও ফাংশন চান, <spec> এর জন্য পরীক্ষা লিখুন এবং যে অংশটি আপনি স্পষ্টভাবে ব্যর্থ করেছেন <spec> ব্যর্থ করেন সেখানে অংশটি এড়িয়ে যান। যদি আপনি <spec> এ কোনও বাগ খুঁজে পান তবে নিশ্চিত হন: প্রথমে একটি পরীক্ষা লিখুন যাচাই করার জন্য আপনি এটি পরীক্ষা করার আগে পরীক্ষা করতে পারেন এবং ফিক্সের পরে পরীক্ষার পাসগুলি পর্যবেক্ষণ করতে পারেন। তবে এই সমস্ত মধ্যবর্তী পদক্ষেপ জাল করার দরকার নেই।
GManNickG

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

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

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

46

"আসল" কোডটি আপনার পরীক্ষার পাস করার জন্য আপনি কোড লিখেন। সত্যিই । এটা খুব সহজ।

লোকেরা যখন পরীক্ষাকে সবুজ করার জন্য খালি সর্বনিম্ন লেখার বিষয়ে কথা বলেন, তার অর্থ কেবলমাত্র আপনার আসল কোডটি YAGNI নীতি অনুসরণ করা উচিত ।

রিফ্যাক্টর পদক্ষেপের ধারণাটি আপনি যা লিখেছিলেন তা পরিষ্কার করার জন্য আপনি যখন খুশি হন যে এটি প্রয়োজনীয়তা পূরণ করে।

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


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

8
@ ডেরেকএলকিনস টিডিডি পরীক্ষার ব্যর্থতার আদেশ দেয়। ইউনিট পরীক্ষা ব্যর্থ না।
তাইমির

6
@ ডেরেকএলকিনস এ কারণেই আপনি কেবল ইউনিট পরীক্ষা লিখেন না, এবং এমন একটি সাধারণ ধারণাও রয়েছে যে আপনি কিছু জাল করেই চেষ্টা করার চেষ্টা করছেন না!
jonrsharpe

36
@ জোনারশপে এই যুক্তি দিয়ে আমি কখনই তুচ্ছ বাস্তবায়ন লিখব না। যেমন রাবারডাকের উত্তরের ফিজবুজ উদাহরণে (যা কেবলমাত্র ইউনিট পরীক্ষাগুলি ব্যবহার করে), প্রথম প্রয়োগটি পরিষ্কারভাবে "কেবল এটি নকল করে"। প্রশ্নের আমার বোধগম্যতা হ'ল লিখিত কোডের মধ্যে এই দ্বৈতত্ত্ব যা আপনি জানেন যে অসম্পূর্ণ এবং কোড যা আপনি সত্যই বিশ্বাস করেন যে প্রয়োজনীয়তাটি বাস্তবায়িত হবে, "বাস্তব কোড"। আমার "বড় switch" উদ্দেশ্যটি "পরীক্ষাগুলি সবুজ করার জন্য ন্যূনতম ন্যূনতম লেখার" যৌক্তিক চরম হিসাবে লক্ষ্য করা হয়েছিল। আমি ওপি'র প্রশ্নটিকে এইভাবে দেখছি: টিডিডিতে নীতিটি এই বড়টি এড়িয়ে চলে switchকোথায়?
ডেরেক এলকিন্স

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

14

সংক্ষিপ্ত উত্তরটি হ'ল "আসল কোড" এমন একটি কোড যা পরীক্ষাকে পাস করে। আপনি যদি সত্যিকারের কোড ব্যতীত অন্য কিছু দিয়ে নিজের পরীক্ষার পাস করতে পারেন তবে আরও পরীক্ষা যুক্ত করুন!

আমি সম্মত হই যে টিডিডি সম্পর্কে প্রচুর টিউটোরিয়াল সরল। তাদের বিরুদ্ধে কাজ করে। এমন একটি পদ্ধতির জন্য খুব সাধারণ পরীক্ষা যা বলে, 3 + 8 গণনা করাতে 3 + 8 গণনা করা এবং ফলাফলের তুলনা করা ছাড়া সত্যই কোনও উপায় নেই। এটি এটিকে দেখে মনে হচ্ছে আপনি কেবলমাত্র নকল কোডটি সর্বত্র জুড়ে থাকবেন এবং সেই পরীক্ষাটি অর্থহীন, ত্রুটি-প্রবণ অতিরিক্ত কাজ।

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

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


6
ব্যক্তিগতভাবে, আমি যে পরীক্ষাটি লিখব তা হবে assertEqual(plus(3,8), 11), না assertEqual(plus(3,8), my_test_implementation_of_addition(3,8))। আরও জটিল ক্ষেত্রে, আপনি সর্বদা পরীক্ষার সঠিক ফলাফলটি গতিশীলভাবে গণনা করা এবং সাম্যতা যাচাই করা ছাড়া ফলকে সঠিক প্রমাণ করার একটি উপায় অনুসন্ধান করেন।
স্টিভ জেসপ

তাই এই উদাহরণস্বরূপ এরকম সত্যিই একটি নিরীহ পথ, আপনি প্রমাণ হতে পারে plus(3,8)তা থেকে 3 বিয়োগ, 8 থেকে বিয়োগ, এবং 0. বিরুদ্ধে ফলাফলের পরীক্ষণ এই এত স্পষ্টত সমতূল্য দ্বারা সঠিক ফলাফলের ফিরে এসেছে assertEqual(plus(3,8), 3+8)হিসাবে একটি হতে বিট অযৌক্তিক, তবে যদি পরীক্ষার অধীনে কোডটি কেবল একটি পূর্ণসংখ্যার চেয়ে আরও জটিল কিছু তৈরি করে চলেছে, তবে ফলাফল গ্রহণ এবং প্রতিটি অংশকে যথার্থতার জন্য পরীক্ষা করা প্রায়শই সঠিক পদ্ধতির। বিকল্পভাবে, এর মতো কিছুfor (i=0, j=10; i < 10; ++i, ++j) assertEqual(plus(i, 10), j)
স্টিভ জেসোপ

... যেহেতু এটি বড় ভয় এড়ায়, এটি হ'ল পরীক্ষাটি লেখার সময় আমরা লাইভ কোডটিতে যে "10 কীভাবে যুক্ত করব" বিষয়টিতে একই ভুল করব। সুতরাং পরীক্ষাটি সাবধানে এমন কোনও কোড লেখা যা এড়ানো যায় যা 10 কে যোগ করে, পরীক্ষায় যা plus()10 টিতে যুক্ত করতে পারে। আমরা অবশ্যই অবশ্যই প্রোগ্রামার-যাচাই করা অন্তরীন লুপ মানগুলির উপর নির্ভর করি।
স্টিভ জেসোপ

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

6

কখনও কখনও টিডিডি সম্পর্কে কিছু উদাহরণ বিভ্রান্তিকর হতে পারে। অন্যান্য লোকেরা যেমন আগে উল্লেখ করেছে, পরীক্ষাগুলি পাস করতে আপনি যে কোডটি লেখেন তা হ'ল আসল কোড।

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

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

বব মার্টিন এখানে পুরোপুরি ব্যাখ্যা করেছেন ।


5

আপনি ক্লান্ত হয়ে বাড়িতে যেতে চাইলে রিফ্যাক্টর অংশটি পরিষ্কার হয়ে যায়।

আপনি যখন কোনও বৈশিষ্ট্য যুক্ত করতে চলেছেন তখন পরবর্তী পরীক্ষার আগে আপনি যা পরিবর্তন করেছিলেন তা রিফ্যাক্টর অংশ part আপনি নতুন বৈশিষ্ট্যটির জন্য জায়গা তৈরি করতে কোডটি রিফ্যাক্টর। আপনি কী করবেন যখন আপনি জানবেন যে নতুন বৈশিষ্ট্যটি কী হবে। যখন আপনি কেবল এটি কল্পনা করছেন না।

"হাই হাই মম" মুদ্রিত হবে এমন একটি বৈশিষ্ট্য যুক্ত করার জন্য আপনি কোনও ক্লাস তৈরি GreetImplকরার GreetWorldআগে GreetMom(পরীক্ষা যুক্ত করার পরে) পুনরায় নামকরণ করার মতো সহজ হতে পারে ।


1

তবে আসল কোড টিডিডি পর্বের রিফ্যাক্টর পর্যায়ে উপস্থিত হবে। অর্থাত্ কোডটি যা চূড়ান্ত প্রকাশের অংশ হওয়া উচিত।

প্রতিবার আপনি পরিবর্তন করার সময় টেস্টগুলি চালানো উচিত।

টিডিডি জীবনচক্রের মূলমন্ত্রটি হবে: রেড গ্রিন রেফ্যাক্টর

লাল : পরীক্ষা লিখুন Write

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

প্রতিক্রিয়া : কোড পরিষ্কার করুন, সঠিকভাবে ভেরিয়েবলের নাম দিন। কোডটি শুকিয়ে নিন


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

2
@ এমকোটল: আপনি অবাক হয়ে যেতে পারেন যে কেবলমাত্র একটি গেট-রিপোজিটোরির বাস্তবায়ন কোডবেজে হার্ডকোড হওয়া মানগুলি হতে পারে। :)
ব্রায়ান বোয়েচার

6
আমি কেন কখনই ক্রেপ কোড লিখব এবং এটি পরিষ্কার করব, যখন আমি সুন্দর, উত্পাদন মানের কোডটি টাইপ করতে পারি তত দ্রুত গতিতে করতে পারি? :)
কাজ

1
@ কাজ এই কারণে যে আপনি অনির্ধারিত আচরণ যুক্ত করার ঝুঁকি নিচ্ছেন । প্রতিটি পছন্দসই আচরণের পরীক্ষা করার বিষয়টি নিশ্চিত করার একমাত্র উপায় হ'ল যতই কৃপণ তা বিবেচনা না করেই সম্ভব সহজ পরিবর্তন করা। কখনও কখনও নীচের রিফ্যাক্টরিং একটি নতুন পদ্ধতি নিয়ে আসে যা আপনি আগেই
ভাবেননি

1
@ টিমোথিট্রাকল সর্বাধিক সম্ভাব্যতম পরিবর্তনটি খুঁজে পেতে 50 মিনিট সময় নেয় তবে দ্বিতীয় সাধারণ সম্ভাব্য পরিবর্তনটি খুঁজে পেতে কেবল 5 টি কী? আমরা কি দ্বিতীয় সরলতমের সাথে যাই বা সরলতম সন্ধান করি?
কাজ

1

আপনি কখন টিডিডিতে "রিয়েল" কোডটি লেখেন?

লাল ফেজ যা যেখানে আপনি লিখতে কোড।

ইন refactoring ফেজ প্রাথমিক লক্ষ্য হয় মুছতে কোড।

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

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

অবশেষে আপনি সনাক্তকারীদের নাম পরিবর্তন করে ম্যাডিক সংখ্যা এবং / অথবা আক্ষরিক স্ট্রিংগুলিতে স্থির করে পাঠযোগ্যতার উন্নতি করুন ।


এটি রেড-রিফ্যাক্টর নয়, এটি লাল-সবুজ-চুল্লী। - রব কিনয়ন

এটি নির্দেশ করার জন্য ধন্যবাদ।

সুতরাং আপনি সবুজ পর্ব যেখানে আপনি আসল কোড লিখবেন

ইন লাল ফেজ আপনি লিখতে এক্সিকিউটেবল স্পেসিফিকেশন ...


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

1

আপনি পুরো সময় রিয়েল কোড লিখছেন ।

প্রতিটি পদক্ষেপে আপনার কোডটি আপনার কোডের ভবিষ্যতের কলারদের জন্য সন্তুষ্ট করবে এমন শর্তগুলি পূরণ করার জন্য কোড লিখছেন (যা আপনি হতে পারেন বা নাও হতে পারে ...)।

আপনি মনে করেন আপনি ব্যবহারযোগ্য ( বাস্তব ) কোডটি লিখছেন না , কারণ এক মুহুর্তে আপনি এটি রিফ্যাক্টর করে দিতে পারেন।

কোড-রিফ্যাক্টরিং হ'ল বিদ্যমান কম্পিউটার কোডের পুনর্গঠন প্রক্রিয়া - ফ্যাক্টরিং পরিবর্তন করা - এর বাহ্যিক আচরণ পরিবর্তন না করেই।

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

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

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

(*) "টেস্ট চালিত বিকাশ: উদাহরণ দ্বারা" কেন্ট বেক দ্বারা


2
"টেস্ট চালিত বিকাশ: উদাহরণ অনুসারে" কেন্ট বেক
লিখেছেন

1

আপনার পরীক্ষাগুলিকে ব্যর্থ করতে আপনি কোড লিখছেন না।

সাফল্যের চেহারাটি কেমন হওয়া উচিত তা নির্ধারণ করতে আপনি আপনার পরীক্ষা লিখেন, যা প্রাথমিকভাবে ব্যর্থ হওয়া উচিত কারণ আপনি যে কোডটি পাস হবে সেগুলি এখনও লিখেনি।

প্রাথমিকভাবে ব্যর্থ পরীক্ষাগুলি লেখার পুরো বিষয়টিটি দুটি কাজ করা:

  1. সমস্ত মামলা - সমস্ত নামমাত্র মামলা, সমস্ত প্রান্তের কেস ইত্যাদি Coverেকে রাখুন
  2. আপনার পরীক্ষাগুলি বৈধ করুন। আপনি যদি কেবল সেগুলি পাস করতে দেখেন তবে আপনি কীভাবে নিশ্চিত হন যে কোনও ঘটনা ঘটলে তারা নির্ভরযোগ্যতার সাথে একটি ব্যর্থতার খবর দেবে?

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

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


0

আমি মনে করি আপনি ইউনিট পরীক্ষা এবং ইন্টিগ্রেশন পরীক্ষার মধ্যে বিভ্রান্ত হতে পারেন। আমি বিশ্বাস করি গ্রহণযোগ্যতা পরীক্ষাও হতে পারে, তবে এটি আপনার প্রক্রিয়ার উপর নির্ভর করে।

একবার আপনি সমস্ত "ইউনিট" এর সমস্ত পরীক্ষা করে নিলে আপনি সেগুলি সমস্ত জড়িত বা "সংহত" পরীক্ষা করেন। এটি সাধারণত একটি পুরো প্রোগ্রাম বা গ্রন্থাগার

যে কোডটিতে আমি ইন্টিগ্রেশন লিখেছি সেগুলি বিভিন্ন পরীক্ষার প্রোগ্রামগুলির সাথে একটি লাইব্রেরি পরীক্ষা করে যা ডেটা পড়ে এবং এটি লাইব্রেরিতে ফিড করে, তারপরে ফলাফলগুলি পরীক্ষা করে। তারপরে আমি থ্রেড দিয়ে এটি করি। তারপরে আমি এটি মাঝখানে থ্রেড এবং কাঁটাচামচ দিয়ে করব। তারপরে আমি এটি চালাচ্ছি এবং 2 সেকেন্ড পরে -9 মেরে ফেলছি, তারপরে আমি এটি শুরু করব এবং এর পুনরুদ্ধার মোডটি পরীক্ষা করব। আমি এটি কৌতুক। আমি এটিকে সব ধরণের নির্যাতন করি।

এগুলি সবই ALSO টেস্টিং, তবে ফলাফলের জন্য আমার কাছে খুব সুন্দর লাল / সবুজ প্রদর্শন নেই। এটি হয় সফল হয়, বা আমি কয়েক হাজার লাইনের ত্রুটি কোডের মাধ্যমে এটি অনুসন্ধান করতে পারি।

আপনি যেখানে "আসল কোড" পরীক্ষা করেন।

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


(এর = অধিকারী, এটি = "এটি" বা "এটি রয়েছে" example উদাহরণস্বরূপ দেখুন কীভাবে এটি ব্যবহার করতে হয় এবং এটি ।)
পিটার মর্টেনসেন

-6

প্রশ্নের শিরোনামের উত্তরে: "আপনি কখন টিডিডি-তে" রিয়েল "কোডটি লেখেন?" উত্তরটি হ'ল 'খুব কমই' বা 'খুব আস্তে'।

আপনি একজন শিক্ষার্থীর মতো শোনেন, তাই আমি কোনও শিক্ষার্থীকে পরামর্শ দেওয়ার মতো জবাব দেব।

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

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

তবে আপনাকে শালীন কোড ডিজাইন করতে সক্ষম হতে আপনার অ্যাপ্লিকেশনটি কীভাবে ভাঙ্গতে হবে তা জানতে হবে। উদাহরণস্বরূপ, আপনি যদি লিটল ববি টেবিল (xkcd 327) সম্পর্কে জানতেন না , তবে আপনি সম্ভবত ডাটাবেস নিয়ে কাজ করার আগে আপনার ইনপুটগুলি স্যানিটাইজিং করবেন না, সুতরাং আপনি সেই ধারণার আশেপাশে আপনার ডেটা সুরক্ষিত করতে পারবেন না।

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

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

দয়া করে এই ফাঁদে পড়বেন না এবং কোডিংয়ের জন্য আপনার ভূমিকাটি কী তা দেখুন - কোডারটির কাজটি কেবল কোড তৈরি করা। কোড যা সত্যই ভাল কাজ করে। এখন, মনে রাখবেন আপনি পেশাদার কোডার হিসাবে ঘড়িতে থাকবেন, এবং আপনার ক্লায়েন্ট যদি আপনি ১০০,০০০ প্রতিলিপি বা 0 লিখেছেন তবে সেটির যত্ন নেবে না They তারা কেবল কোডটি চায় যা কাজ করে। আসলেই ভাল, আসলে।


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


4
সেগুলি টিডির নিয়ম। আপনি চাইলে কোড লিখতে মুক্ত, তবে আপনি যদি এই তিনটি বিধি অনুসরণ না করেন তবে আপনি টিডিডি করছেন না।
সান বার্টন

2
এক ব্যক্তির "বিধি"? টিডিডি হ'ল একটি ধর্ম নয়, কোড আপনাকে সহায়তা করার পরামর্শ is এত লোক এত সহজেই কোনও ধারণাকে মেনে চলেছে দেখে দুঃখ লাগে। এমনকি টিডিডির উত্সও বিতর্কিত।
ব্যবহারকারী 3791372

2
@ user3791372 টিডিডি একটি অত্যন্ত কঠোর এবং স্পষ্টভাবে সংজ্ঞায়িত প্রক্রিয়া। এমনকি যদি অনেকে মনে করেন যে এটির অর্থ "আপনি যখন প্রোগ্রামিং করছেন তখন কিছু পরীক্ষা করুন", এটি তা নয়। আসুন এখানে শর্তগুলি মেশানোর চেষ্টা করবেন না, এই প্রশ্নটি টিডিডি প্রক্রিয়া সম্পর্কিত, সাধারণ পরীক্ষা নয়।
অ্যালেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.