**هندسة البرمجيات** (بالإنجليزية: Software Engineering)‏ المجال الذي يهتم بتطوير، وتصميم البرمجيات، عالية الجودة آخذة بعين الاعتبار تخصيصات المستخدم، ومتطلباته على جميع المستويات.
تهتم هندسة البرمجيات بتكوين البرنامج منذ مراحله الأولى أثناء تحليل المشكلة، ومن ثم التصميم، وكتابة البرنامج حتى القيام بتجريبه، واختباره، وتنصيبه على الأجهزة، والقيام بعملية صيانته.
وهي حديثاً يمكن أن تنقسم لقسمين الحوسبة اللينة والحوسبة الصلبة.

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

استخدمت هندسة البرمجيات كمفهوم نظري من حين لآخر في أواخر الخمسينيات وبداية الستينيات من القرن العشرين. أما الاستخدام الرسمي الأول لهذا المصطلح فكان في مؤتمر عقد من قبل اللجنة العلمية في منظمة حلف شمال الأطلسي 1968  حول البرمجيات، وقد أخذ هذا المصطلح بالانتشار منذ ذلك الحين ولاقى اهتماماً متزايداً في نواح مختلفة. عقد المؤتمر لمعالجة مايعرف «أزمة البرمجيات» والتي ظهرت بسبب عدم استخدام منهجية في التفكير (Software Development Process) عند بناء البرمجيات، مما أدى إلى ظهور أخطأ كثيرة خلال عملية بناء وصيانة البرمجيات، وبالتالي أصبحت البرمجيات تحتاج وقت كبير لتطويرها ولصيانتها، وكلفة مالية عالية أكثر مما هو مخمن لها، وبعد تحمل التأخر في الوقت وتجاوز الميزانية كانت البرمجيات ذات كفاءة ضعيفة في إنجاز الوظائف المطلوبة، وقلة في الفعالية كذلك بعدم تلبية كافة المتطلبات بالشكل الكامل.

مفهوم هندسة البرمجيات
---------------------

**البرمجية** (بالإنجليزية: Software)‏ شيء غير ملموس إلى حد ما بالمقارنة مع المنتجات الأخرى، وهي سلسلة من آلاف أو ملايين الأوامر التي تطلب من الحاسوب إجراء عمليات معينة مثل عرض المعلومات، أو إجراء الحسابات، أو تخزين البيانات. هذه البرمجيات هي بمثابة الروح من الجسد في النظام الحاسوبي وهي في توسع دائم وازدياد في التعقيد
والمتطلبات والمهام التي تقوم بتنفيذها. أما **هندسة البرمجيات** فهي فرع من فروع الهندسة يقوم على مجموعة أسس وقواعد تهدف إلى تصميم وتطوير البرامج بوفرة ونوعية عالية تلبي احتياجات المستخدمين، هذا الفرع من الهندسة يتميز بأنه لا يحتاج إلى رأس مال كبير وبالتالي الخسارة فيه قليلة على عـكس بقية الفروع الأخرى من الهندسة، كما لا يكفي لإيجاد البرمجية المتكاملة والجيدة عمل شخص واحد وإنما يتطلب ذلك فريقاً من المهندسين الجيدين. وقد كان ضروريا إيجاد علم يعني بهندسة البرمجيات لوضع الأسس والمعايير التي تصون هذه المهنة من المتطفلين بحيث يصبح بالإمكان تمييز البرنامج الجيد من غير الجيد.

مراحل بناء النظام البرمجي
-------------------------

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

وفيما يلي عرض لإحدى أشهر دورات حياة النظام البرمجي الكلاسيكية وهي دورة الشلال (Waterfall Model):

### كتابة وثيقة الشروط الخارجية والداخلية

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

### التحليل

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

### التصميم

تصميم البرمجيات هي مرحلة من مراحل دورة حياة النظام، تساعدنا في تحديد كيفية حل المشكلة «كيف سنحل المشكلة؟»، والتخطيط للتوصل إلى حلول للمشكلة، والدخول في تفاصيل النظام.
التصميم يحدد هيكلية وبنية النظام من خلال تجزئة النظام إلى مجموعة من الأنظمة الفرعية Sub-Systems مما يساهم في السيطرة على التعقيد في النظام System Complexity، وتحديد الواجهات ونوافذ المستخدم User Interfaces ، والمكونات Components، والوحدات Modules والبيانات للنظام كي يحقق النظام متطلبات الزبون. ونقوم بمرحلة التصميم باستخدام المتطلبات التي حددناها في مرحلة التحليل.
مرحلة التصميم يتم خلالها إيجاد التصميم الأمثل لنظام المعلومات الحاسوبي الذي يلبي احتياجات المستخدمين التي تم توصيفها في مرحلة التحليل. إن عملية التصميم في جوهرها هي عملية حل مشكلات، أي يجري البحث خلالها عن أفضل الحلول التصميمية لبناء نظم ذات أهداف محددة.

### الترميز (كتابة الكود)

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

### الاختبار والتكاملية

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

### التوثيق

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

### الصيانة والتطوير

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

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

البرمجة هي كتابة الكود المصدري للبرنامج، وبالتالي تعتبر جزء من مرحلة التنفيذ (Implementation) في هندسة البرمجيات التي تعمل على بناء النظام البرمجي كمشروع متكامل.

المجالات المختلفة التي لها علاقة بهندسة البرمجيات
-------------------------------------------------

* الرياضيات: يحتوي أغلب البرنامج على عناصر رياضيات مثل (logarithms) لذلك فإن مطوري هذا النوع من البرامج يكونون على اطلاع بالعديد من النواحي الرياضية.
* العلوم: البرنامج له مواصفات علمية قياسية عديدة، مثل: الأداء وحجم البرنامج وتنوع الأحمال.network speed المعادلات الرياضية الطرق الحديثة لقواعد البيانات
* الهندسة
* التصنيع: البرامج عبارة عن مجموعة من الخطوات. كل خطوة يتم تحديدها وتنفذ بدقة. مثل الكثير من الصناعات، لتحسين وتطوير خطوط الإنتاج والوصول إلى مستوى الجودة المطلوب.
* إدارة المشروعات: سواء كان تجارياً أو لا فإنه يحتاج إلى إدارة. مثل: جدول زمني وتكلفة تخصص له. عوامل بشرية للإدارة ومصادر مثل مكتب وأجهزة كمبيوتر.

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

أول مهندس برمجيات هو ديفيد كامينر، توفي وعمره 92 عام.

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

* أنظمة أمان البرمجيات
* تحليل النظم
* أزمة البرمجيات
* طريقة تحليل معمارية الأنظمة الحاسوبية

مراجع
-----

1. ↑  ACM (2007). "Computing Degrees & Careers". ACM. مؤرشف من الأصل في 2018-06-13. اطلع عليه بتاريخ 2010-11-23.
2. ↑  Leondes (2002). *intelligent systems: technology and applications*. CRC Press. ص. I-6. ISBN:978-0-8493-1121-5. 1.4 Computers and a First Glimpse at Al (1940s)
3. ↑  Parnas، David (ديسمبر 1972). "On the Criteria To Be Used in Decomposing Systems into Modules". *Communications of the ACM*. ج. 15 ع. 12: 1053–1058. DOI:10.1145/361598.361623. مؤرشف من الأصل في 2007-08-20. اطلع عليه بتاريخ 2008-12-26.
4. ↑  "Software Engineering Body of Knowledge (SWEBOK Version 3), 2014". *www.swebok.org*. IEEE Computer Society. مؤرشف من الأصل (pdf) في 2018-07-14. اطلع عليه بتاريخ 2016-05-24.
5. ↑  "The world's first software engineer". مؤرشف من الأصل في 2017-12-03.

|  |
| --- |
| **هندسة البرمجيات** في المشاريع الشقيقة: |
|  | 
* صور وملفات صوتية من كومنز.
 |


| * ع
* ن
* ت
مجالات التقانة الرئيسة |
| --- |
| علوم تطبيقية | 
* تخزين الطاقة
* إلكترونيات
* تعدين
* تقانة ميكروية
* تقنية النانو
* تقنية نووية
* ذكاء اصطناعي
* هندسة وعلم المواد
* هندسة بصرية
* تقنية بيئية
* تدوير النفايات
* تقنية شبه الموصل
* فيزياء هندسية
* هندسة السيراميك
* آلة دقيقة
* حوسبة كمومية

 |
| إعادة إنتاج أو تكاثر حيوي | 
* هندسة وراثية
* تقانة حيوية

 |
| فنون ولغة | 
* تقنيات الرسوميات
* تقنيات موسيقية
* تقنيات مرئية
* تقنية التصميم الرقمي
* تقنية الرسم الرقمي

 |
| أعمال ومعلومات | 
* تشييد
* تقنية معلومات
* تصنيع
* آلات
* تعدين
* اتصال عن بعد

 |
| دفاع | 
* قنبلة
* بندقية
* تقنيات ومعدات عسكرية

 |
| منزليات | 
* تقنيات منزلية
* تكنولوجيا الغذاء

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

 |
| صحة | 
* هندسة حيوية طبية
* تقانة حيوية
* تقنيات صحة
* علم الأدوية

 |
| النقل | 
* طيران
* هندسة الطيران والفضاء الجوي
* هندسة السيارات
* عمارة بحرية
* تكنولوجيا الفضاء
* هندسة المرور
* هندسة النقل
* سيارات

 |

| * ع
* ن
* ت
هندسة |
| --- |
| التخصّصاتوالتخصّصات الفرعية | 

|  |
| --- |
| 
* هندسة مدنية

 |
| 
* هندسة معمارية
* هندسة زلازل
* هندسة التعدين
	+ هندسة الإنشاءات
	+ هندسة وإدارة التشييد
	+ هندسة التشييد والبناء
* هندسة بيئية
* هندسة جيوتقنية
* هندسة هيدروليكية
	+ هندسة النقل
	+ هندسة الطرق
* هندسة الشواطئ
* هندسة الرصف

 |
| 
* هندسة ميكانيكية

 |
| 
* هندسة سمعية
* هندسة الطيران والفضاء الجوي
* هندسة السيارات
* هندسة السكك الحديدية
* هندسة حرارية
* هندسة تصنيع
* هندسة المركبات
* هندسة بحرية

 |
| 
* هندسة كهربائية

 |
| 
* هندسة الحاسوب
* هندسة التحكم
* كهروميكانيكا
* هندسة الإلكترونيات
* هندسة بصرية
* ضوئيات
* هندسة أنظمة الطاقة
* هندسة الترددات الراديوية
* هندسة الاتصالات
* الهندسة الكهربائية الطبية

 |
| هندسة كيميائية |
| 
* هندسة كيميائية حيوية
* هندسة حيوية
* هندسة جزيئية
* هندسة النفط
* هندسة العمليات
* هندسة تفاعلات كيميائية
* هندسة العمليات الحيوية
* ترموديناميكا كيميائية

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

 |

 |
| تعليم هندسي | 
* بكالوريوس هندسة
* الدراسات الهندسية
* اختبار أساسيات الهندسة
* الاعتماد الأكاديمي للهندسة والتكنولوجيا

 |
| مواضيع متعلقة | 
* مهندس
* تاريخ الهندسة
* مجال الهندسة التطبيقية
* مادة حيوية
* ميكانيكا الحركة الحيوية

 |
| 
* **قائمة فروع الهندسة**
* **الهندسة**  · **بوابة هندسة**

 |

| * ع
* ن
* ت
هندسة البرمجيات |
| --- |
| مجالات | 
* برمجة
* متطلبات البرمجيات
* نشر البرمجيات
* تصميم البرمجيات
* صيانة البرمجيات
* فحص البرمجيات
* تحليل النظم
* أساليب رسمية

 |
| مفاهيم | 
* نمذجة البيانات
* هيكلية الشركات
* مواصفة وظيفية
* لغة نمذجة
* Orthogonality
* نمط برمجة
* برمجية
* معمارية برمجيات
* منهجية تطوير برمجيات
* عملية تطوير البرمجيات
* جودة البرمجيات
* ضمان الجودة (برمجيات)
* برمجيات علم الآثار
* التحليل الإنشائي
* مهندس برمجيات
* كود قديم

 |
| توجهات | 
* تطوير البرمجيات أجايل
* Aspect-oriented
* برمجة كائنية التوجه
* أنطولوجية (علم المعلومات)
* البنية الخدمية
* دورة حياة تطوير البرمجيات

 |
| النماذج | 

|  |  |
| --- | --- |
| تطوير  | 
* تطوير البرمجيات أجايل
* EUP
* Executable UML
* نموذج بناء تدريجي  ‏
* تطوير متكرر ومتزايد
* العملية الموحدة لراشيونال IBM
* سكرم
* نمذجة البرمجيات
* النموذج اللولبي
* V-Model
* نموذج الشلال
* برمجة قصوى

 |
| أخرى  | 
* أيزو/آي إي سي 15504
* تكامل نموذج نضوج المقدرة
* نماذج بيانات
* طريقة الكيانات والعلاقات
* Function model
* نموذج المعلومات
* Metamodeling
* Object model
* Systems model
* View model

 |
| لغات  | 
* IDEF
* لغة النمذجة الموحدة
* SysML

 |

 |
| مهندسو برمجيات | 
* كينت بيك
* Grady Booch
* فريد بروكس
* باري بوهم
* وورد كانينغهام
* توم ديماركو
* مارتن فاولر
* ماري جان هارولد
* توني هور
* واتس همفري
* مايكل جاكسون (عالم حاسوب)
* إيفار جاكوبسون
* Stephen J. Mellor
* برتراند ماير
* David Parnas
* جورج ونستون رويس
* جيمس رامبوغ
* نيكلاوس ويرث
* إدوارد يوردون
* Victor Basili

 |
| مجالات مشابهة | 
* علم الحاسوب
* هندسة حاسبات
* إدارة المشاريع
* هندسة أنظمة

 |
| 
* تصنيف:هندسة البرمجيات
* كومنز

 |

| ضبط استنادي عدلها في ويكي بيانات |
| --- |
| دولية | 
* المُعرِّف مُتعدِّد الأوجه (FAST)

 |
| وطنية | 
* المكتبة القومية الإسبانية (BNE)
* المكتبة الوطنية الفرنسية (BnF)
* الملف الاستنادي المتكامِل (GND)
* المكتبة القومية الإسرائيلية (J9U)
* مكتبة الكونغرس (LCNAF)
* المعرف NDL لـ 01014113 غير صحيح.
* قاعدة البيانات الوطنية التشيكية (NLCR AUT)
	+ 2

 |

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