दावे वास्तविकता से नहीं बचे हैं
आमतौर पर दावे वास्तविक दुनिया के डेटा के संपर्क से बचे नहीं हैं। यह तय करने के लिए सॉफ्टवेयर इंजीनियरिंग की प्रक्रिया का एक हिस्सा है कि आप किस डेटा से निपटना चाहते हैं और कौन से दायरे से बाहर हैं।
चक्रीय पारिवारिक रेखांकन
परिवार के बारे में "पेड़" (वास्तव में यह चक्र सहित पूर्ण विकसित ग्राफ़ हैं), एक अच्छा किस्सा है:
मैंने एक विधवा से विवाह किया, जिसकी एक बड़ी बेटी थी। मेरे पिता, जो अक्सर हमसे मिलने जाते थे, मेरी सौतेली बेटी के प्यार में पड़ गए और उससे शादी कर ली। नतीजतन, मेरे पिता मेरे बेटे बन गए, और मेरी बेटी मेरी मां बन गई। कुछ समय बाद, मैंने अपनी पत्नी को एक बेटा दिया, जो मेरे पिता का भाई था, और मेरे चाचा का। मेरे पिता की पत्नी (जो मेरी बेटी और मेरी मां भी है) को एक बेटा हुआ। परिणामस्वरूप, मुझे उसी व्यक्ति में एक भाई और एक पोता मिला। मेरी पत्नी अब मेरी दादी है, क्योंकि वह मेरी माँ की माँ है। इसलिए मैं अपनी पत्नी का पति हूं, और साथ ही अपनी पत्नी का सौतेला पोता हूं। दूसरे शब्दों में, मैं अपना दादा हूं।
चीजें तब और भी अजीब हो जाती हैं, जब आप सरोगेट्स या "फजी फादरहुड" को ध्यान में रखते हैं।
उससे कैसे निपटा जाए
बाहर के दायरे के रूप में चक्रों को परिभाषित करें
आप तय कर सकते हैं कि आपके सॉफ्टवेयर को ऐसे दुर्लभ मामलों से नहीं निपटना चाहिए। यदि ऐसा कोई मामला होता है, तो उपयोगकर्ता को एक अलग उत्पाद का उपयोग करना चाहिए। यह अधिक सामान्य मामलों से निपटने के लिए और अधिक मजबूत बनाता है, क्योंकि आप अधिक जोर और एक सरल डेटा मॉडल रख सकते हैं।
इस मामले में, अपने सॉफ़्टवेयर में कुछ अच्छे आयात और निर्यात सुविधाएँ जोड़ें, ताकि उपयोगकर्ता आसानी से आवश्यक होने पर एक अलग उत्पाद में माइग्रेट कर सके।
मैनुअल संबंधों की अनुमति दें
आप उपयोगकर्ता को मैन्युअल संबंध जोड़ने की अनुमति दे सकते हैं। ये संबंध "प्रथम श्रेणी के नागरिक" नहीं हैं, यानी सॉफ्टवेयर उन्हें जैसा भी लेता है, उन्हें चेक नहीं करता है और न ही मुख्य डेटा मॉडल में उन्हें संभालता है।
उपयोगकर्ता हाथ से दुर्लभ मामलों को संभाल सकता है। आपका डेटा मॉडल अभी भी काफी सरल रहेगा और आपके दावे जीवित रहेंगे।
मैन्युअल संबंधों से सावधान रहें। उन्हें पूरी तरह से कॉन्फ़िगर करने योग्य बनाने के लिए एक प्रलोभन है और इसलिए पूरी तरह से कॉन्फ़िगर करने योग्य डेटा मॉडल बनाएं। यह काम नहीं करेगा: आपका सॉफ्टवेयर स्केल नहीं करेगा, आपको अजीब कीड़े मिलेंगे और आखिरकार यूजर इंटरफेस अनुपयोगी हो जाएगा। इस विरोधी पैटर्न को "सॉफ्ट कोडिंग" कहा जाता है , और "दैनिक डब्ल्यूटीएफ" इसके लिए उदाहरणों से भरा है।
अपने डेटा मॉडल को अधिक लचीला बनाएं, अभिकथन छोड़ें, आक्रमणकारियों का परीक्षण करें
अंतिम उपाय आपके डेटा मॉडल को अधिक लचीला बना देगा। आपको लगभग सभी अभिक्रियाओं को छोड़ना होगा और अपने डेटा मॉडल को पूर्ण विकसित ग्राफ़ पर आधारित करना होगा। जैसा कि ऊपर दिए गए उदाहरण से पता चलता है, यह आसानी से आपके अपने दादा होने के लिए संभव है, इसलिए आप साइकिल भी रख सकते हैं।
इस मामले में, आपको अपने सॉफ़्टवेयर का बड़े पैमाने पर परीक्षण करना चाहिए। आपको लगभग सभी दावे छोड़ना पड़ा, इसलिए अतिरिक्त बग के लिए एक अच्छा मौका है।
असामान्य परीक्षण मामलों की जांच के लिए एक परीक्षण डेटा जनरेटर का उपयोग करें। हास्केल , एर्लांग या सी के लिए त्वरित चेक लाइब्रेरी हैं । Java / Scala के लिए ScalaCheck और Nyaya हैं । एक परीक्षण का विचार एक यादृच्छिक जनसंख्या का अनुकरण करना होगा, इसे यादृच्छिक पर इंटरब्रेट करने दें, फिर अपने सॉफ़्टवेयर को पहले आयात करें और फिर परिणाम को निर्यात करें। उम्मीद यह होगी, कि आउटपुट में सभी कनेक्शन इनपुट और वाइस कविता में भी हैं।
एक मामला, जहां एक संपत्ति एक ही रहती है उसे एक अपरिवर्तनीय कहा जाता है। इस मामले में, अयोग्य व्यक्ति नकली आबादी में व्यक्तियों के बीच "रोमांटिक संबंधों" का सेट है। जितना संभव हो उतने अपरिवर्तनों को खोजने की कोशिश करें और बेतरतीब ढंग से उत्पन्न डेटा के साथ उनका परीक्षण करें। आक्रमणकारी कार्यात्मक हो सकते हैं, जैसे:
- जब आप अधिक "रोमांटिक संबंध" जोड़ते हैं, तब भी एक चाचा चाचा रहता है
- हर बच्चे के माता-पिता होते हैं
- दो पीढ़ियों वाली आबादी में कम से कम एक भव्य माता-पिता होते हैं
या वे तकनीकी हो सकते हैं:
- आपका सॉफ्टवेयर 10 बिलियन सदस्यों तक ग्राफ पर क्रैश नहीं होगा (चाहे कितने भी इंटरकनेक्ट हों)
- ओ (नंबर-ऑफ-नोड्स) और ओ (नंबर-ऑफ-एज- 2) के साथ आपका सॉफ़्टवेयर स्केल
- आपका सॉफ्टवेयर हर परिवार के ग्राफ को 10 बिलियन सदस्यों तक सहेज और फिर से लोड कर सकता है
नकली परीक्षणों को चलाने से, आपको बहुत सारे अजीब कोने के मामले मिलेंगे। उन्हें ठीक करने में बहुत समय लगेगा। इसके अलावा आप बहुत सारे अनुकूलन खो देंगे, आपका सॉफ्टवेयर बहुत धीमा चलेगा। आपको तय करना होगा, अगर यह इसके लायक है और यदि यह आपके सॉफ़्टवेयर के दायरे में है।