आवश्यकता विश्लेषण और परिभाषा
आवश्यकता (requirement) वह चीज़ है जो प्रणाली को करनी या होनी चाहिए। विश्लेषण का मतलब है उपयोगकर्ताओं से बात करके, उनका काम देखकर और पुराने फ़ॉर्म पढ़कर आवश्यकताएँ खोजना। परिभाषा का मतलब है उन्हें साफ़ लिखना ताकि सब सहमत हों।
- कार्यात्मक आवश्यकता: प्रणाली क्या करती है ("छात्र किताब ले सकता है")।
- गैर-कार्यात्मक आवश्यकता: वह कितनी अच्छी तरह करती है ("खोज 2 सेकंड से कम में", "फ़ोन पर चले", "सिर्फ़ लाइब्रेरियन किताबें बदले")।
हर आवश्यकता साफ़, परखने लायक और दूसरी से न टकराने वाली हो। नतीजा आवश्यकता परिभाषा दस्तावेज़ है, जिसे उपयोगकर्ता बनाने से पहले मंज़ूर करते हैं।
सूचना प्रणाली की मॉडलिंग
मॉडल बनाने से पहले प्रणाली का सरल चित्र है। अलग चित्र अलग बातें दिखाते हैं।
- डेटा फ़्लो डायग्राम (DFD): लोग (जो माँगते हैं), प्रक्रियाएँ (जो काम होता है) और डेटा भंडार (जहाँ डेटा रहता है) तीर से जुड़े दिखाता है कि डेटा कैसे चलता है।
- इकाई-संबंध (ER) चित्र: उन चीज़ों को दिखाता है जिनका डेटा रखते हैं (छात्र, किताब, उधार) और वे कैसे जुड़ी हैं।
- फ़्लोचार्ट या यूज़ केस: एक काम के चरण, या हर तरह का उपयोगकर्ता क्या कर सकता है।
मॉडल से छूटे हुए चरण शुरू में ही मिल जाते हैं, जब गलती ठीक करना सस्ता होता है।
सूचना प्रणाली का विभाजन
विभाजन (partitioning) का अर्थ है बड़ी प्रणाली को छोटे हिस्सों, यानी मॉड्यूल या उप-प्रणालियों में बाँटना। हर मॉड्यूल एक साफ़ काम करता है और दूसरों से छोटे, साफ़ इंटरफ़ेस से बात करता है।
- उच्च संसक्ति (high cohesion): मॉड्यूल के अंदर सब कुछ साथ का हो।
- निम्न युग्मन (low coupling): मॉड्यूल एक-दूसरे पर कम से कम निर्भर हों।
- फ़ायदे: टीमें साथ-साथ काम कर सकती हैं, परखना आसान, एक मॉड्यूल बदलने से बाकी नहीं टूटते।
आम बँटवारे: काम के अनुसार (सदस्य, किताबें, उधार) या परतों के अनुसार (स्क्रीन, तर्क, डेटाबेस)।
खुद करके देखो
3D में (आख़िरी चरण): "उधार मॉड्यूल बदलो" दबाओ। कौन-से डिब्बे बदले? फिर "नया मॉड्यूल जोड़ो" दबाकर मॉड्यूल गिनो।
घर पर: कोई छोटी प्रणाली लो, जैसे टक-शॉप। चार आवश्यकताएँ पर्चियों पर लिखो। फिर पर्चियों को 2 या 3 मॉड्यूल में बाँटो।
मुख्य सूत्र और परिभाषाएँ
- आवश्यकताएँ: कार्यात्मक (क्या करती है) और गैर-कार्यात्मक (कितनी अच्छी तरह)।
- मॉडलिंग के औज़ार: डेटा फ़्लो डायग्राम, ER चित्र, फ़्लोचार्ट।
- विभाजन के लक्ष्य: उच्च संसक्ति, निम्न युग्मन।
- डिज़ाइन का क्रम: पूछो (आवश्यकता), नक्शा बनाओ (मॉडल), बाँटो (मॉड्यूल)।
हल किए गए उदाहरण
1. लाइब्रेरी ऐप में "किताब की खोज 2 सेकंड से कम में" कार्यात्मक है या गैर-कार्यात्मक?
गैर-कार्यात्मक। यह बताती है कि खोज कितनी अच्छी हो, यह नहीं कि प्रणाली क्या करती है।
2. "किताब लेना" के DFD में व्यक्ति, प्रक्रिया और डेटा भंडार बताओ।
व्यक्ति: छात्र। प्रक्रिया: किताब जारी करना। डेटा भंडार: किताब सूची।
3. प्रणाली सदस्य, किताबें और उधार में बँटी है। जुर्माने के नियम बदले। कौन-सा मॉड्यूल बदलेगा?
उधार (जुर्माना उधार से जुड़ा है)। सदस्य और किताबें वैसे ही रहेंगे।
4. इन्हें मॉड्यूल में बाँटो: छात्र जोड़ना, नाम से खोजना, किताब जारी करना, किताब हटाना, किताब लौटाना।
सदस्य: छात्र जोड़ना। किताबें: नाम से खोजना, किताब हटाना। उधार: किताब जारी करना, लौटाना।
आम गलतियाँ
- आवश्यकताएँ साफ़ होने से पहले कोड लिखना शुरू कर देना।
- "ऐप तेज़ होना चाहिए" जैसी धुंधली आवश्यकता लिखना। बताओ कितना तेज़।
- ऐसे मॉड्यूल बनाना जो सब एक-दूसरे पर निर्भर हों (उच्च युग्मन)।
- उपयोगकर्ताओं को बताए बिना आवश्यकताएँ बदल देना, जिससे अंतिम प्रणाली उनकी चाही हुई नहीं बनती।