मैं PHPUnit के साथ नौकरी कैसे उद्धृत करूं?


9

मैं पिछले 5 वर्षों से 15 साल से PHP और PHP के लिए वेबसाइट प्रोग्रामिंग कर रहा हूँ। मैंने हमेशा ठोस कोड लिखा है। फिर भी, मेरे पास एक ग्राहक है जो परीक्षण किए जा रहे कोड के 80% पर जोर दे रहा है। चूंकि क्लाइंट हमेशा राइट है, मैं यह सुनिश्चित करने के लिए PHP_CodeSniffer का उपयोग करने की योजना बना रहा हूं कि मेरा कोड सही लगे और मेरी यूनिट परीक्षण करने के लिए PHPUnit। मैं इस अनुभव के माध्यम से कुछ सीखने की उम्मीद कर रहा हूं।

क्या ये सही उपकरण हैं? PHPUnit को स्थापित करने और अतिरिक्त कोड लिखने में कितना समय शामिल है? वेबपेज और स्व-परीक्षण लिखने के लिए मुझे लगभग 8 सप्ताह लगने चाहिए, जैसा कि मैंने अतीत में किया है। अगर मैं यूनिट परीक्षण (PHPUnit) के लिए 4 दिन अतिरिक्त (10%) जोड़ूं, तो क्या यह पर्याप्त है? विचार? सुझाव? धन्यवाद।


2
इकाई परीक्षण विकास के समय को दोगुना कर सकता है।

आपने PHP 2.0 के साथ काम किया? अच्छा! मेरा इनपुट संक्षिप्त रूप में एक उत्तर के लिए योग्य नहीं है: उपकरण के चुनाव के लिए आप सही हैं imho पर। Php टेस्टिंग फ्रेमवर्क पर मेरा टेक देखें और phpcs के लिए मुझे कोई विकल्प भी नहीं पता है । जोड़ने के समय के लिए: कुछ समय के लिए टीडीडी करने के बाद मैं आमतौर पर इसके बिना धीमा होता हूं, लेकिन जैसा कि मैंने कुछ चीजों को बहुत लंबा कर दिया है (+ 50%)। यदि आप एक ऐसे ढांचे का उपयोग करते हैं जो परीक्षण को कठोर बनाता है (बहुत सारे स्थिर सामान) और भी अधिक जोड़ देता है।
एडोरियन

1
यह प्रारंभिक मोर्चे के विकास को बढ़ाएगा, लेकिन 8 सप्ताह की परियोजना में, आपको यह कम अंतर मिलेगा क्योंकि इकाई परीक्षण आपको पहले और आसान बग की खोज करने में मदद करेंगे।
फेंटन

1
@ विक्रम, थोड़े, लेकिन यूनिट परीक्षण भी विकास को गति देते हैं [तैनाती / परीक्षण / खोज \
_

जवाबों:


7

एक पंक्ति में: यह निर्भर करता है कि आप कैसे काम करते हैं। मुझे लगता है कि 10% रास्ता बहुत कम है। यह कम से कम 25% होना चाहिए, यदि 40% नहीं, यदि 60% नहीं, तो अधिक नहीं।

सबसे पहले, मैं वहां आपके ग्राहक से बहुत सहमत हूं। यूनिट परीक्षण एक मजबूत, डिबग उत्पाद के लिए आसान बनाने के लिए आसान, का एक अनिवार्य हिस्सा हैं।

मैं वही जानता हूँ जो मैं जानता हूँ। मैं ज्यादातर प्रोजेक्ट्स के लिए TDD (टेस्ट-ड्रिवेन डेवलपमेंट) का इस्तेमाल करता हूं। टीडीडी मूल रूप से आपको वास्तविक कोड से पहले परीक्षण लिखने देता है। वे स्वीकृति मानदंड का एक सेट स्थापित करते हैं जिसे अंतिम उत्पाद को पूरा करने की आवश्यकता होती है। आमतौर पर, आप अपने समय लेखन परीक्षणों के 50% से 70% तक खर्च करेंगे, और उन्हें पास करने के लिए कोड लागू करने के लिए शेष।

हालांकि यह बेतुका और / या भारी लग सकता है, मैं आपको आश्वस्त कर सकता हूं कि यह नहीं है। यहाँ पर क्यों:

  • आप यह पता लगाने में सक्षम होंगे कि परीक्षण लिखते समय उपयोग करने के लिए सबसे अच्छा वास्तुशिल्प पैटर्न क्या हैं। इस तरह, जब आप कोडिंग शुरू करते हैं, तो एप्लिकेशन आर्किटेक्चर न्यूनतम रूप से बदल जाएगा (क्योंकि हम सभी जानते हैं कि एप्लिकेशन आर्किटेक्चर को फिर से बनाना कितना महंगा है)।
  • आप केवल परीक्षणों को पास करने के लिए कोड बनाते हैं (इसलिए अंतिम उत्पाद को स्वीकार्य बनाते हैं)। आप बेकार / आउट-ऑफ-स्कोप सुविधाओं को प्रोग्रामिंग करने में समय नहीं बिताएंगे।
  • कम कोड होने से (यानी: केवल ऐसा कोड जिसकी आपको वास्तव में आवश्यकता है), यह कम त्रुटि वाला है। (कम कोड = कम त्रुटियां)।
  • यदि आप एक गलती करते हैं, और आप करेंगे, तो यह पता लगाने में बहुत कम समय लगेगा कि समस्या क्यों है, और समस्या कहां है। यदि परीक्षण ठीक से लिखे गए हैं, तो इसका मतलब है कि एक गलती एक एकल विफलता का कारण होगी, न कि एक चेन रिएक्शन। इस तरह आप आसानी से मिनट के एक मामले में समस्या के स्रोत को इंगित कर सकते हैं, अगर सेकंड नहीं।
  • इकाई परीक्षणों के साथ वास्तविक कोड को लागू करने में बहुत कम समय लगेगा। जैसे ही एक परीक्षण में विफल हो जाता है, आप जानते हैं कि कुछ गलत है। आपको बग्स को ठीक करने के लिए क्लाइंट के साथ आगे-पीछे नहीं करना है।
  • आपको अंततः बग्स को ठीक करने के लिए क्लाइंट के साथ आगे-पीछे करना होगा, क्योंकि 100% त्रुटियों को कुछ भी नहीं पकड़ सकता है। हालांकि, आप आसानी से 95% पकड़ सकते हैं यदि अधिक नहीं।

PHPUnit इकाई परीक्षण PHP के लिए बहुत वास्तविक उपकरण है, और यह उस पर बहुत अच्छा है। मैंने PHP_CodeSniffer का अधिक उपयोग नहीं किया है। हालाँकि, मुझे लगता है कि यदि आप अकेले काम कर रहे हैं, तो आपको इसकी आवश्यकता नहीं है। यह सुनिश्चित करने के लिए एक टीम में अधिक उपयोगी है कि कोड वही दिखता है जो इसे कोडित नहीं करता है।


5

इस अनुभव से आप कुछ सीखेंगे इसके लिए आपको सहारा देता है। मुझे यकीन है कि तुम करोगे।

सबसे पहली चीज जो आपको सीखनी चाहिए, वह यह है कि यूनिट टेस्टिंग की आवश्यकता का आपके पास कितना अनुभव है, इससे कोई लेना-देना नहीं है । सबसे अच्छा डेवलपर सबसे अच्छा यूनिट-टेस्टर्स में से एक होने जा रहा है, साथ ही:

बिल वेनर्स: आप अपनी पुस्तक रिफैक्टिंग में कहते हैं: "यदि आप रिफ्लेक्टर करना चाहते हैं, तो आवश्यक पूर्व शर्त ठोस परीक्षण कर रहे हैं।" क्या इसका मतलब है कि अगर आपके पास परीक्षण नहीं हैं तो आपको रिफ्लेक्टर नहीं करना चाहिए?

मार्टिन फाउलर: आपको इसके बारे में सोचना चाहिए कि बिना नेट के एक कसौटी पर चलना। यदि आप एक कसकर चलने में अच्छे हैं, और यह इतना ऊपर नहीं है, तो आप इसे आजमा सकते हैं। लेकिन अगर आपने पहले कभी एक तंग रास्ता नहीं किया है, और यह नियाग्रा फॉल्स पर है, तो आप शायद एक अच्छा जाल चाहते हैं।

से http://www.artima.com/intv/refactorP.html

मैं PHP को बिना किसी इकाई परीक्षण के लिखा करता था। फिर, जावा में यूनिट परीक्षण के अभ्यास के वर्षों के बाद, मैंने पाया कि मैं यूनिट परीक्षण के बिना PHP में एकल पृष्ठों की तुलना में बहुत अधिक जटिल कुछ भी काम नहीं कर सकता। कारण? उत्पादकता । इकाई परीक्षण के बिना, मैं विश्वास के साथ प्रतिक्षेपक नहीं कर सकता था - इसका मतलब यह था कि या तो ए) मुझे बहुत अधिक आंसू बहाना होगा और शुरुआत से ही हर चीज पर काम करना होगा, या बी) , मुझे बदसूरत, विरासत कोड से निपटना होगा।

जब आप एक बोली लगा रहे हैं तो क्या आपको परीक्षण करने के लिए समय की आवश्यकता है? जी हां । क्या यह सहज लगता है कि इसमें अधिक समय लगेगा? हाँ, फिर से । आप शायद, जैसा कि कुछ अन्य उत्तरों में मोटे तौर पर अनुमान लगाया गया है, यूनिट परीक्षणों के बिना 50-100% से अधिक का अनुमान लगाने की आवश्यकता है ।

तथापि!...

  • आप पहले विनिर्देश छेद को पकड़ेंगे और संबोधित करेंगे
  • जिसका मतलब है कि आप एक क्लीनर और अधिक ठोस विनिर्देश विकसित कर रहे हैं
  • आप शीघ्रता से और आत्मविश्वास से परिवर्तनों का जवाब देने में सक्षम होंगे
  • आपके पास कम कीड़े होंगे
  • आपकी बग जल्दी और आसानी से पकड़ी जा सकेगी

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

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


3

इस बात का कोई आसान जवाब नहीं है कि यह आपको कितना लंबा समय देगा।

लेकिन एक जमीनी नियम के रूप में, अगर इसकी एक छोटी परियोजना है: मैं कहूंगा कि अच्छी इकाई परीक्षण के साथ विकास इकाई परीक्षण के बिना विकास के रूप में लंबे समय तक 1.75-2 बार लगेगा। लंबी परियोजनाओं के लिए शायद 25-30%?

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

PHPUnit के रूप में .... जब से मैंने इसका उपयोग किया है, तब से यह हो गया है, मेरी धारणा यह शक्तिशाली है, लेकिन वास्तव में पॉलिश होने से पहले शायद कुछ और काम की जरूरत है।

अगर वहाँ एक चीज है जो मैं यहाँ संवाद करना चाहता हूँ, हालाँकि: कृपया अपने प्रोजेक्ट के अंत में यूनिट टेस्टिंग को मात्र औपचारिकता के रूप में न देखें। अगर यह सब मेरे विचार में है, तो यह बेकार है।


3

अब तक के जवाब काफी गहन हैं, इसलिए मैं सिर्फ एक बिंदु को कवर नहीं करूंगा: PHPUnit का उपयोग करने के कारण अतिरिक्त समय होगा

  1. जब से आप इसे सीख रहे हैं, तब सबसे पहले
  2. गैर-परीक्षण विकास के समय को कम करें क्योंकि आप इसके साथ विश्वास प्राप्त करते हैं।

इकाई परीक्षण मॉडल कक्षाएं जो प्रस्तुति के साथ सौदा नहीं करती हैं वे बहुत सीधे हैं। आप प्रत्येक वर्ग के लिए एक परीक्षा लिखते हैं, और उन परीक्षा मामलों में आप किसी विशेष विधि / सुविधा के परीक्षण के लिए किसी ऑब्जेक्ट को सीधे इंस्टैंट कर सकते हैं और कॉन्फ़िगर कर सकते हैं। एक बार जब आपके पास PHPUnit सेटअप और चल रहा है, तो आप इन परीक्षणों को तेज़ी से काम कर पाएंगे।

यूनिट टेस्टिंग वेब पेज अधिक पेचीदा हो सकते हैं। यदि आप Zend फ्रेमवर्क, सिम्फनी, स्मार्टी या किसी अन्य MVC इंजन का उपयोग करते हैं, तो उनके साथ अच्छी तरह से खेलने के लिए PHPUnit प्राप्त करने में अधिक समय लग सकता है। हम Zend फ्रेमवर्क का उपयोग करते हैं और मैंने नियंत्रकों के परीक्षण के लिए आधार वर्गों के निर्माण और अलगाव में स्क्रिप्ट देखने के लिए काफी समय बिताया है। इस परियोजना के आकार को देखते हुए, आप शायद इससे बेहतर शुरुआत करेंगे ControllerTestCase

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.