কীভাবে কোড কভারেজটি মারাত্মকভাবে উন্নত করবেন?


21

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

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

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

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


কেন রিগ্রেশন টেস্টগুলি স্বয়ংক্রিয়ভাবে তৈরি হবে না এবং প্রতিটি পৃথকভাবে যাচাই করবে? হাত দিয়ে এগুলি লেখার চেয়ে দ্রুত হতে হবে।
রবার্ট হার্ভে

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

1
@ ডডজি_কোডার সাধারণত সম্মত হন তবে আমি আশা করি যে traditionalতিহ্যবাহী QA যা দক্ষতার সাথে কাজ করে তা আমার কিছুটা সময় নিরাপদে রাখবে।
পিটার কফলার

1
@ ডডজি_কোডার মাইকেল সি। পালক, লিগ্যাসি কোড সহ কার্যকরভাবে কাজ করার লেখক লেগ্যাসি কোডটিকে "পরীক্ষা ছাড়াই কোড" হিসাবে সংজ্ঞায়িত করেছেন। এটি একটি দরকারী সংজ্ঞা হিসাবে কাজ করে।
StuperUser

উত্তর:


10

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

  1. কোড যা পরীক্ষা করা সহজ এবং ভঙ্গুর
  2. কোড যা পরীক্ষা করা সহজ এবং স্থিতিশীল
  3. কোড যা পরীক্ষা করা কঠিন এবং ভঙ্গুর
  4. কোড যা পরীক্ষা করা শক্ত এবং স্থিতিশীল

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


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

1
@ পিটার কোফলার: কমিট হটস্পটগুলি একটি ভাল ধারণা, তবে এই ধরণের জ্ঞানের সর্বাধিক মূল্যবান উত্স হ'ল ডেভলপাররা যারা কোডটি নিয়ে কাজ করেছেন be
মাইকেল বর্গওয়ার্ট

1
@ পিটার - মাইকেল যেমন বলেছেন, কোডটি নিয়ে কাজ করেছেন এমন বিকাশকারীরা। যিনি মোটামুটি সময়ের জন্য একটি বৃহত কোডবেস নিয়ে কাজ করেছেন তিনি জানতে পারবেন এর কোন অংশের গন্ধ রয়েছে। বা, যদি পুরো জিনিসটির গন্ধ থাকে তবে এর কোন অংশগুলি সত্যই অনুভব করে
কারসন 63000

15

লিগ্যাসি সিস্টেমগুলিতে (যদিও জাভা নয়) কাজ করার আমার অনেক অভিজ্ঞতা রয়েছে, এর থেকে অনেক বড়। আমি খারাপ সংবাদের বাহক হতে ঘৃণা করি, আপনার সমস্যাটি আপনার সমস্যার আকার। আমার সন্দেহ হয় আপনি এটিকে অবমূল্যায়ন করেছেন।

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

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

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

বাস্তবসম্মত লক্ষ্যটি হ'ল "যেহেতু আমরা ইউটি প্রয়োগ করেছি, পরীক্ষার অধীনে মডিউলগুলিতে ত্রুটি সন্নিবেশটি ইউটি-র অধীনে নেই তাদের x% এ নেমে গেছে" (আদর্শভাবে x একটি সংখ্যা <100)।


+1, কোডের চেয়ে শক্তিশালী স্ট্যান্ডার্ড ছাড়াই আপনি কার্যকরভাবে কোনও কিছুকে পরীক্ষা করতে পারবেন না।
ড্যান_ওয়াটারওয়ার্থ

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

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

2

ঘোড়াটি ইতিমধ্যে বল্টু হয়ে যাওয়ার পরে শস্যাগার দরজা সম্পর্কে চিন্তা না করার বিষয়ে এই কথার কথা মনে পড়ে।

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

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

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

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


1

কভারেজ উন্নত করার একটি উপায় হ'ল আরও পরীক্ষা লিখুন।

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

কল্পনা করুন যে আপনার কাছে 3 টি কোড ব্লক, ক, খ এবং বি রয়েছে, যেখানে বি 'বি'র একটি সদৃশ (সঠিক বা কাছের মিস কপি) রয়েছে এবং পরীক্ষার টি সহ আপনার' এবং 'তে ক' কভারেজ নেই তবে 'বি' রয়েছে gine

বি এবং বি থেকে সাধারণতা বের করে 'বি' কে বাদ দেওয়ার জন্য কোড বেসটি যদি রিফ্যাক্টর হয় তবে কোড বেসটি এখন বি, বি, বি'0 এর মতো দেখাবে, যেখানে বি 0 এবং ভাইস- সহ নন-শেয়ার্ড কোড রয়েছে তদ্বিপরীত, এবং উভয় b0 এবং b'0 B এর চেয়ে অনেক ছোট, এবং বি / ব্যবহার করা / চালানো

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

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

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

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