कोड में फासीवाद। भाग दो

छवि पिछली पोस्ट में, मेरे सहयोगी ने सत्यापन मॉड्यूल (चेक) में से एक के उदाहरण का उपयोग करके कोड में " फासीवाद " के सकारात्मक प्रभाव के विचार को प्रकट करने की कोशिश की। एक उदाहरण के साथ, हमारे प्लगइन असेंबली को कुछ विस्तार के साथ प्रदान किया गया था। हमारी टीम ने ग्रहण में कई नए चेक और सरलीकृत इंस्टॉलेशन विकसित किए हैं।

चेकस्टाइल परियोजना के उपयोग के माध्यम से कोड में "फासीवाद" ... ऐसी विचारधारा से बेहतर क्या हो सकता है? आधे, यदि अधिक नहीं, तो नियमित कोड समीक्षा के दौरान प्रोग्रामर द्वारा की गई टिप्पणियों को कोड लिखने के चरण में भी ठीक किया जा सकता है (अनुमति नहीं)। परीक्षण मॉड्यूल के उपयोग की उपस्थिति और पठनीयता पर एक बड़ा प्रभाव पड़ता है, और इसलिए कार्यक्रमों की सहायता है। कई किताबें हैं जिनमें लेखक कोड लिखने और सबसे लोकप्रिय त्रुटियों को दिखाने के लिए अपने अनुभव साझा करते हैं। सभी स्वाभिमानी प्रोग्रामर्स ने जे। ब्लोच द्वारा प्रभावी जावा जैसी किताबें पढ़ी हैं, जे। ब्लोच द्वारा जावा पूज़लर, जावा पॉटफॉल और ... लेकिन क्या आप सभी युक्तियों का उपयोग कर रहे हैं? जैसा कि अभ्यास से पता चलता है, यहां तक ​​कि गंभीर प्रोग्रामर भी सामान्य गलतियां करते हैं।

पहली रिलीज के बाद, हमने अपनी सर्वोत्तम प्रथाओं के उपयोग की प्रक्रिया को सरल बनाने का निर्णय लिया। समाधान आपकी परियोजना को उन चेक के साथ व्यवस्थित करने के लिए था जो चेकस्टाइल रिलीज़ में शामिल नहीं थे, ग्रहण के लिए चेकस्टाइल प्लगइन में एक ऐड-ऑन (सुविधा) के रूप में। सरलीकृत स्थापना प्रक्रिया नीचे उबला हुआ है:
  1. यदि हम पहले से इंस्टॉल नहीं है, तो हम प्लगइन चेकस्टाइल प्लगइन (अपडेट-साइट: eclipse-cs.sourceforge.net/update ) स्थापित करते हैं
  2. हम अपना ऐड-ऑन (अपडेट-साइट: sevntu-checkstyle.github.com/sevntu.checkstyle/update-site ) डालते हैं

हमें चेक्सटाइल की सेटिंग में हमारे चेक के साथ एक समूह मिलता है:

छवि
चित्रा 1 - परीक्षण मॉड्यूल (जांच) के विन्यास के लिए संवाद बॉक्स

हमारे मॉड्यूल को स्थापित करने के बाद, यह " सेवएनटीयू चेक " नाम के तहत मौजूदा लोगों की सूची में दिखाई देता है। इस प्रकार, मुख्य चेकस्टाइल रिलीज़ की प्रतीक्षा किए बिना, हम जावा कोड की गुणवत्ता को स्वचालित रूप से नियंत्रित करने के लिए पूरी तरह से हमारे चेक का उपयोग कर सकते हैं। मैं संक्षेप में उनमें से अंतिम का वर्णन करूंगा।

सत्यापन मॉड्यूल " ForbidAnnotationCheck " - चेक कॉन्फ़िगरेशन में निर्दिष्ट एनोटेशन के उपयोग की जांच करता है। उदाहरण के लिए:

@Autowired
private DataSource dataSource;


इस चेक का उपयोग करके, आप @Autowired को कक्षा के क्षेत्रों में अक्षम कर सकते हैं, और प्रोग्रामर को बहुत आलसी नहीं बना सकते हैं और @Autowired लिए सेटर का उपयोग कर @Autowired

सत्यापन मॉड्यूल " VariableDeclarationUsageDistanceCheck " - एक चर की परिभाषा और इसके पहले उपयोग के बीच की दूरी की जांच करने के लिए उपयोग किया जाता है। यदि दूरी कुछ प्रारंभिक मूल्य से अधिक है, तो उपयोगकर्ता को एक संदेश द्वारा सूचित किया जाता है। चेक उस स्थिति के लिए किया जाता है जब चर और उसके उपयोग की परिभाषा एक ही दायरे में हो। निम्नलिखित विकल्प शामिल हैं:
  1. allowDistance - एक चर की परिभाषा और इसके पहले उपयोग के बीच स्वीकार्य दूरी निर्धारित करना।
  2. ignVariablePattern - स्कैन से बाहर किए गए चर नामों के लिए एक नियमित अभिव्यक्ति सेट करना।
  3. validateBetweenScopes - एक चर की परिभाषा और इसके उपयोग के मामले में दूरी की जांच अलग-अलग स्कोप में होती है।
  4. ignFinal - वे चर को अनदेखा करें जिनकी परिभाषा final कीवर्ड का उपयोग करती है।

वेरिफिकेशन मॉड्यूल " एब्रीसेशनएवॉर्डइननामकैच " - बड़े अक्षरों के साथ उन में संक्षिप्ताक्षर खोजने के लिए वर्गों, इंटरफेस, चर और विधियों के नामों की जाँच करता है। उदाहरण: "XMLReader" "XmlReader" होना चाहिए। निम्नलिखित विकल्प शामिल हैं:
  1. allowAbirectationLength - संक्षिप्त नाम के लगातार बड़े अक्षरों की संख्या। उदाहरण के लिए: " interface ABCDInterface "। यहाँ संक्षिप्त नाम " ABCD " और शब्द " Interface " है। इस मामले को नजरअंदाज करने के लिए, इस विकल्प में आपको संक्षिप्त नाम के 4 अक्षरों की संख्या को 4 में सेट करना चाहिए।
  2. अनुमतियाँ - संक्षिप्तीकरण की अनदेखी की जाने वाली सूची।
  3. ignFinal - वे चर को अनदेखा करें जिनकी परिभाषा final कीवर्ड का उपयोग करती है।
  4. ignStatic - अनदेखा फ़ील्ड जिसकी परिभाषा static का उपयोग करती है।

सत्यापन मॉड्यूल " OverridableMethodInConstructorCheck " - कंस्ट्रक्टर, readObject और clone क्लास विधियों से readObject ( public/protected विधियों को कॉल करने के लिए चेक। संपूर्ण कॉल स्टैक की जाँच की जाती है, उदाहरण के लिए, constructor -> private method -> public/protected method

सत्यापन मॉड्यूल " ReturnNullInsteadOfBoolean " - का उपयोग स्थितियों को ट्रैक करने के लिए किया जाता है जब लौटे ऑब्जेक्ट का प्रकार विधि घोषणा में Boolean है, लेकिन विधि स्वयं null वापस आ सकती है।

टेस्ट मॉड्यूल " AvoidNotShortCircuitOperatorsForBooleanCheck " - बूलियन प्रकार के लिए सामान्य शॉर्ट-सर्किट लॉजिक ऑपरेटरों के बजाय बिटवाइज़ ऑपरेटरों ("|", "," & "," = = "," & = ") का उपयोग करने के लिए सशर्त अभिव्यक्ति की जाँच करता है।

सत्यापन मॉड्यूल " AvoidConstantsInterfacesCheck " - स्थिरांक को कक्षाओं में परिभाषित किया जाना चाहिए (J.Bloch "प्रभावी जावा" आइटम 19: केवल परिभाषित करने के लिए इंटरफेस का उपयोग करें)।

सत्यापन मॉड्यूल " AvoidHidingCauseExceptionCheck " - उपयोगकर्ता को सूचित करता है कि उसने अपवाद का कारण छिपाया है। उदाहरण के लिए:

catch (IllegalStateException e) {
// your code
throw new RuntimeException();
}


यह कोड स्निपेट "IllegalStateException" अपवाद को "IllegalStateException" है।

सत्यापन मॉड्यूल " IllegalCatchExtendedCheck " - java.lang.Exception , java.lang.Error या java.lang.RuntimeException जैसे अपवादों को catch() लिए catch() ब्लॉक की जाँच करता है। निम्नलिखित विकल्प शामिल हैं:
  1. allowThrow - यदि नया अपवाद इसमें डाला गया है, तो catch() ब्लॉक को अनदेखा करें।
  2. allowRethrow - catch() अनदेखा करें catch() ब्लॉक करें यदि पकड़ा गया अपवाद इसमें फेंका गया हो।

सत्यापन मॉड्यूल " ReturnBooleanFromTernary " - टर्नरी ऑपरेटर शाखाओं का सत्यापन करता है। शाखा की एकमात्र सामग्री के रूप में ' true ' या ' false ' खोजने पर, उपयोगकर्ता को एक संदेश देता है। उदाहरण के लिए, स्ट्रिंग के बजाय " boolean b = a ? false : true; " " b = !a; " का उपयोग करना बेहतर है b = !a;

यदि आप इन जांचों को सत्य मानते हैं, जो हर कोई जानता है, तो अपना कोड जांचें और आप आश्चर्यचकित होंगे !!!

इस विषय में कौन रुचि रखता है, और कौन उनकी परियोजनाओं पर हमारी जाँच करने की कोशिश करता है, मैं आपको परियोजना की वेबसाइट पर आमंत्रित करता हूं। विकी यहां "डेवलपर की मदद करने के लिए" नोट करता है

आपका ध्यान के लिए धन्यवाद!

पीएस फाइंडबग, पीएमडी, सोनार ... हम इन उत्पादों के अस्तित्व के बारे में जानते हैं, और कुछ विचार उनसे उधार लिए गए थे। लेकिन कई कारणों से, हमने अपनी शक्तियों को विशेष रूप से सेक्टस्टाइल पर केंद्रित किया।

Source: https://habr.com/ru/post/In130668/


All Articles