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


117

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

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

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

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

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


ইউসিডিটেক্টরটিও দেখুন: ucdetector.org
ক্রিস্টোফ

মিউটেশন পরীক্ষার কভারেজের জন্য চেকআউট পিটেষ্টে যাচ্ছেন ।
mucaho

উত্তর:


70

স্ট্যাটিক বিশ্লেষণ সরঞ্জামের জন্য আমি প্রায়ই সিপিডির ব্যবহার PMD , FindBugs এবং Checkstyle

সিপিডি হ'ল পিএমডি "কপি / পেস্ট ডিটেক্টর" সরঞ্জাম। আমি একটু জন্য PMD ব্যবহার করছিলেন যখন সামনে আমি লক্ষ্য করেছি "ফাইন্ডিং অনুরূপ করা কোড" লিঙ্কটি উপর PMD ওয়েবপৃষ্ঠাটি

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

আমি এই সরঞ্জামগুলিকে একটি পিঁপড়া ভিত্তিক বিল্ডের সাথে একীভূত করি । আমার মন্তব্যযুক্ত কনফিগারেশনটি দেখতে আপনি লিঙ্কটি অনুসরণ করতে পারেন।

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

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

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

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

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

আমার সতর্কতা বিন্যাসের রূপান্তরগুলি আমার পিপীলিকার স্ক্রিপ্ট দ্বারা পিঁপড়ের ফিল্টারচেইনগুলির সাথে সম্পন্ন হয় ।

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

উদাহরণস্বরূপ, পিএমডি-র ডিফল্ট কনফিগারেশন NOPMDএকটি মন্তব্যে স্ট্রিং সহ কোডের লাইনে সতর্কতা জেনারেশনকে দমন করে । এছাড়াও, পিএমডি জাভার @SuppressWarningsটীকাটি সমর্থন করে । আমি পিএমডিটিকে " 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:ON। " BEGIN SuppressWarnings(CheckStyle." এবং " END SuppressWarnings(CheckStyle." স্ট্রিংগুলি ব্যবহার করতে এই কনফিগারেশনটি (চেকস্টাইলের "সাপ্রেশনকমেন্ট ফিল্টার" সহ) পরিবর্তন করা নিয়ন্ত্রণগুলি পিএমডি-র মতো দেখতে আরও বেশি করে তোলে:

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

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

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

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

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


বাহ, বেশ বিস্তারিত উত্তর। ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমি আমার কোডিং অনুশীলনে আপনার অনুশীলনগুলি অনুকরণ করতে যাচ্ছি।
ভাতসালা

16

আমি কোবার্টুরা, চেকস্টাইল, (একিল) এমা এবং ফাইন্ডব্যাগগুলির সংমিশ্রণ ব্যবহার করি।

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

চেকস্টাইল এবং ফাইন্ডব্যাগস ইলিপস প্লাগইনগুলিও দরকারী, আপনার টাইপ করার সাথে সাথে তারা সম্পাদকটিতে সতর্কতা উত্পন্ন করে।

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


1
বাহ @ এক্লেম্মা! আমি এমা সম্পর্কে জানতাম, তবে ঠিক গ্রহনে একীভূত হয়েছিলাম? যে নিয়ম।
জোশুয়া ম্যাককিনন

3
ধারাবাহিক স্তন্যপান, হাডসন নিয়ম।
কেন লিউ

11

নিম্নলিখিত দুটিই আমরা আমাদের মাভেন ২.x বিল্ড এবং এক্সলিপস / আরএডি both উভয় ক্ষেত্রে ইজি ব্যবহার এবং সংহত করি:

  • পরীক্ষা - JUnit / TestNG
  • কোড বিশ্লেষণ - ফাইন্ডব্যাগস, পিএমডি
  • কোড কভারেজ - ক্লোভার

এছাড়াও, আমাদের মাভেন বিল্ডগুলিতে আমাদের রয়েছে:

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

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

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


9

আমি ইন্টেলিজ আইডিইএতে অন্তর্নির্মিত স্থির বিশ্লেষণ ব্যবহার করি। নিখুঁত একীকরণ।

আমি ইন্টেলিজ আইডিইএ (ইএমএমএ ভিত্তিক) তে অন্তর্নিহিত কোড কভারেজটি ব্যবহার করি। আবার, নিখুঁত একীকরণ।

এই একীভূত সমাধানটি বিভিন্ন বিক্রেতাদের একসাথে পাইপিংয়ের সরঞ্জামের তুলনায় নির্ভরযোগ্য, শক্তিশালী এবং সহজেই ব্যবহারযোগ্য।


4

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


3

আমরা কোড কভারেজের জন্য ফাইন্ডব্যাগ এবং চেকস্টাইল পাশাপাশি ক্লোভার ব্যবহার করছি।

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


1

আমরা পিঁপড়ার সাথে সংহত ফাইন্ডব্যাগ এবং জেডিপেন্ড ব্যবহার করি। আমরা JUnit ব্যবহার করি তবে আমরা কোনও কভারেজ টুল ব্যবহার করি না।

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


1

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


1

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


1

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



0

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

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

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

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

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

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