मुझे समय-समय पर एक वास्तविक रॉकेट सर्जन द्वारा बनाई गई प्रणाली पर रखरखाव कार्य करने के लिए कहा जाता है। इसके साथ बहुत गड़बड़ है कि यह जानना मुश्किल है कि कहां से शुरू करना है।आपको बनाए रखने के लिए सबसे कठिन कार्यक्रम क्या है?
नहीं, प्रतीक्षा करें, मैं शुरुआत में शुरू करूंगा: परियोजना के शुरुआती दिनों में, डिजाइनर को बताया गया था कि सिस्टम को स्केल करने की आवश्यकता होगी, और वह पढ़ेगा कि स्केलेबिलिटी समस्याओं का स्रोत ट्रैफिक था एप्लिकेशन और डेटाबेस सर्वर, इसलिए उन्होंने इस यातायात को कम करने के लिए सुनिश्चित किया। कैसे? SQL सर्वर संग्रहीत प्रक्रियाओं में सभी अनुप्रयोग तर्क डालकर।
गंभीरता से। एचटीएमएल फ्रंट एंड द्वारा एक्सएमएल संदेशों को फॉर्मूलेट करने वाले एप्लिकेशन फंक्शंस का बड़ा हिस्सा। जब मध्य स्तर को एक एक्सएमएल संदेश प्राप्त होता है, तो यह दस्तावेज़ तत्व के टैग नाम का उपयोग संग्रहीत प्रक्रिया के नाम के रूप में करता है जिसे कॉल करना चाहिए, और एसपी को कॉल करता है, इसे पूरे एक्सएमएल संदेश को पैरामीटर के रूप में पास करता है। यह एक्सएमएल संदेश लेता है कि एसपी रिटर्न देता है और सीधे इसे सीधे अंत में वापस देता है। आवेदन स्तर में कोई अन्य तर्क नहीं है।
(वहाँ मध्य स्तरीय में कुछ कोड स्कीमा का एक पुस्तकालय के खिलाफ भेजे गए संदेशों एक्सएमएल मान्य करने के लिए था। लेकिन मैं यह है कि 1 से हटाया जानने के बाद,) केवल संदेशों के एक छोटे से मुट्ठी भर स्कीमा इसी था, 2) संदेश वास्तव में इन स्कीमाओं के अनुरूप नहीं थे, और 3) संदेशों को सत्यापित करने के बाद, यदि कोई त्रुटि आई, तो विधि ने उन्हें त्याग दिया। "यह फ्यूज बॉक्स एक वास्तविक समय बचाने वाला है - यह कारखाने से पहले से स्थापित पेनी के साथ आता है!")
मैंने सॉफ्टवेयर देखा है जो पहले गलत काम करता है। इसकी बहुत सारी। मैंने काफी लिखा है। लेकिन मैंने कभी भी को गलत चीज़ करने के लिए दृढ़ आंखों के निर्धारण को कभी नहीं देखा है, पर हर संभव मोड़, जो इस प्रणाली के डिजाइन और प्रोग्रामिंग में शामिल है।
ठीक है, कम से कम वह जो जानता था उसके साथ चला गया, है ना? उम। जाहिर है, वह क्या जानता था एक्सेस था। और वह वास्तव में समझ में नहीं आया एक्सेस। या डेटाबेस।
यहाँ इस कोड में एक आम पैटर्न है:
SELECT @TestCodeID FROM TestCode WHERE TestCode = @TestCode SELECT @CountryID FROM Country WHERE CountryAbbr = @CountryAbbr SELECT Invoice.*, TestCode.*, Country.* FROM Invoice JOIN TestCode ON Invoice.TestCodeID = TestCode.ID JOIN Country ON Invoice.CountryID = Country.ID WHERE Invoice.TestCodeID = @TestCodeID AND Invoice.CountryID = @CountryID
ठीक है, ठीक। आप क्वेरी ऑप्टिमाइज़र पर भरोसा नहीं करते हैं। लेकिन इसके बारे में कैसे? (मूल रूप से, मैं इसे What's the best comment in source code you have ever encountered? में पोस्ट करने जा रहा था, लेकिन मुझे एहसास हुआ कि केवल एक टिप्पणी के मुकाबले लिखने के लिए बहुत कुछ था, और चीजें अभी हाथ से बाहर हो गईं।) उपयोगिता की कई प्रक्रियाओं के अंत में, आप
-- Fix NULLs SET @TargetValue = ISNULL(@TargetValue, -9999)
हाँ, कि कोड केवल एक कर रहा है आप अपने आप को ऐसा न हो कि तुम पागल हो प्रेरित किया यह क्या कर रहा है पर विश्वास करने की अनुमति नहीं कर सकते हैं क्या: 'कोड है कि ऐसा दिखाई देता देखेंगे। यदि परिवर्तक में एक पूर्ण होता है, तो वह कॉलर को अपना मान बदलकर -99 99 तक अलर्ट कर रहा है। यहां बताया गया है कि यह संख्या आमतौर पर कैसे उपयोग की जाती है:
-- Get target value EXEC ap_GetTargetValue @Param1, @Param2, OUTPUT @TargetValue -- Check target value for NULL value IF @TargetValue = -9999 ...
वास्तव में।
इस प्रणाली के एक और आयाम के लिए, thedailywtf.com पर आलेख देखें I Think I'll Call Them "Transactions"। मैं इनमें से कोई भी नहीं बना रहा हूं। में कसम खाता हूँ।
मुझे अक्सर याद दिलाया जाता है, जब मैं इस प्रणाली पर काम करता हूं, वुल्फगैंग पॉली के छात्र के लिए प्रसिद्ध प्रतिक्रिया: "यह सही नहीं है। यह भी गलत नहीं है।"
यह वास्तव में कभी भी सबसे खराब कार्यक्रम नहीं हो सकता है। यह निश्चित रूप से सबसे खराब है जिसने मैंने अपने पूरे 30-वर्ष (यिक्स) करियर में काम किया है। लेकिन मैंने सब कुछ नहीं देखा है। आपने क्या देखा है ?
इतना पर .... यह वास्तव में एक सवाल के रूप में इतना सवाल नहीं है! मुझे लगता है कि आप अशिष्टता से पूछ रहे हैं: क्या आप इसे ऊपर ले सकते हैं! ... हमम ... –
यह आपके ब्लॉग या साइट [चर्चा के लिए समर्पित] (http://meta.stackexchange.com/questions/13198/) के लिए बेहतर अनुकूल लगता है। –
मैंने सवाल पूछा क्योंकि मैंने सोचा (और अभी भी सोचो) इसका उत्तर उपयोगी हो सकता है। सॉफ़्टवेयर में विफलता विश्लेषण आमतौर पर सॉफ़्टवेयर पूरी तरह विफल होने के बाद ही किया जाता है (यदि तब); भयानक बोड जिन्हें केवल तिल के माध्यम से जीवित रखा जाता है अक्सर अक्सर एक या दो लोगों द्वारा वास्तव में समझा जाता है। सॉफ्टवेयर का एक टुकड़ा कितना बुरा हो सकता है और अभी भी उपयोगी हो सकता है? ऐसी चीजें कैसे अस्तित्व में आईं, और उन्हें समर्थन देने के लिए किन प्रयासों की आवश्यकता है?व्यवस्थित रूप से उन प्रश्नों का पता लगाना मुश्किल है, लेकिन वे अन्वेषण के लायक हैं। –