Reference OS v8 5 دقائق قراءة ٣ يوليو ٢٠٢٦ informational Slopo: أداة CLI لاكتشاف تكرار الكود غير الحرفي - دليل تجربة عملي ستتعلم كيفية تثبيت Slopo وتشغيله لاكتشاف التكرار غير الحرفي في مشاريعك، مع…

Show HN: CLI tool for detecting non-exact code duplication with embedding models
اختر القسم الذي تحتاجه الآن
الفكرة التي تمنع التسرع
هل تعتقد أن أدوات كشف تكرار الكود الحالية تكشف كل أنواع التكرار؟ الحقيقة أنها تفوت التكرار غير الحرفي الذي يسبب مشاكل صيانة خفية.
قبل أن تطبق، اعرف أين تقف بالضبط
لا تعتمد على الانطباع؛ اختر مؤشراً تراجعه
إذا كنت مطوراً وتستخدم أدوات تحليل الكود التقليدية، فربما لاحظت أنها تكتشف فقط الكود المكرر حرفياً. لكن ماذا عن الكود الذي يعيد نفس المنطق لكن بأسماء متغيرات مختلفة أو ترتيب مختلف للدوال؟ هذا هو التكرار غير الحرفي، وهو أكثر خطورة لأنه يختبئ تحت سطح التشابه البصري.
Slopo هي أداة CLI جديدة ظهرت على Hacker News، تستخدم نماذج التضمين (embedding models) للكشف عن هذا النوع من التكرار. في هذا الدليل، سنشرح لك كيفية تثبيتها وتشغيلها على مشاريعك، مع أمثلة عملية وأخطاء شائعة، حتى لو كان README غير واضح.
Slopo هي أداة سطر أوامر (CLI) مكتوبة بلغة Python، تستخدم نماذج التضمين (مثل CodeBERT أو OpenAI embeddings) لتحليل الكود واكتشاف الأجزاء المتشابهة في المعنى ولكنها مختلفة في الشكل. على عكس الأدوات التقليدية التي تقارن النص حرفياً، Slopo تفهم السياق ويمكنها اكتشاف التكرار حتى بعد إعادة تسمية المتغيرات أو إعادة ترتيب الدوال.
يحتاجه: مطورو المشاريع المتوسطة والكبيرة الذين يعانون من تكرار الكود غير المرئي، فرق الجودة (QA) التي تريد تحسين قاعدة الكود، ومطورو المصادر المفتوحة الذين يريدون الحفاظ على نظافة المشروع.
لا يحتاجه: مشروع صغير جداً (أقل من 1000 سطر)، أو إذا كنت تستخدم بالفعل أدوات تحليل متقدمة تكتشف التكرار الدلالي (مثل SonarQube مع إضافات معينة).
ملاحظة: README المشروع لا يوضح خطوات التثبيت بوضوح. الخطوات التالية مبنية على تحليل بنية المشروع وافتراضات معقولة. قد تحتاج للتعديل حسب التحديثات.
git clone https://github.com/rafal-qa/slopo.gitcd slopopython -m venv venv ثم تفعيلها (حسب نظام التشغيل)pip install -r requirements.txt (إذا كان الملف موجوداً، وإلا جرب pip install .)codebert-base عبر pip install transformersإذا كانت الأداة تستخدم نموذجاً خارجياً (مثل OpenAI)، فقد تحتاج إلى مفتاح API. ابحث عن ملف .env.example في المستودع. إذا لم يكن موجوداً، يمكنك إنشاء ملف .env وإضافة المتغيرات التالية (افتراضياً):
OPENAI_API_KEY=your_key_here
EMBEDDING_MODEL=text-embedding-ada-002
THRESHOLD=0.8إذا كنت تستخدم نموذجاً محلياً، قد لا تحتاج لمفاتيح API.
بعد التثبيت، يمكنك تشغيل الأداة على مجلد مشروعك باستخدام الأمر (افتراضي):
slopo --path /path/to/your/project --threshold 0.8الخيارات المتوقعة:
--path: مسار المجلد--threshold: عتبة التشابه (0.0 إلى 1.0)--model: اسم النموذج (مثل codebert-base)--exclude: استبعاد ملفات أو مجلداتمثال عملي: لنفترض أن لديك مشروعاً صغيراً به دالتين متشابهتين:
def add(a, b):
return a + b
def sum(x, y):
return x + ySlopo قد يكتشف التشابه بينهما بدرجة عالية (مثلاً 0.95) رغم اختلاف أسماء المتغيرات.
في مشاريع الشركات الناشئة السعودية، حيث السرعة في التطوير مطلوبة، قد يتراكم تكرار الكود غير الحرفي. يمكن استخدام Slopo في:
مثال: مشروع مفتوح المصدر عربي صغير (مثل مكتبة للتعامل مع التواريخ الهجرية) يمكن تحليله بـ Slopo لاكتشاف أي تكرار غير حرفي قبل الإصدار.
المشروع لا يزال في مراحله الأولى (0 نجوم على GitHub وقت كتابة المقال)، وREADME غير واضح. لكن الفكرة واعدة. إذا كنت مهتماً بتجربة أدوات جديدة وتحسين جودة الكود، فقد يكون Slopo مفيداً. لكن لا تتوقع أداة ناضجة بعد. جربها على مشروع صغير أولاً.
نعم، المشروع مفتوح المصدر (رخصة MIT).
حسب README، يدعم نماذج مثل CodeBERT و OpenAI embeddings. لكن القائمة غير محددة بوضوح.
نعم، إذا كان النموذج يدعم اللغة. CodeBERT مثلاً يدعم Python، Java، JavaScript، وغيرها.
النتائج عادة ما تكون ملف JSON أو نصي يحتوي على أزواج الملفات ودرجة التشابه. كلما اقتربت الدرجة من 1، زاد التشابه.
قد يكون بطيئاً على المشاريع الكبيرة بسبب استخدام النماذج. جرب على جزء من المشروع أولاً.
PMD يكتشف التكرار الحرفي (نفس النص)، بينما Slopo يكتشف التكرار الدلالي (نفس المعنى بشكل مختلف).
إذا استخدمت نموذجاً محلياً، لا. أما إذا استخدمت OpenAI embeddings، فتحتاج إنترنت.
Slopo أداة واعدة لكنها غير ناضجة. إذا كنت تبحث عن حل فوري، استخدم PMD CPD أو SonarQube. أما إذا كنت مهتماً بتجربة تقنيات جديدة والمساهمة في مشروع مفتوح المصدر، فجرب Slopo وشارك ملاحظاتك مع المطور.
خطوات عملية مرتبة من التشخيص إلى النتيجة
لماذا؟ للحصول على كود الأداة محلياً
كيف؟ git clone https://github.com/rafal-qa/slopo.git && cd slopo
الناتج: مجلد slopo في مسار العمل
لماذا؟ لعزل الاعتماديات وتجنب التعارض
كيف؟ python -m venv venv ثم تفعيلها (source venv/bin/activate في Linux/Mac أو venv\Scripts\activate في Windows)
الناتج: بيئة افتراضية نشطة
لماذا؟ لتثبيت المكتبات المطلوبة (مثل transformers)
كيف؟ pip install -r requirements.txt (إذا وجد) أو pip install .
الناتج: تثبيت المكتبات بنجاح
لماذا؟ لتوفير مفتاح API للنماذج الخارجية (مثل OpenAI)
كيف؟ أنشئ ملف .env وأضف OPENAI_API_KEY=your_key و EMBEDDING_MODEL=text-embedding-ada-002 و THRESHOLD=0.8
الناتج: ملف .env جاهز
لماذا؟ لاكتشاف التكرار غير الحرفي
كيف؟ slopo --path /path/to/your/project --threshold 0.8
الناتج: نتائج بتنسيق JSON أو نصي تحتوي على أزواج الملفات ودرجة التشابه
حوّل القراءة إلى تنفيذ سريع
OPENAI_API_KEY=your_openai_api_key_here EMBEDDING_MODEL=text-embedding-ada-002 THRESHOLD=0.8
slopo --path /path/to/project --threshold 0.75 --model codebert-base --exclude '*.test.py'
اعرف أين يتعثر الناس وكيف تتجنب ذلك
ماذا تفعل حسب حالتك؟
إذا: إذا كان المشروع أقل من 1000 سطر
إذن: إذن لا تحتاج Slopo؛ استخدم أدوات تقليدية
إذا: إذا كنت تبحث عن حل فوري وناضج
إذن: إذن استخدم PMD CPD أو SonarQube
إذا: إذا كنت مهتماً بتجربة تقنيات جديدة
إذن: إذن جرب Slopo على مشروع صغير أولاً
إذا: إذا واجهت خطأ في التثبيت
إذن: إذن راجع قسم الأخطاء الشائعة في المقال
جدول صغير يمنع التسويف
نقاط مختصرة ترجع لها لاحقاً
1. Slopo تستخدم نماذج تضمين (embedding models) مثل CodeBERT.
2. تكتشف التكرار الدلالي (نفس المعنى بشكل مختلف).
3. مكتوبة بلغة Python وتعمل كأداة CLI.
4. مفتوحة المصدر برخصة MIT.
5. تحتاج Python 3.8+ واتصال إنترنت للنماذج الخارجية.
6. README غير واضح؛ التثبيت يتطلب استنتاجات.
7. المشروع لا يزال في مراحله الأولى (0 نجوم على GitHub).
8. يمكن استخدامها مع لغات متعددة حسب النموذج.
إجابات مباشرة على ما يبحث عنه الزائر
تعريفات مختصرة تمنع الالتباس
كود يعيد نفس المنطق لكن بأسماء متغيرات مختلفة أو ترتيب مختلف للدوال.
نموذج تعلم آلي يحول النص إلى متجهات رقمية تمثل المعنى.
واجهة سطر أوامر، تتيح تشغيل الأداة من الطرفية.
قيمة بين 0 و1 تحدد مدى التشابه المطلوب للإبلاغ عن تكرار.
استخدمها كمسارات متابعة داخل نفس الموضوع
تحول القارئ: من مطور يعتمد على أدوات تقليدية لاكتشاف التكرار الحرفي فقط، إلى مطور يدرك أهمية التكرار الدلالي ويستخدم أدوات متقدمة لتحسين جودة الكود.
القيمة الحقيقية تظهر عند العودة والتطبيق
لا تتعامل معه كمقال يُقرأ مرة واحدة. استخدمه كلوحة تشغيل: ارجع للتشخيص عند ظهور المشكلة، وللقوالب عند التطبيق، ولمؤشرات القياس عند المراجعة.
Slopo أداة واعدة لكنها غير ناضجة. إذا كنت تبحث عن حل فوري، استخدم PMD CPD أو SonarQube. أما إذا كنت مهتماً بتجربة تقنيات جديدة والمساهمة في مشروع مفتوح المصدر، فجرب Slopo وشارك ملاحظاتك مع المطور.
حتى يبقى المرجع صالحاً مع الوقت
FAQ