क्यों कार्यात्मक और nonfunctional आवश्यकताओं के बीच अंतर परेशान?


12

मैं दोनों के बीच के अंतर को समझता हूं, लेकिन मैं अपने सहयोगियों द्वारा कार्यात्मक या गैर-संक्रियात्मक (या संक्रमणकालीन) के रूप में लेबलिंग आवश्यकताओं के लाभ के बारे में पूछताछ करता हूं। ऐसा करने के लिए परेशान क्यों? उन्होंने कहा कि जो कुछ उन्होंने कहा था, वह दो दिनों के लिए एक परियोजना की आवश्यकताओं की सूची से गुजर रहा था, और इसका कोई फायदा नहीं हुआ, क्योंकि अंतिम परिणाम दस्तावेज़ के साथ एक अन्य व्यवसाय इकाई को प्रस्तुत करना था, "यह सब करें।"

मुझे डर है कि आवश्यकताओं को एक दस्तावेज़ में एक साथ lumped है। मैंने व्यावहारिक रूप में लाभ की व्याख्या करने की कोशिश की, लेकिन इसे बेच नहीं सका। मैं कैसे दस्तावेजीकरण का लाभ बेचता हूं जो आवश्यकताएं कार्यात्मक हैं और जो गैर-संवैधानिक हैं।


C2.com/cgi/wiki?NonFunctionalRequirements पर एक दिलचस्प चर्चा है, लेकिन मुझे ऐसा कुछ नहीं मिला है जो एक निश्चित उत्तर प्रदान करता हो।
थॉमस ओवेन्स

कार्यात्मक और गैर-कार्यात्मक आवश्यकताओं को अलग-अलग सूचीबद्ध करना 'आवश्यकताओं-पता लगाने की क्षमता' को आसान बनाता है। मेरे अनुभव में, कुछ बैच-प्रक्रियाएँ हुईं जिनमें कार्यात्मक प्रभाव नहीं थे, लेकिन गैर-कार्यात्मक आवश्यकताएं थीं। ऐसे मामलों में इस स्पष्ट सीमांकन ने बहुत मदद की है। प्रत्येक को एक अलग पहचानकर्ता होना चाहिए ताकि वह सुचारू रूप से सत्यापन और आवश्यकताओं की पुष्टि सुनिश्चित कर सके।
अबी

जवाबों:


6

स्पष्ट रूप से अलग-अलग आवश्यकताओं से सही प्रणाली को डिजाइन करना आसान हो जाएगा।

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

कार्यात्मक विशेषताओं से अलग गुणवत्ता विशेषताओं को रखने से आप विभिन्न तरीकों से विभिन्न प्रकार की आवश्यकताओं का विश्लेषण, निर्दिष्ट और प्राथमिकता दे सकते हैं। उदाहरण के लिए, गुणवत्ता विशेषताओं को आमतौर पर गुणवत्ता विशेषता परिदृश्य का उपयोग करके निर्दिष्ट किया जाता है, जबकि कार्यात्मक आवश्यकताएं कहानियों का उपयोग कर सकती हैं, मामलों का उपयोग कर सकती हैं, बयान कर सकती हैं, या किसी अन्य प्रारूप की संख्या। मैंने जिन प्रणालियों पर काम किया है उनमें से अधिकांश में एक दर्जन से कम गुणवत्ता वाले गुण और कई, बहुत अधिक कार्यात्मक आवश्यकताएं थीं।

मैं वास्तव में एक और प्रकार की आवश्यकताओं का परिचय दूंगा - तकनीकी अड़चनें । फिर, इन तीन बाल्टियों में आवश्यकताओं को स्पष्ट रूप से अलग करने से आपको सिस्टम के निर्माण के दौरान सही ट्रेड-ऑफ बनाने के तरीके के बारे में संकेत मिलता है। कार्यात्मक आवश्यकताएं अक्सर काफी परक्राम्य होती हैं, गुणवत्ता विशेषताएँ आपके आर्किटेक्चर और आपके द्वारा चुनी गई संरचनाओं को भारी प्रभावित करेंगी, तकनीकी बाधाएं गैर-परक्राम्य हैं।

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

आर्किटेक्चरिंग सॉफ्टवेयर इंटेंसिव सिस्टम्स में एंथनी लट्टान्ज़े : एक प्रैक्टिशनर्स गाइड वास्तु चालकों का व्यावहारिक अवलोकन देता है और उन्हें मेरे सारांश की तुलना में अलग-अलग तरीके से व्यवहार किया जाना चाहिए।


एनएफआर के लिए +1 आर्किटेक्चर से जुड़ा हुआ है। यदि आप सिस्टम को संपूर्ण रूप में नहीं देखते हैं तो उन्हें बनाना कठिन है। प्रदर्शन और दोष सहनशीलता एनएफआर के महान उदाहरण हैं जिन्हें अक्सर सिस्टम स्तर पर डिजाइन करने की आवश्यकता होती है।
फ्यूहरमैनटर

5

जब हर आवश्यकता की एक समान प्राथमिकता / वजन (विशेष रूप से "अनिवार्य") होता है, तो आपको संभवतः कार्यात्मक और गैर-कानूनी आवश्यकताओं को विभाजित करने की तुलना में अधिक चिंता करना होगा।

फिर भी, आवश्यकताओं की दो श्रेणियों को अलग करने के कई कारण हैं:

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

परीक्षण के लिए जिम्मेदारी यह सुनिश्चित करने के लिए कि सुरक्षा, दोष सहिष्णुता, सुरक्षा और विश्वसनीयता आवश्यकताओं को पूरा करने में उपयोगकर्ता या क्यूए टीम कितनी निपुण है?

अपने आप को न दोहराएं दस्तावेज़ीकरण को कोड के समान DRY सिद्धांत का पालन करना चाहिए। सामान्य UI स्टाइलिंग आवश्यकताओं को एक साथ समूहीकृत किया जाना चाहिए। यदि आवश्यकताओं के लिए जिम्मेदार व्यक्ति वास्तव में चाहता है, तो वे कार्यात्मक आवश्यकताओं में गैर-कार्यात्मक आवश्यकताओं (व्यक्तिगत रूप से या एक समूह के रूप में) का संदर्भ ले सकते हैं।

संस्करणकरण यदि आप बहुत सारे "मानकों" के साथ एक कॉर्पोरेट वातावरण में हैं - तो आप विशिष्ट UI या सुरक्षा (युगल का नाम देने के लिए) आवश्यकताओं के दस्तावेज़ लिख सकते हैं जिन्हें संस्करणित किया जा सकता है। इस तरह आप आवेदन विशिष्ट आवश्यकताओं (ज्यादातर कार्यात्मक आवश्यकताओं) में लिख सकते हैं: "आवेदन को XYZ-Company-SecReq-DocumnentNamingStandard.docx में परिभाषित सुरक्षा आवश्यकताओं के V2.3 का पालन करना होगा"।


1

क्यों कार्यात्मक और nonfunctional आवश्यकताओं के बीच अंतर परेशान?

विभेद करने का एक कारण दो प्रकारों के बीच अमूर्तता का स्तर है। Nonfunctional आवश्यकताओं को एक सिस्टम स्तर पर हैं, और कहते हैं कि पूरे सिस्टम को कैसे व्यवहार करना चाहिए। कार्यात्मक आवश्यकताएं एक विशिष्ट विशेषता को संदर्भित करती हैं और ग्राहकों को क्या सुविधाएँ और कार्यक्षमता प्रदान की जानी चाहिए।

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

मुझे डर है कि आवश्यकताओं को एक दस्तावेज़ में एक साथ lumped है। मैंने व्यावहारिक रूप में लाभ की व्याख्या करने की कोशिश की, लेकिन इसे बेच नहीं सका। मैं कैसे दस्तावेजीकरण का लाभ बेचता हूं जो आवश्यकताएं कार्यात्मक हैं और जो गैर-संवैधानिक हैं।

मेरे अनुभवों में, कार्यात्मक और गैर-कार्यात्मक आवश्यकताएं वास्तव में एक ही दस्तावेज में वर्गीकृत होती हैं या एक ही सिस्टम में ट्रैक की जाती हैं। हालांकि, उन्हें अपने स्वयं के, दस्तावेज़ के अलग-अलग वर्गों के साथ-साथ प्रत्येक को मिलने के लिए सफलता मानदंड दिए जाते हैं।


1

आम तौर पर, आप आवश्यकताओं को टीम के खिलाफ देने में मदद करने के लिए वर्गीकृत करते हैं। यदि किसी वास्तुशिल्प आवश्यकता पर विशेष रूप से लक्षित आवश्यकता है, तो इसे "आर्किटेक्चर" आवश्यकता कहते हुए टीम को आर्किटेक्चर पर काम करते समय मदद करनी चाहिए।

सभी आवश्यकताओं का एक बड़ा एकल दस्तावेज़ आवश्यक रूप से एक बुरी बात नहीं है ... 2 दिनों की समीक्षा करना यह भी बुरा नहीं है। आम तौर पर समस्या यह है कि एक बार एक व्यक्ति ने आवश्यकताओं की समीक्षा की है, तो उन्हें समझें, लेकिन किसी और के लिए भी ऐसा करना आसान नहीं है। मेटाडेटा के साथ आवश्यकताओं को लेबल करना शुरू करने के लिए यह एक बड़ी मदद हो सकती है जो परियोजना में शामिल होने वाले अन्य लोगों की मदद करेगी।

शायद इसे अमूर्त समस्या के रूप में वर्णित करने का प्रयास करें। यदि आपको एक विरासत कोड आधार में काम करने की आवश्यकता है, तो आप कोड की सभी मौजूदा लाइनों के माध्यम से नहीं पढ़ते हैं, फिर काम करना शुरू करते हैं। आप मदद करने के लिए कोड की संरचना का पालन करते हैं। आवश्यकताओं में कुछ संरचना होने से उसी तरह मदद मिलती है।


-3

पृथक्करण के कई लाभ हैं।

  1. परीक्षण पर समय बचाएँ (अर्थात केवल कार्यात्मक आवश्यकताओं का परीक्षण करें)
  2. आवश्यकताओं में भविष्य में परिवर्तन का समय बचाता है (अर्थात गैर-कार्यात्मक आवश्यकताओं की समीक्षा / अनुमोदन / परीक्षण के लिए कम समय लगेगा)
  3. एक विनियमित (यानी एफडीए, आदि) दुनिया में, गैर-कार्यात्मक आवश्यकताओं के लिए कागजी कार्रवाई की 1/10 वीं राशि की आवश्यकता होती है जो एक कार्यात्मक आवश्यकता होती है।
  4. टीम को वरिष्ठ (कार्यात्मक) और जूनियर (गैर-कार्यात्मक) टीम के सदस्यों के बीच काम को विभाजित करने की क्षमता देता है।

मैं जा सकता था ...

सतह पर दो दिन एक लंबे समय की तरह लगते हैं, लंबे समय में यह भविष्य के काम के हफ्तों या महीनों तक बचा सकता है।


गैर-कार्यात्मक आवश्यकता का एक उदाहरण "10 सेकंड से कम समय में लोड" होगा। यह वर्णन नहीं करता है कि सिस्टम को क्या करने की आवश्यकता है (जो एक कार्यात्मक रीक होगा), यह सिस्टम के कुछ अन्य पहलू का वर्णन करता है। मैं जूनियर टीम के सदस्यों को वह आवश्यकता नहीं दूंगा :)
gbjbaanb

"केवल कार्यात्मक आवश्यकताओं का परीक्षण करें" - एक गैर-कार्यात्मक आवश्यकता के बारे में कैसे कहा जाता है कि "सिस्टम को डेटाबेस विफलताओं को सहन करना चाहिए" (सौभाग्य यह परीक्षण नहीं करता है और देखें कि आपका ग्राहक इसे कैसे पसंद करता है)। मैं @gbjbaanb से सहमत हूं कि नॉनफंक्शनल रिक्वायरमेंट्स (जो आमतौर पर एक आर्किटेक्चरल लेवल पर होती हैं!) जूनियर टीम मेंबर्स को नहीं दी जाती हैं। क्या आप वास्तव में समझते हैं कि एनएफआर क्या हैं?
फुहरमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.