2009-10-26 30 views
5

मुझे पता है कि किसी भी "सर्वश्रेष्ठ अभ्यास" के बाद अंधेरे से पता चल सकता है कि अभी भी बकवास की बदबूदार ढेर हो सकती है जो सख्ती से सर्वोत्तम अभ्यास का पालन करती है। सोलिड सिद्धांत केवल यही हैं, सिद्धांत। वे हर स्थिति पर लागू नहीं होते हैं लेकिन वे आपके कोड में संभावित सुधार खोजने के लिए अभी भी बहुत अच्छे हेरिस्टिक हैं।क्या कोई स्थिर विश्लेषण उपकरण है जो रिपोर्ट करेगा कि SOLID सिद्धांतों का कितनी बारीकी से पालन किया जाता है?

उनके लिए नकारात्मकता यह है कि उन्हें कभी-कभी उन्हें लागू करने के लिए आपके स्रोत कोड का गहरा विश्लेषण की आवश्यकता होती है। मैं, अधिकांश प्रोग्रामर लगातार चीजों को करने के अधिक कुशल तरीकों की तलाश में हूं, इसलिए अगर कोई किसी ऐसे विश्लेषण उपकरण के बारे में सुना है जो सोलिड सिद्धांतों (या इसकी कमी) के अनुप्रयोग की जांच करने का प्रयास करता है तो मैं उत्सुक हूं।

SRPएकल जिम्मेदारी सिद्धांत

एक वर्ग में केवल एक ही कारण लिए परिवर्तन किए जाएंगे।

ओसीपीखुली बंद किया गया सिद्धांत

सॉफ्टवेयर संस्थाओं (वर्गों, मॉड्यूल, कार्यों, आदि) विस्तार के लिए खुला होना चाहिए, लेकिन संशोधन के लिए बंद कर दिया।

LSPLiskov प्रतिस्थापन सिद्धांत

उप प्रकार अपने आधार प्रकार के लिए substitutable होना चाहिए।

आईएसपीइंटरफ़ेस पृथक्करण सिद्धांत

ग्राहकों तरीकों है कि वे का उपयोग नहीं करते पर निर्भर करने के लिए मजबूर नहीं किया जाना चाहिए। इंटरफेस ग्राहकों से संबंधित हैं, पदानुक्रमों तक नहीं।

DIP निर्भरता उलट सिद्धांत

चीजें विवरण पर निर्भर नहीं करना चाहिए। विवरण abstractions पर निर्भर होना चाहिए।

-से चंचल सिद्धांतों, पैटर्न और आचरण

+0

* उनके लिए नकारात्मकता यह है कि उन्हें कभी-कभी उन्हें लागू करने के लिए आपके स्रोत कोड का गहरा विश्लेषण की आवश्यकता होती है। * यदि कोड का विश्लेषण (चाहे कितना गहरा) पर्याप्त होगा, ऐसे उपकरण संभव होंगे, हालांकि कोड को देखना काफी नहीं है। – Wolf

+0

@ वुल्फ उस विशेष वाक्य के संदर्भ में मेरा मतलब समझने, अंतर्दृष्टि और अंतर्ज्ञान के आधार पर _human_ विश्लेषण था। –

+0

क्या आपके पास ऐसे पैटर्न हैं जो मानव कोड विश्लेषण से पुनर्प्राप्त किए जाते हैं जिनकी उपस्थिति बाद में स्वचालित तरीके से जांच की जाती है? – Wolf

उत्तर

7

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

उस ने कहा, आपके पास उल्लंघन की संभावना का पता लगाने में मदद करने के लिए टूल हो सकते हैं। उदाहरण के लिए आप कोड कक्षाओं का उपयोग कर सकते हैं जैसे प्रति कक्षा के तरीकों की संख्या, प्रति वर्ग के सदस्यों की संख्या यह निर्धारित करने के लिए कि क्या कक्षा बहुत बड़ी है और इसलिए एसआरपी का उल्लंघन करने की संभावना है।

एक अपवाद लिस्कोव प्रतिस्थापन सिद्धांत हो सकता है। IF आप सभी विधियों (पूर्व शर्त, पोस्टकंडिशन, इनवेरिएंट) पर अनुबंध को परिभाषित करते हैं, तो आप जांच सकते हैं कि सुपरक्लास की विधि को फिर से परिभाषित करने की विधि पूर्व शर्त को मजबूत नहीं करती है, पोस्टकंडिशन को कमजोर नहीं करती है और इनवेरियंस का सम्मान नहीं करती है superclass की विधि। मुझे लगता है कि उपकरण ESC/Java उन चेक करता है। wikipedia page about LSP पढ़ना अधिक चेक करना होगा।

3

मेरे उत्तर में एक .NET- विशिष्ट उत्पाद शामिल है, अग्रिम में माफ़ी, और शायद कोई भी अपने गैर-.NET एनालॉग का सुझाव दे सकता है।

मैं NDepend आजमाइए और अगर यह जैसी किसी मीट्रिक का उपयोग करके SRP और आईएसपी का उल्लंघन करने के लिए मुझे नेतृत्व कर सकते हैं देखना चाहते हैं:

  • का असामान्य रूप से उच्च संख्या के साथ प्रति प्रकार प्रकार के तरीकों की संख्या विधानसभा और प्रकार के स्तर पर तरीकों
  • अभिवाही/अपवाही युग्मन
  • अन्य मैट्रिक्स, full list of metrics here

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

ओसीपी एक अलग चुनौती प्रस्तुत करता है क्योंकि कक्षा को खुला/बंद होना आवश्यक विस्तार/संशोधन पहले से ही नहीं हो सकता है।

हालांकि, अगर हम मानते हैं कि एक और अधिक maintainable उत्पाद के लिए ठोस सुराग निम्नलिखित (वैज्ञानिक रूप से इस दावे को साबित करने के लिए क्या इस सवाल के बारे में है नहीं है), तो NDepend की अमूर्तता-अस्थिरता चार्ट एक अच्छा कुल के उपाय देना चाहिए कि कैसे अच्छी तरह सिद्धांतों का पालन प्रत्येक सॉफ्टवेयर मॉड्यूल के लिए किया गया था। यदि वे थे, तो मॉड्यूल को चार्ट के निचले बाएं कोने से बचा जाना चाहिए था, जिसे "दर्द का क्षेत्र" कहा जाता था। उस क्षेत्र में, मॉड्यूल स्थिर है (अच्छे तरीके से नहीं - बहुत से अन्य इस पर निर्भर करते हैं, इसलिए इसे बदलना मुश्किल है), लेकिन पर्याप्त सार नहीं है।

संबंधित मुद्दे