विनिर्देशों के दस्तावेज को लिखने में ग्राहक के लिए कठिनाई का एक हिस्सा यह है कि ग्राहक अक्सर यह नहीं जानता कि ग्राहक को उन चीजों का अनुवाद कैसे करना है जो ग्राहक किसी भाषा में चाहता है जो वास्तव में वर्णन करता है कि ग्राहक को क्या चाहिए। हालांकि ग्राहक कह सकते हैं कि वे एक प्रणाली में मौजूद एक निश्चित व्यवहार चाहते हैं, वे आम तौर पर minutiae के साथ तब तक चिंतित नहीं होते हैं जब तक कि उन्होंने सॉफ्टवेयर को काम करने और उपयोग करने का अनुभव नहीं किया और अनुभव किया हो, जो ग्राहक को लगता है कि उनके साथ मेल नहीं खाता है की जरूरत है।
जब ग्राहक किसी व्यावसायिक प्रक्रिया का वर्णन करते हैं, तो वे अक्सर बहुत सारी प्रासंगिक जानकारी छोड़ देते हैं। अक्सर यह जानकारी एक ऐसी प्रक्रिया के बारे में होती है, जो आमतौर पर ग्राहक के विशेष डोमेन के भीतर समझी जाती है और जो इसलिए दी जाती है और अक्सर प्रोग्रामर के पास नहीं जाती है। अन्य समय में, ग्राहक वास्तव में यह नहीं जानता है कि किसी प्रणाली के भीतर सभी सीमाओं की स्थिति से कैसे निपटें, और मार्गदर्शन के लिए प्रोग्रामर को देख रहा है। कभी-कभी यह प्रयोज्यता का एक सरल मामला होता है, ग्राहक की सोच के साथ वे चाहते हैं कि वे एक तरह से काम करें, लेकिन बाद में मन बदलने पर यह स्पष्ट हो जाता है कि चीजों को अलग तरीके से काम करना चाहिए।
ठीक है, इतना "प्रोग्रामर के लिए ग्राहक-संबंध 101"। सवाल यह है कि क्या विनिर्देशन को परिभाषित करने के लिए ग्राहक एक व्यावसायिक पठनीय डीएसएल का उपयोग करने में अभी भी मूल्य है। मेरा मानना है कि मार्गदर्शन के साथ, उत्तर एक अस्थायी 'हां' है, और मैं कहता हूं कि क्योंकि मेरा अगला सवाल यह है कि मन में आता है, तो आपके पास ग्राहक शिल्प एक डीएसएल क्यों होगा जब आपके पास एक प्रोग्रामर हो सकता है जो आसानी से एक को परिभाषित करेगा। सिस्टम को काम करने की आवश्यकता को परिभाषित करने के लिए एक सरल लेकिन समृद्ध भाषा के साथ एक ग्राहक प्रदान करें?
जब आपने एक ग्राहक को यह बताने के लिए एक भाषा प्रदान की है कि वे कैसे काम करने के लिए एक प्रणाली चाहते हैं, तो आप उन कथनों को समाप्त करने जा रहे हैं जो कुछ इस प्रकार हैं:
"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".
इस प्रकार का कथन बहुत स्पष्ट तरीके से एक आवश्यकता का वर्णन करने के लिए समाप्त होता है, समग्र आकार प्रदान करता है कि ग्राहक मूल रूप से सिस्टम को ग्रहण करना चाहता है, या इसे देखने का एक और तरीका यह है कि ग्राहक वर्णन कर रहा है कि सिस्टम क्या है। यदि आप चाहते हैं कि आपका ग्राहक कुछ और चीजों के बारे में सोचें, तो आप उनसे उन नियमों का वर्णन करने के लिए कह सकते हैं, जिन्हें इस तरह के कई बयानों का उपयोग करते हुए इस सुविधा का पालन करना चाहिए:
"Given 'some system state', When 'some action occurs', Then expect 'some result'
फिर बहुत स्पष्ट विवरण, इस बार कैसे के बारे मेंसिस्टम को व्यवहार करना चाहिए। बात यह है, यह सभी रिक्त स्थान को भरने के लिए एक सॉफ्टवेयर डेवलपर की आवश्यकता को प्रतिस्थापित नहीं करेगा, और आगे के विवरणों को छेड़ने के लिए कि ग्राहक केवल परिधीय रूप से अवगत हो सकता है। यद्यपि ग्राहक एक अच्छा प्रोग्रामर-अनुकूल प्रारूप में सुविधाओं और व्यवहारों का वर्णन करने के लिए प्रोग्रामर द्वारा 'प्रशिक्षित' होने में सक्षम हो सकता है, ग्राहक के पास वास्तव में परीक्षण मामलों को उत्पन्न करने के लिए कौशल या ज्ञान नहीं होगा, न ही कार्यान्वयन प्रदान करने के लिए। कोड। मुझे लगता था कि ओपी ने मार्टिन फाउलर लेख के बिंदु को संदर्भित किया है। तो हाँ, सॉफ़्टवेयर स्वयं ग्राहक द्वारा लिखने योग्य नहीं है, लेकिन सॉफ़्टवेयर का विवरण निश्चित रूप से - और IMHO - ग्राहक द्वारा लिखा जाना चाहिए। इसके लायक क्या है, मैंने यह कहते हुए फाउलर का लेख नहीं पढ़ा कि ग्राहक को चाहिए '
मुझे लगता है कि हम प्रोग्रामर कभी-कभी यह भूल सकते हैं कि हमारे ग्राहक आमतौर पर अपने व्यवसायों और व्यापार प्रक्रियाओं की अपनी समझ के मामले में बहुत स्मार्ट हैं, निश्चित रूप से हम जितना करते हैं उससे बेहतर है। जब उनके पास यह बताने के लिए प्रोग्रामर नहीं होता है कि वे एक सॉफ्टवेयर सिस्टम का निर्माण कैसे करें, तो ग्राहक आमतौर पर अन्य का सहारा लेते हैं - शायद कम कुशल - का मतलब है कि वे अपने विशेष व्यवसाय प्रबंधन की समस्याओं को हल करते हैं। इसका मतलब है कि मैं सरल डेटाबेस (एक्सेस पर विचार करता हूं) या स्प्रैडशीट, या यहां तक कि हाथ से लिखे जाने वाले लीडर्स में, और उन प्रक्रियाओं को प्रबंधित करने के लिए अच्छी तरह से परिभाषित नियमों और प्रक्रियाओं के साथ। कितने ग्राहकों की कमी यह निर्धारित करने का साधन नहीं है कि किसी प्रणाली को काम करने की आवश्यकता है, बल्कि इसे कैसे बनाया जाना चाहिए , और इससे भी महत्वपूर्ण बात यह है कि किसी व्यक्ति के लिए सिस्टम के व्यवहार नियमों का कुशलतापूर्वक वर्णन कैसे करेंकरते कौशल वास्तव में प्रणाली का निर्माण करने की है।
यदि वास्तव में लेखन की कमी पर एक आम सहमति है, तो क्या आप एक उपकरण के साथ एक समस्या देखेंगे, जो परिदृश्यों के साथ शुरू करने और उन्हें इंस्ट्रूमेंट करने के बजाय वास्तविक परीक्षणों से व्यापार-पढ़ने योग्य परिदृश्य उत्पन्न करेगा?
मुझे लगता है कि यह मुद्दे को गलत तरीके से देख रहा है। मैं एक उपकरण के साथ एक बड़ी समस्या देखूंगा जो परीक्षणों से प्रलेखन उत्पन्न करता है यदि उस दस्तावेज को किसी भी तरह से विनिर्देश का प्रतिनिधित्व करने का इरादा था। किसी परिदृश्य का परीक्षण करने के लिए, आपको इसे समझने की आवश्यकता है, इसलिए परिदृश्य को आपके लिए पहले से ही मौजूद होना चाहिए ताकि दोनों इसके लिए एक परीक्षण निर्धारित कर सकें। यदि आप बीडीडी-वाक्यविन्यास में परिदृश्य का वर्णन करते हैं, तो आप इसे पहले ही निर्दिष्ट कर चुके हैं, और इस प्रकार आप केवल तथ्य के बाद परिदृश्यों को लिख सकते हैं। यदि दूसरी ओर आपके पास एक उपकरण होता है जो ग्राहक को एक अच्छी प्रोग्रामिंग-फ्रेंडली डीएसएल में एक प्रणाली का वर्णन करने की अनुमति देता है, और यदि उस टूल का उपयोग कोड टेम्पलेट उत्पन्न करने के लिए किया जा सकता है जो कि टेस्ट सूट के रूप में उपयोग किया जाएगा, तो मैं ' d का कहना है कि इस तरह के टूल में बहुत अच्छा मूल्य होगा। यह ग्राहक को प्रोग्रामर को समीकरण से बाहर नहीं देखेगा, और यह ग्राहक की इच्छाओं को लेने के लिए आवश्यक प्रयास को कम करने और बीडीडी फैशन में परीक्षण-एन्कोडेड आवश्यकताओं को उत्पन्न करने में मदद करेगा, और शायद ग्राहक की इच्छाओं को अधिक आसानी से समझ में आएगा। हालांकि, ग्राहक की जरूरतों से ग्राहक की जरूरतों को अलग करने के लिए ग्राहक की मदद करने के लिए हाथ पर एक अनुभवी सॉफ्टवेयर डेवलपर होने का विकल्प नहीं होगा।