प्रस्तावना
यह वास्तव में एक कठिन काम है, और इसमें बहुत कुछ शामिल है। इसलिए मैं विनम्रतापूर्वक उचित उपकरण और शैक्षिक सामग्री के लिए संकेत के साथ आपकी टीम के लिए कुछ व्यापक मार्गदर्शक के रूप में यह सुझाव दे रहा हूं।
याद रखें: ये दिशानिर्देश हैं , और जैसे कि परिस्थितियों के आधार पर अपनाए जाते हैं, अनुकूलित किए जाते हैं, या गिराए जाते हैं।
खबरदार: एक बार में एक टीम पर यह सब डंप करना सबसे अधिक संभावना है। आपको उन तत्वों को चुनने की कोशिश करनी चाहिए जो आपको सबसे अच्छा धमाकेदार पसीना देंगे, और उन्हें धीरे-धीरे पेश करेंगे, एक बार में।
नोट: यह सब सीधे G2 जैसे विज़ुअल प्रोग्रामिंग सिस्टम पर लागू नहीं होता है। इनसे कैसे निपटा जाए, इस बारे में अधिक जानकारी के लिए, अंत में परिशिष्ट अनुभाग देखें ।
अधीर के लिए कार्यकारी सारांश
- एक कठोर परियोजना संरचना को परिभाषित करें :
- प्रोजेक्ट टेम्प्लेट ,
- कोडिंग कन्वेंशन ,
- परिचित बिल्ड सिस्टम ,
- और आपके बुनियादी ढांचे और उपकरणों के लिए उपयोग दिशानिर्देशों के सेट ।
- एक अच्छा SCM स्थापित करें और सुनिश्चित करें कि वे जानते हैं कि इसका उपयोग कैसे करना है।
- उन्हें अपनी तकनीक के लिए अच्छे IDE की ओर इंगित करें , और सुनिश्चित करें कि वे जानते हैं कि उनका उपयोग कैसे करना है।
- लागू कोड गुणवत्ता चेकर्स और स्वत: रिपोर्टिंग निर्माण प्रणाली में।
- निर्माण प्रणाली को निरंतर एकीकरण और निरंतर निरीक्षण प्रणालियों से जोड़े ।
- उपरोक्त की मदद से, कोड गुणवत्ता "हॉटस्पॉट्स" और रिफैक्टर की पहचान करें ।
अब लंबे संस्करण के लिए ... सावधानी, अपने आप को संभालो!
कठोरता (अक्सर) अच्छा है
यह एक विवादास्पद राय है, क्योंकि कठोरता को अक्सर आपके खिलाफ काम करने वाले बल के रूप में देखा जाता है। यह कुछ परियोजनाओं के कुछ चरणों के लिए सच है। लेकिन एक बार जब आप इसे एक संरचनात्मक समर्थन के रूप में देखते हैं, तो एक रूपरेखा जो अनुमान को दूर ले जाती है, यह बर्बाद समय और प्रयास की मात्रा को बहुत कम कर देती है। इसे आपके लिए काम करें, आपके खिलाफ नहीं।
रिगिडिटी = प्रक्रिया / प्रक्रिया ।
सॉफ़्टवेयर विकास को ठीक उसी प्रक्रिया और प्रक्रियाओं की आवश्यकता होती है, जिसके लिए रासायनिक कारणों या कारखानों में मैनुअल, प्रक्रियाएं, अभ्यास और आपातकालीन दिशानिर्देश हैं: खराब परिणामों को रोकना, भविष्यवाणी बढ़ाना, उत्पादकता को अधिकतम करना ...
हालांकि, मॉडरेशन में कठोरता आती है!
परियोजना संरचना की कठोरता
यदि प्रत्येक परियोजना अपने स्वयं के ढांचे के साथ आती है, तो आप (और नवागंतुक) खो जाते हैं और हर बार जब आप उन्हें खोलते हैं तो खरोंच से उठाने की आवश्यकता होती है। आप एक पेशेवर सॉफ्टवेयर की दुकान में यह नहीं चाहते हैं, और आप इसे एक प्रयोगशाला में भी नहीं चाहते हैं।
बिल्ड सिस्टम की कठोरता
यदि प्रत्येक प्रोजेक्ट अलग दिखता है , तो एक अच्छा मौका है कि वे भी
अलग तरीके से निर्माण करें । एक निर्माण के लिए बहुत अधिक शोध या बहुत अधिक अनुमान की आवश्यकता नहीं होनी चाहिए। : आप विहित बात करने के लिए और विशेष के बारे में चिंता करने की जरूरत नहीं सक्षम होना चाहते हैं configure; make install
, ant
,
mvn install
आदि, ...
उसी बिल्ड सिस्टम का फिर से उपयोग करना और समय के साथ इसे विकसित करना भी गुणवत्ता के सुसंगत स्तर को सुनिश्चित करता है।
आपको README
परियोजना की बारीकियों को इंगित करने के लिए त्वरित रूप से आवश्यकता है , और यदि कोई हो, तो उपयोगकर्ता / डेवलपर / शोधकर्ता का मार्गदर्शन करें।
यह आपके बिल्ड इंफ्रास्ट्रक्चर के अन्य भागों को भी बहुत सुगम बनाता है, अर्थात्:
इसलिए अपने बिल्ड (अपनी परियोजनाओं की तरह) को अद्यतित रखें, लेकिन समय के साथ इसे कठोर बना दें, और उल्लंघन और बुरे व्यवहारों की रिपोर्टिंग में अधिक कुशल हों।
पहिया को सुदृढ़ न करें, और जो आपने पहले ही किया है उसका पुन: उपयोग करें।
अनुशंसित पाठ:
प्रोग्रामिंग भाषाओं की पसंद में कठोरता
आप उम्मीद नहीं कर सकते हैं, विशेष रूप से एक अनुसंधान वातावरण में, सभी टीमों (और यहां तक कि सभी डेवलपर्स) एक ही भाषा और प्रौद्योगिकी स्टैक का उपयोग करने के लिए। हालांकि, आप "आधिकारिक तौर पर समर्थित" टूल के एक सेट की पहचान कर सकते हैं, और उनके उपयोग को प्रोत्साहित कर सकते हैं। बाकी, एक अच्छा तर्क के बिना, अनुमति नहीं दी जानी चाहिए (प्रोटोटाइप से परे)।
एक मजबूत कोर करने के लिए अपने तकनीकी स्टैक को सरल रखें, और आवश्यक कौशल के रखरखाव और चौड़ाई: एक मजबूत कोर।
कोडिंग कन्वेंशनों और दिशानिर्देशों की कठोरता
कोडिंग कन्वेंशन और दिशानिर्देश वे हैं जो आपको एक टीम और एक साझा लिंगो के रूप में एक पहचान विकसित करने की अनुमति देते हैं । जब भी आप कोई स्रोत फ़ाइल खोलते हैं, तो आप हर बार टेर्रा इन्कोग्निटा में शामिल नहीं होना चाहते हैं ।
निरर्थक नियम जो जीवन को कठिन बनाते हैं या कार्रवाई को उस हद तक निषिद्ध करते हैं, जो एकल सरल उल्लंघनों के आधार पर मना कर दिया जाता है, एक बोझ है। हालाँकि:
व्यक्तिगत दृष्टिकोण: जब मैं सम्मेलनों की कोडिंग करने के लिए आक्रामक होता हूं, तो कुछ लोग नाजी भी कहते हैं , क्योंकि मैं अपनी टीम के लिए एक पहचान योग्य भाषा , लिंगुआ फ्रेंका होने में विश्वास करता
हूं। जब बकवास कोड चेक-इन हो जाता है, तो यह हॉलीवुड स्टार के चेहरे पर एक ठंडी खराश की तरह खड़ा होता है: यह एक समीक्षा और स्वचालित रूप से एक क्रिया को ट्रिगर करता है। वास्तव में, मैंने कभी-कभी गैर-अनुरूपता वाले प्रतिबद्धताओं को अस्वीकार करने के लिए पूर्व-प्रतिबद्ध हुक के उपयोग की वकालत की है। जैसा कि उल्लेख किया गया है, यह अत्यधिक पागल नहीं होना चाहिए और उत्पादकता के रास्ते में होना चाहिए: इसे ड्राइव करना चाहिए। इनका धीरे-धीरे परिचय करें, खासकर शुरुआत में। लेकिन दोषपूर्ण कोड को ठीक करने में इतना समय लगाना बेहतर होता है कि आप वास्तविक मुद्दों पर काम नहीं कर सकते।
कुछ भाषाएं इसे डिजाइन द्वारा लागू करती हैं:
- जावा सुस्त बकवास की मात्रा को कम करने के लिए था जिसे आप इसके साथ लिख सकते हैं (हालांकि इसमें कोई संदेह नहीं है कि इसे करने के लिए कई प्रबंधन हैं)।
इंडेंटेशन द्वारा पायथन की ब्लॉक संरचना इस अर्थ में एक और विचार है।
जाओ, इसके gofmt
उपकरण के साथ , जो पूरी तरह से किसी भी बहस और प्रयास ( और अहंकार !! ) को दूर ले जाता है : शैली के लिए निहित: gofmt
इससे पहले कि आप प्रतिबद्ध हों।
सुनिश्चित करें कि कोड रोट के माध्यम से पर्ची नहीं कर सकते। कोड सम्मेलनों , निरंतर एकीकरण और निरंतर निरीक्षण , जोड़ी प्रोग्रामिंग और कोड समीक्षा इस दानव के खिलाफ आपके शस्त्रागार हैं।
इसके अलावा, जैसा कि आप नीचे देखेंगे, कोड प्रलेखन है , और यह एक अन्य क्षेत्र है जहां सम्मेलनों पठनीयता और स्पष्टता को प्रोत्साहित करते हैं।
प्रलेखन की कठोरता
प्रलेखन कोड के साथ हाथ में हाथ जाता है। कोड ही प्रलेखन है। लेकिन चीजों को बनाने, उपयोग करने और बनाए रखने के बारे में स्पष्ट-कट निर्देश होना चाहिए।
प्रलेखन के लिए नियंत्रण के एक बिंदु का उपयोग करना (जैसे विकीविकि या डीएमएस) एक अच्छी बात है। परियोजनाओं के लिए रिक्त स्थान बनाएं, अधिक यादृच्छिक प्रतिबंध और प्रयोग के लिए रिक्त स्थान। सभी रिक्त स्थान सामान्य नियमों और सम्मेलनों का पुन: उपयोग करें। इसे टीम भावना का हिस्सा बनाने की कोशिश करें।
कोड और टूलिंग पर लागू होने वाली अधिकांश सलाह प्रलेखन पर भी लागू होती है।
संहिता की टिप्पणियों में कठोरता
कोड टिप्पणी, जैसा कि ऊपर उल्लेख किया गया है, दस्तावेज भी हैं। डेवलपर्स अपने कोड के बारे में अपनी भावनाओं को व्यक्त करना पसंद करते हैं (ज्यादातर गर्व और निराशा, अगर आप मुझसे पूछते हैं)। इसलिए उन्हें टिप्पणियों (या यहां तक कि कोड) में बिना किसी अनिश्चित शब्दों के व्यक्त करने के लिए यह असामान्य नहीं है, जब पाठ का एक अधिक औपचारिक टुकड़ा कम एक्सपेलेटिव या नाटक के साथ एक ही अर्थ व्यक्त कर सकता था। मज़ेदार और ऐतिहासिक कारणों से कुछ पर्ची देना ठीक है: यह टीम संस्कृति विकसित करने का भी हिस्सा है । लेकिन यह बहुत महत्वपूर्ण है कि हर कोई जानता है कि क्या स्वीकार्य है और क्या नहीं है, और यह टिप्पणी शोर सिर्फ इतना है:
शोर ।
प्रतिबद्ध लॉग में कठोरता
प्रतिबद्ध लॉग आपके SCM के जीवन चक्र का एक कष्टप्रद और बेकार "चरण" नहीं है: आप इसे समय पर घर पाने के लिए या अगले कार्य के साथ, या दोपहर के भोजन पर जाने वाले दोस्तों के साथ पकड़ने के लिए इसे छोड़ नहीं करते हैं। वे मायने रखते हैं, और, (अधिकांश) अच्छी शराब की तरह, जितना अधिक समय वह उतना मूल्यवान बन जाता है। इसलिए उन्हें सही करें। जब मैं सहकर्मियों को विशालकाय कमिट्स के लिए, या गैर-स्पष्ट हैक के लिए एक-लाइनर लिखते देखता हूं तो मैं भड़क जाता हूं।
कारण एक कारण के लिए किए जाते हैं, और वह कारण ISN'T हमेशा आपके कोड और आपके द्वारा दर्ज किए गए कमिट लॉग की एक पंक्ति द्वारा स्पष्ट रूप से व्यक्त किया जाता है। इसके अलावा और भी बहुत कुछ है।
कोड की प्रत्येक पंक्ति में एक कहानी और एक इतिहास होता है । डिफरेंस इसका इतिहास बता सकते हैं, लेकिन आपको इसकी कहानी लिखनी होगी।
मैंने इस लाइन को अपडेट क्यों किया? -> क्योंकि इंटरफ़ेस बदल गया।
इंटरफ़ेस क्यों बदला? -> क्योंकि पुस्तकालय L1 परिभाषित यह अद्यतन किया गया था।
लाइब्रेरी को अपडेट क्यों किया गया? -> क्योंकि पुस्तकालय L2, कि हमें F की सुविधा के लिए, पुस्तकालय L1 पर निर्भर होना चाहिए।
और फीचर X क्या है? -> समस्या ट्रैकर में कार्य 3456 देखें।
यह मेरी SCM पसंद नहीं है, और यह आपकी प्रयोगशाला के लिए सबसे अच्छा नहीं हो सकता है; लेकिन Git
यह अधिकार प्राप्त करता है, और आपको उपयोग करके short logs
और
, अन्य SCMs सिस्टम की तुलना में अधिक अच्छे लॉग लिखने के लिए मजबूर करने की कोशिश करता है long logs
। कार्य आईडी लिंक करें (हाँ, आपको एक की आवश्यकता है) और इसके लिए एक सामान्य सारांश छोड़ें shortlog
, और लंबे लॉग में विस्तार करें: परिवर्तन की कहानी लिखें ।
यह एक लॉग है: यह ट्रैक और रिकॉर्ड अपडेट रखने के लिए यहां है।
अंगूठे का नियम: यदि आप बाद में इस बदलाव के बारे में कुछ खोज रहे थे, तो क्या आपका लॉग आपके प्रश्न का उत्तर देने की संभावना है?
प्रोजेक्ट्स, डॉक्यूमेंटेशन और कोड अलाइव हैं
उन्हें सिंक में रखें, अन्यथा वे उस सहजीवी इकाई का निर्माण नहीं करते हैं। जब आपके पास यह अद्भुत काम करता है:
- आपके SCM, w / लिंक को आपके इश्यू ट्रैकर में कार्य आईडी के लिए स्पष्ट रूप से लॉग इन करता है,
- जहाँ इस ट्रैकर के टिकट आपके SCM (और संभवतः आपके CI सिस्टम में निर्मित होने वाले बदलावों) से लिंक होते हैं,
- और एक प्रलेखन प्रणाली जो इन सभी से जुड़ती है।
कोड और प्रलेखन को एकजुट होने की आवश्यकता है ।
परीक्षण में कठोरता
अंगूठे का नियम:
- कोई भी नया कोड (कम से कम) यूनिट परीक्षणों के साथ आएगा।
- कोई भी परिलक्षित विरासत कोड इकाई परीक्षणों के साथ आएगा।
बेशक, इन की जरूरत है:
- वास्तव में कुछ मूल्यवान परीक्षण करने के लिए (या वे समय और ऊर्जा की बर्बादी हैं),
- अच्छी तरह से लिखा और टिप्पणी की जा सकती है (ठीक उसी तरह जैसे कोई अन्य कोड आप चेक करते हैं)।
वे दस्तावेज भी हैं, और वे आपके कोड के अनुबंध को रेखांकित करने में मदद करते हैं। खासकर यदि आप टीडीडी का उपयोग करते हैं । यहां तक कि अगर तुम नहीं, तुम उन्हें अपने मन की शांति के लिए की जरूरत है। जब आप नए कोड (रखरखाव या सुविधा) और अपने वॉचटावर को कोड रोट और पर्यावरण विफलताओं से बचाने के लिए शामिल करते हैं, तो वे आपकी सुरक्षा जाल होते हैं।
बेशक, आपको आगे जाना चाहिए और आपके द्वारा ठीक किए गए प्रत्येक प्रतिलिपि प्रस्तुत करने योग्य बग के लिए एकीकरण परीक्षण और
प्रतिगमन परीक्षण होना चाहिए ।
उपकरण के उपयोग में कठोरता
सामयिक डेवलपर / वैज्ञानिक के लिए यह ठीक है कि वे स्रोत पर कुछ नए स्थिर चेकर को आज़माना चाहते हैं, दूसरे का उपयोग करके एक ग्राफ़ या मॉडल उत्पन्न करते हैं, या एक डीएसएल का उपयोग करके एक नया मॉड्यूल लागू करते हैं। लेकिन यह सबसे अच्छा है अगर उपकरण का एक कैनोनिकल सेट है जो सभी टीम के सदस्यों को जानने और उपयोग करने की उम्मीद है।
इससे परे, सदस्यों को वे जो चाहते हैं, उसका उपयोग करने दें, जब तक वे सभी हैं:
- उत्पादक ,
- नियमित रूप से सहायता की आवश्यकता नहीं है
- नियमित रूप से अपने सामान्य बुनियादी ढांचे के लिए समायोजन नहीं ,
- अपने बुनियादी ढांचे को बाधित नहीं करना (कोड, बिल्ड सिस्टम, प्रलेखन ... जैसे सामान्य क्षेत्रों को संशोधित करके),
- दूसरों के काम को प्रभावित नहीं करना ,
- ABLE अनुरोधित किसी भी कार्य को समय पर करने के लिए ।
अगर ऐसा नहीं है, तो लागू करें कि वे चूक के लिए वापस आते हैं।
कठोरता बनाम बहुमुखी प्रतिभा, अनुकूलनशीलता, प्रोटोटाइप और आपात स्थिति
लचीलापन अच्छा हो सकता है। किसी को कभी-कभी एक हैक, एक त्वरित-एन-गंदा दृष्टिकोण, या पसंदीदा पालतू उपकरण का उपयोग करने दें ताकि काम
ठीक हो सके। कभी भी इसे एक आदत न बनने दें, और कभी भी इस कोड को समर्थन करने के लिए वास्तविक कोडबेस न बनने दें।
टीम स्पिरिट मैटर्स
अपने कोडबेस में सेंस ऑफ प्राइड विकसित करें
- कोड में गर्व की भावना का विकास करना
- चारदीवारी का उपयोग करें
- एक निरंतर एकीकरण खेल के लिए लीडर बोर्ड
- अंक प्रबंधन और दोष की गिनती के लिए वॉलबोर्ड
- किसी समस्या ट्रैकर / बग ट्रैकर का उपयोग करें
ब्लेम गेम्स से बचें
- सतत एकीकरण / सतत निरीक्षण खेलों का उपयोग करें: यह अच्छी-मानवयुक्त और उत्पादक प्रतियोगिता को बढ़ावा देता है ।
- ट्रैक दोष रखें: यह सिर्फ अच्छा घर रखने है।
- मूल कारणों की पहचान करना : यह भविष्य में होने वाली प्रक्रिया है।
- लेकिन दोष न दें : यह काउंटर उत्पादक है।
यह कोड के बारे में है, डेवलपर्स के बारे में नहीं
डेवलपर्स को अपने कोड की गुणवत्ता के बारे में सचेत करें, लेकिन उन्हें कोड को एक अलग इकाई के रूप में देखना चाहिए और स्वयं का विस्तार नहीं करना चाहिए, जिसकी आलोचना नहीं की जा सकती है।
यह एक विरोधाभास है: आपको स्वस्थ कार्यस्थल के लिए अहंकार कम प्रोग्रामिंग को प्रोत्साहित करने की जरूरत है लेकिन प्रेरक उद्देश्यों के लिए अहंकार पर भरोसा करना चाहिए।
साइंटिस्ट से लेकर प्रोग्रामर तक
जो लोग मूल्य नहीं लेते हैं और कोड पर गर्व करते हैं वे अच्छे कोड का उत्पादन नहीं करते हैं। इस संपत्ति के उभरने के लिए, उन्हें यह पता लगाना होगा कि यह कितना मूल्यवान और मजेदार हो सकता है। सरासर व्यावसायिकता और अच्छा करने की इच्छा पर्याप्त नहीं है: इसके लिए जुनून की जरूरत है। इसलिए आपको अपने वैज्ञानिकों को प्रोग्रामर (बड़े अर्थों में) में बदलने की जरूरत है
।
किसी ने टिप्पणियों में तर्क दिया कि एक परियोजना और उसके कोड पर 10 से 20 साल बाद, किसी को भी लगाव महसूस होगा। शायद मैं गलत हूं, लेकिन मुझे लगता है कि उन्हें कोड के परिणामों और काम और उसकी विरासत पर गर्व है, न कि खुद कोड या इसे लिखने के कार्य के बारे में।
अनुभव से, अधिकांश शोधकर्ता कोडिंग को एक आवश्यकता के रूप में मानते हैं, या एक मजेदार व्याकुलता के रूप में। वे चाहते हैं कि यह काम करे। जो पहले से ही इसमें पारंगत हैं और जिन्हें प्रोग्रामिंग में रुचि है, वे सर्वोत्तम प्रथाओं को अपनाने और प्रौद्योगिकियों को बदलने के लिए राजी करना बहुत आसान है। आपको उन्हें वहां आधे रास्ते पर लाने की जरूरत है।
कोड रखरखाव अनुसंधान कार्य का हिस्सा है
कोई भी गंदे शोध पत्र नहीं पढ़ता है। यही कारण है कि वे सहकर्मी-समीक्षा, प्रमाण-पठन, परिष्कृत, पुन: लिखित, और स्वीकृत समय और फिर से प्रकाशित होने के लिए तैयार होने तक के समय को स्वीकार करते हैं। वही एक थीसिस और एक कोडबेस पर लागू होता है !
यह स्पष्ट करें कि एक कोडबेस का लगातार रीफैक्टरिंग और रिफ्रेशिंग कोड रोट को रोकता है और तकनीकी ऋण को कम करता है, और भविष्य के पुन: उपयोग और अन्य परियोजनाओं के लिए कार्य के अनुकूलन की सुविधा प्रदान करता है।
यह सब क्यों??!
हम उपरोक्त सभी से क्यों परेशान हैं? के लिए कोड गुणवत्ता । या यह
गुणवत्ता कोड है ...?
इन दिशानिर्देशों का लक्ष्य आपकी टीम को इस लक्ष्य की ओर ले जाना है। कुछ पहलू बस उन्हें रास्ता दिखाते हैं और उन्हें ऐसा करने देते हैं (जो कि बहुत बेहतर है) और अन्य उन्हें हाथ से लेते हैं (लेकिन यही आप लोगों को शिक्षित करते हैं और आदतों का विकास करते हैं)।
जब लक्ष्य पहुंच के भीतर हो तो आप कैसे जानते हैं?
गुणवत्ता मापने योग्य है
हमेशा मात्रात्मक रूप से नहीं, लेकिन यह औसत दर्जे का है । जैसा कि उल्लेख किया गया है, आपको अपनी टीम में गर्व की भावना विकसित करने की आवश्यकता है, और प्रगति और अच्छे परिणाम दिखाना महत्वपूर्ण है। नियमित रूप से कोड की गुणवत्ता को मापें और अंतराल के बीच प्रगति दिखाएं, और यह कैसे मायने रखता है। क्या किया गया है, और यह कैसे चीजों को बेहतर या बदतर बनाया गया है, इस पर प्रतिबिंबित करने के लिए पूर्वव्यापी करें।
निरंतर निरीक्षण के लिए महान उपकरण हैं । सोनार जावा दुनिया में एक लोकप्रिय एक है, लेकिन यह किसी भी प्रौद्योगिकियों के लिए अनुकूल हो सकता है; और कई अन्य हैं। अपने कोड को माइक्रोस्कोप के नीचे रखें और इन pesky कष्टप्रद कीड़े और रोगाणुओं की तलाश करें।
लेकिन क्या होगा अगर मेरा कोड पहले से ही बकवास है?
उपरोक्त सभी मजेदार और क्यूट हैं, नेवर लैंड की यात्रा की तरह, लेकिन यह आसान नहीं है जब आपके पास पहले से ही (स्टीमी और बदबूदार का ढेर) बकवास कोड हो, और एक टीम बदलने के लिए अनिच्छुक हो।
यहां रहस्य है: आपको कहीं शुरू करने की आवश्यकता है ।
व्यक्तिगत उपाख्यान: एक परियोजना में, हमने मूल रूप से 650,000+ जावा LOC, JSPs की 200,000+ पंक्तियों, 40,000+ जावास्क्रिप्ट LOC और 400+ एमबी की द्विआधारी निर्भरता वाले एक कोडबेस के साथ काम किया।
लगभग 18 महीनों के बाद, यह 500,000 जावा LOC (MOSTLY CLEAN) , JSP की 150,000 लाइनें और 38,000 JavaScript LOC है, निर्भरता के साथ मुश्किल से 100MB (और ये हमारे SCM में अब नहीं हैं!)।
हम इसे कैसे करेंगे? हमने उपरोक्त सभी किया था। या बहुत कोशिश की।
यह एक टीम प्रयास है, लेकिन हम धीरे धीरे इंजेक्षन हमारी प्रक्रिया नियमों और उपकरणों में, हमारे उत्पाद की हृदय गति की निगरानी के लिए है, जबकि जल्दबाजी में कमी "वसा" दूर: बकवास कोड, बेकार निर्भरता ... हम करने के लिए सभी विकास नहीं रोका ऐसा करें: हमारे पास कभी-कभार सापेक्ष शांति और शांतता है जहां हम कोडबेस पर पागल होने के लिए स्वतंत्र हैं और इसे फाड़ देते हैं, लेकिन अधिकांश समय हम इसे एक "समीक्षा और रिफ्लेक्टर" मोड में डिफ़ॉल्ट रूप से करते हैं जो हमें हर मौका मिलता है। : बिल्ड के दौरान, दोपहर के भोजन के दौरान, बग फिक्सिंग स्प्रिंट के दौरान, शुक्रवार दोपहर के दौरान ...
कुछ बड़े "काम" थे ... हमारे निर्माण प्रणाली को 8500+ XML LOC के विशालकाय एंट बिल्ड से एक मल्टी-मॉड्यूल मावेन बिल्ड में बदलना उनमें से एक था। हमने तब:
- स्पष्ट-कट मॉड्यूल (या कम से कम यह पहले से ही बहुत बेहतर था, और हमारे पास अभी भी भविष्य के लिए बड़ी योजनाएं हैं),
- स्वचालित निर्भरता प्रबंधन (आसान रखरखाव और अपडेट के लिए, और बेकार डिपों को हटाने के लिए),
- तेजी से, आसान और प्रतिलिपि प्रस्तुत करने योग्य बनाता है,
- गुणवत्ता पर दैनिक रिपोर्ट।
एक और "उपयोगिता उपकरण बेल्ट" के इंजेक्शन था, भले ही हम निर्भरता कम करने के लिए कोशिश कर रहे थे: गूगल अमरूद और अपाचे कॉमन्स अपने कोड नीचे पतला और और में कीड़े के लिए सतह को कम करने के लिए अपने कोड एक बहुत।
हमने अपने आईटी विभाग को भी मना लिया कि शायद हमारे नए टूल (JIRA, Fisheye, Crucible, Confluence, Jenkins) का उपयोग करना लोगों की तुलना में बेहतर था। हम अभी भी कुछ हम तुच्छ (QC, Sharepoint और SupportWorks ...) से निपटने की जरूरत है, लेकिन यह कुछ और कमरे के साथ छोड़ दिया गया था, एक समग्र सुधार का अनुभव था।
और हर दिन, वहाँ अब एक से दर्जनों के बीच की चाल है जो केवल फिक्सिंग और रिफैक्टिंग चीजों से निपटती है। हम कभी-कभी सामान को तोड़ते हैं (आपको यूनिट परीक्षणों की आवश्यकता होती है, और आप बेहतर तरीके से रिफ्लेक्टर से दूर होने से पहले उन्हें लिखते हैं ), लेकिन कुल मिलाकर हमारे मनोबल और उत्पाद के लिए लाभ बहुत बड़ा है। हम एक समय में एक कोड गुणवत्ता प्रतिशत का एक अंश प्राप्त करते हैं। और इसे बढ़ाते हुए देखना मजेदार है !!!
नोट: फिर से, नए और बेहतर चीजों के लिए जगह बनाने के लिए कठोरता को हिलाना होगा। मेरे उपाख्यान में, हमारा आईटी विभाग आंशिक रूप से हम पर कुछ चीजें थोपने की कोशिश में सही है, और दूसरों के लिए गलत है। या शायद वे सही हुआ करते थे । चीज़ें बदल जाती हैं। साबित करें कि वे आपकी उत्पादकता को बढ़ाने के लिए बेहतर तरीके हैं। इसके लिए ट्रायल-रन और प्रोटोटाइप यहां हैं।
सुपर-सीक्रेट इन्क्रीमेंटल स्पैगेटी कोड रिफ्लेक्टिंग साइकिल विस्मयकारी गुणवत्ता के लिए
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
एक बार जब आप अपने टूलबेल्ट में कुछ गुणवत्ता वाले उपकरण रखते हैं:
कोड गुणवत्ता चेकर्स के साथ अपने कोड का विश्लेषण करें।
लिंटर, स्टैटिक एनालिसर्स, या आपके पास क्या है।
अपने महत्वपूर्ण हॉटस्पॉट और कम लटके फलों को पहचानें ।
उल्लंघन में गंभीरता का स्तर होता है, और बड़ी संख्या में उच्च-गंभीरता वाले बड़े वर्ग एक बड़ा लाल झंडा होते हैं: जैसे, वे रेडिएटर / हीटमैप प्रकार के विचारों पर "हॉट स्पॉट" के रूप में दिखाई देते हैं।
पहले हॉटस्पॉट्स को ठीक करें ।
यह आपके प्रभाव को कम समय सीमा में अधिकतम करता है क्योंकि उनके पास उच्चतम व्यावसायिक मूल्य है। आदर्श रूप में, महत्वपूर्ण उल्लंघन दिखाई देते ही उनसे निपटना चाहिए, क्योंकि वे संभावित सुरक्षा भेद्यता या क्रैश कारण हैं, और एक देयता को प्रेरित करने का एक उच्च जोखिम पेश करते हैं (और आपके मामले में, लैब के लिए खराब प्रदर्शन)।
स्वचालित कोडबेस स्वीप के साथ निम्न स्तर के उल्लंघन को साफ करें ।
यह सिग्नल-टू-शोर अनुपात में सुधार करता है ताकि आप अपने रडार पर महत्वपूर्ण उल्लंघन देख सकें क्योंकि वे दिखाई देते हैं। अक्सर छोटी-मोटी उल्लंघनों की एक बड़ी फौज होती है, अगर उन पर कभी ध्यान नहीं दिया गया और आपका कोडबेस जंगली में ढीला छोड़ दिया गया। वे एक वास्तविक "जोखिम" पेश नहीं करते हैं, लेकिन वे कोड की पठनीयता और स्थिरता को बिगाड़ते हैं। यदि आप किसी कार्य पर काम करते समय, या संभव हो तो स्वचालित कोड झाडू के साथ बड़ी सफाई की quests द्वारा उन्हें पूरा करें। यदि आपके पास एक अच्छा टेस्ट सूट और एकीकरण प्रणाली नहीं है, तो बड़े ऑटो-स्वीप से सावधान रहें। झुंझलाहट को कम करने के लिए उन्हें चलाने के लिए सही समय पर सहकर्मियों के साथ सहमत होना सुनिश्चित करें।
जब तक आप संतुष्ट न हों तब तक दोहराएं ।
जो, आदर्श रूप से, आपको कभी भी नहीं होना चाहिए, अगर यह अभी भी एक सक्रिय उत्पाद है: यह विकसित होता रहेगा।
गुड हाउस-कीपिंग के लिए त्वरित सुझाव
जब एक ग्राहक समर्थन अनुरोध के आधार पर हॉटफ़िक्स-मोड में :
- यह आमतौर पर अन्य मुद्दों को ठीक करने के लिए नहीं जाने के लिए सबसे अच्छा अभ्यास है , क्योंकि आप अनिच्छा से नए लोगों को पेश कर सकते हैं।
- इसे देखिए शैली में: अंदर जाओ, बग को मारो, बाहर निकलो , और अपना पैच शिप करो। यह एक सर्जिकल और सामरिक हड़ताल है।
लेकिन अन्य सभी मामलों के लिए , यदि आप एक फ़ाइल खोलते हैं, तो इसे अपना कर्तव्य बनाएं:
- निश्चित रूप से: इसकी समीक्षा करें (नोट्स ले लें, रिपोर्ट जारी करें),
- हो सकता है: इसे साफ करें (स्टाइल क्लीनअप और मामूली उल्लंघन),
- आदर्श: refactor यह (बड़े वर्गों और उनके neigbors पुनर्निर्माण)।
बस फ़ाइल से फ़ाइल में एक सप्ताह बिताने और कई विशेषताओं और मॉड्यूलों में फैले हजारों सुधारों के बड़े पैमाने पर बदलाव के साथ समाप्त होने में मुश्किल नहीं है - यह भविष्य के ट्रैकिंग को मुश्किल बनाता है। कोड में एक मुद्दा = आपके ट्रैकर में एक टिकट। कभी-कभी, एक बदलाव कई टिकटों को प्रभावित कर सकता है; लेकिन अगर ऐसा बहुत बार होता है, तो आप शायद कुछ गलत कर रहे हैं।
परिशिष्ट: दृश्य प्रोग्रामिंग वातावरण का प्रबंधन
Bespoke प्रोग्रामिंग सिस्टम की दीवारों वाले गार्डन
ओपी के G2 की तरह कई प्रोग्रामिंग सिस्टम, अलग-अलग जानवर हैं ...
कोई स्रोत "कोड" नहीं
अक्सर वे आपको अपने स्रोत "कोड" के एक पाठीय प्रतिनिधित्व तक पहुंच नहीं देते हैं: यह एक मालिकाना बाइनरी प्रारूप में संग्रहीत किया जा सकता है, या शायद यह पाठ प्रारूप में चीजों को संग्रहीत करता है, लेकिन उन्हें आपसे दूर छुपाता है। Bespoke ग्राफिकल प्रोग्रामिंग सिस्टम वास्तव में अनुसंधान प्रयोगशालाओं में असामान्य नहीं हैं, क्योंकि वे दोहरावदार डेटा प्रोसेसिंग वर्कफ़्लो के स्वचालन को सरल बनाते हैं।
कोई टूलींग नहीं
अपनी तरफ से, यानी। आप अक्सर उनके प्रोग्रामिंग वातावरण, अपने स्वयं के डिबगर, अपने स्वयं के दुभाषिया, अपने स्वयं के प्रलेखन उपकरण और स्वरूपों से विवश होते हैं। वे
दीवार वाले बागान हैं , सिवाय इसके कि वे अंततः किसी के हित को पकड़ने के लिए प्रेरित करते हैं ताकि वे अपने इंजनों को उल्टा कर सकें और बाहरी उपकरणों का निर्माण कर सकें - यदि लाइसेंस इसकी अनुमति देता है।
दस्तावेज़ीकरण का अभाव
अक्सर, ये आला प्रोग्रामिंग सिस्टम हैं, जो काफी बंद वातावरण में उपयोग किए जाते हैं। जो लोग उनका उपयोग करते हैं वे अक्सर एनडीए पर हस्ताक्षर करते हैं और वे जो भी करते हैं उसके बारे में कभी नहीं बोलते हैं। उनके लिए प्रोग्रामिंग समुदाय दुर्लभ हैं। इसलिए संसाधन दुर्लभ हैं। आप अपने आधिकारिक संदर्भ के साथ फंस गए हैं, और यह बात है।
विडंबना (और अक्सर निराशाजनक) बिट यह है कि ये सभी चीजें जो इन प्रणालियों को स्पष्ट रूप से मुख्यधारा की और सामान्य प्रयोजन प्रोग्रामिंग भाषाओं का उपयोग करके प्राप्त की जा सकती हैं, और संभवतः बहुत अधिक कुशलता से। लेकिन इसके लिए प्रोग्रामिंग के गहन ज्ञान की आवश्यकता होती है, जबकि आप प्रोग्रामिंग के बारे में जानने के लिए अपने जीवविज्ञानी, रसायनज्ञ या भौतिक विज्ञानी (कुछ का नाम) से अपेक्षा नहीं कर सकते हैं, और लागू करने (और बनाए रखने) के लिए समय और इच्छा के लिए भी कम जटिल प्रणालियां, जो लंबे समय तक जीवित रह भी सकती हैं और नहीं भी। उसी कारण से हम डीएसएल का उपयोग करते हैं, हमारे पास ये बीस्पोक प्रोग्रामिंग सिस्टम हैं।
व्यक्तिगत किस्सा 2:दरअसल, मैंने इनमें से एक पर खुद काम किया। मैंने ओपी के अनुरोध के साथ लिंक नहीं किया, लेकिन मेरी परियोजना डेटा-प्रोसेसिंग और डेटा-स्टोरेज सॉफ़्टवेयर के अंतर-जुड़े बड़े टुकड़ों का एक सेट थी (मुख्य रूप से जैव-सूचना विज्ञान अनुसंधान, स्वास्थ्य देखभाल और सौंदर्य प्रसाधन के लिए, लेकिन व्यवसाय के लिए भी खुफिया, या किसी भी तरह के अनुसंधान डेटा के बड़े संस्करणों की ट्रैकिंग और डेटा-प्रोसेसिंग वर्कफ़्लोज़ और ईटीएल) की तैयारी को प्रभावित करने वाला कोई भी डोमेन)। इनमें से एक एप्लिकेशन काफी सरल था, एक विजुअल आईडीई जो सामान्य घंटियों और सीटी का उपयोग करता था: ड्रैग एंड ड्रॉप इंटरफेस, वर्जन प्रोजेक्ट वर्कस्पेस (मेटाडेटा स्टोरेज के लिए टेक्स्ट और एक्सएमएल फाइलों का उपयोग करके), विषम डेटासोर्स के लिए बहुत सारे प्लग-इन योग्य ड्राइवर और एक विजुअल N डेटा स्रोत से डेटा संसाधित करने के लिए पाइपलाइनों को डिज़ाइन करने के लिए कैनवास और अंत में M रूपांतरित आउटपुट उत्पन्न करता है, और संभव चमकदार दृश्य और जटिल (और इंटरैक्टिव) ऑनलाइन रिपोर्ट। आपका विशिष्ट bespoke विज़ुअल प्रोग्रामिंग सिस्टम, उपयोगकर्ताओं की आवश्यकताओं के अनुकूल एक प्रणाली को डिज़ाइन करने के बहाने NIH सिंड्रोम से पीड़ित है।
और, जैसा कि आप उम्मीद करेंगे, यह एक अच्छी प्रणाली है, इसकी ज़रूरतों के लिए काफी लचीला है, हालांकि कभी-कभी थोड़ा-बहुत ऊपर-ऊपर ताकि आपको आश्चर्य हो कि "इसके बजाय कमांड-लाइन टूल्स का उपयोग क्यों नहीं किया जाए?" और दुर्भाग्य से हमेशा मध्यम-आकार में अग्रणी रहता है? बड़े प्रोजेक्ट्स पर काम करने वाली टीमें बहुत से अलग-अलग लोगों के साथ अलग-अलग "बेस्ट" प्रथाओं के साथ इसका उपयोग करती हैं।
महान, हम बर्बाद हो रहे हैं! - हम इसके बारे में क्या करते हैं?
खैर, अंत में, उपरोक्त सभी अभी भी रखती है। यदि आप अधिक मुख्यधारा उपकरण और भाषाओं का उपयोग करने के लिए इस सिस्टम से अधिकांश प्रोग्रामिंग नहीं निकाल सकते हैं, तो आपको "बस" अपने सिस्टम की बाधाओं के लिए इसे अनुकूलित करने की आवश्यकता है।
वर्जनिंग और स्टोरेज के बारे में
अंत में, आप लगभग हमेशा चीजों को संस्करण कर सकते हैं, यहां तक कि सबसे विवश और दीवार वाले वातावरण के साथ भी। सबसे अधिक बार नहीं, ये सिस्टम अभी भी अपने स्वयं के संस्करण के साथ आते हैं (जो दुर्भाग्य से अक्सर बुनियादी होते हैं, और बस बहुत दृश्यता के बिना पिछले संस्करणों में वापस लाने की पेशकश करते हैं, बस पिछले स्नैपशॉट रखते हैं)। यह आपकी पसंद के SCM जैसे विभेदक परिवर्तनों का उपयोग नहीं कर सकता है, और यह संभवत: एक साथ परिवर्तन प्रस्तुत करने वाले कई उपयोगकर्ताओं के लिए अनुकूल नहीं है।
लेकिन फिर भी, यदि वे इस तरह की कार्यक्षमता प्रदान करते हैं, तो शायद आपका समाधान हमारे प्रिय उद्योग-मानक दिशानिर्देशों का पालन करना है, और उन्हें इस प्रोग्रामिंग सिस्टम में स्थानांतरित करना है !!
यदि स्टोरेज सिस्टम एक डेटाबेस है, तो यह संभवतः एक्सपोर्ट फंक्शंस को उजागर करता है, या फाइल-सिस्टम स्तर पर बैक-अप किया जा सकता है। यदि यह एक कस्टम बाइनरी प्रारूप का उपयोग कर रहा है, तो शायद आप इसे वीसीएस के साथ संस्करण देने का प्रयास कर सकते हैं जिसमें बाइनरी डेटा के लिए अच्छा समर्थन है। आपके पास ठीक-ठीक नियंत्रण नहीं होगा, लेकिन कम से कम आप अपनी पीठ को तबाही के खिलाफ कवर करेंगे और आपदा वसूली अनुपालन की एक निश्चित डिग्री होगी।
परीक्षण के बारे में
मंच के भीतर ही अपने परीक्षणों को लागू करें, और नियमित बैकअप सेट करने के लिए बाहरी उपकरणों और पृष्ठभूमि नौकरियों का उपयोग करें। काफी शायद, आप इन परीक्षणों को एक ही आग लगाते हैं कि आप इस प्रोग्रामिंग सिस्टम के साथ विकसित कार्यक्रमों को आग लगा देंगे।
निश्चित रूप से, यह एक हैक काम है और निश्चित रूप से "सामान्य" प्रोग्रामिंग के लिए जो सामान्य है, उसके मानक तक नहीं है, लेकिन विचार यह है कि पेशेवर सॉफ्टवेयर विकास प्रक्रिया की झलक को बनाए रखने की कोशिश करते समय सिस्टम के अनुकूल होना चाहिए।
रोड लंबी और खड़ी है ...
हमेशा आला वातावरण और बीस्पोक प्रोग्रामिंग सिस्टम के साथ, और जैसा कि हमने ऊपर उजागर किया, आप अजीब प्रारूपों से निपटते हैं, संभवतः केवल एक सीमित (या पूरी तरह से अनुभवहीन) संभवतः क्लूनी उपकरण का सेट, और एक समुदाय के स्थान पर एक शून्य।
सिफारिश: जितना संभव हो, अपने bespoke प्रोग्रामिंग सिस्टम के बाहर उपरोक्त दिशानिर्देशों को लागू करने का प्रयास करें। यह सुनिश्चित करता है कि आप "सामान्य" टूल पर भरोसा कर सकते हैं, जिनके पास उचित समर्थन और सामुदायिक ड्राइव है।
वर्कअराउंड: जब यह एक विकल्प नहीं है, तो इस वैश्विक ढांचे को अपने "बॉक्स" में वापस लाने का प्रयास करें। विचार यह है कि आपके प्रोग्रामिंग सिस्टम के शीर्ष पर उद्योग मानक सर्वोत्तम प्रथाओं के इस खाके को उखाड़ फेंका जाए, और इसे सर्वश्रेष्ठ बनाया जाए। सलाह अभी भी लागू होती है: संरचना और सर्वोत्तम प्रथाओं को परिभाषित करें, अनुरूपता को प्रोत्साहित करें।
दुर्भाग्य से, इसका तात्पर्य यह है कि आपको बहुत अधिक मात्रा में गोता लगाने और लेग-वर्क करने की आवश्यकता हो सकती है। इसलिए...
प्रसिद्ध अंतिम शब्द, और विनम्र अनुरोध:
- दस्तावेज़ जो आप करते हैं।
- अपना अनुभव साझा करें।
- अपने लेखन के लिए किसी भी स्रोत को खोलें ।
यह सब करके, आप करेंगे:
- न केवल समान परिस्थितियों में लोगों से समर्थन पाने के अपने अवसरों को बढ़ाएं,
- लेकिन यह भी अन्य लोगों को मदद प्रदान करते हैं, और अपनी तकनीक स्टैक के आसपास चर्चा को बढ़ावा।
कौन जानता है, आप अस्पष्ट भाषा X के एक नए जीवंत समुदाय की शुरुआत में हो सकते हैं । यदि कोई नहीं हैं, तो एक शुरू करें!
हो सकता है कि यह अंदर से सुंदर हो , लेकिन किसी के पास अब तक कोई सुराग नहीं है, इसलिए इस बदसूरत दीवार को नीचे ले जाने में मदद करें और दूसरों को झांकने दें!