هندسة برمجيات المحاضرة الأولى PDF

Summary

This document is an introduction to software engineering. It discusses the importance of software in daily life and the challenges in software projects. The document explains the difference between computer science and software engineering, and highlights the principles and tasks involved in software development.

Full Transcript

Chapter1: INTRODUCTION TO SOFTWARE ENGINEERING By: Ma’afer Mansour ‫مقدمة في البرمجيات‬ ‫ أصبحت البرمجيات الحاسوبية تحتل أهمية بالغة في حياتنا اليومية‬ ‫وتتحكم في جميع األنشطة البسيطة والمعقدة‪.‬‬ ‫– البرمجيات تتحكم في الطائرات والمفاعالت ال...

Chapter1: INTRODUCTION TO SOFTWARE ENGINEERING By: Ma’afer Mansour ‫مقدمة في البرمجيات‬ ‫ أصبحت البرمجيات الحاسوبية تحتل أهمية بالغة في حياتنا اليومية‬ ‫وتتحكم في جميع األنشطة البسيطة والمعقدة‪.‬‬ ‫– البرمجيات تتحكم في الطائرات والمفاعالت النووية والمركبات‬ ‫الفضائية والعمليات الجراحية والمعامالت البنكية واالتصاالت‬ ‫والنشاطات التجارية بكافة أنواعها‪.‬‬ ‫– البرمجيات تتحكم في عدد من األجهزة اإللكترونية التي يتعامل بها‬ ‫اإلنسان حتى على مستوى المنازل مثل(الفرن الكهربائي‪ ،‬المكنسة‬ ‫الكهربائية ‪...،‬الخ)‪.‬‬ ‫مقدمة في البرمجيات‬ ‫ هنالك عدد من الدول الكبرى أصبحت تعتمد في اقتصادها بشكل‬ ‫كبير على صناعة البرمجيات وتصرف مبالغ طائلة لصناعة‬ ‫برمجيات ذات جودة عالية تلبى احتياجات المستخدمين‪.‬‬ ‫ نتيجة ألهمية مشاريع البرمجيات من نجد أن أي خطأ في تلك‬ ‫المشاريع قد يؤدى إلى كوارث بشرية ومالية‪.‬‬ ‫ أكثر من ‪ %85‬من أخطاء المشاريع البرمجية يعود إلى الفهم‬ ‫الخاطئ للمتطلبات البرمجية (أي عدم معرفة االحتياجات الفعلية‬ ‫ومتطلبات األطراف المستفيدة من المشروع البرمجي)‪.‬‬ ‫مقدمة في البرمجيات‬ ‫ وقد تتسبب المتطلبات غير الجيدة وغير الواضحة في عدم تحقيق‬ ‫المشروع ألهدافه وزيادة تكلفة الصيانة وعدم االلتزام بالجدول‬ ‫الزمنى لتسليم المشروع‪.‬‬ ‫ لحل هذه المشاكل والصعوبات نتيجة المتطلبات غير الجيدة وغير‬ ‫الواضحة كان من الالزم إعادة النظر و تقويم جميع الجوانب‬ ‫المتعلقة بتصميم و تطوير البرمجيات مما أدى إلى ظهور هندسة‬ ‫البرمجيات‪.‬‬ ‫الفرق بين هندسة البرمجيات وعلوم الحاسوب‬ ‫ علوم الحاسوب‪ :‬هو العلم الذي يهتم بالنظريات واألساسيات‪.‬‬ ‫ هندسة البرمجيات‪ :‬تهتم بالوسائل التطبيقية في إنتاج وتشغيل هذه‬ ‫البرمجيات‪.‬‬ ‫ تكمن صعوبة هندسة البرمجيات في أنه‪:‬‬ ‫– علم جديد تتنوع فيه اآلراء والنظريات في كل طور من أطوار‬ ‫دورة الحياة البرمجية‪.‬‬ ‫– يحتاج إلى العديد من الفرعيات المتعلقة بفروع العلوم األخرى‬ ‫كإدارة المشاريع ودراسات الجدوى‪.‬‬ ‫هندسة البرمجيات‬ ‫ في مطلع الستينات كانت بداية هندسة البرمجيات لتفادى مشاكل‬ ‫وأخطاء المشاريع البرمجية‪.‬‬ ‫ هندسة البرمجيات‪ :‬هي فرع من المعرفة الهندسية يقوم على‬ ‫مجموعة أسس وقواعد ويختص بكل أشكال إنتاج البرمجيات بدءا ً‬ ‫من المراحل المبكرة لخصائص النظام حتى صيانة هذا النظام بعد‬ ‫استخدامه‪.‬‬ ‫ تهتم هندسة البرمجيات بدراسة دورة حياة النظام مع اعطاء اشكاالً‬ ‫متعددة لعمليات تصميمه وبنائه وتطويره واختباره‪.‬‬ ‫هندسة البرمجيات‬ ‫ البد أن يكون المنتج البرمجي النهائي‪:‬‬ ‫– على درجة عالية من الجودة والموثوقية‪.‬‬ ‫– وقليل التكاليف بقدر اإلمكان‪.‬‬ ‫– تم تسليمه للعميل في الوقت المناسب‪.‬‬ ‫– أن يعمل بكفائة على أجهزة الحاسب اآللي المختلفة‪.‬‬ ‫هندسة البرمجيات‬ ‫ وبالتدقيق في مصطلح " هندسة البرمجيات " نجده يحتوي على‬ ‫شقين‪:‬‬ ‫– الشق األول هندسي‪ :‬وفيه يطبق المهندسون النظريات و األساليب‬ ‫واألدوات المالئمة للحصول على حلول مثالية للمشاكل التي‬ ‫تواجههم مع التقيد بالقيود التنظيمية والمالية التي تحيط بالمشكلة‪.‬‬ ‫– الشق الثاني برمجي‪ :‬وفيه يتم االهتمام بجميع مظاهر انتاج‬ ‫البرمجيات‪ ،‬حيث أن هندسة البرمجيات ال تهتم فقط بتطوير‬ ‫البرمجيات ولكن تهتم أيضا ً بالنشاطات األخرى مثل‪ :‬إدارة مشروع‬ ‫البرمجيات‪ ،‬وتطوير األدوات واألساليب والنظريات لدعم انتاج‬ ‫البرمجيات‪.‬‬ ‫المهام النموذجية لهندسة البرمجيات‬ ‫‪Typical Software Engineering Tasks‬‬ ‫ هناك مجموعة من المهام النموذجية التي تتعلق بهندسة‬ ‫البرمجيات يجب أن تتبع لتطوير المشاريع البرمجية من قِبل‬ ‫فريث متكامل من مهندسي البرمجيات‪ ،‬وهذه المهام هي كالتالي‪:‬‬ ‫ هندسة البرمجيات تهتم بجميع أطوار دورة حياة تطوير‬ ‫البرمجيات )‪ )Software Life Cycle‬بدءا ً من المراحل األولى‬ ‫لتحليل النظام حتى صيانته‪.‬‬ ‫مبادئ هندسة البرمجيات‬ ‫‪Software Engineering Principles‬‬ ‫ لهندسة البرمجيات أهمية كبيرة‪ ،‬إذ أنها تساعد في زيادة المردود‬ ‫لشركات النظم البرمجية ‪ ،‬ومستخدمي البرمجيات‪ ،‬من خالل التوزيع‬ ‫السليم للموارد المتنوعة‪ ،‬والتصميم الجيد لهذه البرمجيات مما يقلل من‬ ‫تكاليف وزمن إنتاجها ‪ ،‬مع زيادة وتحسين مستوى جودتها وموثوقيتها ‪،‬‬ ‫ويتم ذلك تطبيق مجموعة من المبادئ األساسية ومن أهمها‪:‬‬ ‫– الدقة والصورية (‪ :)Rigor And Formality‬يمكن الحصول على منتج‬ ‫موثوق و مضبوط الكلفة من خالل الدقة في عملية اإلنتاج وتوجد درجات‬ ‫متنوعة للدقة أعالها الصورية‪.‬‬ ‫– فصل االهتمامات)‪ :(Separation of Concern‬حيث يتم تقسيم‬ ‫المشكلة إلى مشاكل أصغر غير مرتبطة ببعضها البعض أو يكون‬ ‫ارتباطها صغير‪ ،‬ثم التركيز على حل كل مسألة على حدة‪.‬ويتم فصل‬ ‫االهتمامات حسب الطرق التالية‪ :‬الزمن‪ ،‬جهات النظر‪ ،‬الخواص‬ ‫والمواصفات و حسب األقسام‪.‬‬ ‫أنواع المنتجات البرمجية‬ ‫‪.1‬برمجيات عامة شاملة ‪:Generic Product‬‬ ‫– وهى نظم مستقلة تنتج بواسطة شركات التطوير وتباع في السوق‬ ‫ألى عميل وأحيانا يطلق عليها البرمجيات المغلقة‪.‬‬ ‫– أمثلة‪ :‬قواعد البيانات وحزم الرسوم وأدوات إدارة المشروعات‪.‬‬ ‫‪.2‬البرمجيات الجاهزة (المخصصة)‬ ‫‪Customized or Bespoke Product:‬‬ ‫– وهى نظم مخصصة لعميل معين يطلب تجهيزها ويتم تطويرها‬ ‫بواسطة شركة أو مطور تخصيصا لهذا العميل‪.‬‬ ‫– أمثلة‪ :‬أنظمة التحكم في المعدات اإللكترونية واآلالت والنظم‬ ‫الخاصة بأعمال معينة‪.‬‬ ‫خصائص البرمجيات الجيدة‬ ‫‪.1‬قابلية الصيانة ‪:Maintainability‬‬ ‫– يجب كتابة البرمجيات بطريقة تلبى احتياجات التغيير التي يحتاجها‬ ‫المستخدم‪ ،‬وهى خاصية حرجة ألن تغيرات البرمجيات نتاج‬ ‫حتمي لتغيير بيئة العمل‪.‬‬ ‫‪.2‬الموثوقية ‪:Dependability‬‬ ‫– تتضمن قابلية اعتماد البرمجيات بنطاق خصائص تحتوى على‬ ‫االعتماد عليها والتأمين واألمان أي بمعنى أن البرمجيات التي‬ ‫يعتمد عليها ال تسبب ضررا ً أو تلفا ً فيزيائيا ً أو اقتصاديا في حالة‬ ‫حدوث انهيار النظام‪.‬‬ ‫خصائص البرمجيات الجيدة‬ ‫‪.3‬الكفاء ‪:Efficiency‬‬ ‫– ال يجب على البرمجيات إهدار موارد النظام مثل‪ :‬الذاكرة‬ ‫والمعالج‪.‬‬ ‫– تتضمن الكفاءة‪ :‬االستجابة ووقت المعالجة وأمثلة الذاكرة وغيرها‪.‬‬ ‫‪.4‬قابلية االستخدام ‪:Usability‬‬ ‫– يجب أن تكون البرمجيات قابلة لالستعمال بدون مجهود غير‬ ‫مستحق بنوع المستخدمين المصمم لهم النظام ( يعنى ضرورة‬ ‫وجود واجهة مستخدم مناسبة مع مستندات تشتمل على التوثيق‬ ‫الكافي)‪.‬‬ ‫التحديات التي تواجه ممارسات هندسة البرمجيات‬ ‫‪.1‬عدم التجانس ‪: Heterogeneity‬‬ ‫– يعني أن تعمل األنظمة كنظم موزعة عبر الشبكات التي تشمل‬ ‫أنواعا مختلفة من أجهزة الحاسوب واألجهزة المحمولة‪.‬‬ ‫– غالبا ما يتعين عليك دمج برامج جديدة مع أنظمة قديمة مكتوبة‬ ‫بلغات برمجة مختلفة‪.‬‬ ‫– التحدي هنا هو تطوير تقنيات لبناء البرمجيات مرنة يمكن االعتماد‬ ‫عليها بما فيه الكفاية للتعامل مع هذا التجانس‪.‬‬ ‫التحديات التي تواجه ممارسات هندسة البرمجيات‬ ‫‪.2‬األعمال والتغيير االجتماعي ‪:‬‬ ‫‪Business and social change‬‬ ‫– األعمال والمجتمع يتغيران بسرعة مع تطور االقتصادات الناشئة‬ ‫وتكنولوجيات جديدة‪.‬فهم بحاجة إلى أن يكونوا قادرين على تغيير‬ ‫برامجهم الحالية وتطوير البرمجيات الجديدة بسرعة‪.‬‬ ‫– العديد من تقنيات هندسة البرمجيات التقليدية تستغرق وقتا طويال‪،‬‬ ‫وغالبا ما يستغرق تسليم النظم الجديدة وقتا أطول من المخطط له‪.‬‬ ‫– فالحاجة إلى التطور بحيث يتم تقليل الوقت الالزم للبرمجيات‬ ‫لتقديم قيمة لعمالئها‪.‬‬ ‫التحديات التي تواجه ممارسات هندسة البرمجيات‬ ‫‪.3‬األمن والثقة ‪:Security and trust‬‬ ‫– نتيجة ألهمية البرمجيات و وجودها في جميع جوانب الحياة‪ ،‬فمن‬ ‫الضروري أن تتصف من بالثقة‪.‬‬ ‫– ينطبق هذا بشكل خاص على أنظمة البرمجيات البعيدة التي يتم‬ ‫الوصول إليها من خالل صفحة ويب أو واجهة خدمة ويب‪.‬‬ ‫– علينا أن نتأكد من أن المستخدمين الخبيثة ال يمكن مهاجمة برامجنا‬ ‫والحفاظ على أمن المعلومات‪.‬‬ ‫تنوع هندسة البرمجيات‬ ‫ هندسة البرمجيات‪ :‬هي نهج منتظم إلنتاج البرامج التي تأخذ في‬ ‫االعتبار تكلفة العملية‪ ،‬والجدول الزمني‪ ،‬وقضايا االعتمادية‪ ،‬فضال‬ ‫عن احتياجات العمالء البرمجيات والمنتجين‪.‬‬ ‫ هناك العديد من أنواع مختلفة من التطبيقات بما في ذلك‪:‬‬ ‫‪.1‬تطبيقات قائمة بذاتها ‪:Stand-alone Applications‬‬ ‫– هذه هي النظم والتطبيقات التي تعمل على الكمبيوتر المحلي‪ ،‬مثل‬ ‫جهاز كمبيوتر‪.‬‬ ‫– أمثلة على هذه التطبيقات‪:‬التطبيقات المكتبية على جهاز كمبيوتر‪،‬‬ ‫برامج ‪ ،CAD‬صور برنامج التالعب بالصور‪ ،‬وما إلى ذلك‪.‬‬ ‫تنوع هندسة البرمجيات‬ ‫‪.2‬تطبيقات المستندة إلى عملية تفاعلية‪:‬‬ ‫‪Interactive Transaction-Based Applications‬‬ ‫– هذه هي التطبيقات التي تنفذ على جهاز كمبيوتر عن بعد والتي يتم‬ ‫الوصول إليها من قبل المستخدمين من أجهزة الكمبيوتر الخاصة بهم‬ ‫أو المحطات‪.‬‬ ‫– أمثلة على هذه التطبيقات‪ :‬تطبيقات الويب ) التجارة اإللكترونية)‪.‬‬ ‫– هذه التطبيقات الويب تمكن المستخدم من التفاعل مع نظام بعيد‬ ‫لشراء السلع والخدمات‪.‬وتشمل أيضا أنظمة األعمال‪.‬‬ ‫تنوع هندسة البرمجيات‬ ‫‪.2‬تطبيقات المستندة إلى عملية تفاعلية‪:‬‬ ‫‪Interactive Transaction-Based Applications‬‬ ‫– يمكن الوصول إلى أنظمتها من خالل متصفح ويب أو برنامج عميل‬ ‫خاص الغرض والخدمات المستندة إلى السحابة‪ ،‬مثل‪ :‬البريد‬ ‫ومشاركة الصور‪.‬‬ ‫– غالبا ً ما تتضمن التطبيقات التفاعلية مخزن بيانات كبير يتم الوصول‬ ‫إليه وتحديثه في كل معاملة‪.‬‬ ‫تنوع هندسة البرمجيات‬ ‫‪.3‬نظم النمذجة والمحاكاة‪:‬‬ ‫‪Systems for Modeling and Simulation‬‬ ‫– هذه هي األنظمة التي يتم تطويرها من قبل العلماء والمهندسين‬ ‫لنموذج العمليات أو الحاالت المادية‪.‬‬ ‫– غالبا ما تكون مكثفة حسابيا وتتطلب أنظمة موازية عالية األداء‬ ‫لتنفيذها‪.‬‬ ‫‪.4‬نظم جمع البيانات ‪:Data Collection Systems‬‬ ‫– هذه النظم تجمع البيانات من بيئتها باستخدام مجموعة من أجهزة‬ ‫االستشعار وإرسال تلك البيانات إلى أنظمة أخرى للمعالجة‪.‬‬ ‫– البرنامج يتفاعل مع أجهزة االستشعار وغالبا ما يتم تثبيتها في بيئة‬ ‫معادية مثل داخل محرك أو في مكان بعيد‪.‬‬ ‫تنوع هندسة البرمجيات‬ ‫‪.5‬نظم معالجة دفعة واحدة‪:‬‬ ‫‪Batch Processing Systems‬‬ ‫– هذه هي أنظمة األعمال التي تم تصميمها لمعالجة البيانات في‬ ‫دفعات كبيرة‪.‬وهي تعالج أعدادا كبيرة من المدخالت الفردية‬ ‫إلنشاء نواتج مقابلة‪.‬‬ ‫– أمثلة أنظمة الدفعات‪ :‬أنظمة الفوترة الدورية‪ ،‬مثل‪ :‬أنظمة الفوترة‬ ‫الهاتفية‪ ،‬ونظم دفع الرواتب‪.‬‬ ‫تنوع هندسة البرمجيات‬ ‫‪.6‬أنظمة الترفيه ‪:Entertainment Systems‬‬ ‫– معظم هذه األنظمة هي ألعاب من نوع واحد أو آخر‪.‬‬ ‫– نوعية التفاعل المستخدم المقدمة هي السمة المميزة األكثر أهمية‬ ‫من أنظمة الترفيه‪.‬‬ ‫‪.7‬نظم األنظمة ‪:Systems of Systems‬‬ ‫– هذه األنظمة تتكون من عدد من أنظمة البرمجيات األخرى‪.‬‬ ‫– بعض هذه األنظمة قد تكون منتجات البرمجيات العامة‪ ،‬مثل‪:‬‬ ‫برنامج ورقة انتشار‪.‬قد تكون أنظمة أخرى في الجمعية مكتوبة‬ ‫خصيصا لهذه البيئة‪.‬‬ ‫هندسة البرمجيات والويب‬ ‫ في السنوات القليلة الماضية‪ ،‬تم تطوير مفهوم البرمجيات كخدمة‪.‬وقد‬ ‫اقترح أن البرامج ال تعمل عادة على أجهزة الكمبيوتر المحلية ولكن‬ ‫سوف تعمل على "‪ "cloud computing‬التي يتم الوصول إليها‬ ‫عبر اإلنترنت‪.‬‬ ‫ إذا كنت تستخدم خدمة مثل‪ :‬البريد المستند إلى الويب‪ ،‬فأنت تستخدم‬ ‫نظاما يستند إلى السحاب‪.‬‬

Use Quizgecko on...
Browser
Browser