الفصل الأول: مقدمة في هندسة البرمجيات
فهم وتحديد مبادئ هندسة البرمجيات، مراحل دورة الحياة، العمليات، والأنشطة التي تشكل أساس تطوير البرمجيات الاحترافي.
إظهار فهم للمسؤوليات المهنية والأخلاقية في هندسة البرمجيات، بما في ذلك الالتزام بمواثيق الشرف واتخاذ القرارات الأخلاقية.
هندسة البرمجيات هي تخصص هندسي يهتم بجميع جوانب إنتاج البرمجيات من المراحل المبكرة لمواصفات النظام حتى صيانة النظام بعد تشغيله واستخدامه.
حقيقة مهمة: اقتصادات جميع الدول المتقدمة تعتمد على البرمجيات. أنظمة أكثر وأكثر أصبحت تُتحكم بها بالبرمجيات، مما يجعل هندسة البرمجيات تخصص حيوي في المجتمع الحديث.
النفقات على البرمجيات تمثل جزء كبير من الناتج القومي الإجمالي في جميع الدول المتقدمة.
تكاليف البرمجيات غالباً تسيطر على تكاليف أنظمة الكمبيوتر. تكاليف البرمجيات على جهاز كمبيوتر شخصي غالباً تكون أكبر من تكلفة العتاد.
صيانة البرمجيات تكلف أكثر من تطويرها. بالنسبة للأنظمة ذات العمر الطويل، تكاليف الصيانة قد تكون عدة أضعاف تكاليف التطوير.
هندسة البرمجيات تهتم بتطوير البرمجيات بكفاءة من حيث التكلفة باستخدام النظريات والطرق والأدوات المناسبة.
مع تحسن تقنيات هندسة البرمجيات، نقدر نطور أنظمة أكبر وأكثر تطوراً. هذا غير التوقعات فأصبحت الأنظمة تحتاج تتطور بسرعة أكبر، وتتعامل مع تعقيد أكبر، ولها قدرات جديدة ماكانت ممكنة قبل كذا.
من السهل كتابة برامج كمبيوتر بدون استخدام طرق هندسة البرمجيات. كثير من الشركات بدأت في تطوير البرمجيات تدريجياً مع تطور منتجاتها. مايستخدمون طرق هندسة البرمجيات في عملهم اليومي. نتيجةً لذلك، برمجياتهم غالباً تكون أغلى وأقل موثوقية مما ينبغي.
| السؤال | الإجابة |
|---|---|
| شنو هي البرمجية؟ | برامج الكمبيوتر والوثائق المرتبطة بها. منتجات البرمجيات ممكن تكون مخصصة لعميل معين أو للسوق العام. |
| شنو صفات البرمجية الجيدة؟ | البرمجية الجيدة لازم تقدم الوظائف والأداء المطلوب للمستخدم ولازم تكون قابلة للصيانة، موثوقة وقابلة للاستخدام. |
| شنو هي هندسة البرمجيات؟ | هندسة البرمجيات هي تخصص هندسي يهتم بجميع جوانب إنتاج البرمجيات. |
| شنو أهم أنشطة هندسة البرمجيات الأساسية؟ | مواصفات البرمجية، تطوير البرمجية، التحقق من البرمجية وتطور البرمجية. |
| الفرق بين علوم الحاسب وهندسة البرمجيات؟ | علوم الحاسب تركز على النظرية والأساسيات (العلم وراء الحواسيب، الخوارزميات والرياضيات). هندسة البرمجيات تهتم بالجوانب العملية لبناء وتطوير وتسليم البرمجيات المفيدة. |
| الفرق بين هندسة النظم وهندسة البرمجيات؟ | هندسة النظم تهتم بجميع جوانب تطوير الأنظمة المعتمدة على الحاسب بما فيها العتاد، البرمجيات وهندسة العمليات. هندسة البرمجيات هي جزء محدد من عملية هندسة النظم الأشمل. |
| الصفة | الوصف |
|---|---|
| القابلية للصيانة | البرمجية لازم تكون مكتوبة بطريقة تقدر تتطور لتلبي الاحتياجات المتغيرة للعملاء. هذي صفة حيوية لأن التغيير في البرمجية حاجة ضرورية في بيئة العمل المتغيرة. |
| الموثوقية | موثوقية البرمجية تشمل مجموعة من الخصائص مثل الاعتمادية، الأمان والسلامة. البرمجية الموثوقة ماينبغي تسبب ضرر مادي أو اقتصادي في حال فشل النظام. المستخدمين الضارين ماينبغي يقدرون يصلون أو يضرون النظام. |
| الكفاءة | البرمجية ماينبغي تستخدم موارد النظام بطريقة مفرطة مثل الذاكرة ودورات المعالج. الكفاءة تشمل سرعة الاستجابة، وقت المعالجة، استخدام الذاكرة، إلخ. |
| القبول | البرمجية لازم تكون مقبولة لنوع المستخدمين اللي صممت لهم. يعني لازم تكون مفهومة، قابلة للاستخدام ومتوافقة مع الأنظمة الثانية اللي يستخدمونها. |
أنظمة مستقلة تسوق وتباع لأي عميل يريد شرائها.
أمثلة: برامج الكمبيوتر الشخصي مثل برامج الرسم، أدوات إدارة المشاريع، برامج التصميم بالحاسب، برامج لأسواق محددة مثل أنظمة المواعيد لأطباء الأسنان.
المواصفات: مملوكة لمطور البرمجية وقرارات التغيير في البرمجية يأخذها المطور.
برمجيات يطلبها عميل محدد لتلبي احتياجاته الخاصة.
أمثلة: أنظمة التحكم المضمنة، برامج مراقبة الحركة الجوية، أنظمة مراقبة المرور.
المواصفات: مملوكة للعميل للبرمجية وهو اللي يأخذ قرارات التغييرات المطلوبة في البرمجية.
تشغل على كمبيوتر محلي (مثل الكمبيوتر الشخصي). تحتوي على كل الوظائف المطلوبة ولا تحتاج اتصال شبكة.
مثال: مايكروسوفت وورد
تشغل على كمبيوتر بعيد ويصل لها المستخدمين من حواسيبهم الشخصية أو أجهزتهم.
أمثلة: أمازون، أنظمة البنوك الإلكترونية
أنظمة تحكم برمجية تتحكم وتدير الأجهزة المادية.
مثال: منظمات الحرارة الذكية للتدفئة والتبريد
أنظمة أعمال مصممة لمعالجة البيانات في دفعات كبيرة.
مثال: أنظمة الرواتب
أنظمة للاستخدام الشخصي بشكل أساسي تهدف لتسلية المستخدم.
أمثلة: نتفلكس، سبوتيفاي
يطورها العلماء والمهندسون لنمذجة العمليات أو المواقف الفيزيائية.
مثال: نماذج محاكاة الطقس
حرك الماوس فوق كل طبقة لاستكشافها
أي نهج هندسي لازم يرتكز على التزام المؤسسة بالجودة. إدارة الجودة الشاملة، سيكس سيجما وفلسفات مشابهة تعزز ثقافة التحسين المستمر للعمليات.
تعرف الإطار اللي لازم يتأسس لتسليم فعال لتقنية هندسة البرمجيات. تشمل التواصل، التخطيط، النمذجة، البناء، والنشر.
تقدم الكيفية التقنية لبناء البرمجيات. تشمل تحليل المتطلبات، التصميم، بناء البرنامج، الاختبار، والدعم.
تقدم دعم آلي أو شبه آلي للعمليات والطرق. تشمل أدوات CASE، بيئات التطوير المتكاملة، أُطر الاختبار، إلخ.
معروفة كمان باسم دورات حياة البرمجيات، تفرض نهج مراحل لتطوير البرمجيات. توفر إرشادات عن شنو لازم يُنشأ ومتى، وتوجه كيف تُنشأ وتُقيَم المخرجات.
هذه الأنشطة تدعم أنشطة الإطار وتستمر طوال عملية البرمجيات:
تتبع التقدم، إدارة الموارد، والتأكد من تحقيق أهداف المشروع
تحديد، تقييم، ومنع المخاطر المتعلقة بالأنشطة
التأكد من أن البرمجية تلبي مواصفات الجودة المحددة أو القياسية
مراجعة الأقران تفحص ملائمة منتج البرمجية
التأكد من أن النتائج المسلمة دقيقة، موضوعية وقابلة للتكرار
تتبع والتحكم في التغييرات في البرمجية
إدارة المكونات القابلة لإعادة الاستخدام لزيادة الإنتاجية
إنشاء النماذج، الوثائق وغيرها من نتائج البرمجيات
الويب صار الآن منصة لتشغيل التطبيقات، والمؤسسات تطور أنظمة ويب أكثر من الأنظمة المحلية.
هندسة البرمجيات تشمل مسؤوليات أوسع من مجرد تطبيق المهارات التقنية. مهندسو البرمجيات لازم يتصرفون بطريقة صادقة وأخلاقية عشان يكتسبون احترام كمتخصصين.
السلوك الأخلاقي أكثر من مجرد الالتزام بالقانون بل يشمل اتباع مجموعة من المبادئ اللي هي أخلاقياً صحيحة.
"الحواسيب لها دور مركزي ومتزايد في التجارة، الصناعة، الحكومة، الطب، التعليم، الترفيه والمجتمع بشكل عام. مهندسو البرمجيات هم اللي يساهمون بالمشاركة المباشرة أو بالتدريس، في تحليل، تحديد المواصفات، التصميم، التطوير، الشهادات، الصيانة واختبار أنظمة البرمجيات."
بسبب أدوارهم في تطوير أنظمة البرمجيات، مهندسو البرمجيات عندهم فرص كبيرة يعملون خير أو يسببون ضرر، أو يمكّنون غيرهم يعملون خير أو يسببون ضرر، أو يؤثرون على غيرهم يعملون خير أو يسببون ضرر.
عشان يتأكدوا أن جهودهم تستخدم للخير، مهندسو البرمجيات لازم يلتزمون بجعل هندسة البرمجيات مهنة مفيدة ومحترمة.
المهندسين عادةً يحترمون سرية أصحاب العمل أو العملاء بغض النظر إذا كان فيه اتفاقية سرية موقعة أو لا.
المهندسين ماينبغي يمثلون كفاءتهم بشكل خاطئ. ماينبغي يأخذون عمل فوق قدراتهم أو خبرتهم.
المهندسين لازم يكونون واعين بالقوانين المحلية اللي تحكم الملكية الفكرية مثل البراءات وحقوق النشر. لازم يحمون الملكية الفكرية لأصحاب العمل والعملاء.
مهندسو البرمجيات ماينبغي يستخدمون مهاراتهم التقنية لإساءة استخدام حواسيب الآخرين، من الأشياء البسيطة (لعب ألعاب) للخطيرة (نشر فيروسات).
ACM = جمعية آلات الحوسبة
IEEE = معهد مهندسي الكهرباء والإلكترونيات
الجمعيات المهنية تعاونت لإنتاج ميثاق للممارسة الأخلاقية. الأعضاء يوقعون على الميثاق لما ينضمون. الميثاق يحتوي على ثمانية مبادئ لمهندسي البرمجيات المحترفين.
مهندسو البرمجيات يتصرفون بما يتوافق مع المصلحة العامة.
مهندسو البرمجيات يتصرفون بطريقة تحقق أفضل مصالح عميلهم وصاحب عملهم بما يتوافق مع المصلحة العامة.
مهندسو البرمجيات يتأكدون أن منتجاتهم والتعديلات المرتبطة بها تفي بأعلى المعايير المهنية الممكنة.
مهندسو البرمجيات يحافظون على النزاهة والاستقلالية في حكمهم المهني.
مديرو وقادة هندسة البرمجيات يلتزمون ويروجون لنهج أخلاقي في إدارة تطوير وصيانة البرمجيات.
مهندسو البرمجيات يعززون النزاهة وسمعة المهنة بما يتوافق مع المصلحة العامة.
مهندسو البرمجيات يكونون عادلين وداعمين لزملائهم.
مهندسو البرمجيات يشاركون في التعلم مدى الحياة فيما يتعلق بممارسة مهنتهم ويروجون لنهج أخلاقي في ممارسة المهنة.
مهندسو البرمجيات ممكن يواجهون مواقف صعبة مثل:
النوع: نظام تحكم مضمن
الوصف: مضخة أنسولين يستخدمها مرضى السكري للحفاظ على التحكم في سكر الدم.
الوظيفة:
الجوانب الحساسة للسلامة:
المتطلبات:
النوع: نظام إدارة معلومات
الوصف: نظام معلومات طبية يحافظ على معلومات عن المرضى اللي يعانون من مشاكل صحية نفسية والعلاجات اللي أخذوها.
السياق:
هندسة النظام:
الأهداف:
ميزات رئيسية:
اهتمامات النظام:
هندسة البرمجيات هي تخصص هندسي يهتم بجميع جوانب إنتاج البرمجيات.
الصفات الأساسية لمنتج البرمجيات هي القابلية للصيانة، الموثوقية والأمان، الكفاءة والقبول.
الأنشطة عالية المستوى لـ تحديد المواصفات، التطوير، التحقق والتطور جزء من كل عمليات البرمجيات.
المفاهيم الأساسية لهندسة البرمجيات قابلة للتطبيق عالمياً على جميع أنواع تطوير الأنظمة.
فيه أنواع كثيرة من الأنظمة وكل واحد يحتاج أدوات وتقنيات هندسة برمجيات مناسبة للتطوير.
مهندسو البرمجيات عندهم مسؤوليات للمهنة الهندسية والمجتمع. ماينبغي يكونون مهتمين فقط بالقضايا التقنية.
الجمعيات المهنية تنشر مواثيق السلوك اللي تحدد معايير السلوك المتوقعة من أعضائها.