টিডিডি কেবল তত্ত্বে


29

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

এটি একটি মোটামুটি আলোকিত প্রক্রিয়া ছিল।

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

এখন আমি কর্মীদের মধ্যে ফিরে এসেছি এবং আমি অদ্ভুত কিছু লক্ষ্য করছি।

আমি টিডিডি অনুসরণ না করা পছন্দ করি।

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

পরিবর্তে, আমি কিছুটা (ব্যাপকভাবে) ভিন্ন পদ্ধতির গ্রহণ করেছি:

  1. কাজের উল্লম্ব টুকরা বেছে নিন
  2. একটি কার্যকারী প্রোটোটাইপ বিকাশ
  3. রিফ্যাক্টর যতক্ষণ না সবকিছু সুন্দর এবং পরিপাটি থাকে
  4. আমি লিখেছি সুন্দর SOLID এবং টেস্টেবল কোড পিছনে একটি প্রশংসা ফিরে বসুন।

আপনি লক্ষ করেছেন যে পদক্ষেপ 1 "আমার পরীক্ষার লক্ষ্যের সার্বজনীন পৃষ্ঠকে সংজ্ঞায়িত করা" ছিল না এবং দ্বিতীয় ধাপটি "জনসাধারণের উপরের দিকের বাইজেসের পরীক্ষা ছিল না"। আপনি হয়ত লক্ষ্য করেছেন যে কোনও পদক্ষেপই পরীক্ষার সাথে জড়িত নয়। আমি পরীক্ষামূলক কোড লিখছি, তবে আমি এটি পরীক্ষা করছি না ... ঠিক এখনও yet

এখন, আমি এটি পরিষ্কার করতে চাই যে আমি আসলে কোনও ধরণের পরীক্ষার আগে যাচ্ছি না। আমি যে কোডটি লিখছি তা কাজ করে । এটি কাজ করে কারণ আমি নিজে এটি পরীক্ষা করছি।

আমি এটি পরিষ্কার করে দিতে চাই যে আমি সমস্ত স্বয়ংক্রিয় পরীক্ষারও পূর্ববর্তী নই। এখানেই আমার প্রক্রিয়াটি আলাদা। এবং এই কারণেই আমি এই প্রশ্নটি করছি।

তাত্ত্বিকভাবে টিডিডি। অনুশীলনে নয়।

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

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

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

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

সুতরাং, আমি কি [বিটি] ডিডি নরকে যাচ্ছি, বা এটি ব্যবহারিক কোডিং এবং পরীক্ষার একটি সাধারণ রূপ?

আমি এইভাবে কাজ চালিয়ে যেতে চাই দীর্ঘমেয়াদে এই প্রক্রিয়াটি কাজ করতে আমি কী করতে পারি?

বিঃদ্রঃ:

আমি আমার প্রকল্পগুলির একমাত্র বিকাশকারী এবং আমি সমস্ত কিছুর জন্য দায়বদ্ধ: প্রয়োজনীয়তা সংগ্রহ, নকশা, আর্কিটেকচার, টেস্টিং, স্থাপনা ইত্যাদি etc.


2
স্পাইকের মতো দেখায় এবং স্থির করে আস্তে আস্তে স্থির করে যদি If that slice doesn't need modificationlizkeogh.com/2012/06/24/beetest-driven-de
વિકાસ

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

5
হ্যাঁ, এবং লেখার পরীক্ষা প্রথমে আপনার প্রোটোটাইপিং কাজটি দ্বিগুণ করে।
রবার্ট হার্ভে

3
এর অর্থ আমি "সামান্য" বলে মিথ্যা বলছিলাম।
মেটাফাইট

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

উত্তর:


6

দীর্ঘমেয়াদে প্রক্রিয়াটি কাজ করার জন্য কোডটি লেখা হচ্ছে তখন আমি পরীক্ষাগুলি লিখতাম।

যা আপনার পদ্ধতির বিরোধিতা বলে মনে হতে পারে। তবে আপনি প্রশ্ন তুলেছেন তাই আমি আপনাকে আমার গ্রহণ করব:

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

এটি পরে না যাওয়া মানে সময়ের সাথে সাথে জ্ঞানটি (স্বাভাবিকভাবে) হ্রাস পাবে।

এর অর্থ হ'ল আপনি কখনই চলে যাবেন এবং অন্য কেউ আপনার দায়িত্ব নেওয়ার পরে ডকুমেন্টস না থাকার (পরীক্ষার মাধ্যমে) কী করবে তা অবিলম্বে কারিগরি technicalণ হবে না।

বেশিরভাগ ক্ষেত্রে, "কোনও দিন" নাও আসতে পারে। হয় আপনি বাসের সাথে ধাক্কা খেতে পারেন অথবা আপনি নতুন যাত্রায় বাসে উঠতে পারেন board

শেষ অবধি, ম্যানুয়াল টেস্টিং স্কেল করে না এবং প্রায়শই শেষ ব্যবহারকারীর দ্বারা ব্যবহৃত সমস্ত ডিভাইসগুলি কভার করে না।


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

যদিও সমস্যাটি হ'ল আগামীকাল কখনই আসে না, এর পরের বৈশিষ্ট্যটি সর্বদা থাকে। এবং আপনি কি করতে বেছে নিতে যাচ্ছেন; পরবর্তী বৈশিষ্ট্যটি লিখুন, বা যে জিনিসটি আপনি "শেষ করেছেন" তার জন্য পরীক্ষা লিখুন?
অ্যান্ডি

9

যদিও টিডিডি 100% বাস্তবায়ন করা শক্ত তবে আপনার পদ্ধতির একটি ত্রুটি রয়েছে

  1. কাজের একটি উল্লম্ব টুকরা কাজ প্রয়োগ করুন

    1.1 1 বছর কেটে যায় ....

    ১.২ একটি নতুন দেব প্রকল্পটির কাজ শুরু করে

  2. যদি এই টুকরোটির পরিবর্তন প্রয়োজন needs

    ২.৩ পার্স 'ক্লিন কোডিং' শৈলীর পদ্ধতির নাম এবং প্যারামিটারগুলি 'গেট ইউনিকর্ন (কালার অফ ইউনিকর্ন)'

    ২.৪ এক্সএমএল মন্তব্য পড়ুন 'একটি সোনার ইউনিকর্ন পায় (রাইডিংয়ের জন্য) (ওবিভিএস)'

    2.5 মূল দেবকে হান্ট করুন

    ২.6 আশা করি কোড কী করার কথা রয়েছে তা তারা মনে রাখবেন

    ২.7 এগুলি সমস্ত ব্যাখ্যা করার জন্য তাদের পান

  3. ইউনিট টেস্ট, ইন্টিগ্রেশন টেস্ট, আচরণ পরীক্ষা ইত্যাদি লিখুন যা আশা করি কাজের গতির গ্যারান্টিটি গ্যারান্টিযুক্ত

  4. কোডটি সংশোধন করুন

আমি মনে করি আপনি চিহ্নিত করতে সঠিক হন যে ইউনিট পরীক্ষাগুলি সংশোধন প্রয়োজন হলে সত্যই তাদের মান দেখায়।


2
আরে, আমি স্ব নথিপত্র কোড লিখি! আমার ক্লাসগুলির একটি দায়িত্ব রয়েছে এবং তাই এটি বোঝা সহজ। কেউই আমাকে শিকার করার দরকার পড়বে না :)
মেটাফাইট

7
@ মেটাফাইট এবং তারা যদি তা করে তবে আপনি শক্ত স্বর্ণের ইউনিকর্নের শীর্ষে সন্ধান করতে পারবেন!
জোনারশেপে

3
আমি তাকে গোল্ডিকর্ন বলি।
মেটাফাইট

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

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

4

আমি ড্যানিয়েল হোলিনরেকে এবং ইভান উভয়ের সাথেই একমত, যে আপনার পরীক্ষা-কেবল-যদি-সংশোধন করা এতদূর ভাল কাজ করে তবে প্রথম মূল বিষয়টি হ'ল:

I am the sole developer on my projects and I am responsible for everything

এবং এটি সম্ভবত দ্বিতীয় মূল বিষয় হ'ল:

you're producing nice clean code

আমি মনে করি না যে টিডিডি একমাত্র প্রোগ্রামারদের জন্য একটি বিশাল উত্পাদনশীলতা বৃদ্ধিকে এনেছে এবং আপনি যদি ইতিমধ্যে ভাল পরিষ্কার কোড লিখতে থাকেন তবে এটি আপনার কোডের মানের উন্নতি করতে পারে না।

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

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


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

3

আমার কাছে মূল বিষয়টি হ'ল:

আমি আমার প্রকল্পগুলির একমাত্র বিকাশকারী এবং আমি সমস্ত কিছুর জন্য দায়বদ্ধ: প্রয়োজনীয়তা সংগ্রহ, নকশা, আর্কিটেকচার, টেস্টিং, স্থাপনা ইত্যাদি etc.

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

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

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


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

এটি একটি সুস্পষ্ট পয়েন্ট, তবে দুঃখের সাথে আমার অভিজ্ঞতার সাথে, ডকুমেন্টেশনের উপর আমি প্রায় প্রতিটি প্রকল্পে কাজ করেছি, যখন এটি উপস্থিত রয়েছে, তা পুরানো বা অসম্পূর্ণ।
ড্যানিয়েল হোলিনরেকে

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

আমি আপনার মন্তব্যের জবাবে আমার উত্তরটি কিছুটা সম্পাদনা করেছি। ধন্যবাদ.
ড্যানিয়েল হোলিনরেকে

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

3

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

পরীক্ষাগুলি লেখার অনুশীলনের সাথে আমি যে বিষয়গুলি দেখতে পাচ্ছি তা পরিবর্তন করার আগেই:

আমার প্রায়শই তাড়াহুড়ো করে পরিবর্তন করা দরকার

আপনি যখন প্রয়োজন কেবল পরীক্ষাগুলি লিখে সামগ্রিকভাবে সময় সাশ্রয় করতে পারেন, সমস্ত সময় সমান হয় না। আমি যখন সঙ্কট মোডে আছি তখন 1 ঘন্টা বাঁচাতে 2 ঘন্টা রাইটিং টেস্ট ব্যয় করা - এটি পুরোপুরি মূল্যবান।

কোডটি লেখার সাথে সাথে টেস্টগুলি লেখার পক্ষে আরও সহজ

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


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

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


2

এটি একটি ভাল প্রশ্ন, এবং FWIW আমি আমার দুটি সেন্ট নিক্ষেপ করব in

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

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

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

আপনি কেবলমাত্র একটি ছোট টিকিটের মধ্য দিয়ে যাবার চেষ্টা করছিলেন এমন অনেক সময়, এবং তারপরে পরীক্ষাগুলি আসে এবং আপনার বিকাশের সময়কে দ্বিগুণ করে দেয়, এমন বৈশিষ্ট্যের জন্য যা আপনি কেবল কাজগুলি জানেন

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

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

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

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


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

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

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

1
সেলসফোর্সের বিশেষত টেস্টিংটি সমস্ত ভুল রয়েছে: তারা এটির জন্য পরীক্ষা করা প্রয়োজনীয় করে তোলে, তবে মানসম্মত পরীক্ষাগুলি লেখা হাস্যকরভাবে জটিল করে তোলে । এটি তাত্ত্বিকভাবে দুর্দান্ত শোনাচ্ছে তবে বাস্তবে এটি বিকাশকারীদের চামচ দিয়ে তাদের চোখ বের করতে চায়।

1

আমি আপনার পদ্ধতির সুপারিশ করতে পারে না।

আমি যদি আপনার পদ্ধতির ব্যবহার করি তবে এটি উদাহরণস্বরূপ নীচের মতো হবে (ঘরটি অ্যাপ্লিকেশন:

  1. আমি আমার পরিবারের জন্য কিছু জ্ঞানসম্পন্ন বা শিক্ষানবিশ হিসাবে একটি ইটখোলার হিসাবে একটি ঘর তৈরি শুরু করি।
  2. আমি শিশু কক্ষ, অতিথি কক্ষের মতো প্রয়োজনীয়তাগুলি জানি এবং আমার "প্রোটোটাইপ" বাড়ি তৈরি শুরু করি।
  3. দু'বার পরে আপনার "প্রোটোটাইপ" বাড়িটি করা হয়েছে।
  4. কাঠামোটি ম্যানুয়ালি পর্যাপ্ত স্থিতিশীল কিনা তা আমি দেখতে শুরু করি। তাই আমি অনেক ওজন তুলে প্রথম তলায় বিভিন্ন কক্ষে এনেছি। পরিবারের সাথে যখন আমি কোনও ঘরে বসে থাকি তখন সিলিংটি ভেঙে না যায় তা নিশ্চিত করতে। তবে এটি ভেঙে যায় এবং আমি রিফ্যাক্টরিং শুরু করি। প্রথমে সমস্ত ভর আপ পরিষ্কার। এটি নতুন তৈরি করা এবং এটি পর্যাপ্ত স্থিতিশীল না হওয়া পর্যন্ত পুনরায় ম্যানুয়ালি পরীক্ষা করার চেয়ে।
  5. আমি আমার পরিবারের সাথে যেতে চেয়েছি। সবকিছু ভাল.
  6. একটি পতঙ্গ পরে আমার কাজিন এবং পিতামাতারা আমাদের সাথে দেখা করতে আসছে। তবে আমাদের ঘরে enterোকার আগে তাদের একজন স্থপতি এবং সিভিল ইঞ্জিনিয়ারকে প্রদান করতে হবে যাতে নিশ্চিত করা যায় যে আমরা যখন প্রথম তলায় কোনও একটি ঘরে বসে সিলিংটি না ভাঙে।
  7. স্থপতি এবং সিভিল ইঞ্জিনিয়ারের প্রচুর কাজ রয়েছে কারণ তাদের শুরু করার মতো কিছুই নেই। সুতরাং তাদের আমার বাড়িতে যেতে হবে এবং আমি এটি কীভাবে তৈরি করব তা দেখতে হবে look
  8. এবং আবার এটি যথেষ্ট স্থিতিশীল নয়। সুতরাং তাদের প্রথম তলার মাটির রিফেক্টর করতে হবে।
  9. তবে এর পরে সবকিছু ঠিকঠাক আছে এবং সবাই নিরাপদে আমার বাড়িতে প্রবেশ করতে পারে।

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

সুতরাং একটি "প্রোটোটাইপ" প্রোগ্রামিং না করে এবং রিফ্যাক্টরিং শুরু করার চেয়ে আরও ভাল পদ্ধতির রয়েছে। প্রোটোটাইপ প্রোগ্রামিংয়ের পরিবর্তে "আপনার অ্যাপ্লিকেশনটির ইউএমএল দিয়ে একটি নকশা তৈরি করুন।

  1. একটি ইউজকেস ডায়াগ্রাম তৈরি করুন। আপনি শুরু করতে ড্র.ইও ব্যবহার করতে পারেন ।
  2. আচরণটি নির্ধারণ করতে আপনার ইউজক্যাসের উপর ভিত্তি করে একটি ইপিকে ডায়াগ্রাম তৈরি করার চেয়ে বেশি। (আপনার অ্যাপ্লিকেশনটির আচরণগত) একটি কোডড প্রোটোটাইপ রিফ্যাক্টারের চেয়ে রিফ্যাক্টর থেকে দ্রুত। বিশেষত আপনি যখন একটি শিক্ষানবিস হয়।
  3. একটি ক্লাস ডায়াগ্রাম তৈরি করুন। (আপনার আবেদনের স্ট্রাকচার)
  4. আচরণের প্রয়োগে আপনি কোথায় সমস্যা পেতে পারেন তা নির্ধারণ করুন।
  5. আপনি কীভাবে এই আচরণটি বাস্তবায়ন করতে পারেন তা নির্ধারণ করার জন্য কোডের 10 বা 20 লাইনের একটি সাধারণ প্রোটোটাইপ লিখুন। শিক্ষানবিশ জন্য ভাল। বা একটি টিউটোরিয়াল দেখুন, সেখানে অন্যান্য উদাহরণ অ্যাপ্লিকেশনগুলির উত্স কোডটি দেখুন। তারা কীভাবে এটি সমাধান করেছে।
  6. কোডিং শুরু করার চেয়ে। আপনার ইউজকেসের সফল পরীক্ষাগুলি মুছুন। এটি বিভিন্ন উপায়ে করা যেতে পারে। প্রথমে পরীক্ষার জন্য প্রয়োজনীয় সমস্ত কাঠামো এবং সেই ইউজকেস তৈরি করুন। এন্টারপ্রাইজ আর্কিটেক্ট ব্যবহার করার সময় কাঠামোটি আপনার জন্য তৈরি করা যেতে পারে। আপনার ডায়াগ্রামের উপর ভিত্তি করে। অথবা টেস্টের ওয়্যারিংয়ের সময় কাঠামো তৈরি করুন। সুতরাং কোন সংকলন ত্রুটি উপস্থিত হয়। এখানে উল্লেখ করুন যে আপনাকে কেবল আপনার আবেদনের আচরণটি পরীক্ষা করতে হবে। আপনার কাছে থাকা ইউজকেসগুলি।
  7. আপনার ইউজকেসের আচরণ বাস্তবায়ন করার চেয়ে বেশি।
  8. সফলতার পরে ইউজার কেসগুলি ব্যতিক্রমগুলির জন্য টেস্ট লিখতে শুরু করে। এবং আপনার পরীক্ষাগুলি কার্যকর হওয়ার সময় আপনি সবুজ রঙগুলি দেখলে এটি সর্বদা ভাল লাগে;)
  9. এবং আপনি সম্পন্ন হয়েছে।

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

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


1

আমি যে কোডটি লিখছি তা কাজ করে। এটি কাজ করে কারণ আমি নিজে এটি পরীক্ষা করছি।

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

স্বয়ংক্রিয় পরীক্ষাগুলি (প্রথম পরীক্ষা-নিরীক্ষণের বিষয়টি বিবেচনা করে না) আপনার কোডটিতে দ্রুত প্রতিক্রিয়া লুপ সরবরাহ করে আপনাকে দ্রুত এগিয়ে দেয়।

আপনি কি নিশ্চিত যে আপনি ছয় মাস পরে কিছু শর্ত ম্যানুয়ালি পরীক্ষা করে নেওয়ার কথা মনে রাখবেন - দয়া করে বলবেন না যে আপনি পরীক্ষার জন্য সমস্ত গুরুত্বপূর্ণ শর্তটি নথিভুক্ত করবেন - কারণ ডকুমেন্টেশন / মন্তব্য লেখার ধরণ লেখার পরীক্ষার সমান (এক্সিকিউটেবল ডকুমেন্টেশন)

  • কাজের উল্লম্ব টুকরা বেছে নিন

  • একটি কার্যকারী প্রোটোটাইপ বিকাশ

  • রিফ্যাক্টর যতক্ষণ না সবকিছু সুন্দর এবং পরিপাটি থাকে

এবং আবারও: রিফ্যাক্টরিংয়ের সময় আপনি কীভাবে সমস্ত যুক্তিগুলি ম্যানুয়ালি পরীক্ষা করেছিলেন যা রিফ্যাক্টরিং দ্বারা প্রভাবিত হয়? রিফ্যাক্টরিং পরিবর্তনে পরীক্ষা করতে কতক্ষণ সময় লাগে? যদি রিফ্যাক্টরিং কিছু কোড ভঙ্গ করে তবে বিরতির কারণ খুঁজে পেতে আপনাকে কতক্ষণ সময় লাগে?

  • আমি লিখেছি সুন্দর SOLID এবং টেস্টেবল কোড পিছনে একটি প্রশংসা ফিরে বসুন।

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

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


0

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

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

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


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