إن تكرار الكود هو مصطلح لبرمجة الحاسوب للتعبير عن تعاقب كود مصدري لأكثر من مرة، سواء أن كان في نفس البرنامج أو في برامج مختلفة مملوكة من قبل نفس الكيان. يعتبر تكرار الكود ظاهرة غير مرغوب بها لعدة أسباب.[1] إن الحد الأدنى المطلوب يُطبق على مقدار من الكود التي يجب أن تظهر بشكل متسلسل حتى تعتبر مكررة فضلاً عن اعتبارها متشابهة بمحض الصدفة. تسلسل تكرار الكود أحيانا تُعرف باستنساخات.
الطرق التالية تشير إلى كيفية تكرار الكود المتسلسلة:
مماثلة حرف مقابل حرف
مماثلة حرف مقابل حرف مع تجاهل المسافات والتعليقات
مماثلة رمز مقابل رمز
مماثلة رمز مقابل رمز مع تغيرات نسبية (مثل: ادخال/حذف/تعديل الرموز)
مماثل وظيفياً
كيفية خلق المكررات
يوجد العديد من الأسباب لظهور تكرار الرموز، ومن ضمنهم:
برمجة النسخ واللصق، حيث يتم نسخ جزء من الكود «لأنه يعمل». وفي معظم الحالات تتضمن تلك العملية تعديلات بسيطة في الكود المنسوخ مثل إعادة تسمية المتغيرات أو إدخال/حذف جزء من الكود.
وجود وظيفة مماثلة بشكل كبير لوظيفة أخرى مطلوبة في برنامج أخر فيكتب المبرمج بشكل مستقل كود مشابه لما هو موجود سابقاً.
غالباً ما يعتبر تكرار الكود دليل على أسلوب برمجة فقير أو كسول. فيعتمد أسلوب الترميز الجيد على إعادة استخدام الكود. قد يكون من الأسرع للبرمجة من خلال تكرار الكود، حيث لا يشغل المبرمج طريقة استخدام الكود أو كيفية استخدامه في المستقبل. تكمن الصعوبة في أن التطوير الأصلي هو جزء صغير من دورة حياة المنتج، وباستخدام تكرار الكود تتضاعف تكاليف الصيانة. بعض المشاكل المحددة هي:
تضخيم الكود يؤثر على الفهم: غالباً ما يؤدي تكرار الكود إلى خلق أقسام من الكود طويلة ومكررة، تختلف فقط في خطوط قليلة أو حروف. وهذا الطول قد يؤدي إلى صعوبة فهم الكود بشكل سريع. وهذا يتضاد مع مبدأ «أفضل ممارسة» لـتحليل الكود.
إخفاء الغرض: تكرار أقسام كبيرة من الكود المتماثلة قد يخفي كيف يختلف كل كود عن الأخر، وبالتالي، يختفي الغرض المحدد لكل قسم من الكود. غالباً ما يكون الاختلاف الوحيد في محيط المعامل. وأفضل ممارسة في هذه الحالة هي إعادة استخدام روتين فرعي.
تحديث الحيود: يناقض تكرار الكود مبدأ أساسي من نظرية قاعدة البيانات: تجنب التكرار. عدم التقيد يتحمل تحديث الحيود، والذي يزيد من تكلفة الصيانة، لأن أي تعديل يطرأ على أي كود يجب أن يُطبق على كل تكرار بشكل منفرد. وفي أفضل الحالات، يتم ضرب وقت الكويد والاختبار في عدد التكرارات. وفي أسواء الحالات، بعض المواقع لا يتم تحديثها، وعلى سبيل المثال قد تظهر الأخطاء البرمجية المُعتقد أنه تم إصلاحها في الأماكن المكررة لشهور أو سنوات. وأفضل ممارسة هنا هي مكتبة برمجية.
اكتشاف تكرار الرموز
تم اقتراح عدد من الخوارزميات المختلفة لاكتشاف تكرار الكود. على سبيل المثال: