सोर्स कोड में जाँच से पहले कुछ अच्छे अभ्यास क्या हैं? [बन्द है]


47

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

मैं जानना चाहता हूं कि कोड की जाँच करने से पहले क्या अच्छे व्यवहार हैं - मैं इस तरह की गलती दोबारा नहीं करना चाहता।

जवाबों:


149

एक चीज़ जो मुझे करने की आदत है, मैं हमेशा हर फ़ाइल के डिस्क्स को देख रहा हूँ, जिसमें मैं जाँच करूँगा, ठीक इससे पहले कि मैं जाँच करूँ।


46
+1 यह स्पष्ट है, लेकिन अगर कोई भी ऐसा नहीं कर रहा है, तो वे इसे गलत कर रहे हैं!
डेविड हेफर्नन

6
+1 वास्तव में, यह स्पष्ट नहीं है, लेकिन यदि आप ऐसा नहीं करते हैं तो आपको खेद होगा।
नेमंजा ट्रिफ़ुनोविक

14
+1 यह भी, अगर आपको लगता है कि यह बहुत अधिक काम है, तो आप शायद एक ही बार में बहुत अधिक कर रहे हैं।
मेपर्सन

5
इसके अलावा, डिफरेंसेस को देखने से यह जानना आसान हो जाता है कि आप अपने बदलावों के साथ क्या हासिल करने की कोशिश कर रहे हैं, विशेषकर केस में आपने कई सुधार किए हैं।
जोनास

4
अगर यह देखने लायक नहीं है, तो शायद यह जांचने लायक नहीं है।
राबर्ट जेपेसेन

63

आपको कभी भी कमेंट-आउट कोड की जांच नहीं करनी चाहिए। यदि आपके पास कोड है जो चेक-इन से पहले टिप्पणी करने की आवश्यकता है, तो आप इसे गलत कर रहे हैं।

नियमों के अनुसार:

  1. नवीनतम लो
  2. फिक्स मर्ज विरोध
  3. बिल्ड

    3.1 त्रुटियों का निर्माण ठीक करें

  4. परीक्षण चलाएं

    4.1 टूटे हुए परीक्षणों को ठीक करें

  5. 1 पर जाएं (जब तक कि कुछ भी नया न हो)

सभी चरण पूरे होने पर ही जांच करें।

चेक-इन डांस देखें ।


अन्य अच्छे अभ्यास:

  • वे अपेक्षित फाइलें हैं, यह सुनिश्चित करने के लिए फाइलों की सूची की समीक्षा करें।
  • प्रत्येक फ़ाइल के परिवर्तनों की समीक्षा करें (हटाए गए / परिवर्धन / अंतर)

मैंने यहां डबल लिया। शायद आपका मतलब है 'टिप्पणी-बाहर कोड'? अपने आप को, मैं कभी भी अनकम्प्रेस्ड कोड में जाँच नहीं करूँगा!
पोंटस गैगेज

11
+1 - यह एक बहुत ही संपूर्ण सूची है! नहीं बनाया है!
ozz

1
@ फ़ीलिप - जब तक आप जानते हैं कि यह अच्छा अभ्यास नहीं है और जब तक यह एक साधारण अल्पकालिक मध्यस्थ है, तब यह उस नियम को तोड़ने वाले कुछ मामलों में से एक है। मुझे यह तब और अधिक लगता है जब लोग कमेंट आउट कोड में जांच करते हैं ताकि वे "इसे खो न दें"।
Oded

2
@Pipip, यही कारण है कि अच्छा है। आप उन WIP परिवर्तनों को स्थानीय रूप से, जितनी बार चाहें, कर सकते हैं, तो इससे पहले कि आप मुख्य रिपॉजिटरी में धकेलें, आप rebase -iऔर अपने स्थानीय इतिहास को साफ कर लें, आवश्यकतानुसार स्क्वैश करना शुरू कर देता है, इसलिए मेनलाइन में कोई बदसूरत काम नहीं है।
एलेक्स बुडोव्स्की


20

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

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


5
चेकइन पर टिप्पणी करने के लिए +1। यह मेरी दुकान में नीति नहीं है, लेकिन मैं हमेशा एक वर्णनात्मक नोट छोड़ने की कोशिश करता हूं, अगर बाद में केवल मेरी स्मृति को जॉग करना है।
PSU

सहमत - मुझे लगता है कि ओड के वर्कफ़्लो को प्रत्येक चरण के बीच, या कम से कम, प्रत्येक छोरों के बीच संस्करण नियंत्रण से बहुत लाभ हो सकता है।
केविन वर्मियर

7
जब आप चेकइन करते हैं, तो उन सभी चरणों का उपयोग न करें जब आप धक्का देते हैं?
191

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

2
+1। किसी कार्य वस्तु के साथ जुड़ना Git या Hg में एक कठिन काम है। आपको भट्ठा की तरह एक पूरा पैकेज चलाना होगा। यह (केवल) क्षेत्र है जिसमें TFS अच्छा है। हालांकि यह संस्करण नियंत्रण के लिए हानिकारक है।
राबर्ट जेप्पेसेन

8

तीन चीजें जो मैंने अन्य उत्तरों में नहीं देखीं:

नई फाइलें शामिल करें

  • ऐसी नई फ़ाइलों की तलाश करें जो आपके चेंजलिस्ट का हिस्सा न हों
  • पेरफोर्स जैसे SCM के लिए विशिष्ट हो सकते हैं - आपको इसे अपने परिवर्तन में सब कुछ बताना होगा।

अपरिवर्तित फ़ाइलों को वापस लाएं

  • मुझे नफरत है जब मैं अन्य लोगों के बदलावों को देख रहा हूं और नौ फाइलों के साथ एक चैंजिस्ट है, लेकिन उनमें से केवल तीन को संशोधित किया गया है।
  • मैं व्हॉट्सएप या अन्यथा अर्थहीन बदलाव वाली फाइलों को वापस करता हूं।

अपनी सबमिट की गई जाँच करें

  • सुनिश्चित करें कि बिल्ड आपकी प्रतिबद्धता के बाद हरा रहता है।
  • मेरे पास एक दूसरी मशीन थी जिसे मैं अपने कमिट के बाद सिंक, बिल्ड और रन करूंगा ताकि अगर कुछ गलत हो जाए, तो मैं आसानी से इसमें कूद सकूं और इसे ठीक कर सकूं।

दो चीजें जब मैं Git का उपयोग करता हूं:

परमाणु करता है:

  • केवल प्रतिबद्ध के लिए व्यक्तिगत कार्यात्मक परिवर्तन का मंच।
  • जितना हो सके कमिट करें। उन्हें पैच करना, वापस करना और समझना आसान बनाएं।
  • git add --patchयदि आवश्यक हो तो मैं अपने परिवर्तन को कई भागों में विभाजित करने के लिए उपयोग करता हूं।

सारांश करते समय दृश्य भिन्न होता है

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

परमाणु परमाणु का उल्लेख करने वाला एकमात्र व्यक्ति होने के लिए +1।
स्टीफन पॉलगर

7

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

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

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

कुछ अन्य विकल्प हैं जिन्हें आप चालू या बंद कर सकते हैं ताकि सब कुछ ठीक हो सके, या चीजों को अच्छा और साफ रखने के लिए अपने टीएफएस-एडमिन को सुझाव दें ... लेकिन वे काफी हद तक प्राथमिकता हैं


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

7

अभिशाप शब्दों को खोजें और बदलें;;


बस यह सुनिश्चित करें कि क्लैबटिक गलती न करें।
तुललो_x86

4

यदि आप विंडोज से जांच कर रहे हैं, तो जांच लें कि क्या आपके कोड में वे अदृश्य ^ M अक्षर नहीं हैं - UNIX में संपादक अक्सर त्रुटियों / चेतावनियों का कारण देते हैं।

टैब को भी आज़माएं और बदलें - अलग-अलग उपयोगकर्ता 4 स्थानों के साथ अलग-अलग टैब को देखकर समाप्त करेंगे, कुछ 8 और कोड पठनीयता के लिए अच्छा नहीं है।

सर्वश्रेष्ठ दृष्टिकोण IMHO के पास पूर्व-परिभाषित स्क्रिप्ट है जो आपके कोड को आपके संगठन के कोडिंग दिशानिर्देशों के विरुद्ध जांचती है। स्रोत नियंत्रण प्रणालियों के भार में यह कार्यक्षमता होती है।


4
^ M वर्णों के लिए जाँच करना केवल तभी समझ में आता है जब UNIX बॉक्स वास्तव में किसी भी तरह से विकास प्रक्रिया में शामिल हो। कुछ कंपनियां ऑल-विंडोज शॉप हैं।
दीमा

1
ठीक ठीक। यही कारण है कि आप टैब का उपयोग नहीं करते हैं।
एलेक्स बुडोव्स्की

कुछ SCM आपके लिए लाइन एंडिंग संभालते हैं (कुछ दूसरों की तुलना में बेहतर करते हैं)। Perforce ( kb.perforce.com/?article=063 ), git (git config में core.eol), svn (svn: eol-style), आदि
idbrii

@ एलेक्स: या आप लगातार हर जगह टैब का उपयोग करते हैं। इससे कोई फर्क नहीं पड़ता कि आप ऐसा कब तक करते हैं जब तक आप सुसंगत हों ।
डोनल फैलो

@donal, नहीं। यहाँ समस्या है; टैब आपके संपादक के कॉन्फ़िगरेशन के अधीन हैं और इसलिए स्वाभाविक रूप से असंगत हैं। कुछ "संपादक" अनिर्वचनीय हैं, जैसे कि cmd.exe, और अधिकांश लिनक्स कंसोल, इसलिए आप स्वयं भी असंगत हो सकते हैं।
एलेक्स बुडोव्स्की

4

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

जब तक आप समीक्षक के नाम को टिप्पणियों में नहीं लिखते हैं, तब तक हमारा स्रोत नियंत्रण सर्वर आपको जांचने की अनुमति नहीं देगा (फॉर्म में! प्रारंभिक, उदाहरण के लिए! BW अगर ब्रूस वेन ने आपकी समीक्षा की)। समीक्षक को एक ईमेल मिलता है, जिसमें उन्होंने समीक्षा में मदद की। यह स्पष्ट शोषण के लिए खुला है, लेकिन बहुत अच्छी तरह से काम करने लगता है।


4

जब भी संभव हो, मुझे एक चेक-इन को एक कार्य आइटम के साथ जोड़ना पसंद है। यह आपको इस बारे में कुछ प्रासंगिक जानकारी देता है कि इसे क्यों बदला गया, न कि केवल WHAT को बदल दिया गया। टीएफएस में एक काफी सभ्य कार्य आइटम ट्रैकिंग सिस्टम है, इसलिए चेक-इन के समय ऐसा करना तुच्छ है।

(यह मेरे बदलावों की समीक्षा करने के अतिरिक्त है)


2
इसे एक चेक-इन नीति के रूप में सेट किया जा सकता है, ताकि किसी भी कोड को किसी कार्य आइटम से जुड़े बिना चेक नहीं किया जा सके ।
जॉन सॉन्डर्स 19

अच्छी बात है, जॉन। मैं वास्तव में बहुत जल्द ऐसा करने की उम्मीद कर रहा हूं जहां मैं काम करता हूं।
20

सामान लगाना आमतौर पर प्रति-उत्पादक होता है। सुनिश्चित करें कि आपके लोग समझते हैं कि यह उनके बजाय अच्छा है।
राबर्ट जेप्पेसेन

3

एक छोटी सी बात मैं उन फाइलों में जांच नहीं करना चाहता जो वास्तव में नहीं बदली हैं। इन फ़ाइलों को अनजाने में संशोधित किया गया हो सकता है, या रिफ्लेक्टरिंग में शामिल किया गया हो सकता है जिसे या तो वापस रोल किया गया है या अन्यथा लूट बना दिया गया है।

इस प्रकार, आपके परिवर्तन (कार्य आइटम से संबद्ध) में कार्य आइटम को संतुष्ट करने के लिए आवश्यक फ़ाइलें हैं।


3

यहां सभी उत्तरों को संयोजित करने और एक पूर्ण चेकलिस्ट देने के लिए

  1. [चेक इन / चेक आउट] आपको सीधे उस स्ट्रीम में चेक नहीं करना चाहिए, जिसमें अन्य लोग काम कर रहे हैं। आपके पास एक स्ट्रीम रणनीति होनी चाहिए: जैसे प्रति डेवलपर एक स्ट्रीम जिसमें आप दूसरों को परेशान किए बिना स्वतंत्र रूप से चेक इन और चेक आउट कर सकते हैं: सुरक्षित रहें लेकिन अपने स्वयं के विकास की धारा में [केवल अपने विकास की धारा में]। हर चेक में आप इसे एक परिवर्तन रिकॉर्ड के साथ जोड़ते हैं ताकि आपके परिवर्तन उस परिवर्तन के खिलाफ परमाणु हो जाएं जिसे परिवर्तन सेट कहा जाता है (इसलिए आप 'rfc / बग आदि को वितरित कर सकते हैं ... बिना' सब कुछ 'डिलीवर किए)।

  2. [फिर अपनी टीम स्ट्रीम के साथ रिबेट करें] इसका मतलब है कि आप अपनी स्ट्रीम में दूसरों से बदलाव प्राप्त करते हैं। उस ऑपरेशन के दौरान आप मर्ज संवाद में सभी "भिन्न" देख सकते हैं और उनके माध्यम से जा सकते हैं या ... यदि हजारों और / या आप कोड का उपयोग नहीं कर रहे हैं, लेकिन यह भी डेटा मॉडल / siebel परियोजनाओं आदि ... या तो पर भरोसा करें गैर तुच्छ विलय, तुच्छ स्वचालित और तुच्छ मैनुअल विलय, अंतिम श्रेणी में कठिन शामिल हैं। याद रखें कि आप अभी भी अपनी स्ट्रीम में काम कर रहे हैं।

  3. [पूरा रिबास] यदि सब ठीक है तो उन सभी परिवर्तनों की जांच करें जो आपको टीम स्ट्रीम से मिले थे: आपकी अपनी स्ट्रीम अब अप-टू-डेट है

  4. [डिलीवर] अब अपना काम टीम स्ट्रीम तक पहुँचाएँ। यदि आप न चाहते हुए भी सबकुछ वितरित कर सकते हैं तो आप भी चुन सकते हैं जैसे कि फ़ाइलों के विशिष्ट संस्करणों के साथ 1 विशिष्ट RFC या RFC / डिफॉल्ट के सेट का समाधान।

  5. [परीक्षण उद्धार] यह ठीक होना चाहिए, लेकिन जब से यह मौका मौजूद है कि इस बीच वितरित परिवर्तन में भी कोई है: आप परीक्षण कर सकते हैं कि क्या आपका काम टीम स्ट्रीम पर नवीनतम परिवर्तनों के साथ काम करता है। एक ही मर्ज संवाद के साथ मतभेद दिखा।

  6. [पूरा उद्धार] अपना उद्धार पूरा करें और आपका काम अब टीम स्ट्रीम में है।

इसे और अधिक जटिल बनाने के लिए: चूँकि अभी भी मौका है कि आपने जो काम दिया है = ठीक है लेकिन आप पहले से ही एक और संस्करण पर काम कर रहे हैं जिसे आपको डिलीवर करने के बाद हमेशा आधारभूत होना चाहिए और यह बताना चाहिए कि कौन सा आधार रेखा है जो अन्य उपयोगकर्ताओं के लिए पसंदीदा है । यह सुनिश्चित करता है कि अन्य डेवलपर्स को एक अनुशंसित एक मिलता है न कि धारा पर नवीनतम संस्करण (यदि आप उस परिदृश्य में काम कर रहे हैं)। यह एक ट्रिपल चेक भी है ताकि भले ही टीम स्ट्रीम में नवीनतम संस्करण "खराब" हों, फिर भी वे ऐसे नहीं हैं, जो दूसरों को रिबास करते हैं या देखते हैं और आपका कॉन्फ़िगरेशन मैनेजर पिछले संस्करण को पूर्ववत करने के लिए पूर्ववत करने के लिए विलय कर सकता है आपका वितरण

  • हिस्टीमनेस से उत्तर 2 बार होता है: चरण 2 और 6 में
  • चेक-इन डांस पर ऑडेड से जवाब: आइडीएम, लेकिन चेक पर चेक / इन पर डिलीवर और रिबेस की एक अतिरिक्त परत सुनिश्चित करें कि आप अलग-थलग काम करते हैं और त्रुटियों को आसानी से बाद के चरणों में भी आसानी से बाहर निकाला जा सकता है
  • उत्तर से दोषी guildsbounty: नवीनतम प्राप्त करें चरण 2 है। निर्माण के लिए: यह वास्तव में निर्भर करता है यदि आप एक निर्माण करते हैं ... मेरी दुनिया में आपके पास डेटा मॉडल, शब्द दस्तावेज़, आवश्यकता पत्रक, सूचनात्मक से डेटा कॉन्फ़िगर, siebel से इनपुट हैं आदि .., और हाँ जावा कोड, .नेट कोड आदि ... कि सभी को एक साथ मिलाना चाहिए। इसलिए यहाँ वास्तव में "एक बिल्ड" नहीं है, लेकिन अधिक एकीकरण इस बात पर निर्भर करता है कि यदि आपके "कोड" से एकल निर्माण बाकी सभी सामानों के साथ एकीकृत होता है, क्योंकि आप सुनिश्चित नहीं कर सकते हैं कि यह एकीकरण सामान है और इसके आधार पर उनके परीक्षण वातावरण को संकलित किया जा सकता है सामान की आवश्यकता होती है या उच्चतर प्रसवों में एक और निर्माण होता है क्योंकि इसे किसी अन्य टीम से कुछ की आवश्यकता होती है।
  • टिप्पणी करने और आवश्यक होने पर गिल्डबौंटी से जवाब: मुझे लगता है कि प्रत्येक वातावरण जिसमें आपके पास परिवर्तन सेट (और प्रकार: दोष, आरएफसी, हॉटफी) में परिवर्तन और परिवर्तन का एकीकरण नहीं है परिपक्व नहीं है। मुझे लगता है कि इसकी अराजकता अगर आप उदाहरण के लिए जारी किए गए बग्स और rfcs की मात्रा के साथ जारी किए गए नोटों को स्वचालित नहीं कर सकते हैं, जो कि छुआ जाने वाले सटीक संस्करणों के माध्यम से क्लिक करने योग्य हैं (जैसे कि संस्करण 1 और hello.c के संस्करण 3 बहुत अच्छी तरह से वितरित किए जा सकते हैं, लेकिन संस्करण 2 को डिलीवर नहीं किया जाना चाहिए क्योंकि उस सामान को बाद में जारी करने का एक हिस्सा होगा लेकिन कुछ नोब ने पहले ही इसे डाल दिया है (इसलिए इसका मतलब है कि एक मैनुअल निर्णय यदि आप भी हैलो के संस्करण 3 को बाहर निकालना चाहते हैं। c BUT संस्करण 3 को बाहर निकालने का मतलब है कि आपको उस RFC / दोष से छुआ हुआ अन्य सभी संस्करण भी निकालना होगा, ताकि आपको पूरी चीज़ को बाहर निकालने के लिए एक टूल के साथ आसानी से और तेज़ी से सक्षम होने की आवश्यकता हो) (भले ही कई डेवलपर्स ने कुछ हिस्सों पर काम किया हो) वही RFC)) लेकिन कम से कम आपको इसके बारे में फैसला करने के लिए इसके आसपास सामान की आवश्यकता है ...)। अतिरिक्त दस्तावेज़ीकरण हमेशा आसान होता है, लेकिन परिवर्तन सेटों को संबद्ध करने से आपको पूर्ण सर्कल मिलता है: एक संस्करण <- एक परिवर्तन सेट <- कार्य आइटम <- एक टिकट / आरएफसी / दोष <- एक आवश्यकता। अर्थ: आप जानते हैं कि कौन सी आवश्यकताएं पूरी तरह से या पूरी तरह से वितरित की गई हैं: एक आवश्यकता में कई आरएफसी या कीड़े या जो भी हो। RFC में कई व्यक्तियों के लिए कई कार्य आइटम हैं। वह कार्य आइटम एक परिवर्तन सेट से मेल खाता है जो संस्करणों के एक सेट से मौजूद है (जैसे कि संस्करण 1 और एकीकरण की धारा पर hello.c का संस्करण जो कि कोड 1 के नहीं हैं;
  • luis.espinal की टिप्पणी: निर्माण को न तोड़ें, रिबास में डबल चेक किया गया है और अभी भी डिलीवर किया गया है ... 'रिलीज़ मैनेजर और बिल्डरों के लिए उच्च वितरण हैं' "कभी भी मुख्य शाखा पर सीधे काम न करें" हां, धारा संरचना बड़ी या सरल हो सकती है लेकिन संक्षेप में: डेवलपर्स की अपनी स्ट्रीम है, वे एक टीम स्ट्रीम को वितरित करते हैं जो एक रिलीज स्ट्रीम को वितरित करते हैं। -> ताकि सभी टीमों (जैसे प्रलेखन टीम, आवश्यकताओं टीम, विकास टीमों,) से प्रसव

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


2

निम्नलिखित में से कुछ आपके SCM के आधार पर दूसरों (या विभिन्न रूपों में) से अधिक लागू होते हैं, इसलिए यहां वे जाते हैं:

  1. निर्माण को न तोड़ें - केवल उस कोड की जांच करें जो संकलन करता है।
  2. अपने चेक इन पर टिप्पणी करें (और संभवतः आपका चेक आउट यदि आपका SCM आपको वह विकल्प देता है।)
  3. सामान को लंबे समय तक अनियंत्रित न रखें।
  4. अक्सर जाँच करें (यदि संभव हो तो दिन में कई बार।)
  5. सार्थक लेबल।
  6. नियमित रूप से लेबल लगाएं।
  7. कभी भी मुख्य शाखा पर सीधे काम न करें।
  8. उत्पादन के लिए प्रत्येक रिलीज़ का अपना लेबल होना चाहिए (और यदि संभव हो तो मुख्य शाखा से केवल पढ़ने के लिए शाखा)। जब संभव हो यूएटी / एकीकरण / पूर्व-उत्पादन परीक्षण रिलीज के लिए भी ऐसा ही करें।
  9. आपको अपने SCM में और एक लेबल से क्या उत्पादन करना है, इसका ठीक-ठीक निर्माण करने में सक्षम होना चाहिए।

ध्यान दें : ऊपर दी गई कुछ वस्तुएं स्पष्ट प्रतीत होती हैं, लेकिन आपको विश्वास नहीं होगा कि वास्तव में कितने लोग मुख्य शाखा पर काम करते हैं या पहले उत्पादन पर बदलाव करते हैं और फिर मैन्युअल रूप से संस्करण नियंत्रण पर जाने के लिए डेल्टा बनाते हैं ... सीधे मुख्य शाखा पर। .. और लेबल के साथ। मीठे की तरह किण्वित पित्त को मैश किए हुए बगल के रस के साथ मिलाया ... हाँ, जैसे।


2

व्यक्तिगत जांच सूची हो। जब आप एक प्रविष्टि में गड़बड़ करते हैं, तो इसे खाली करें। जब यह दूसरी प्रकृति बन जाता है तो इसे सूची से हटा दें।

परीक्षण चलाएं। यदि वे इसे पास कर लेते हैं। यदि आप गड़बड़ी करते हैं और कोई चीज परीक्षण से बाहर हो जाती है, तो एक परीक्षण लिखें।


1

हम निम्नलिखित करते हैं ...

  1. परीक्षण - हम यह सुनिश्चित करना चाहते हैं कि यह काम करे। बहुत कम से कम, हम जानना चाहते हैं कि यह कुछ भी नहीं तोड़ता है।

  2. कोड की समीक्षा, या कम से कम एक दोस्त की जांच - यह सुनिश्चित करने का एक शानदार तरीका है कि ज्ञान चारों ओर फैल जाता है और लोगों को अद्यतित रखा जाता है। यह चीजों को जांचने से पहले बग को पकड़ने में भी मदद करता है।

  3. अग्रिम सूचना भेजें - चेकइन से पहले एक अग्रिम सूचना समूह को भेजी जाती है। उद्देश्य केवल दूसरों को यह बताना नहीं है कि कौन सी फाइलें या क्षेत्र बदल रहे हैं, लेकिन यह उन्हें एक सिर देता है (उन्हें नोटिस लेना चाहिए) यदि उन परिवर्तनों को प्रभावित करने की उम्मीद है।

  4. अग्रिम सूचना भेजने के कुछ घंटे बाद, चेक में प्रदर्शन किया जाता है, और समूह को ईमेल के माध्यम से सूचित किया जाता है। समूह में हर कोई यह जान सकता है कि बग या फीचर पर विशेष कार्य कब किया गया है।

  5. चेकइन नोटिस की एक कॉपी बग या फीचर से जुड़े फिक्स रिकॉर्ड में चिपका दी जाती है। अभिलेखों के माध्यम से खोज करने पर, हम पाते हैं कि यह पता लगाना बहुत आसान है कि कौन-सी फ़िक्स / फ़ीचर में प्रवेश किया गया है।


1

अपनी इकाई परीक्षण चलाएं जिस पर आप बहुत लगन से काम कर रहे हैं। हरा अच्छा है।


1

सुनिश्चित करें कि आपका कोड ठीक से स्वरूपित है (उदाहरण के लिए जावा: अपना कोड चुनें और एक्लिप्स में Ctrl-Shift-F दबाएं)। लेकिन एक पूरे दस्तावेज के लिए भी ऐसा ही करें।


1

हमेशा, हमेशा, हमेशा , जांचें कि आपने जो भी बदलाव किए हैं वे बिल्ड को नहीं तोड़ते हैं। विशेष रूप से मामूली बदलाव जो तुच्छ लग सकते हैं।

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


1

अपने परिवर्तनों के कुछ अंश देखें जो स्टैंडअलोन इकाइयों के रूप में जा सकते हैं।

अक्सर, जब तक मेरे पास कोड के लिए एक काम फिक्स या एन्हांसमेंट होता है, तब तक काफी कुछ बदलाव होते हैं। उनमें से कुछ मेरे द्वारा किए जा रहे व्यवहार परिवर्तन के लिए विशिष्ट हैं; अन्य वे रिफ्लेक्टर हैं जो मैंने उस परिवर्तन क्लीनर को बनाने के लिए किए।

मैं प्रत्येक रिफ्लेक्टरिंग को अलग से जांचना पसंद करता हूं, अपने स्वयं के परिवर्तन विवरण के साथ, इस तरह:

संदर्भ: X से Y तक का नाम बदलें

एक्स पहले समझ में आया क्योंकि ... लेकिन अब यह वाई होना चाहिए। यह अंक # 9 के लिए काम से संबंधित है।

फिर, एक बार प्रत्येक अच्छे रीफैक्टरिंग की जाँच हो जाने के बाद, अंतिम व्यवहार परिवर्तन अक्सर तुच्छ हो जाता है।

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

बाद में, जब कोई परिवर्तन इतिहास के माध्यम से पढ़ रहा है, तो यह स्पष्ट है कि चीजों को वर्तमान स्थिति में कैसे मिला, और वे इस तरह क्यों हैं। यह मेरे व्यवहार परिवर्तन को पूर्ववत करने के लिए भी तुच्छ है क्योंकि यह अन्य संपादन के टन के साथ उलझ नहीं है।


0

वह करें जो आप किसी से उधार लेकर लौटते समय करते हैं। सुनिश्चित करें कि यह साफ और अच्छे आकार में है। यदि आपने गड़बड़ी की है, तो उसके मालिक को कोड वापस करने से पहले साफ करना सुनिश्चित करें (ज्यादातर मामलों में, आपके नियोक्ता)।


सार्वजनिक रूप से करने से पहले आपकी गंदगी को साफ करने में git आपकी मदद करता है। दुर्भाग्य से, केंद्रीकृत वीसीएस नहीं करते हैं।
एलेक्स बुडोव्स्की

0

मैं अपने काम के लिए एक स्थानीय एचजी रेपो रखता हूं।

  • जब भी मैं किसी चीज की जांच करता हूं, तो मैं अंतर देखता हूं और सुनिश्चित करता हूं कि सभी परिवर्तन स्वीकार्य हैं।
  • मैं चेकइन की मुख्य विशेषता को नोट करने की कोशिश करता हूं।
  • मैं प्रत्येक मुख्य आकार को एक प्रमुख विशेषता रखने की कोशिश करता हूं।

मेरा दावा है कि ये सबसे अच्छे हैं, लेकिन वे मेरे लिए काम करते हैं।


0

जब मैं कोड लिखता हूं जो मुझे पता है कि इसमें चेक करने का मतलब नहीं है, तो मैं इसे "// TEMP:" और उसके बाद "// END TEMP" के साथ एक पंक्ति जोड़ता हूं। यह, जाँच करने से पहले अलग-अलग करने के साथ, यह वादा करता है कि मैं उस कोड को गलती से नहीं जाँचूँगा।


0

आपने जो कुछ भी जोड़ा या बदला है, उसे पूरी तरह से परखें। हर संभव कोशिश करें जो आप कोशिश कर सकते हैं। क्यूए के लिए परीक्षण मत छोड़ो। यदि मेरे पास हर बार सैंडविच होता है तो मैंने कुछ मामूली बदलाव किए हैं, और फिर कुछ परीक्षण मामलों को सिर्फ सुरक्षित पक्ष पर करने की कोशिश की, और तुरंत समस्याओं को देखा, मेरे पास बहुत सारे सैंडविच होंगे। मैं आमतौर पर खुद को जोर से कहता हूं "मुझे वास्तव में खुशी है कि मैंने कोशिश की ..."

आप कहते हैं कि आपके परिवर्तन के बाद UI अजीब हो गया। यदि आप केवल प्रोग्राम चलाते हैं और चेक इन करने से पहले UI को देखते हैं, तो क्या आपने समस्या पर ध्यान दिया होगा?

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