java - আপনার জাভা প্রকল্পের জন্য আপনি কি কোড বিশ্লেষণ সরঞ্জাম ব্যবহার করেন?




জাভার ব্যবহার (8)

আমরা FindBugs এবং JDepend Ant দ্বারা সংহত ব্যবহার করি। আমরা জুনাইট ব্যবহার করি কিন্তু আমরা কোনও কাভারেজ টুল ব্যবহার করছি না।

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

আপনি আপনার জাভা প্রকল্পে কি কোড বিশ্লেষণ সরঞ্জাম ব্যবহার করেন?

আমি সব ধরনের আগ্রহী

  • স্ট্যাটিক কোড বিশ্লেষণ সরঞ্জাম (Findbugs, PMD, এবং অন্য কোনও)
  • কোড কভারেজ সরঞ্জাম (Cobertura, Emma, ​​এবং অন্য কেউ)
  • অন্য কোন উপকরণ-ভিত্তিক সরঞ্জাম
  • অন্য কিছু, আমি কিছু অনুপস্থিত করছি

প্রযোজ্য হলে, আপনি কী বিল্ড সরঞ্জামগুলি ব্যবহার করেন এবং কীভাবে এই সরঞ্জামগুলি আপনার আইডিই এবং বিল্ড সরঞ্জাম উভয় সাথে সংহত করে তাও উল্লেখ করে।

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


আমরা কোড কভারেজের জন্য FindBugs এবং Checkstyle এবং ক্লোভার ব্যবহার করছি।

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


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


আমি Cobertura সঙ্গে সৌভাগ্যবান হয়েছে। এটি একটি কোড কভারেজ টুল যা আপনার স্বাভাবিক বিল্ডের অংশ হিসাবে আপনার অ্যানি স্ক্রিপ্টের মাধ্যমে নির্বাহ করা যেতে পারে এবং হডসন এ সংহত করা যেতে পারে।


আমি কোবার্টুর, চেকস্টাইল, (Ecl) Emma এবং Findbugs এর সমন্বয় ব্যবহার করি।

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

চেকস্টাইল এবং Findbugs Eclipse প্লাগিনগুলিও উপকারী, এটি টাইপ করার সময় এডিটরগুলিতে সতর্কতা তৈরি করে।

Maven2 বিল্ড সময় রিপোর্ট তৈরি করার জন্য উপরের সরঞ্জামগুলির সাথে কাজ করে প্লাগইন রিপোর্ট করেছে। সামগ্রিক প্রকল্প প্রতিবেদনগুলি পেতে আমরা এটি ব্যবহার করি, যা আপনি যখন সংখ্যার সংখ্যা চান তখন আরো বেশি কার্যকর। এই আমাদের সিআই বিল্ড দ্বারা উত্পন্ন হয়, যা Continuum ব্যবহার করে চালানো।


আমি নতুন সরঞ্জাম সম্পর্কে জানতে অনেক প্রশ্নের উত্তর খুঁজছি এবং এক প্রশ্নের / থ্রেডে এই জ্ঞানকে একত্রিত করব, তাই আমি সন্দেহ করি এই প্রশ্নের 1 টি সঠিক উত্তর থাকবে।

আমার নিজের প্রশ্নের উত্তর আমি ব্যবহার করি:

  • সাধারণ ত্রুটিগুলি খারাপ / কোডিংয়ের জন্য খোঁজার জন্য খুঁজুন - ম্যাগেন থেকে চালান, এবং ইক্লিপসে সহজেই সংহত করে
  • আমাদের কভারেজ রিপোর্ট জন্য Cobertura - Maven থেকে চালানো

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

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


স্থির বিশ্লেষণ সরঞ্জামগুলির জন্য আমি প্রায়ই সিপিডি, পিএমডি , Checkstyle এবং Checkstyle

সিপিডি হল পিএমডি "কপি / পেস্ট ডিটেক্টর" টুল। আমি পিএমডি ওয়েব পেজে "ডুপ্লিকেটেড কোড খোঁজার" লিঙ্কটি লক্ষ্য করার আগে কিছুটা সময় ধরে পিএমডি ব্যবহার করছি।

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

আমি এন্টি ভিত্তিক বিল্ড সহ এই সরঞ্জামগুলি সংহত করি। আপনি আমার মন্তব্য কনফিগারেশন দেখতে লিংক অনুসরণ করতে পারেন।

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

প্রথম, সতর্কবাণী রিপোর্টের জন্য, আমি আউটপুট রূপান্তর করি যাতে প্রতিটি সতর্কতা সহজ বিন্যাসে থাকে:

/absolute-path/filename:line-number:column-number: warning(tool-name): message

এটি প্রায়শই "Emacs বিন্যাস" নামে পরিচিত, তবে আপনি Emacs ব্যবহার না করলেও, এটি হোমোজনিজিংয়ের প্রতিবেদনগুলির জন্য একটি যুক্তিসঙ্গত বিন্যাস। উদাহরণ স্বরূপ:

/project/src/com/example/Foo.java:425:9: warning(Checkstyle):Missing a Javadoc comment.

আমার সতর্কতা বিন্যাস রূপান্তর Ant Ant filterchains সঙ্গে আমার Ant স্ক্রিপ্ট দ্বারা সম্পন্ন করা হয়।

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

উদাহরণস্বরূপ, পিএমডি এর ডিফল্ট কনফিগারেশন একটি মন্তব্যে " NOPMD " স্ট্রিং সহ কোডের লাইনগুলিতে সতর্কতা প্রজন্মকে দমন করে। এছাড়াও, পিএমডি জাভা এর @SuppressWarnings টীকাগুলিকে সমর্থন করে। আমি পিএমডি NOPMD মন্তব্য করার জন্য কনফিগারেশন ব্যবহার করতে " NOPMD SuppressWarning(PMD. ") মন্তব্য করার জন্য কনফিগার NOPMD যাতে পিএমডি দমন একই রকম দেখায়। আমি মন্তব্য স্টাইলের দমন ব্যবহার করার সময় লঙ্ঘন করা নির্দিষ্ট নিয়মটি পূরণ করি:

// SuppressWarnings(PMD.PreserveStackTrace) justification: (false positive) exceptions are chained

শুধুমাত্র " SuppressWarnings(PMD. " অংশটি একটি মন্তব্যের জন্য গুরুত্বপূর্ণ, তবে এটি @SuppressWarning জন্য পিএমডি সমর্থনের সাথে সামঞ্জস্যপূর্ণ যা নাম অনুসারে পৃথক নিয়ম লঙ্ঘনকে স্বীকৃতি দেয়:

@SuppressWarnings("PMD.CompareObjectsWithEquals") // justification: identity comparision intended

একইভাবে, চেকস্টাইল মন্তব্যের জোড়াগুলির মধ্যে সতর্কতা প্রজন্মকে দমন করে (কোন টীকা সমর্থন সরবরাহ করা হয় না)। ডিফল্টরূপে, চেকস্টাইলটি বন্ধ করে এবং স্ট্রিংগুলিতে CHECKSTYLE:OFF করার জন্য মন্তব্যগুলি CHECKSTYLE:OFF এবং CHECKSTYLE:ON যথাক্রমে। স্ট্রিংগুলি ব্যবহার করতে এই কনফিগারেশনটি পরিবর্তন করুন (চেকস্টাইলের "স্র্পশন কম্পমেন্টফিল্টার" সহ) " BEGIN SuppressWarnings(CheckStyle. " এবং " END SuppressWarnings(CheckStyle. ") কন্ট্রোলগুলিকে PMD এর মত আরও দেখায়:

// BEGIN SuppressWarnings(Checkstyle.HiddenField) justification: "Effective Java," 2nd ed., Bloch, Item 2
// END SuppressWarnings(Checkstyle.HiddenField)

চেকস্টাইল মন্তব্যগুলির সাথে, বিশেষ চেক লঙ্ঘন ( HiddenField ) গুরুত্বপূর্ণ কারণ প্রতিটি চেকটির নিজস্ব " BEGIN/END " মন্তব্য জোড়া থাকে।

FindBugs একটি @SuppressWarnings টীকা সহ সতর্কতা প্রজন্মের দমনকে সমর্থন করে, তাই অন্যান্য সরঞ্জামগুলির সাথে @SuppressWarnings মাত্রা অর্জনের জন্য কোনও কনফিগারেশন প্রয়োজন নেই। দুর্ভাগ্যবশত, Findbugs কে একটি স্বনির্ধারিত @SuppressWarnings টীকাটি সমর্থন করতে হবে কারণ বিল্ট-ইন জাভা @SuppressWarnings টীকাটি একটি SOURCE ধারণ নীতি রয়েছে যা এটি ফাইন্ডবগগুলিতে প্রয়োজনীয় যেখানে ক্লাস ফাইলের টীকা বজায় রাখতে যথেষ্ট শক্তিশালী নয়। জাভা এর @SuppressWarnings টীকা সঙ্গে সংঘর্ষ এড়াতে আমি পুরোপুরি FindBugs সতর্কবার্তা দমন যোগ্যতা:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")

এই কৌশল জিনিস জুড়ে যুক্তিসঙ্গতভাবে সামঞ্জস্যপূর্ণ চেহারা তোলে। প্রতিটি সতর্কতা দমনের স্ট্রিং " SuppressWarnings " একটি সম্পূর্ণ কোড বেসের সমস্ত সরঞ্জামগুলির জন্য সমস্ত দৃষ্টান্ত খুঁজে পেতে সহজ অনুসন্ধান চালানো সহজ করে দেয়।


Checkstyle অন্য একটি আমি আগের কোম্পানির ব্যবহার করেছি ... এটি প্রধানত শৈলী পরীক্ষণের জন্য, তবে এটি কিছু স্ট্যাটিক বিশ্লেষণও করতে পারে। এছাড়াও, কোড কভারেজের জন্য Clover যদিও সচেতন থাকবেন এটি একটি বিনামূল্যের সরঞ্জাম নয়।





static-analysis