الرئيسة
عن الشركة
الخدمات والمنتجات
أشقاؤنا
عملاؤنا وشركاؤنا
مكتبة شور
مقدمة في هندسة البرمجيات 5-5 

ما هي منهجيات هندسة البرمجيات ؟

إن منهجية هندسة البرمجيات هي عبارة عن أسلوب منظم في تطوير البرمجيات، ويهدف إلى تسهيل إنتاج منتجات برمجية عالية الجودة، وبتكلفة معقولة.

لقد كانت أولى هذه المنهجيات هي التحليل الهيكلي (DeMarco ,1978( ومنهجية JSD (Jackson,1983).

تناولت هذه المنهجيات النظام من وجهة نظر وظيفية، أي أنها تهتم بوظائف النظام، لذلك يطلق عليها أحيانًا المنهجيات وظيفية التوجه (Function-oriented), وهي ما زالت تستخدم إلى الآن على نطاق واسع. ومع الأيام، أخذت شعبية هذه المنهجيات بالتراجع لحساب المنهجيات غرضية التوجه (Object oriented) التي ظهرت في الثمانينات وازداد انتشارها بشكل واسع في تسعينات القرن الماضي وذلك بفضل الأساليب التي ابتكرها العديد من مهندسي البرمجيات مثل Rambaugh و Booch , واليوم تم توحيد هذه المنهجيات في أسلوب موحد تدور فكرته الأساسية حول لغة النمذجة الموحدة  (Unified modeling language UML).

والسؤال الذي قد تطرحه هنا: ما هي أفضل هذه المنهجيات ؟

ونجيب قائلين أنه ليس هنالك من منهجٍ مثالي يلائم كل الحالات، إذ أن لكل منهج فوائده في مجال معين دون غيره. يمكن أن تكون المنهجيات غرضية التوجه - على سبيل المثال – ذات فائدة جمة عند بناء التطبيقات التفاعلية، ولكنها في المقابل، سيئة جدًا عند تطبيقها على أنظمة الزمن الحقيقي. ولكن تشترك جميع هذه المنهجيات بفكرة أساسية واحدة، وهي تطوير نماذج (Models) للنظام الذي ندرسه ونحلله، بحيث يكون بإمكاننا تمثيل هذه النماذج بشكل رسومي (Graphically).

تصور هذه النماذج توصيف وتصميم النظام. تحتوي كل منهجية من هذه المنهجيات على عدد من العناصر المختلفة كما هو موضح بهذا الجدول

العنصر

الشرح

مثال

نماذج النظام

 

ما هي أنواع النماذج التي يجب أن نطورها من أجل تمثيل النظام؟ وما هي الرموز الاصطلاحية (Notation) المستخدمة لبناء هذه النماذج؟

 

نموذج الأغراض Object Model ، نموذج تدفق

المعطيات، نموذج الحالة State Model...الخ.

 

القواعد

 

جملة القيود المفروضة على نماذج النظام

 

لكل كيان في نموذج النظام

اسم، وهذا الاسم يجب أن يكون

وحيد.

 

التوصيات

 

هي مجموعة من الممارسات التجريبية heuristics التي تساعدنا على تصميم النظام بشكل جيد. وبالتالي فإن النماذج التي تحقق هذه التوصيات

ستكون منتظمة بشكل جيد.

يجب ألا يحتوي أي غرض Object على  أكثر من 7 أغراض فرعية.

دليل الإجرائية

 

هي مجموعة من الممارسات والنشاطات التي يجب أن تلتزم بها عند تطويرنا لنماذج النظام

يجب أن يتم توثيق واصفات

الغرض قبل تحديد عملياته.

ما هي الأدوات CASE ؟

نقصد بهندسة البرمجيات بمعونة الحاسب (Computer-Aided Software Engineering CASE)  تلك الطائفة الواسعة من البرامج التي تستخدم لدعم نشاطات إجرائية البرمجيات التحليل والنمذجة والتنقيح والاختبارات.

تترافق كل المنهجيات - اليوم - مع مجموعة من الأدوات المساندة CASE مثل محررات رسم المخططات ووحدات التحليل التي تتأكد من توافق النماذج مع قواعد المنهجية ومولدات التقارير التي تساعدنا على كتابة التوثيق, بل إن بعض أدوات أصبحت قادرة على توليد الشيفرة المصدرية (code) للبرنامج انطلاقًا من نماذج النظام.

ماذا نقصد بالبرمجة الجيدة ؟

هناك جملة من الواصفات التي يجب أن تتحلى بها البرمجية حتى نقول أنها برمجية جيدة أو ذات جودة عالية. أولى هذه الواصفات هي إنجازها للوظائف المطلوبة منها على أكمل وجه. أما الواصفات الأخرى - والتي ندعوها بواصفات الجودة أو بالواصفات غير الوظيفية - فهي تتعلق بسلوك البرمجية (عندما توضع قيد العمل) أو بهيكلتها (تنظيم الشيفرة المصدرية والوثائق الخاصة بها). ومن الأمثلة عن هذه الواصفات نجد سرعة استجابة البرنامج لطلبات الزبون ومدى سهولة فهم الشيفرة المصدرية...الخ.

يوضح الجدول أدناه الواصفات التي يجب أن تحققها البرمجية الجيدة.

هناك بعض الواصفات التي تتعلق بمجال تطبيق النظام، فمثلا يجب أن يتميز النظام المصرفي (Banking system) بدرجة عالية من الأمن، أما الألعاب التفاعلية فيجب أن تكون سريعة الاستجابة لأوامر المستخدم، أما نظام مقسم هاتف فيتوجب عليه أن يتمتع بدرجة وثوقية عالية.

نقول عن النظام الذي يحقق الواصفات المذكورة بأنه "برمجية جيدة".

الواصفات الأساسية للبرمجية الجيدة

الواصفة

الشرح

سهولة الصيانة (Maintainability)

يجب أن تتميز البرمجية الجيدة بسهولة الصيانة وهذا يعني أنه بإمكانها أن تتطور بسهولة لتتوافق مع المتطلبات المتغيرة. وتعتبر هذه الميزة بالغة الأهمية لأن التغير هو أمر حتمي في عالم يتغير كل يوم.

الاعتمادية (Dependability)

 

يجب ألا يسبب النظام أي ضرر كبير في حال إخفاقه.

 

الفاعلية (Efficiency)

 

يجب ألا يكون النظام مفرطاً في استهلاكه للموارد الحاسوبية مثل الذاكرة

والمعالج. تشتمل الفاعلية على عدد من الجوانب ذات الصلة بالأداء مثل:

زمن الاستجابة، زمن المعالجة، استهلاك الذاكرة...الخ.

 

سهولة الاستخدام (Usability)

 

يجب أن تكون البرمجية سهلة الاستخدام من قبل زبونها. إن سهولة الاستخدام تضم جانبين:

1-      تصميم ملائم لواجهات الاستخدام

2-      توثيق جيد للبرمجية

 

 

 

 

 

 

 

 

 

 

 

 

 

 


ما هي التحديات الأساسية التي تواجه هندسة البرمجيات في هذا القرن ؟

مع مطلع الألفية الجديدة تواجه هندسة البرمجيات التحديات التالية:

1- التنوع (Distributed systems): تتحول البرمجيات، يومًا بعد يوم، إلى أنظمة موزعة تعمل على أجهزة حاسوبية من أنواع مختلفة وبأنظمة تشغيل وبرامج دعم متباينة. وكم من مرة أردنا فيها المكاملة بين نظامٍ برمجيٍ جديدٍ وبين نظامنا القديم. أي أننا نريد المكاملة بين أنظمة برمجية مكتوبة بلغات برمجة مختلفة. يفرض هذا التحدي علينا -كمهندسي برمجيات- أن نوجد تقنيات جديدة لتحقيق التجانس بين توليفة من العناصر المتباينة جدًا.

2- زمن التسليم: تستغرق العديد من تقنيات هندسة البرمجيات وقتًا طويلا لإنجاز تطوير البرمجيات وذلك لضمان جودها. إلا أن الإيقاع المتسارع لعالم اليوم آخذ في الازدياد يومًا بعد يوم، ونجد ذلك خصوصًا في عالم الأعمال التجارية القائمة على البرمجيات الداعمة لها. إن هذا التغير المتسارع يفرض على تطوير هذه البرمجيات تسارعًا مماثلا. يفرض تحدي زمن التسليم علينا تطوير أو تعديل البرمجيات بسرعة هائلة دون أن يؤثر ذلك على جودتها.

3- الثقة: دخلت البرمجيات العديد من مجالات حياتنا وهذا يفرض عليها أن تكون جديرة بثقتنا.

إننا نحتاج إلى تعزيز ثقتنا بالأنظمة البعيدة (Remote) التي نصل إليها عبر صفحات ويب أو عبر واجهات خدمات ويب. إذًا لا بد أن نبحث عن تقنياتٍ تجعل من هذه البرمجيات موثوقة حقًا.

م. زاهر الحاج حسين (بتصرف عن  Ian Sommerville)