ترويض الوحش: الكود القديم والاختبارات وأنت

الرمز القديم هو رمز "قديم" ، يمكن أن يكون عمره شهرين و 10 سنوات. في كثير من الأحيان ، كتب المطورون عن ذلك ، والذي تتذكره الشركة بشكل غامض. ربما لم تكن موجودة على الإطلاق ، وقد وُلد رمز الإرث مع الكون خلال الانفجار العظيم. منذ ذلك الحين ، تغيرت متطلباته عدة مرات ، وتم تصحيح الرمز في وضع "كان ضروريًا أمس" ، ولم يقم أحد بكتابة الوثائق ، مثل الاختبارات. رمز الإرث محير وهش ، ولا يظهر لا البداية ولا النهاية. كيف تقترب منه؟


فيما يلي لقطات من مسلسل "Rick and Morty". المؤلفان جاستن رويلاند ودان هارمون.

تحتاج إلى إجراء اختبارات له ، لكن الاستعداد للألم. ستبدأ المشاكل بالفعل من اللحظة التي تقرر فيها تنفيذ مثل هذا المشروع. أنت بحاجة إلى فهم سبب رغبتك في القيام بذلك ، وإقناع الإدارة بالموافقة على اختبار الرمز القديم ، ومساعدة زملائك. بعد ذلك ، تطرح الأسئلة ، من أين تبدأ الدراسة ، وما هي الاختبارات التي ستجري أولاً وكيف لا تكسر كل شيء؟ لكن الشيء الرئيسي هو كيف لا تقع في اليأس عندما تدرك أنه لا توجد نهاية للعمل.

كان كيريل بوريسوف في هذه الصناعة لمدة 12 عامًا ، وعلى مر السنين قطع شوطًا طويلًا في العكازات والشفرة المكسورة والإطارات المتعفنة للأنظمة القديمة: من أنظمة المحاسبة المتجانسة إلى خدمات التفويض الصغيرة. منحته الرحلة الخبرة والقصص التي سيشاركها في شكل نصيحة قيمة.


لدي حلم - يومًا ما للعمل في مشروع جديد. سيكون كل شيء على ما يرام فيه منذ البداية وجديدة مثل الثلج الأول: الاختبارات والهندسة المعمارية والمعنى. لكن هذا مجرد حلم ، لأنني منذ 10 سنوات أقوم ببيع موهبتي مقابل المال والانتقال من مشروع قديم إلى آخر.

خلال هذا الوقت ، لم يعد لدي أي أعصاب ، ولكن يمكنني حفظ ما لديك من خلال مشاركة تجربتي في التفاعل مع الإرث. سأخبرك بكيفية ترويض الوحش (الرمز القديم): العمل مع الرمز والأشخاص ، وتنفيذ الاختبار ، وما إذا كان يجب القيام به وكيف يرتبط المطورون بذلك.

ما لن يكون هنا:

  • نصائح لكتابة الاختبارات. تغطي العديد من الكتب والمقالات ومقاطع الفيديو المختلفة هذا السؤال.
  • منهجيات المناقشة. BDD ، TDD ، ATDD - كل ذلك حسب تقديرك.
  • كل ما قد ينتهك اتفاقية عدم الإفشاء. الناس لديهم ذاكرة طويلة ، والمحامين لديهم أسلحة طويلة.

ما هو الرمز القديم


هناك العديد من التعريفات. أعتقد أن هذا رمز " قديم إلى حد ما " من شهرين إلى 10 سنوات. رمز الإرث مربك وهش ، ولكن مثل الأفعى العملاقة تلتهم ذيلها.

هذا ما لا يسمح لك ببدء اختباره بهدوء. جميع المطورين ، من المبتدئين إلى ذوي الخبرة ، عندما يأتون إلى مشروع قديم ، يجرون رمحًا من الاختبارات ويسرعون لقتل هذا الوحش. يكسر الرمح ، ومعه الناس. ونتيجة لذلك ، لا يزال هناك مطور بدون علامات على الحياة ، يعمل في مشروع قديم منذ عقود.

هل من الممكن التغلب على هذا الوحش؟ نعم ، لكن التحضير مطلوب.

تدريب


محاربة الوحش ليست بنفس أهمية المرحلة التحضيرية. يبدأ بثلاثة أسئلة لنفسه.



"لماذا افعل هذا؟" حقا، لماذا؟ بعد كل شيء ، هناك خياران فقط.

  • , , , .
  • , .

هل تريد العمل من أجل راحة الآخرين أم مجدك؟ إذا كان هذا الأخير ، مع نجاح النجاح الأول سيتلاشى ، فسوف تتلاشى ، وسيتلاشى كل شيء. ستنتقل إلى شيء آخر ، وستؤدي البقايا المتعفنة لمساعيك إلى انسداد المشروع لفترة طويلة قادمة.

"هل أعرف ما أفعله؟" إذا كتبت اختبارات ، فأنت تعلم. إذا لم يكن الأمر كذلك ، فقبل أن تتسرع في الوحش ، أتقن الأساسيات: اكتب اختبارات 3-4 ، وقم بتغطية جزء صغير من الرمز ، املأ يدك وشعر بالقوة.

"هل لدي وقت لهذا؟" من الرائع التدخل في الشفرة بدوافع جيدة وتحسينها ، والعمل من أجل المستقبل. ولكن ربما لا يوجد وقت لذلك عندما يحترق الحاضر. إذا كان الأمر كذلك ، فإن المشروع يحتاج إليك ، وليس صورة مشرقة للمستقبل.

عندما تجيب على جميع الأسئلة بالإيجاب ، انتقل إلى الخطوة التالية.

استطلاع


افحص هيكل المشروع . هل لديك فكرة عن هيكل المشروع ومكوناته ومبدأ العمل؟ نعم بالتأكيد ، ولكن ربما لا يتزامن مع الواقع. من المهم أن تفهم ما يجب عليك مواجهته قبل بدء العمل. خصص بعض الوقت لخوض المشروع ودرسه بدقة.

اصنع مخطط تبعية . لا يوجد مشروع يعيش في فراغ. قواعد البيانات والخدمات الخارجية والمكتبات - كل هذا يمكن استخدامه في المشروع.

ما الذي تم فعله لك؟ قد لا تكون أول من يقاتل الوحش. افحص ممارسات "الأسلاف" الذين أحرقوا المشروع وغادروه.

بعد الاستطلاع ، ننتقل إلى الأعمال العدائية.

حارب مع المنظمة


الجولة الأولى هي معركة مع منظمتك. الشيء الرئيسي فيه هو مديرك ، المدير المباشر.

مدير . إنه ليس مخيفًا كما يبدو. هذا شخص عادي لديه احتياجات عادية: لتسليم المشروع في الوقت المحدد وبدون مشاكل لا داعي لها ، احصل على المال والمكافآت والعيش عليه.

القائد ليس ضد تعهداتك. إنه ضدك يندفع إلى المشروع بهتافات: "الاختبارات! الاختبارات! الاختبارات! " إذا فعلت ذلك ، فسوف ينظر إليك كشخص يقضي وقته ويبطئ الباقي.

أظهر الفائدة. المدير يتحدث لغة الخير والوقت والمال. افهم أنهم مدفوعون بالرغبة في إغلاق المشروع في الوقت المحدد والحصول على نتائج أكثر بموارد أقل.

لا يجب تقديم الاختبار على النحو التالي:

- أوه ، سيكون رائعًا!

يجب الترويج لأفكارنا على النحو التالي:

- في الربع الأخير ، كان لدينا 50 تعطلًا يمكن إصلاحه في مرحلة تطوير المنتج. يمكنك إصلاحه باستخدام الاختبارات. سيؤكدون أن التغييرات لم تغير الوظيفة ، إذا لم نتوقعها. سنحفظ الساعات التي نقضيها في حل هذه المشاكل ونخفض مقدار العقوبة التي تم دفعها بسبب كسر النظام.

تقول "التحسين ، المال ، توفير الوقت" ، أنت تتحدث لغة المدير. عندما يسمع هذه الكلمات ، فهو مشبع بالفكرة. فهو لا يرى فيك المبرمج المسعور التالي الذي يعشق التكنولوجيا الحديثة ، بل شخصًا مهتمًا بتحسين المنتج. لن يوافق على جميع أفكارك في وقت واحد ، ولكن من المرجح جدًا أن يقترح Proof Of Concept.

"إثبات المفهوم" يزيد من الفرص.تزويد المدير بقطعة منفصلة من التعليمات البرمجية ، نظام فرعي مغطى بالاختبارات والبدء والتشغيل. يمكن القيام بذلك إذا كنت تأخذ أحد الأخطاء المؤلمة التي تظهر على تردد معين وحاول الإمساك به وإصلاحه باختبار. ستؤكد PoC نواياك ، وتظهر أن لديك خطة وأن عملك يأتي بنتائج.

لا تعد كثيرا. بالنسبة للمدير ، فإن الأرقام مهمة: ما هي النتائج والتوقيت وبأي قوى. لكن المدير جشع مخلوق لتحقيق النتائج. لا تعد بالكثير من البداية. إذا وعدت بحل جميع المشاكل في وقت واحد ، فسيذهب المدير إلى السلطات بهذا. ستقول السلطات: "عظيم!" ، لكنها ستخفض التمويل وتقطع المواعيد النهائية على أمل أن نسلم النظام قبل ذلك بكثير.

عندما نتفق مع المدير ، ننتقل إلى أولئك الذين يجب أن نعمل معهم كل يوم.

زملاء العمل


إنهم لا يحبون التغيير. الزميل النموذجي في مشروع إرث نموذجي هو شخص فقد الثقة في الحياة والمستقبل. لا يميل إلى التغيير واستقال من أجل المصير: "أنا هنا إلى الأبد ، لا يوجد مخرج من المستنقع". المشكلة هي أنك تبدأ في تقليب الماء في هذا المستنقع. تطالبه بالكتابة وإجراء بعض الاختبارات ، لكنه يريد القيام بعمله وإغلاق المهمة والعودة إلى المنزل.



اجذب زملائك بفوائد - اشرح لماذا سيشعرون بتحسن. على سبيل المثال ، يقضون الوقت والجهد باستمرار ، ويتبقون بعد العمل لشفاء بعض الأخطاء. اضغط عليه: "إذا لم تنشر رمزًا معطلًا للإنتاج ، فلن تضطر إلى قضاء بعض الوقت في إصلاحه. سنكتب اختبارات ، وسنلتقط مثل هذا الرمز ، وسوف ينهار أقل ".

اظهار الصبر والتعاطف.تتواصل مع الناس - اسأل لماذا هم قلقون بشأن فكرتك؟ اقترح إيجاد أرضية مشتركة لفهم بعضهم البعض. هذا هو التكتيك الرئيسي للعمل مع الناس: لا تتشاجر ، لا تصطدم جبهتك ، كن أكثر ودا.

قد يتم منعك من تقديم الفكرة قبل اجتماع الزملاء في موقف الفريق التالي. تعمل آلية "التفكير الجماعي" في الفريق: لا أحد يريد اتخاذ قرار ، ينظر الجميع إلى بعضهم البعض ويرون أنه لا أحد يحترق بحماس.

هناك حيلة قذرة لحل هذه المشكلة. لسوء الحظ ، استخدمته في حياتي أكثر من مرة.

فرق تسد. اذهب إلى أحد زملائك في الغداء أو في الزاوية وقل: "لقد اشترك الفريق بأكمله بالفعل ، أنت الوحيد الذي يبطئ العملية. ربما يمكننا إيجاد لغة مشتركة؟ "

بعد المرور بكل شيء ، تقوم بالتوقيع على الجميع. سيخجل الجميع من الاعتراف بأنهم يعتقدون أن الجميع قد قاموا بالتسجيل بالفعل. إنه أمر شائن ورهيب ، لكنه يعمل. استخدم هذه التقنية بمسؤولية وكحل أخير. تذكر - لا يزال عليك العمل مع هؤلاء الأشخاص.

عندما يتم ترتيبها مع الزملاء ، فإننا ننتظر وحش جشع آخر.

حارب مع السيارة


هذه خدعة كود يسمى المنتج. هيا لنبدأ مع الأساسيات.

تفكيك سلة المهملات. من الضروري اختبار ذلك مع الحد الأدنى من التأثير على النظام للحصول على نتيجة يمكن التحقق منها. لكن أي نظام قديم مليء بالبيانات: تمت إضافتها لسنوات منذ إطلاقها وتؤثر على سلوك النظام. لذلك ، من الضروري اختبار "من الصفر".

تحضير "نظام كروي في فراغ": إفراغ مصادر البيانات ، وإجراء الحد الأدنى من التكوينات التي يبدأها النظام ، وإيقاف تشغيل "الاختراقات" و "الميزات" الممكنة. اجعل النظام يبدأ. إذا بدأ ، لديك الحد الأدنى من مجموعة البيانات اللازمة للعمل. هذه بالفعل نقطة انطلاق جيدة - "قائمة نظيفة".

باستخدام بعض التأثيرات القابلة للقياس ، على سبيل المثال ، بالضغط على زر معين ، ستحصل على نتيجة عمل قابلة للقياس. مع ذلك ، يمكنك المتابعة إلى الخطوة التالية.

كشف البيانات. أي مشروع إرث يعمل على مبدأ "يجب تسليمه أمس". كل ما ذهبت إليه في الجامعة أو قرأته في الكتب لا يعمل هنا. عندما تبدأ الاختبار ، ستواجه ، على سبيل المثال ، تبعية دورية ، من المستحيل إعادة إنشائها في البرنامج ، ولكنها ضرورية للعمل.

ابدأ بـ "الكائن الرئيسي". للتعامل مع غابة التبعية ، حاول التفكير في الكائن الرئيسي. على سبيل المثال ، بالنسبة لنظام محاسبة المستودعات ، فإن الهدف الرئيسي هو "الصندوق". يرتبط كائن "الرف" به ، ويرتبط كائن "الصف" بـ "رف".

إعادة الحد الأدنى المطلوب.إذا نظرت إلى الروابط بين الكائنات وتعمقت في شجرة التبعية ، يمكنك تحديد الحد الأدنى الضروري من البيانات للكائنات التابعة. تحتاج إلى إعادة إنشائه حتى يعمل النظام ويمكن أن يعمل لاختبار وظيفتك.

لا تخف من تغيير الروابط. قد تضطر إلى تحريك أكمامك والتعمق في هذه الفوضى: حذف الروابط وتغييرها وتغيير بنية قاعدة البيانات. جئت لتحسين النظام ، لذلك لا تخف من إجراء تغييرات.

ننتقل إلى الاختبار. لإرباك المنتجات القديمة ، فإن الاستراتيجية الجيدة هي اختبارات الدخان.

اختبارات الدخان


جاءنا مفهوم "اختبار الدخان" من عالم الإلكترونيات. قام أحد المهندسين بتجميع دائرة عملاقة تحتوي على مجموعة من المصابيح الكهربائية والأسلاك. ولكن قبل أن أبدأ الاختبار ، قمت للتو بتوصيل الدائرة بمأخذ طاقة. إذا بدأ الدخان ، حدث خطأ ما.

في أنظمة المعلومات ، مفهوم اختبارات الدخان بسيط للغاية. تخيل خدمة ويب ، لها نقطة نهاية. دعونا نحاول إرسال طلب GET إليه بدون معلمات. إذا كسر المنتج فجأة لسبب ما (الخطأ 500) ، حدث خطأ ما.

اختبار الدخان هو بداية جيدة . هذا اختبار يختبر بعض الوظائف ويوضح أن النظام يعمل أو مكسور. حتى الطلب البسيط إلى أبسط نقطة نهاية يؤثر بالفعل على أكثر من 1٪ من الشفرة. مع هذه الاختبارات الصغيرة ، نقوم بإعداد منصة انطلاق لمزيد من الاختبارات.

يكشف اختبار الدخان عن مشاكل عديدة. من الممكن أنه طوال فترة عمل الخدمة ، لم يخمن أحد إرسال طلب بدون معلمات.

استخدم هذا التكتيك لتغطية العديد من نقاط الدخول الرئيسية في برنامجك: نموذج إدخال كلمة المرور / تسجيل الدخول وخدمات الويب الأساسية والأزرار. هذا شيء يمكنك إظهاره بالفعل للمدير والزملاء.

اختبارات الوظائف


هذه ليست اختبارات لفصول فردية أو طريقة ، ولكن أعلى مستوى ممكن من الاختبار لجزء معين من الوظيفة.

تخيل الوظيفة "لإنشاء تقرير في الخدمة". بدلاً من التحقق من الأجزاء الفردية ، نقوم باختبار حالة الطلب لإنشاء تقرير بمعلمات معينة والحصول على ملف بيانات. ليس من الضروري معرفة آلية إنشاء التقرير ، ولكن إذا كانت الخدمة تقدم بيانات إخراج معينة مع بيانات إدخال معينة ، فإن هذا الصندوق الأسود مع بعض الاحتمالات يعمل كما ينبغي. تسمح لك

تغطية الوظائف الرئيسية بهذه الاختبارات بالبدء بسرعة وتغطية مساحات كبيرة على الفور. سوف تتأكد من أن الرمز يعمل على الأقل تقريبًا كما تتخيل ، وتكسب المزيد من الثقة ، وتملأ يدك وتكشف عن المزيد من المشاكل.
الاختبارات الوظيفية هي وسيلة وليست نهاية.
من السهل أن تعلق على إبرة الاختبار الوظيفي: "أنا أختبر الوظائف الحقيقية! هذا ما يواجهه المستخدمون ".

يتضمن الاختبار الوظيفي أجزاء كبيرة من التعليمات البرمجية التي يمكنها التفاعل مع كميات هائلة من البيانات. لذلك ، تكون الاختبارات الوظيفية 3-4 جيدة ، و 10 اختبارات أسوأ ، والآلاف من الاختبارات التي تستغرق 9 ساعات كثيرة للغاية. لسوء الحظ ، يحدث هذا أيضًا.

بعد الاختبارات الوظيفية ، خذ اختبارات الوحدة. لكنني لن أتحدث عنها - أنت تعرف كل شيء بالفعل.

لقد استعرضنا أساسيات اختبار الآلة والعودة إلى الموضوع الرئيسي. الزملاء والمدير ليسوا أسوأ عدو في معركة مع الإرث. إن أسوأ عدو هو نفسك.

حارب مع نفسه


كن مستعدًا لحقيقة أن المسار سيبدو بلا نهاية . سيستغرق العمل لمدة أسبوع في خطتك ستة أشهر دون آفاق إكمال المشروع.



المقاومة أمر لا مفر منه . سيبدأ جميع الحلفاء في نهاية المطاف في الشك ، ويحاولون الابتعاد عن المسار وإقناعهم بالخروج من الاختبارات والانتقال إلى الميزات. كن مستعدًا لذلك. ذكّر الجميع لماذا انخرطت في كل هذا ، وكم من الجهد والوقت تم استثماره. حجة ضعيفة ، لكنها قد تعمل.

لا أحد يضمن النجاح . حتى إذا أظهرت جهودًا بطولية ، ضع نفسك في العمل ، فلا يزال بإمكان مشروعك أن يحترق ، ولن تنتهي الحملة الصليبية مع الاختبار بأي شيء.

هذا أمر طبيعي ، هذه ليست نهاية الحياة والوظيفة. هذا ليس تأكيدًا على أنك محترف فقير. الاستنتاج الوحيد هنا هو أن هذا المشروع بالذات فشل.

ولكن بعد ذلك لديك خبرة ومعرفة. في المرة القادمة ، عندما تأخذ رمحًا جديدًا في يدك ويتسارع حصانك إلى طاحونة هوائية أخرى ، ستكون جاهزًا لكسر هذا الرمح أيضًا ، ولكن لاحقًا ، بطريقة مختلفة وبتلف أقل.

الآن مسيئة ومريرة وأبدية.

كلمات فراق


لا تخف من ردود الفعل. كان علي أن أخطو إلى هذا الفخ لأرى كيف يقع الآخرون فيه. لقد فعلت شيئًا وأجبرت الزملاء على التباهي: "لقد فعلت ذلك!" ولكن فجأة اتضح أن آليتي المريحة غير ملائمة للزملاء ، ولم أسأل.

كتابة الاختبارات ، جرب ما تقوم بتطبيقه . غالبًا ما يكون تقديم إطار اختبار جديد أمرًا رائعًا ، لكنك لا تكتب الاختبارات بأنفسهم. ثم قد يحدث أنه بمجرد كتابتها ، ستفهم أنه لا يمكنك استخدام الاختبارات. ربما يرى الزملاء هذا أيضًا ، ولكنهم صامتون ، أو ببساطة لا يكتبون الاختبارات.

ساعد الزملاء في حل المشاكلحتى لو لم يطلبوا ذلك. لا تعني المساعدة أخذ كل العمل على نفسك - فهي تريح الزملاء وتريحهم من المسؤولية ، وينخفض ​​رقم "الحافلة" إلى الوحدة. ثم تصبح مختبراً بشرياً: شيء ما ينكسر ، CI red ، دليل الاختبار. المساعدة في إطار المعقول.

رقم "الحافلة" ليس مزحة. لا يمكنك دائمًا سحب المشروع على نفسك. يمكن لأي شخص أن يحترق أو يذهب في إجازة أو يستقيل. لذلك ، انقل إلى زملائك معرفتك ومسؤوليتك ، وهو أمر ضروري للتعامل بدونك. سيساعد ذلك على تجنب المكالمات غير السارة عند الاسترخاء على الشاطئ ، وتكون CI حمراء مرة أخرى.

تحسين آليات الاختبار. يمكن تجنب العديد من المشاكل ببساطة لأن الاختبارات البطيئة أصبحت فجأة سريعة. في السابق ، احتلوا 20 سطرًا من التعليمات البرمجية ، ولكن الآن سطر واحد. لم تلاحظ هذا ، لأنه بمجرد أن كتبت شيئًا ونسيت: "إنه يعمل - لا تلمسه!" لكن هذه القاعدة لا تنطبق دائمًا.

أنت لست مركز الكون. مرة أخرى ، أكرر أن رقم "الحافلة" ليس مزحة. واجهت أكثر من مرة موقفًا عندما بدأ أحد الأشخاص في الاختبار ، ثم تلقى عرضًا للمشروع أعذب: ترك كل شيء ، وهرب ، لكنه لم يترك تعليقات ووثائق. كل شيء يعمل حتى التزام جديد ، ولكن من المستحيل إصلاحه - لا أحد يفهم كيف يعمل كل شيء.

لا اريدك ان تكون هذا الشخص. لا تتحول إلى عامل محدد.

  • اكتب الوثائق.
  • إجراء التدريبات.
  • شارك خبرتك.

عندما يكون جميع الزملاء على نفس مستوىك (زائد أو ناقص) ، ستتحول العملية من سباق شخص واحد إلى سباق تتابع الفريق مع تمرير العلم. لن تنجح إلا من خلال دعم زملائك. إذا كنت وحيدًا في المشروع ، فكر في أن شخصًا آخر بعدك سيعاني أيضًا بمفردك. امنح متابعك صديقًا في شكل توثيق ، ولا تدع الموتى لوحدها.

27 Moscow Python Conf++ Python 2 Python 3 — 2020 .

, (fb, vk, twitter) telegram- . !

All Articles