مرساة القارب.
مرساة القارب كود أو عتاد يبقى في النظام رغم انتفاء الحاجة إليه، فيُربك القائمين على الصيانة ويُبطئ البناء.
في هندسة البرمجيات، مرساة القارب (boat anchor) هي جزء من الكود — أو من العتاد في حالات أقل — يبقى في النظام رغم أنه لم يعد يؤدي أي غرض. والاسم استعارة لشيء متقادم وعديم الفائدة وثقيل، استخدامه المفيد الوحيد هو إلقاؤه في الماء مرسىً للقارب. وقد أُطلق المصطلح أولاً على أجهزة الراديو والحواسيب القديمة الثقيلة، وهناك مصطلحات مماثلة مثل الطوبة (brick) ومصد الباب (doorstop) وثقالة الورق (paperweight).
في البرمجيات
تم توسيع مصطلح مرساة القارب ليشمل البرمجيات والكود المصدري الذي يُترك في قاعدة كود النظام، عادةً في حال الحاجة إليه لاحقاً. هذا مثال على النمط المضاد وبالتالي يمكن أن يسبب العديد من المشاكل للأشخاص الذين يحاولون صيانة البرنامج الذي يحتوي على الكود المتقادم. تكمن المشكلة الرئيسية في حقيقة أن المبرمجين سيواجهون صعوبة في التمييز بين الكود المتقادم الذي لا يفعل شيئاً والكود الفعال الذي يعمل.
على سبيل المثال، قد يبحث مبرمج عن خطأ في نظام معالجة المدخلات الخاص بالبرنامج، لذلك يبحث في الكود عن الكود الذي يرتبط بـ واجهة برمجة تطبيقات (API) معالجة المدخلات. من الواضح أنه إذا واجه المبرمج كود معالجة مدخلات متقادم، فقد يبدأ في تعديله وتصحيحه، مما يهدر وقتاً ثميناً قبل أن يدرك أن الكود الذي يعمل عليه لا يتم تنفيذه أبداً وبالتالي ليس جزءاً من المشكلة التي يحاول حلها. وتشمل المشاكل الأخرى أوقات تجميع أطول وخطر قيام المبرمجين بربط كود فعال بالكود الميت بالخطأ، مما يعيد إحيائه عن غير قصد.
الحل الموصى به للتعامل مع مرساة القارب في الكود المصدري هو إزالتها من قاعدة الكود ووضعها في مكان منفصل بحيث يمكن الرجوع إليها إذا لزم الأمر، ولكن لن يتم تجميعها أو الخلط بينها وبين الكود الفعال. (على سبيل المثال، حذفها مع العلم أنها مخزنة في نظام التحكم في الكود المصدري الخاص بالمشروع)
مثال
أُوقف الإرسال بالفاكس منذ سنوات، لكن الحقل الذي يحمل البوابة والدالة التي كانت تستخدمه لا يزالان في الصنف. فعلى كل قارئ أن يكتشف بنفسه أن sendByFax لا تُستدعى أبداً، بينما يظل الصنف معتمداً على LegacyFaxGateway.
class InvoiceService {
// أُوقف الإرسال بالفاكس في 2019
private final LegacyFaxGateway faxGateway = new LegacyFaxGateway();
String send(Invoice invoice) {
return EmailSender.send(invoice);
}
// أُبقي عليه "تحسباً"؛ لا شيء يستدعيه
String sendByFax(Invoice invoice) {
return faxGateway.transmit(invoice.toFaxPage());
}
}
يُحذف الكود غير المستخدم بدلاً من تحويله إلى تعليق؛ وإذا احتيج إليه يوماً أمكن استرجاعه من نظام التحكم في الإصدارات (انظر أيضاً الكود الميت).
class InvoiceService {
String send(Invoice invoice) {
return EmailSender.send(invoice);
}
}
مقتبس من مقالة ويكيبيديا “Boat anchor (metaphor)” (المراجعة 1258854358)، والمتاحة بموجب رخصة CC BY-SA 4.0؛ تمت ترجمة النص وتحريره وإضافة أمثلة.