यूनिक्स के तहत प्रोग्रामिंग की कला (और न केवल)। भाग सात, पारदर्शिता का नियम

मैं यूनिक्स के लिए " एरिक रेमंड के अनुसार" के लिए कुछ सरल विकास नियमों के लिए समर्पित लेखों की श्रृंखला जारी रखता हूं, जो कि, मेरी सबसे गहरी सजा में, किसी भी अन्य ऑपरेटिंग सिस्टम के लिए विस्तारित की जा सकती है। मैंने पहले से ही पहले तीन हिस्सों में मॉड्यूलरिटी , स्पष्टता , रचना , पृथक्करण , सरलता और कोड सेविंग के नियमों के बारे में बात की। आज यह सातवें नियम पर आया -

ट्रांसपेरेंसी नियम: डिबगिंग टूल के साथ तुरंत सॉफ्टवेयर डिज़ाइन

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

या, एक सामान्य Windows FTP क्लाइंट । एक चीज़, जैसे, एक सामान्य उपयोगकर्ता के शस्त्रागार में लंबे समय से शामिल है। ठीक है, एक उन्नत उपयोगकर्ता, लेकिन किसी भी मामले में, लंबे समय तक यह जरूरी नहीं कि एक प्रोग्रामर है जो प्रोटोकॉल की पेचीदगियों को समझता है। आप अपने आप को एक प्रोग्राम डालते हैं जिसमें एफ़टीपी क्लाइंट बनाया गया है , लगभग इसके लिए आप इसे चुनते हैं, और वह - सर्वर से कनेक्ट नहीं होता है। क्यों - आप निर्धारित नहीं कर सकते। वह खुद को दूर नहीं करता है। त्रुटि सभी है! ..

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

ऐसे उदाहरण जब आपको कार्रवाई का लॉग रखने की आवश्यकता होती है - समुद्र। और हम बड़े औद्योगिक समाधानों को देखते हैं जिसमें एक उपयोगकर्ता का नुकसान बाल्टी में गिरावट है। और अगर आप उच्च पहुंच आवश्यकताओं के साथ एक प्रणाली के साथ काम कर रहे हैं? हर दूसरी गिनती कब होती है?

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

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

उदाहरण के लिए, ArtPublishing में, डिबग कंसोल इस तरह दिखता था। फ़ंक्शन टेम्पलेट के पदानुक्रम। फ़ोरम टेम्प्लेट में से एक के लिए, जिसे मैंने पिछले लेख में उद्धृत किया था , डेवलपर यह अध्ययन कर सकता है कि URL में डिबग फ़्लैग जोड़कर सॉफ़्टवेयर अंदर कैसे काम करता है:

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

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

जब जर्नलिंग होती है, तो आमतौर पर अलग-अलग वर्कस्टेशन या सर्वर पर एक साथ चलने वाले कई एप्लिकेशन के संचालन की निगरानी करना मुश्किल नहीं होता है - बस इन लॉग के स्टोरेज को एक्सेस करें और फ्लाई पर उनका विश्लेषण करें।

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

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

हाल ही में वितरण समय की गणना के लिए एक प्रणाली में लगे हुए हैं। वहाँ एक मुश्किल एल्गोरिथ्म है कि रसद की सुविधाओं को ध्यान में रखता है। गणना की शुद्धता को तुरंत समझना असंभव है, आपको अपने आप को एक कैलकुलेटर और तालिकाओं के साथ बांटने की आवश्यकता है। इसलिए, तंत्र सही ढंग से काम करता है या नहीं, इसके बारे में सवालों के जवाब देने के लिए, इसके लिए "पारदर्शिता" को जोड़ना आवश्यक था: जब पत्रिका में काम करते हैं, तो शब्द की गणना के लिए सभी तर्क को प्रतिबिंबित होना चाहिए, एक आम आदमी के लिए समझ में आता है। बेशक, साइट पर इसे प्रतिबिंबित करना आवश्यक नहीं था, लेकिन एक प्रश्न का उत्तर देना बहुत आसान था जैसे "यह कैसे हुआ कि प्रसव में 15 दिन लगते हैं!" - प्रणाली स्वयं सचमुच एक उत्तर देती है जो मनुष्यों के लिए समझ में आता है। एक स्वचालित परीक्षण प्रणाली भी विकसित की गई है जो दर्जनों स्थितियों के लिए तुरंत समय सीमा की गणना करती है और मैन्युअल गणना वाले परिणामों के साथ तुलना करती है।
" इससे पहले " कोड सेविंग रूल

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


All Articles