بسم الله الرحمن الرحيم
اخواني الاعزاء , اقدم لكم اليوم هذا السيمنار بعنوان هندسة البرمجيات , وهو احد المواضيع التي تطرقنا لها في احد المقررات الجامعية , ولا اخفي اعجابي الشديد بهذا السيمنار لذلك احببت ان انقله لكم للفائدة.
الأهداف Objectives
- تقديم هندسة البرمجيات و توضيح أهميتها
- عرض أجوبة حول أسئلة هندسة البرمجيات
- تقديم قضايا هندسة البرمجيات
- توضيح لماذا تهتم بهندسة البرمجيات
الهندسة Engineering
هو تطبيق العلم و الرياضيات للتصميم و بناء المصنوعات المفيدة للإنسانية
الهندسة المهيكلة Structural Engineering
هي العلم و الفن و التصميم و الإنشاء الاقتصادي و الرشيق للبيانات و الجسور و هياكل البيانات وتكون خاضعة للسلامة
هندسة البرمجيات Software Engineering
هندسة البرمجيات هي علم وفن لتوصيف التصميم و التطبيق و التقييم بصورة اقتصادية و في أقل وقت وتوثيق المراحل و إجراءات التشغيل باستخدام الحاسب .
- اقتصاديا كل الأمم معتمدة علي البرامج
- الاعتماد الأكثر للبرمجيات و النظم علي برامج التحكم
- هندسة البرمجيات معنية بالنظريات و الطرق و الأدوات لتطوير برمجيات محترفة
- نفقات هندسة البرمجيات تمثل جزء هام من الإنتاج القومي الإجمالي (GNP)
تكلفة البرمجيات Software costs
- تسيطر تكلفة البرامج علي تكاليف أي نظام
- تكلفة البرامج علي الحاسبات الشخصية PC أكبر من تكلفة المكونات الصلبة
- تكلفة صيانة البرامج أكبر من تكلفة التطوير
- تكلفة الصيانة للأنظمة طويلة الأمد أكبر عدة مرات من تكلفة التطوير
- هندسة البرمجيات معنية بربحية تطوير البرمجيات
الأسئلة الشائعة عن هندسة البرمجيات FAQs about software engineering
- ما هي البرمجيات ؟
- ما هي هندسة البرمجيات ؟
- ما الفرق بين هندسة البرمجيات و علوم الحاسب ؟
- ما الفرق بين هندسة البرمجيات و هندسة النظم ؟
- ما هي إجرائية تطوير البرمجيات ؟
- ما هو نموذج إجرائية تطوير البرمجيات ؟
- ما هي التكاليف في عملية إنتاج البرمجيات ؟
- ما هي مناهج هندسة البرمجيات ؟
- ما هي الأدوات CASE ؟
- ما هي خصائص البرمجيات الجيدة ؟
- ما هي أهم التحديات التي تواجه هندسة البرمجيات اليوم ؟
ما هي البرمجيات ؟ What is software
هي عبارة عن مجموعة من البرامج إضافة إلي معطيات التوثيق و معطيات التشكيل
- يمكن أن يكون المنتج البرمجي عام أي للسوق بشكل عام أو أن يكون خاص بمعني أنه قد تم تطويره بناءً علي متطلبات زبون معين
- تقسم المنتجات البرمجية ألي نوعين أساسين :
1- المنتجات العامة Generic : تطور لتباع لعدة زبائن مختلفين
2- المنتجات الخاصة Bespoke (custom): تطور لزبون واحد حسب مواصفاته
ما هي هندسة البرمجيات ؟ What is software engineering
هندسة البرمجيات هو ذلك الفرع الهندسي الذي يعني بدراسة جميع جوانب إنتاج البرمجيات
ونقف عند نقطتين هامتين :
- فرع هندسي : مهندسو البرمجيات يتبعوا جانب منظم لعملهم و استخدام الأدوات و التقنيات الملائمة بالاعتماد علي المشكلة المراد حلها ، ويجب أن تكون قيود التطوير و المصادر متوفرة .
- جوانب أنتاج البرمجيات : مهندس البرمجيات يدرس نشاطات غير تقنية مثل إدارة المشاريع البرمجية وتطوير منهجيات جديدة
ما الفرق بين هندسة البرمجيات وعلوم الحاسب ؟ What is the difference between software engineering and computer science
- تهتم علوم الحاسب بدراسة و استنباط النظريات و المنهجيات التي تشكل أساس الأنظمة البرمجية و الحاسوبية
- هندسة البرمجيات تركز علي المشكلات العملية التي يواجهها العاملون في قطاع صناعة البرمجيات
- العديد من نظريات علوم الحاسب تقف عاجزة عن حل المشكلات البرمجية الواقعية المعقدة
ما الفرق بين هندسة البرمجيات وهندسة النظم؟ What is the difference between software engineering and system engineering
- هندسة النظم مهتمة بكل سمات تطوير الأنظمة المعتمدة علي الحاسوب التي تتضمن المكونات الصلبة و البرامج و هندسة الإجراءات
- مهندسو النظم يقومون بفهم النظام و تعريف الهيكلة العامة و مكاملة مكوناته المختلفة وصولا للنظام النهائي
ما هي إجرائية تطوير البرمجيات ؟ What is a software process
- هي مجموعة النشاطات التي تعني بإنتاج المنتج البرمجي
- أي إجرائية برمجية تضم النشاطات التالية :
• التوصيف Specification : في هذه المرحلة يتم توضح ما الذي يقوم به النظام و قيود التطوير
• التطوير Development : في هذه المرحلة يتم تصميم وبرمجة البرمجية
• إثبات الصحة (التحقق) Validation : في هذه المرحلة يتم التأكد من أن البرمجية تنجز وظائف الزبون
• التقييم (تطور) Evolution : في هذه المرحلة يتم إجراء التعديلات علي البرمجية لتنفيذ وظائف أو متطلبات جديدة
ما هو نموذج إجرائية البرمجيات ؟ What is a software process model
- هو أسلوب لتنظيم نشاطات إجرائية البرمجيات وفق طريقة معينة
- يمكن النظر إلي نماذج إجرائية البرمجيات من عدة زوايا (نماذج) :
• نموذج تدفق العمل Workflow perspective : يوضح تسلسل نشاطات إجرائية البرمجية و العلاقات بين هذه الأنشطة
• نموذج تدفق المعطيات Data-flow perspective : يوضح تدفق المعلومات
• نموذج الدور/الفعل Role/action perspective : يوضح الأدوار التي يقوم بها الأشخاص المشاركين
- نماذج إجرائية البرمجية العامة Generic process models هي :
• النموذج الشلالي Waterfall
• التطوير ألتقييمي Evolutionary development
• التحويل ألرسمي Formal transformation
• تكامل المكونات القابلة للاستخدام Integration from reusable components
ما هي تكاليف هندسة البرمجيات ؟ What are the costs of software engineering
- تقريبا 60% من التكلفة هي تكلفة تطوير و 40% تكلفة اختبار ومكاملة للبرامج
- تتجاوز تكلفة التطور(تعديل المنتج البرمجي) غالبا تكلفة التطوير
- التكلفة تعتمد علي النظام الذي يطور و متطلبات وخصائص النظام مثل الأداء و وثوقية النظام
- توزيع التكلفة يعتمد علي نموذج الإجرائية المستخدم في التطوير
ما هي منهجيات هندسة البرمجيات ؟ What are software engineering methods
- هي عبارة عن أسلوب منظم في تطوير البرمجيات يتضمن نماذج النظام ، الملاحظات ، القواعد ، ويهدف إلي تسهيل إنتاج منتجات برمجية عالية الجودة ، وبتكلفة معقولة
- من هذه المنهجيات :
• منهجية وظيفية Structured: تتناول النظام من وجهة نظر وظيفية ( تهتم بوظائف النظام )
• منهجية غرضية التوجه Object Oriented
- تحتوي كل منهجية من هذه المنهجيات علي عدد من العناصر المختلفة و هي :
• نماذج النظام Model descriptions: توضح النماذج الرسومية التي توصف النظام مثل نموذج تدفق البيانات و نموذج الحالة
• القواعد Rules : جملة القواعد المفروضة علي نماذج النظام
• التوصيات Recommendations : هي مجموعة الممارسات (النصائح) التي تساعد علي التصميم الجيد
• دليل الإجرائية Process guidance : هي مجموعة النشاطات التي يجب الالتزام بها لتطوير نماذج النظام
ما هي CASE (هندسة البرمجيات بمساعدة الحاسب ) ؟ What is CASE (Computer-Aided Software Engineering)
- هي مجموعة من الأدوات البرمجية التي تستخدم لدعم نشاطات إجرائية البرمجيات مثل رسم المخططات وتوليد التقارير
- أنظمة هندسة البرمجيات بمساعدة الحاسب تستخدم لدعم الطرق
- تنقسم الـ ACSE إلي :
• الأدوات الكبيرة Upper-CASE : وهي أدوات لدعم نشاطات العمليات المبكرة من المتطلبات و التصميم
• الأدوات الصغيرة Lower-CASE : وهي أدوات لدعم النشاطات التالية مثل البرمجة و تصحيح الأخطاء و الاختبار
ما هي خصائص البرمجيات الجيدة ؟ What are the attributes of good software
- هناك جملة من المواصفات التي يجب أن تتحلي بها البرمجية حتى نقول أنها برمجية جيدة مثل تحقيق الوظيفة و الأداء المطلوب للمستخدم و أن تكون قابلة للاستعمال وموثوقة و قابلة للدعم و الصيانة
- المواصفات التي يجب أن تحققها البرمجية الجيدة هي :
• سهولة الصيانة Maintainability : البرمجية بإمكانها أن تتطور بسهولة لتتوافق مع المتطلبات المتغيرة
• الاعتمادية Dependability : البرمجية تكون جديرة بالثقة و لا تسبب ضرر كبير في حال إخفاقها
• الفاعلية Efficiency : البرمجية يجب أن لا تكون مفرطة في استهلاك موارد الحاسب مثل الذاكرة و المعالج
• سهولة الاستخدام Usability : البرمجية يجب أن تكون سهلة الاستخدام من قبل الزبون للغرض الذي صممت من اجله
ما هي التحديات التي الأساسية تواجه هندسة البرمجيات ؟ What are the key challenges facing software engineering
- التحول في الأنظمة القديمة و تحول التطور و التحول في المتطلبات مع تقليل زمن التسليم
- ويمكن تمثيل هذه التحديات بالتالي :
• تحدي الأنظمة القديمة Legacy challenge : الأنظمة القديمة يجب أن تبقي وتجدد
• تحدي عدم التجانس (التنوع) Heterogeneity challenge : الأنظمة تعمل علي أجهزة حاسوبية من أنواع مختلفة وبأنظمة تشغيل وبرامج دعم مختلفة
• تحدي زمن التسليم Delivery challenge : هناك ضغط متزايد للتسليم السريع للبرامج
هندسة البرمجيات و المسؤوليات الأخلاقية و المهنية Professional and ethical responsibility
- تتضمن هندسة البرمجيات مسؤوليات أوسع من تطبيق المهارات التقنية
- مهندسو البرمجيات يجب أن يتصرفوا بمسؤوليات أخلاقية صادقة ليحترموا كمحترفين
- السلوك الأخلاقي أكثر من سهل بتأييد القانون
قضايا المسؤولية الأخلاقية Issues of professional responsibility
- الجوانب الأخلاقية التي يجب أن يلتزم بها مهندس البرمجيات :
• السرية Confidentiality : مهندسو البرمجيات يجب أن يحترموا سرية الزبائن و الرؤساء سواء كان هناك ميثاق أخلاقي يفرض ذلك أم لم يكن
• الكفاءة Competence : مهندس البرمجيات يجب أن يقر و يعترف بإمكانياته و معارفه و ألا يدعي علما لا يعلمه أو معرفة تقع خارج مجال اختصاصه
• حقوق الملكية الفكرية Intellectual property rights : مهندسو البرمجيات يجب أن يكونوا واعين لكل القوانين المتعلقة بحقوق الملكية الفكرية مثل براءة الاختراع و حقوق النسخ
• سوء استخدام الحواسيب Computer misuse : مهندسو البرمجيات يجب أن لا يستعملوا مهاراتهم التقنية في إساءة استخدام حواسيب الغير . ابتداء من أبسط الأمور (أن تلعب بعض الألعاب علي جهاز رئيسك ) إلي أجسمها ( نشر الفيروسات )
الميثاق الأخلاقي ACM/IEEE ACM/IEEE Code of Ethics
- المنظمات ( الجمعيات ) المحترفة في الولايات المتحدة تعاونت لصياغة ميثاق أخلاقي لهندسة البرمجيات
- يتوجب علي جميع أعضاء هذه الجمعيات الالتزام بهذا الميثاق و بشكل صارم
- يحتوي هذا الميثاق علي ثمانية مبادئ تعلقت بسلوك وقرارات مهندسي البرمجيات بكل مراكزهم من ممارسين ومدربين و مشرفين وصانعي سياسات و متدربين و طلاب
الميثاق الأخلاقي Code of ethics – preamble
مقدمة introduction
- تلخص هذه النسخة المختصرة المبادئ الأخلاقية علي مستوي عالي من التجريد ، و قد تمت إضافة تفاصيل و فقرات شرطية إلي هذه المبادئ في النسخة المفصلة من هذا الميثاق ، بحيث يشرح لنا هذا الأخير كل الممارسات المهنية و المعايير الأخلاقية التي يتوجب علينا الالتزام بها كمحترفين في هندسة البرمجيات
- تشكل المبادئ وشروحاتها ميثاقا متكاملا لأخلاقيات هذه المهنة
- يتوجب علي مهندس البرمجيات الالتزام بإجراء نشاطات التحليل ، و التوصيف ، و التصميم و التطوير و الاختبار و الصيانة و فق أسلوب صحيح ومفيد و يحترم هذه المهنة و بشكل يتلاءم مع سلامة و صحة و رفاه المجتمع
- لذا فإن علي مهندس البرمجيات أن يلتزم بالمبادئ الثمانية التالية :
1- المجتمع PUBLIC : يلتزم مهندس البرمجيات بالعمل و فق أسلوب يتسق مع المصلحة العامة
2- الزبائن و الرؤساء CLIENT AND EMPLOYER : علي مهندس البرمجيات أن يحترم الزبون و الرئيس بشكل يتفق مع المصلحة العامة
3- المنتج PRODUCT : يتوجب علي مهندس البرمجيات أن يضمن بأن منتجه يحترم المعايير المهنية قدر الإمكان
4- اتخاذ القرارات JUDGMENT : يجب أن يحافظ مهندس البرمجيات علي قدر واسع من الاستقلالية في اتخاذه لقراراته
5- الإدارة MANAGEMENT : يتوجب علي مهندس البرمجيات عند توليه منصبا قيادياً أو إدارياً بأن يرفع من شأن القيم الأخلاقية ضمن المؤسسة في تطوير وصيانة البرمجيات
6- المهنة PROFESSION : يجب ألا يسئ مهندس البرمجيات لسمعة هذه المهنة إطلاقاً
7- الزملاء COLLEAGUES : اتخاذ موقف عادل اتجاه الزملاء دون إفراط أو تفريط
8- الذات SELF : تنمية الحس الأخلاقي و متابعة آخر التطورات في مجال هندسة البرمجيات
المشكلات الأخلاقية Ethical dilemmas
- أكبر المعضلات التي يواجهها مهندسي البرمجيات هي :
• خلاف من حيث المبدأ بسياسات الإدارة العليا
• رب العمل يتصرف بطريقة لا أخلاقية و يصدر نظام الأمان الحرج بدون إنهاء اختبار النظام
• الاشتراك في تطوير أنظمة الأسلحة العسكرية أو الأنظمة النووية
رؤوس أقلام
- هندسة البرمجيات هو الحقل الهندسي الذي يجمع بين جوانب إنتاج البرمجيات
- يتألف المنتج البرمجي من مجموعة برامج و التوثيق الخاص بها . و أهم صفات المنتج البرمجي هي : سهولة الصيانة ، الوثوقية ، الفاعلية ، سهولة الاستخدام
- إجرائية البرمجيات هي جملة النشاطات المسؤولة عن تطوير البرمجيات . إن أي إجرائية برمجيات يجب أن تشمل علي النشاطات التالية : التوصيف ، التطوير ، إثبات الصحة ، التطور
- المنهجيات هي أساليب منظمة في إنتاج البرمجيات . فهي تقدم لنا العديد من الاقتراحات حول الأسلوب الذي يجب أن نتبعه في تطوير برمجية ما ، و تقدم لنا العديد من الرموز الاصطلاحية التي يمكن أن نستفيد منها ، إضافة إلي نماذج النظام التي يجب أن نطورها و القواعد التي تحكم هذه النماذج
- أدوات CASE هي مجموعة من الأنظمة البرمجية التي تساعدنا علي إجراء النشاطات المتعلقة بتطوير البرمجيات مثل رسم المخططات و توليد التقارير و متابعة تقدم المشروع ... الخ
- لا يجب علي مهندس البرمجيات أن يهتم بالجوانب العلمية المهنية ، بل عليه أن يضطلع بالمسؤولية الأخلاقية التي تمليها عليه هذه المهنة
- تقوم العديد من الجمعيات المهنية بإصدار مواثيق أخلاقية تكون بمثابة المعايير الأخلاقية التي يجب أن يلتزم بها أعضاؤها .






