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




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

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

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

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

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

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

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

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


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


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

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


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


নিম্নলিখিত সব আমরা আমাদের Maven 2.x বিল্ড এবং Eclipse / RAD 7 উভয় মধ্যে easiy ব্যবহার এবং সংহত করা:

  • টেস্টিং - JUnit / TestNG
  • কোড বিশ্লেষণ - FindBugs, PMD
  • কোড কভারেজ - ক্লোভার

উপরন্তু, আমাদের Maven তৈরি আমরা আছে:

  • JDepend
  • ট্যাগ চেকার (TODO, FIXME, ইত্যাদি)

উপরন্তু, যদি আপনি মেনন 2.x ব্যবহার করছেন, কোডহাউস তাদের মোজো প্রকল্পে সহজে ম্যাগেন প্লাগিনগুলির একটি সংগ্রহ রয়েছে।

দ্রষ্টব্য: বাঁশ সিআই সার্ভারের সাথে ক্লোভারের আউট-দ্য-বক্স-ইন্টিগ্রেশন রয়েছে (যেহেতু তারা উভয়ই আটলাসিয়ান পণ্য)। FindBugs, PMD, এবং CheckStyle এর জন্য বাঁশের প্লাগিন রয়েছে তবে উল্লেখ আছে যে বিনামূল্যে হডসন সিআই সার্ভারও তাদের আছে।


গঠন 101 কোড বিশ্লেষণে ভাল এবং চক্র প্যাকেজ নির্ভরতা খুঁজে বের করা।


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


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


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

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

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

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


স্থির বিশ্লেষণ সরঞ্জামগুলির জন্য আমি প্রায়ই সিপিডি, পিএমডি , 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 " একটি সম্পূর্ণ কোড বেসের সমস্ত সরঞ্জামগুলির জন্য সমস্ত দৃষ্টান্ত খুঁজে পেতে সহজ অনুসন্ধান চালানো সহজ করে দেয়।





static-analysis