স্বয়ংক্রিয় পরীক্ষাগুলির সাথে উত্তরাধিকারের কোডটি পুনঃনির্মাণের সেরা অনুশীলন


22

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

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


1
পদক্ষেপ 1: অনুসন্ধান স্ট্যাক ওভারফ্লো। প্রশ্ন করা হয়েছে। বহু, বহুবার।
এস। লট

উত্তর:


20

প্রথমত, মাইকেল ফেदर्সের লিগ্যাসি কোড সহ কার্যকরভাবে কাজ করা এবং পড়ুন - এই জাতীয় কাজের জন্য এটি একটি অনিবার্য সহায়তা।

তারপরে, কয়েকটি নোট:

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

আমি পারলে এটি +3 করতাম। ডব্লিউইএলসি হ'ল একটি আবশ্যক পঠিত এবং অবশ্যই একটি রিফ্যাক্টরিংয়ের জন্য যান ...
জনসিওয়েব

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

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

4

সেরা পদ্ধতিটি হ'ল মিকাদো পদ্ধতিটি know http://mikadomethod.wordpress.com/2010/08/04/the-mikado-method-book/ এটি কেবল একটি সাধারণ কৌশলটির সাধারণীকরণ তবে এটি একটি বড় কোড বেসে কোডের মান উন্নত করা একমাত্র উপায় know অপ্রয়োজনীয় ঝুঁকি না নিয়ে।

ডাব্লুডব্লিউএলসি এটি সম্পর্কে একটি খুব ভাল বই তবে সি ++ তে লেখা জাভা বা রুবি কোডের সাথে সবসময় কার্যকর হয় না।


2

কোনও পুরানো কোড বেসের উপর রেট্রো ফিটিং টেস্টগুলি বেশ কঠিন হতে পারে যদি এটি নকশায় একক হয়।

যদি সম্ভব হয় (আপনার কাছে সময় / অর্থ আছে), এগিয়ে যাওয়ার এক উপায় হ'ল কোডটিকে আরও পরীক্ষামূলক ইউনিটে রিফ্যাক্টর করা।


1

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

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