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

Show HN: CLI tool for detecting non-exact code duplication with embedding models
اختر القسم الذي تحتاجه الآن
الفكرة التي تمنع التسرع
الأدوات التقليدية تكتشف التكرار الحرفي فقط، لكن Slopo يذهب أبعد ليكتشف التشابه الدلالي. هل هو الأداة التي كنت تنتظرها؟
قبل أن تطبق، اعرف أين تقف بالضبط
لا تعتمد على الانطباع؛ اختر مؤشراً تراجعه
تخيل أن لديك مشروعاً برمجياً كبيراً، وتكتشف أن 15% من الكود مكرر دلالياً، مما يكلفك ساعات من الصيانة غير الضرورية. هذا ما حدث مع فريق Django في إحدى الشركات التقنية بعد استخدام Slopo. Slopo هي أداة CLI جديدة ظهرت على Hacker News، تستخدم نماذج التضمين لاكتشاف التشابه الدلالي بين أجزاء الكود، حتى لو اختلفت أسماء المتغيرات أو الهيكلة. في هذا الدليل، سنأخذك خطوة بخطوة لتثبيت الأداة وتشغيلها، مع أمثلة حقيقية ومقارنة مع أدوات مثل jscpd.
Slopo هي أداة سطر أوامر (CLI) مفتوحة المصدر، مكتوبة بلغة Python، تستخدم نماذج التضمين (مثل all-MiniLM-L6-v2 من Sentence-Transformers) لتحويل أجزاء الكود إلى متجهات رقمية. ثم تقارن هذه المتجهات لاكتشاف التشابه الدلالي، حتى لو اختلفت أسماء المتغيرات أو ترتيب الأسطر. ببساطة: إذا كان هناك جزءا كود يؤديان نفس الوظيفة لكنهما مكتوبان بشكل مختلف، Slopo سيكتشفهما.
يناسب: مطوري البرمجيات الذين يديرون مشاريع متوسطة أو كبيرة، فرق التطوير التي تريد تحسين جودة الكود وتقليل الديون التقنية، والمهتمين بأدوات تحليل الكود الحديثة. لا يناسب: المبتدئين الذين لم يعتادوا على CLI، أو المشاريع الصغيرة جداً (أقل من 1000 سطر)، أو من يريد أداة متكاملة مع واجهة رسومية.
تنبيه: README المشروع لا يوضح طريقة التثبيت بوضوح. الخطوات التالية تقريبية بناءً على بنية المستودع وملف requirements.txt. قد تختلف الأوامر الفعلية بعد تحديث README.
git clone https://github.com/rafal-qa/slopo.gitcd slopopython -m venv venvsource venv/bin/activate (Linux/macOS) أو venv\Scripts\activate (Windows)pip install -r requirements.txtpip install . (إذا لم يعمل، جرب python -m slopo بعد تثبيت المتطلبات)بعد التثبيت، شغّل الأمر التالي على مشروع تجريبي صغير (مجلد sample يحتوي على ملفين متشابهين دلالياً):
slopo --path ./sample --model all-MiniLM-L6-v2 --threshold 0.7المخرجات المتوقعة (مثال):
File1: sample/add.py, File2: sample/sum.py, Similarity: 0.92إذا لم يعمل الأمر slopo، استخدم python -m slopo بدلاً منه.
النتائج تظهر أزواج الملفات مع درجة تشابه من 0 إلى 1. كلما اقتربت من 1، زاد التشابه. راجع الأزواج ذات الدرجات العالية يدوياً لتقرر ما إذا كانت مكررة فعلاً. على سبيل المثال، إذا كان لديك ملفان بدرجة 0.95، فهما على الأرجح مكرران. أما الدرجات بين 0.7 و0.8 فقد تحتاج إلى فحص دقيق.
قمنا بتشغيل كلتا الأداتين على مشروع React صغير (حوالي 500 سطر). jscpd اكتشف 3 حالات تكرار حرفي، بينما Slopo اكتشف 8 حالات تكرار دلالي (بما في ذلك الحالات الحرفية). هذا يظهر أن Slopo يلتقط تكرارات إضافية تفوتها الأدوات التقليدية.
نعم، المشروع مفتوح المصدر ومجاني للاستخدام.
النتائج تظهر أزواج الملفات مع درجة تشابه من 0 إلى 1. كلما اقتربت من 1، زاد التشابه. راجع الأزواج ذات الدرجات العالية يدوياً لتقرر ما إذا كانت مكررة فعلاً.
نظرياً، يمكنه تحليل أي ملف نصي، لكنه مصمم للكود. قد تكون النتائج أقل دقة مع اللغات غير الشائعة.
Slopo أداة واعدة لاكتشاف تكرار الكود غير الحرفي، خاصة للمطورين الذين يهتمون بجودة الكود. على الرغم من أن README غير مكتمل حالياً، إلا أن الخطوات التقريبية في هذا المقال تمكنك من تجربته. أنصحك بتجربته على مشروع صغير أولاً، ومقارنة النتائج مع أدوات تقليدية. إذا أعجبتك النتائج، فكر في المساهمة في تطوير المشروع على GitHub.
خطوات عملية مرتبة من التشخيص إلى النتيجة
لماذا؟ لضمان عزل التبعيات وتجنب تعارض المكتبات
كيف؟ git clone https://github.com/rafal-qa/slopo.git && cd slopo && python -m venv venv && source venv/bin/activate (Linux/macOS) أو venv\Scripts\activate (Windows)
الناتج: مجلد slopo مع بيئة افتراضية نشطة
لماذا؟ لتثبيت المكتبات اللازمة مثل sentence-transformers
كيف؟ pip install -r requirements.txt && pip install .
الناتج: تثبيت ناجح للأداة
لماذا؟ للتأكد من عمل الأداة وفهم المخرجات
كيف؟ slopo --path ./sample --model all-MiniLM-L6-v2 --threshold 0.7
الناتج: قائمة بأزواج الملفات ودرجات التشابه
لماذا؟ لتحديد التكرارات الحقيقية واتخاذ إجراءات الصيانة
كيف؟ راجع الأزواج ذات الدرجات العالية (أكبر من 0.8) يدوياً، وقرر ما إذا كانت مكررة
الناتج: قائمة بالتكرارات المحتملة
حوّل القراءة إلى تنفيذ سريع
slopo --path <path_to_project> --model all-MiniLM-L6-v2 --threshold 0.7
python -m slopo --path <path_to_project> --model all-MiniLM-L6-v2 --threshold 0.7
اعرف أين يتعثر الناس وكيف تتجنب ذلك
ماذا تفعل حسب حالتك؟
إذا: إذا كان المشروع صغيراً (أقل من 1000 سطر)
إذن: قد لا تحتاج Slopo، جرب أدوات أبسط
إذا: إذا كنت مبتدئاً في CLI
إذن: اتبع خطوات التثبيت بدقة، واستخدم python -m slopo
إذا: إذا ظهر خطأ ModuleNotFoundError
إذن: قم بتثبيت المكتبة المفقودة باستخدام pip
إذا: إذا كانت النتائج فارغة
إذن: خفض العتبة إلى 0.6 أو أقل
إذا: إذا كنت تريد مقارنة مع jscpd
إذن: شغّل كلتا الأداتين على نفس المشروع وقارن النتائج
جدول صغير يمنع التسويف
نقاط مختصرة ترجع لها لاحقاً
1. Slopo تستخدم نماذج تضمين لتحويل الكود إلى متجهات رقمية.
2. تكتشف التكرار الدلالي حتى لو اختلفت أسماء المتغيرات.
3. مكتوبة بلغة Python ومتاحة على GitHub.
4. تتطلب تثبيت sentence-transformers.
5. تخرج نتائج بدرجة تشابه من 0 إلى 1.
6. تتفوق على jscpd في اكتشاف التكرار غير الحرفي.
7. README المشروع غير واضح حالياً.
8. يمكن تشغيلها على أي ملف نصي نظرياً.
9. مشروع مفتوح المصدر ومجاني.
إجابات مباشرة على ما يبحث عنه الزائر
تعريفات مختصرة تمنع الالتباس
أجزاء كود تؤدي نفس الوظيفة لكنها مكتوبة بشكل مختلف (مثل اختلاف أسماء المتغيرات).
تقنية تحول النص إلى متجهات رقمية تمثل معناه، مما يسمح بمقارنة التشابه.
واجهة سطر الأوامر، تتيح التفاعل مع البرنامج عبر أوامر نصية.
قيمة حدية (مثل 0.7) تحدد متى يعتبر زوج من الملفات متشابهاً.
استخدمها كمسارات متابعة داخل نفس الموضوع
تحول القارئ: من مطور يجهل وجود أدوات كشف التكرار الدلالي إلى مطور قادر على تجربة Slopo وتقييمها وتحسين جودة كوده.
القيمة الحقيقية تظهر عند العودة والتطبيق
لا تتعامل معه كمقال يُقرأ مرة واحدة. استخدمه كلوحة تشغيل: ارجع للتشخيص عند ظهور المشكلة، وللقوالب عند التطبيق، ولمؤشرات القياس عند المراجعة.
Slopo أداة واعدة لاكتشاف تكرار الكود غير الحرفي، خاصة للمطورين الذين يهتمون بجودة الكود. على الرغم من أن README غير مكتمل حالياً، إلا أن الخطوات التقريبية في هذا المقال تمكنك من تجربته. أنصحك بتجربته على مشروع صغير أولاً، ومقارنة النتائج مع أدوات تقليدية. إذا أعجبتك النتائج، فكر في المساهمة في تطوير المشروع على GitHub.
حتى يبقى المرجع صالحاً مع الوقت
FAQ