في برمجة الحاسوب، يُعتبر التماسك مقياسا لمدى قوة ارتباط الوظيفة التي يتم التعبير عنها بواسطة كود المصدر من وحدة البرمجية.تختلف وسائل قياس التماسك من المقاييس النوعية التي تقوم بتصنيف نص المصدر الذي يتم تحليله باستخدام مقياس تقييم عام ذو منهاج هرمنتيكي إلى المقاييس الكمية والتي تفحص الخصائص النصية لكود المصدر من أجل التوصل إلى ناتج تماسك رقمي.التماسك هو النوع الترتيبي من القياس ويتم التعبير عنه على أنه "تماسك عالي" أو "تماسك منخفض" عند مناقشته. يُفضل الوحداث ذات التماسك العالي لأن التماسك العالي مرتبط بالصفات المرغوبة المتنوعة من البرمجيات بما فيها القوة والدقة وإعادة الاستخدام والمفهومية بيما يرتبط التماسك المنخفض بالصفات الغير مرغوبة مثل صعوبة الصيانة وصعوبة الفحص وصعوبة إعادة الاستخدام وحتى صعوبة الفهم.
غالبا مايتناقض التماسك مع الاعتمادية وهي مفهوم مختلف. ومع ذلك يقترن التماسك غالبا بالاعتمادية الضعيفة والعكس صحيح. تم ابتكار موازين جودة البرمجيات للاعتمادية والتماسك بواسطة لاري قسطنطين [1] على أساس خصائص ممارسات البرمجة الجيدة والتي تقلل نفقات الصيانة والتعديل.
التماسك العالي
في برمجة الحاسوب، التماسك عبارة عن مقياس لمدى قوة ارتباط أو تركيز مسؤوليات وحدة فردية. وكما هو الحال في البرمجة كائنية التوجه، إذا كانت المنهجيات التي تخدم الدرجة المُعطاة تميل إلى التشابه في أوجه عديدة، يقال على الدرجة أن لها تماسك عالي. في المنظومة عالية التماسك، تتزايد اعتمادية الكود واحتمالية إعادة استخدامه مرة أخرى، بينما يمكن الإبقاء على التحكم في التعقيد.
يقل التماسك عندما:
- يقل الاشتراك بين الوظائف المُتضمنة في الدرجة.
- تقوم المنهجيات بأنشطة عديدة متنوعة، غالبا باستخدام مجموعات بيانات ]]متفككة [[أو غير مرتبطة ببعضها
عيوب التماسك المنخفض (أو "التماسك الضعيف"):
- زيادة الصعوبة في فهم الوحدات.
- زيادة الصعوبة في صيانة الوحدات لأن التغييرات المنطقية في المجال تؤثر على وحدات عديدة ولأن التغييرات في وحدة واحدة تحتاج إلى تغييرات في الوحدات المتصلة بها.
- زيادة الصعوبة في إعادة استخدام وحدة ما بسبب أن معظم التطبيقات لن تحتاج مجموعة العمليات العشوائية التي يتم تزويدها بواسطة الوحدة.
أنواع التماسك
التماسك عبارة عن مقياس نوعي يتعين فيه قياس كود المصدر باستخدام مقياس تقييم عام من أجل تحديد تصنيف التماسك. أنواع التماسك بالترتيب من الأسوأ إلى الأفضل هي كالتالي:
- تماسك المصادفة (الأسوء)
- وفيه تتجمع أجزاء الوحدة على نحو اعتباطي؛ العلاقة الوحيدة بين الأجزاء هي فقط أنهم تجمعوا سوية (درجة "الأدوات المساعدة" على سبيل المثال)
- التماسك المنطقي
- وفيه تتجمع أجزاء الوحدة لأنها مصنفة بشكل منطقي لتقوم بنفس الشيء، حتى ولو كانت مختلفة في الطبيعة (تجميع كل أنماط معالجة دخل الفأرة ولوحة المفاتيح على سبيل المثال)
- التماسك المؤقت
- يحدث التماسك المؤقت عندما تتجمع أجزاء وحدة ما حسب الطريقة التي يتم معالجتها بها – يتم معالجة تلك الأجزاء في وقت محدد من تنفيذ البرنامج(على سبيل المثال دالة يتم استدعاءها بعد العثور على اعتراض يقوم بغلق الملفات المفتوحة وعمل سجل أخطاء وابلاغ المستخدم)
- التماسك الإجرائي
- حيث تتجمع أجزاء وحدة ما بسبب أنها تتبع تسلسل تنفيذي محدد (على سبيل المثال، دالة تقوم بفحص أذونات الملف ثم تقوم بعد ذلك بفتح الملف)
- التماسك الاتصالي
- حيث تتجمع أجزاء وحدة ما بسبب أنها تعمل على نفس البيانات(على سبيل المثال، وحدة تعمل على نفس سجل المعلومات)
- التماسك التسلسلي
- حيث تتجمع أجزاء وحدة ما بسبب أن خرج أحد الأجزاء هو دخل جزء آخر مثل خط تجميع (على سبيل المثال، دالة تقوم بقراءة البيانات من ملف ثم تقوم بمعالجتها)
- التماسك الوظيفي (الأفضل)
- حيث تتجمع أجزاء وحدة ما بسبب مساهمتها جميعا في مهمة فردية للوحدة محددة بوضوح (على سبيل المثال، ترميز سلسلة XML)
على الرغم من أن التماسك هو نوع ترتيبي من المعايير، إلا أن الترتيب لايعني تقدما ثابتا للتماسك المُحسّن. تُشير الدراسات التي قام بها أشخاص عديدون مثل لاري قسطنطين وإدوارد يوردون وستيف مكونيل [2] إلى أن نوعي التماسك الأوليين هما الأسوء وأن التماسك الاتصالي والتسلسلي جيدان جدا وأن التماسك الوظيفي هو الأفضل.
وبينما يُعتبر التماسك الوظيفي هو أكثر أنواع التماسك المرغوبة إلا أنه قد يتعذر تحقيقه. هناك حالات يكون فيها التماسك الاتصالي هو أعلى مستوى من التماسك يمكن الحصول عليه تحت الظروف.
المراجع
- W. Stevens, G. Myers, L. Constantine, “Structured Design”, IBM Systems Journal, 13 (2), 115-139, 1974.
- Code Complete 2nd Ed.
- Yourdon, E.; Constantine, L L. (1979). Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. copyright 1979 by Prentice-Hall. Yourdon Press.
وصلات خارجية
- Definitions of Cohesion metrics
- Cohesion metrics
- The Practical Guide to Structured Systems Design - CHAPTER 6
- NDepend Software metrics for.NET
- CPPDepend Software metrics for Microsoft Visual Studio C++
- SemmleCode - A code querying tool