अक्सर, "जटिल" पैच / चेंजेलिस्ट ऐसे होते हैं जो एक ही बार में कई अलग-अलग काम करते हैं। नया कोड, हटाए गए कोड, हटाए गए कोड, स्थानांतरित कोड, विस्तारित परीक्षण; इससे बड़ी तस्वीर को देखना मुश्किल हो जाता है।
एक सामान्य सुराग सुराग यह है कि पैच बहुत बड़ा है लेकिन इसका विवरण छोटा है: "$ FOO लागू करें।"
इस तरह के पैच को संभालने का एक उचित तरीका यह पूछना है कि इसे छोटे, स्व-निहित टुकड़ों की एक श्रृंखला में तोड़ दिया जाए। जैसे एकल-जिम्मेदारी सिद्धांत कहता है कि एक फ़ंक्शन को सिर्फ एक काम करना चाहिए, एक पैच को केवल एक चीज पर ध्यान देना चाहिए।
उदाहरण के लिए, पहले पैच में विशुद्ध रूप से यांत्रिक रिफ्लेक्टर हो सकते हैं जो कोई कार्यात्मक परिवर्तन नहीं करते हैं, और फिर अंतिम पैच (तों) कम विक्षेप और लाल झुंडों के साथ $ FOO के वास्तविक कार्यान्वयन और परीक्षण पर ध्यान केंद्रित कर सकते हैं।
कार्यक्षमता के लिए जिसे बहुत सारे नए कोड की आवश्यकता होती है, नए कोड को अक्सर परीक्षण योग्य विखंडनों में पेश किया जा सकता है जो उत्पाद के व्यवहार को तब तक नहीं बदलते हैं जब तक कि श्रृंखला में अंतिम पैच वास्तव में नए कोड (फ्लैग फ्लिप) को नहीं बुलाता है।
यह चतुराई से करने के लिए, मैं आमतौर पर इसे अपनी समस्या के रूप में बताता हूं और फिर लेखक की मदद के लिए पूछता हूं: "मुझे यहां चल रही हर चीज के बाद परेशानी हो रही है। क्या आप इस पैच को छोटे चरणों में तोड़ने में मेरी मदद कर सकते हैं यह समझने में मदद करें कि यह सब कैसे फिट बैठता है साथ में?" कभी-कभी छोटे चरणों के लिए विशिष्ट सुझाव देना आवश्यक होता है।
इतना बड़ा पैच जैसे "$ FOO लागू करें" पैच की एक श्रृंखला में बदल जाता है:
- Frobnicate का एक नया संस्करण पेश करें जो पुनरावृत्तियों की एक जोड़ी लेता है क्योंकि मुझे $ FOO लागू करने के लिए वेक्टर के अलावा अन्य दृश्यों के साथ इसे कॉल करने की आवश्यकता है।
- नए संस्करण का उपयोग करने के लिए Frobnicate के सभी मौजूदा कॉलर्स को स्विच करें।
- पुरानी Frobnicate हटाएं।
- फ्रोबनेट बहुत ज्यादा कर रहा था। अपने स्वयं के तरीके में refrumple कदम को फैक्टर करें और उसके लिए परीक्षण जोड़ें।
- परीक्षण के साथ Zerzify का परिचय दें। अभी तक उपयोग नहीं किया गया है, लेकिन मुझे $ FOO के लिए इसकी आवश्यकता होगी।
- Zerzify और नई Frobnicate के संदर्भ में $ FOO लागू करें।
ध्यान दें कि चरण 1-5 उत्पाद में कोई कार्यात्मक परिवर्तन नहीं करते हैं। वे समीक्षा करने के लिए तुच्छ हैं, जिसमें यह सुनिश्चित करना शामिल है कि आपके पास सभी सही परीक्षण हैं। भले ही चरण 6 अभी भी "जटिल" है, कम से कम यह $ FOO पर केंद्रित है। और लॉग स्वाभाविक रूप से आपको बहुत बेहतर विचार देता है कि $ FOO कैसे लागू किया गया था (और फ्रोबनीट को क्यों बदला गया था)।