JavaRush /مدونة جافا /Random-AR /كيف تحول اختبار المقابلة إلى مكتبة مفتوحة المصدر
Roman Beekeeper
مستوى

كيف تحول اختبار المقابلة إلى مكتبة مفتوحة المصدر

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

امتحان. بداية أغسطس 2017

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

  • Travis CI هي أداة CI (التكامل المستمر) التي تقوم ببناء المشروع وإجراء الاختبارات ومعرفة ما إذا كان المشروع قد تم إنشاؤه بنجاح. على سبيل المثال، إذا لم ينجح أحد الاختبارات نتيجة للتغييرات الجديدة، فسيقول أن بناء المشروع لم ينجح وسيلونه باللون الأحمر.

  • Coveralls هي أداة توضح النسبة المئوية للتعليمات البرمجية الخاصة بك التي تغطيها الاختبارات.

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

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

مسار المكتبة. يوليو 2018

شعار

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

عيب الجانب الأول

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

استخدام سطر الأوامر. خريف 2018

كانت المرحلة التالية في التطوير هي التواصل مع السويدي (ريناتو أثايديس)، الذي أراد استخدام المكتبة عبر سطر الأوامر ولهذا كان من الضروري إجراء بعض التغييرات والإضافات. لقد دهشت وفاجأت مرة أخرى بهذا. بعد أن كتب لي مصمم الجرافيك، كانت دهشتي أقل إلى حد ما، لكنها لا تزال عالية جدًا. فكرة أن شخصًا ما يحتاج حقًا إلى الكود الخاص بي ملأتني بمشاعر لا تصدق. لقد أجرى التغييرات اللازمة وأعد الكود. لقد أجريت مراجعة للكود، أي أنني نظرت إلى التغييرات، وكانت هناك تعليقات تم تغييرها وكانت التغييرات موجودة بالفعل في المكتبة. قمت بتعيين هذه التغييرات كإصدار v2.0. وكانت الخطوة التالية هي إضافة المكتبة إلى Maven Central - وهو مستودع مركزي، حيث يمكنك تنزيله لأي مشروع واستخدامه كتبعية. في ذلك الوقت، لم يكن لدي أي فكرة عن كيفية القيام بذلك، حتى عن بعد، فقلت إنني مشغول وطلبت منه تنفيذ جميع الخطوات اللازمة لإعداد المشروع. ولكن تبين أن هذا لم يكن كافيًا على الإطلاق وكان الشيء الأكثر إثارة للاهتمام هو إنشاء اتصال مع Maven Central. كان هذا بمثابة ألم شديد، ولم أتمكن من القيام به في المرة الأولى، ولم أتمكن من نشر المشروع على Maven Central إلا في 15 أبريل. لم يكن الأمر سهلاً، ولكن كما يحب الآخرون أن يقولوا، "كل من يريد نشر كود Java الخاص به يمر بهذا الأمر." قبل أن أقوم بنشر المكتبة، وجدت أخيرًا ماذا وكيف أفعل مع العيوب التي كانت مستمرة لفترة طويلة وأصدرت إصدارًا جديدًا v2.0.2 ، حيث شكرت كل من ساعدني، ووصفت ماذا وكيف فعلت .

النشر إلى مافن سنترال. ربيع 2019

لنشر مكتبة بشكل صحيح، يجب أن يكون لديك فهم جيد للإصدار وكيفية تعيين الإصدارات بشكل صحيح. سألتزم بهذا المخطط:
  • XX.YY.BBBB ، حيث XX هو تحديث إصدار رئيسي يتضمن تغييرات غير متوافقة مع الإصدار السابق (على سبيل المثال، تغيير النتيجة المرتجعة في الأساليب)؛
  • YY هو تحديث بسيط - تغيير داخلي أو توسيع لا يغير ما هو BBBB - هذه عيوب تم إصلاحها.
  • على سبيل المثال، الإصدار 2.0.2 يعني أن الإصدار الرئيسي هو 2، ولم تكن هناك تحديثات ثانوية، وهناك تحديثان للعيوب.
بعد ذلك، كان من المهم معرفة كيفية تعيين groupId و artifactId بشكل صحيح . كان لا بد من اختيارهم مرة واحدة واستخدامها أكثر. وهم يشكلون الحزمة التي يتم تخزين الكود فيها. كان: ua.comparison.image الآن: com.github.romankh3.image.comparison ومن الواضح أن هذا أفضل، حيث يعلم الجميع أن هذا مشروع من GitHub ويمكن العثور عليه من شخص يحمل اللقب romankh3. عندما فعلت كل هذا، أصدرت إصدارًا جديدًا v2.1.0 .

التواصل مع السويديين. مايو 2019

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

التواصل مع ألماني. مايو 2019

بعد ذلك، أنشأ أحد الألمان مشكلة قال فيها إنه يريد استخدامه للاختبار، لكنه يفتقر إلى الوظيفة. لقد قدم العديد من المقترحات التي كانت مثيرة للاهتمام للغاية، واقترح أنه بدلاً من إرجاع الصورة الناتجة فقط مع النتيجة نتيجة للمقارنة، قم بإرجاع مجموعة من البيانات: ما تمت مقارنته والنتيجة (إذا لزم الأمر) والحالة التي توجد فيها سيكون MATCH، MISMATCH، SIZE_MISMATCH . حتى إجراء التغييرات. لكنهم لم يأخذوا في الاعتبار الكود السابق على الإطلاق وتم صنعه على عجل. لقد رفضتها وعرضت تنفيذها بالشكل الذي أراه مناسبًا. ورغم ذلك استجاب أكثر وقررت أن أفعل ذلك بنفسي وأصدر نسخة جديدة. في الوقت نفسه، اقترح Mika Kytöläinen وظيفة أخرى مثيرة للاهتمام - إضافة مناطق لن يتم تضمينها في المقارنة. هذه حالة حقيقية. وتم إصدار كل هذا في الإصدار 3.0.0

استخدامها في مشروع حقيقي

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

العثور على المتخصصة

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

الآن

تحتوي المكتبة حاليًا على 60 نجمة على Github ولديها 33 شوكة. أعتقد أن هذا أمر رائع جدًا، مع الأخذ في الاعتبار أنني لم أقم بالترويج له بأي شكل من الأشكال باستثناء مقال في منتدى الأتمتة. شكرا لكل من قرأ حتى النهاية. لقد تبين في الواقع أن المقال أطول بكثير مما كنت أتوقع. مقال عن كيفية نشر مكتبة على Maven Central. إذا كان لديك أي شيء تضيفه، فاكتب! إذا كان لديك أي شيء تقترحه لتحسين المكتبة، فاكتبه! سأقرأ كل شيء وأخصص له الوقت المناسب. أي شخص أحب المقال ووجده مفيدًا - قيمه واكتبه في التعليقات. اشترك أيضًا في حسابي على جيثب romankh3 وانظر أيضًا مقالاتي الأخرى:
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION