📚 ممارسات وأخلاقيات هندسة البرمجيات

الفصل الأول: مقدمة في هندسة البرمجيات

SE201 هندسة البرمجيات الفصل الدراسي الأول 2024

🎯 مخرجات تعلم المقرر

CLO1: التعرف على مبادئ هندسة البرمجيات

فهم وتحديد مبادئ هندسة البرمجيات، مراحل دورة الحياة، العمليات، والأنشطة التي تشكل أساس تطوير البرمجيات الاحترافي.

CLO3: إظهار الفهم المهني والأخلاقي

إظهار فهم للمسؤوليات المهنية والأخلاقية في هندسة البرمجيات، بما في ذلك الالتزام بمواثيق الشرف واتخاذ القرارات الأخلاقية.

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

التعريف

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

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

حقيقة مهمة: اقتصادات جميع الدول المتقدمة تعتمد على البرمجيات. أنظمة أكثر وأكثر أصبحت تُتحكم بها بالبرمجيات، مما يجعل هندسة البرمجيات تخصص حيوي في المجتمع الحديث.

💰 الأثر الاقتصادي

النفقات على البرمجيات تمثل جزء كبير من الناتج القومي الإجمالي في جميع الدول المتقدمة.

📈 توزيع التكاليف

تكاليف البرمجيات غالباً تسيطر على تكاليف أنظمة الكمبيوتر. تكاليف البرمجيات على جهاز كمبيوتر شخصي غالباً تكون أكبر من تكلفة العتاد.

🔧 الصيانة

صيانة البرمجيات تكلف أكثر من تطويرها. بالنسبة للأنظمة ذات العمر الطويل، تكاليف الصيانة قد تكون عدة أضعاف تكاليف التطوير.

💡 التركيز

هندسة البرمجيات تهتم بتطوير البرمجيات بكفاءة من حيث التكلفة باستخدام النظريات والطرق والأدوات المناسبة.

لأي مشاريع البرمجيات تفشل

⚠️ زيادة تعقيد النظام

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

⚠️ الفشل في استخدام طرق هندسة البرمجيات

من السهل كتابة برامج كمبيوتر بدون استخدام طرق هندسة البرمجيات. كثير من الشركات بدأت في تطوير البرمجيات تدريجياً مع تطور منتجاتها. مايستخدمون طرق هندسة البرمجيات في عملهم اليومي. نتيجةً لذلك، برمجياتهم غالباً تكون أغلى وأقل موثوقية مما ينبغي.

🏗️ أساسيات هندسة البرمجيات

أسئلة متكررة عن هندسة البرمجيات

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

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

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

منتجات البرمجيات

📦 منتجات عامة

أنظمة مستقلة تسوق وتباع لأي عميل يريد شرائها.

أمثلة: برامج الكمبيوتر الشخصي مثل برامج الرسم، أدوات إدارة المشاريع، برامج التصميم بالحاسب، برامج لأسواق محددة مثل أنظمة المواعيد لأطباء الأسنان.

المواصفات: مملوكة لمطور البرمجية وقرارات التغيير في البرمجية يأخذها المطور.

🎯 منتجات مخصصة

برمجيات يطلبها عميل محدد لتلبي احتياجاته الخاصة.

أمثلة: أنظمة التحكم المضمنة، برامج مراقبة الحركة الجوية، أنظمة مراقبة المرور.

المواصفات: مملوكة للعميل للبرمجية وهو اللي يأخذ قرارات التغييرات المطلوبة في البرمجية.

أنواع التطبيقات

💻 تطبيقات مستقلة

تشغل على كمبيوتر محلي (مثل الكمبيوتر الشخصي). تحتوي على كل الوظائف المطلوبة ولا تحتاج اتصال شبكة.

مثال: مايكروسوفت وورد

🌐 تطبيقات معاملات تفاعلية

تشغل على كمبيوتر بعيد ويصل لها المستخدمين من حواسيبهم الشخصية أو أجهزتهم.

أمثلة: أمازون، أنظمة البنوك الإلكترونية

🤖 أنظمة تحكم مدمجة

أنظمة تحكم برمجية تتحكم وتدير الأجهزة المادية.

مثال: منظمات الحرارة الذكية للتدفئة والتبريد

📊 أنظمة معالجة الدُفعات

أنظمة أعمال مصممة لمعالجة البيانات في دفعات كبيرة.

مثال: أنظمة الرواتب

🎮 أنظمة الترفيه

أنظمة للاستخدام الشخصي بشكل أساسي تهدف لتسلية المستخدم.

أمثلة: نتفلكس، سبوتيفاي

🔬 أنظمة النمذجة والمحاكاة

يطورها العلماء والمهندسون لنمذجة العمليات أو المواقف الفيزيائية.

مثال: نماذج محاكاة الطقس

شنو اللي يجعل البرمجيات فريدة؟

  • تُطور، ماتُصنع: على عكس المنتجات المادية اللي تُصنع في المصانع، البرمجيات تُنشأ من خلال عمليات التصميم والبرمجة
  • ماتبلى: البرمجيات ماتشيخ فيزيائياً، لكن تقدر تتدهور مع الوقت بسبب مشاكل الصيانة
  • التوجه نحو البناء المعتمد على المكونات: مثل البناء بمكعبات الليغو، لكن كثير من المشاريع لسى تُبنى من الصفر
  • ماتُنتج بكميات كبيرة: بعد إنشائها، البرمجيات تقدر تنسخ وتُشارك بسهولة

⚙️ هندسة البرمجيات - تقنية متعددة الطبقات

الطبقات الأربع لهندسة البرمجيات

🛠️ الأدوات
📋 الطرق
🔄 العمليات
⭐ تركيز الجودة

حرك الماوس فوق كل طبقة لاستكشافها

⭐ تركيز الجودة (الأساس)

أي نهج هندسي لازم يرتكز على التزام المؤسسة بالجودة. إدارة الجودة الشاملة، سيكس سيجما وفلسفات مشابهة تعزز ثقافة التحسين المستمر للعمليات.

🔄 طبقة العمليات

تعرف الإطار اللي لازم يتأسس لتسليم فعال لتقنية هندسة البرمجيات. تشمل التواصل، التخطيط، النمذجة، البناء، والنشر.

📋 طبقة الطرق

تقدم الكيفية التقنية لبناء البرمجيات. تشمل تحليل المتطلبات، التصميم، بناء البرنامج، الاختبار، والدعم.

🛠️ طبقة الأدوات

تقدم دعم آلي أو شبه آلي للعمليات والطرق. تشمل أدوات CASE، بيئات التطوير المتكاملة، أُطر الاختبار، إلخ.

عملية البرمجيات

معروفة كمان باسم دورات حياة البرمجيات، تفرض نهج مراحل لتطوير البرمجيات. توفر إرشادات عن شنو لازم يُنشأ ومتى، وتوجه كيف تُنشأ وتُقيَم المخرجات.

مكونات العملية

أنشطة الإطار العام للعمليات

  1. التواصل والتخطيط: التعاون مع أصحاب المصلحة لفهم المتطلبات والقيود
  2. مواصفات البرمجية: حيث العملاء والمهندسين يعرفون البرمجية اللي سيتم إنتاجها
    • تحليل المتطلبات
    • النمذجة (إنشاء تمثيلات مجردة)
  3. تطوير البرمجية:
    • التصميم
    • البناء
  4. التحقق من البرمجية: حيث يتم فحص البرمجية للتأكد من أنها تلبي متطلبات العميل
  5. النشر وتطور البرمجية: حيث يتم تعديل البرمجية لتعكس المتطلبات المتغيرة للعملاء والسوق

الأنشطة الشاملة

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

📊 إدارة المشروع

تتبع التقدم، إدارة الموارد، والتأكد من تحقيق أهداف المشروع

⚠️ إدارة المخاطر

تحديد، تقييم، ومنع المخاطر المتعلقة بالأنشطة

✅ ضمان الجودة

التأكد من أن البرمجية تلبي مواصفات الجودة المحددة أو القياسية

👥 المراجعات التقنية

مراجعة الأقران تفحص ملائمة منتج البرمجية

📏 القياس

التأكد من أن النتائج المسلمة دقيقة، موضوعية وقابلة للتكرار

🔧 إدارة التكوين

تتبع والتحكم في التغييرات في البرمجية

♻️ إدارة إعادة الاستخدام

إدارة المكونات القابلة لإعادة الاستخدام لزيادة الإنتاجية

📄 إعداد مخرجات العمل

إنشاء النماذج، الوثائق وغيرها من نتائج البرمجيات

هندسة البرمجيات على الإنترنت والويب

الويب صار الآن منصة لتشغيل التطبيقات، والمؤسسات تطور أنظمة ويب أكثر من الأنظمة المحلية.

خصائص رئيسية

⚠️ خصائص تطبيقات الويب

  • كثافة الشبكة: لازم تخدم مجتمع متنوع من العملاء
  • التزامن: عدد كبير من المستخدمين ممكن يصلون في نفس الوقت
  • حمل غير متوقع: عدد المستخدمين ممكن يتغير بشكل كبير
  • الأداء: المستخدمين ممكن يروحون لمكان ثاني إذا انتظروا طويل
  • التوفر: المستخدمين يطلبون الوصول "24/7/365"
  • مدفوعة بالبيانات: الوظيفة الرئيسية غالباً تكون عرض محتوى الوسائط الفائقة

⚖️ أخلاقيات هندسة البرمجيات

لأي الأخلاقيات مهمة

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

السلوك الأخلاقي أكثر من مجرد الالتزام بالقانون بل يشمل اتباع مجموعة من المبادئ اللي هي أخلاقياً صحيحة.

مبررات ميثاق الشرف الأخلاقي

"الحواسيب لها دور مركزي ومتزايد في التجارة، الصناعة، الحكومة، الطب، التعليم، الترفيه والمجتمع بشكل عام. مهندسو البرمجيات هم اللي يساهمون بالمشاركة المباشرة أو بالتدريس، في تحليل، تحديد المواصفات، التصميم، التطوير، الشهادات، الصيانة واختبار أنظمة البرمجيات."

بسبب أدوارهم في تطوير أنظمة البرمجيات، مهندسو البرمجيات عندهم فرص كبيرة يعملون خير أو يسببون ضرر، أو يمكّنون غيرهم يعملون خير أو يسببون ضرر، أو يؤثرون على غيرهم يعملون خير أو يسببون ضرر.

عشان يتأكدوا أن جهودهم تستخدم للخير، مهندسو البرمجيات لازم يلتزمون بجعل هندسة البرمجيات مهنة مفيدة ومحترمة.

قضايا المسؤولية المهنية

🔒 السرية

المهندسين عادةً يحترمون سرية أصحاب العمل أو العملاء بغض النظر إذا كان فيه اتفاقية سرية موقعة أو لا.

💼 الكفاءة

المهندسين ماينبغي يمثلون كفاءتهم بشكل خاطئ. ماينبغي يأخذون عمل فوق قدراتهم أو خبرتهم.

©️ حقوق الملكية الفكرية

المهندسين لازم يكونون واعين بالقوانين المحلية اللي تحكم الملكية الفكرية مثل البراءات وحقوق النشر. لازم يحمون الملكية الفكرية لأصحاب العمل والعملاء.

🚫 سوء استخدام الحاسب

مهندسو البرمجيات ماينبغي يستخدمون مهاراتهم التقنية لإساءة استخدام حواسيب الآخرين، من الأشياء البسيطة (لعب ألعاب) للخطيرة (نشر فيروسات).

ميثاق ACM/IEEE للأخلاقيات والممارسة المهنية

ACM = جمعية آلات الحوسبة

IEEE = معهد مهندسي الكهرباء والإلكترونيات

الجمعيات المهنية تعاونت لإنتاج ميثاق للممارسة الأخلاقية. الأعضاء يوقعون على الميثاق لما ينضمون. الميثاق يحتوي على ثمانية مبادئ لمهندسي البرمجيات المحترفين.

الجمهور

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

العميل وصاحب العمل

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

المنتج

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

الحكم

مهندسو البرمجيات يحافظون على النزاهة والاستقلالية في حكمهم المهني.

الإدارة

مديرو وقادة هندسة البرمجيات يلتزمون ويروجون لنهج أخلاقي في إدارة تطوير وصيانة البرمجيات.

المهنة

مهندسو البرمجيات يعززون النزاهة وسمعة المهنة بما يتوافق مع المصلحة العامة.

الزملاء

مهندسو البرمجيات يكونون عادلين وداعمين لزملائهم.

الذات

مهندسو البرمجيات يشاركون في التعلم مدى الحياة فيما يتعلق بممارسة مهنتهم ويروجون لنهج أخلاقي في ممارسة المهنة.

لأي يكون فيه ميثاق شرف مهني؟

ملاحظات مهمة:

  • هذه ليست قواعد أو سياسات واضحة لجميع المواقف
  • بالعكس، هي بيانات اعتقاد مهني لازم توجه عملية اتخاذ القرار
  • هي ليست قوانين - مايقرها الهيئات التشريعية وما تهدف لتشجيع الدعاوي القضائية
  • ممكن تساعد تحل أسئلة مهمة في نزاعات معينة

المعضلات الأخلاقية

مهندسو البرمجيات ممكن يواجهون مواقف صعبة مثل:

  • الاختلاف في المبدأ مع سياسات الإدارة العليا
  • صاحب العمل يتصرف بشكل غير أخلاقي ويطلق نظام حساس للسلامة بدون إنهاء الاختبارات
  • المشاركة في تطوير أنظمة أسلحة عسكرية أو أنظمة نووية

📖 دراسات حالة

دراسة حالة 1: مضخة الأنسولين الشخصية

النوع: نظام تحكم مضمن

الوصف: مضخة أنسولين يستخدمها مرضى السكري للحفاظ على التحكم في سكر الدم.

الوظيفة:

  • تجمع البيانات من مستشعر سكر الدم
  • تحسب كمية الأنسولين المطلوبة
  • الحساب مبني على معدل تغير مستويات سكر الدم
  • ترسل إشارات لمضخة صغيرة لتوصيل الجرعة الصحيحة

الجوانب الحساسة للسلامة:

  • انخفاض سكر الدم: يقدر يؤدي لخلل في وظائف الدماغ، غيبوبة، وموت
  • ارتفاع سكر الدم: عواقب طويلة المدى مثل تلف العين والكلى

المتطلبات:

  • النظام لازم يكون متاح لتوصيل الأنسولين عندما يحتاج
  • النظام لازم يعمل بموثوقية ويوصل الكمية الصحيحة من الأنسولين
  • النظام لازم يكون مصمم ومنفذ بحيث يلبي هذي المتطلبات دائماً

دراسة حالة 2: مينت كير - نظام إدارة مرضى الرعاية الصحية النفسية

النوع: نظام إدارة معلومات

الوصف: نظام معلومات طبية يحافظ على معلومات عن المرضى اللي يعانون من مشاكل صحية نفسية والعلاجات اللي أخذوها.

السياق:

  • أغلب مرضى الصحة النفسية مايحتاجون علاج مستشفى مخصص
  • يحتاجون يحضرون عيادات متخصصة بانتظام
  • العيادات ممكن تكون في مستشفيات، عيادات طبية محلية، أو مراكز مجتمعية

هندسة النظام:

  • يستخدم قاعدة بيانات مركزية لمعلومات المرضى
  • مصمم عشان يشغل على كمبيوتر شخصي للمواقع اللي ما عندها اتصال شبكة آمن
  • يقدر يحمل ويستخدم نسخ محلية لسجلات المرضى لما يكون غير متصل
  • كثير من عملاء مينت كير يتصلون عن طريق الشبكة لخادم مينت كير
  • الخادم يتصل بقاعدة بيانات المرضى

الأهداف:

  • توليد معلومات إدارية لمديري خدمات الصحة
  • تزويد الطاقم الطبي بمعلومات في الوقت المناسب لدعم علاج المرضى

ميزات رئيسية:

  • إدارة الرعاية الفردية: إنشاء سجلات، تعديل معلومات، عرض تاريخ المريض، ملخصات بيانات
  • مراقبة المريض: مراقبة السجلات وإصدار تحذيرات إذا اكتُشفت مشاكل
  • التقارير الإدارية: توليد تقارير إدارية شهرية

اهتمامات النظام:

  • الخصوصية: معلومات المريض لازم تكون سرية وما تُكشف أبداً لموظفين غير مخولين
  • السلامة: النظام لازم يحذر من مرضى ممكن يكونون انتحاريين أو خطيرين
  • التوفر: النظام لازم يكون متاح عندما يحتاج لوصف الدواء الصحيح

🔑 ملخص النقاط الرئيسية

هندسة البرمجيات هي تخصص هندسي يهتم بجميع جوانب إنتاج البرمجيات.

الصفات الأساسية لمنتج البرمجيات هي القابلية للصيانة، الموثوقية والأمان، الكفاءة والقبول.

الأنشطة عالية المستوى لـ تحديد المواصفات، التطوير، التحقق والتطور جزء من كل عمليات البرمجيات.

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

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

مهندسو البرمجيات عندهم مسؤوليات للمهنة الهندسية والمجتمع. ماينبغي يكونون مهتمين فقط بالقضايا التقنية.

الجمعيات المهنية تنشر مواثيق السلوك اللي تحدد معايير السلوك المتوقعة من أعضائها.