البرمجيات

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

البرمجة الخوارزمية

يتضمن مصطلح البرمجيات في ثناياه مفهوم البرمجة. والبرمجة، باختصار، تنفيذ مجموعة من المهام البسيطة، أو الأولية، وفق ترتيب معين لأداء وظيفة محددة. وتستند البرمجة إلى مفهوم أكثر شمولاً هو الخوارزمية Algorithm الذي يتلخص بوضع توصيف صوريFormal description  لقواعد حل مسألة ما على هيئة مجموعة منتهية من الخطوات تتضمن كل منها تنفيذ مهمة جزئية بسيطة. فما يتعلمه الطالب لحل معادلة من الدرجة الثانية في حقل الأعداد الحقيقية هو خوارزمية تتلخص بالمراحل التالية: المرحلة الأولى حساب مميز المعاملة، والمرحلة الثانية مناقشة قيمة المميز إذا كان موجباً أو سالباً أو معدوماً، وفي كل حالة من هذه الحالات الثلاث إظهار ناتج الحل (وجود جذرين مختلقين، وجود جذر مضاعف، عدم وجود حل للمعادلة في حقل الأعداد الحقيقية).
ومفهوم الخوارزمية قديم يعود إلى البابليين الذين وضعوا في عهد حمورابي (حوالي 1800ق.م) أول توصيف صوري لقواعد حل بعض المعادلات. أما مصطلح الخوارزمية فهو نسبة إلى الرياضي العربي أبي عبد الله محمد بن موسى الخوارزمي الذي عاش في بغداد بين 735 و847م وعمل في الرياضيات والجغرافيا والتاريخ وظلت مؤلفاته في الرياضيات «الحساب»، و«الجبر والمقابلة»، و«السند هند الصغير» مرجعاً لمن خلفه من العلماء ولمدة طويلة.
يعتمد إيجاد خوارزمية حل مسألة معينة على فهم عميق لطبيعة المسألة وابتكار طريقة للحل على شكل خطوات متسلسلة، وقد توجد عدة خوارزميات لحل مسألة واحدة وتختلف هذه الخوارزميات بطبيعة العمليات الأساسية التي تستدعيها كل منها وبعدد هذه العمليات. فمثلاً لإيجاد القاسم المشترك الأعظم لعددين صحيحين موجبين يمكن اتباع عدة طرق (أو خوارزميات) نذكر منها الطريقين التاليين:
1ـ تكرار عملية طرح العدد الصغير من العدد الكبير إلى أن يتساوى العددان، ويكون الناتج هو القاسم المشترك الأعظم.
2ـ استخدام خوارزمية إقليدس التي تتلخص بإحلال باقي قسمة العدد الكبير محل العدد الكبير في كل مرة حتى يصبح أحد العددين صفراً، ويكون العدد الآخر هو القاسم المشترك الأعظم.
 
 
يظهر هذا المثال أن الخوارزمية الثانية (خوارزمية إقليدس) أفضل من الخوارزمية الأولى كونها تتطلب عدداً أقل من المراحل لإيجاد الناتج.
يجري عادة التعبير عن الخوارزميات بمخططات أو بتعاير لغوية بسيطة. وقد اعتمد المبرمجون حتى نهاية الستينيات على استخدام ما يسمى مخطط الجريان Flowchart، ومخطط بياني يظهر مسار التحكم عبر العمليات الأساسية التي تتألف منها الخوارزمية. يبين الشكل رقم (2) تمثيلاً لخوارزمية إقليدس لإيجاد القاسم المشترك الأعظم لعددين صحيحين  a  و b .
 
 
 
 
غالباً ما يلجأ المبرمجون إلى وضع خوارزمية حل المسألة وتوصيفها بإحدى الطريقتين السابقتين قبل ترجمتها إلى لغة البرمجة Programming language الفعلية.

لغات البرمجة

لغة البرمجة هي لغة صنعية تضم عدداً محدداً من المفردات (أو الأوامر) وقواعد مبسطة تتيح للمبرمج تعريف تتالي التعليمات التي يريد أن ينفذها الحاسوب. إن عتاديات الحاسوب تستطيع فقط تنفيذ تعليمات مكتوبة بلغة تدعى لغة الآلة Machine language وهي لغة تضم رموزاً مكتوبة وفق أحد أنظمة العدّ (يستخدم عادة نظام العد الثنائي أو الست عشري)، تفيد في إعطاء الأوامر للدارات الإلكترونية التي تتضمنها مكونات الحاسوب. ونظراً لصعوبة الكتابة بهذه اللغة (التي استُخدمت في الحواسيب الأولى) جرى تطوير العديد من لغات البرمجة التي تتيح للمبرمج كتابة تعليمات بلغة أكثر فهماً، وأقل تعقيداً، ويقوم المصرّف Compiler بترجمة هذه التعليمات إلى ما يكافئها بلغة الآلة. تصنَّف لغات البرمجة ضمن فئات تدعى أجيالاً. يضم الجيل الأول لغة الآلة، والثاني لغة المجمّع Assembly language، والجيل الثالث اللغات الإجرائية Procedural language مثل c ,pancal , cobol , fortran  وغيرها، كما جرى تطوير لغات مثل لغة SQL  و  prolog دعيت لغات الجيل الرابع وهي تعتبر تطويراً جذرياً في مجال لغات البرمجة، فهي تتيح لمستخدمها تعريف العلاقة المنطقية التي تربط المدخلات والمخرجات بطريقة صورية، ويتولّى مصرف هذه اللغة إيجاد تسلسل العمليات اللازم لتحقيق هذه العلاقة.

أنواع البرمجيات ووظائفها

تقسم البرمجيات عادة إلى نوعين أساسيين هما:
 1 ـ البرمجيات الأساسية Basic Software وتدعى أيضاً نظم التشغيل Operating Systems:
وهي تضم البرمجيات اللازمة للتحكم في عمل مكونات الحاسوب. في أجيال الحواسيب الأولى اقتصر عمل هذه البرمجيات على التحقق من صحة عمل مكونات الحاسوب وتلقينها الأوامر والمعطيات واسترجاع النتائج. وقد تطورت نظم التشغيل تطوراً متسارعاً خاصة بعد ظهور الحواسيب الشخصية، وتضمنت طيفاً واسعاً من الإمكانات تتيح لمستخدم الحاسوب إعطاء الأوامر من خلال واجهات تخاطب بيانية (GUI : Graphic User Interface) ، وتعريف العديد من المكونات الإضافية والطرفيات كالطابعات وأجهزة الربط الشبكي وإدارتها، كما تضمنت إمكانات واسعة لإدارة وسائط التخزين وتنظيم البيانات والملفات.
 2 ـ البرمجيات التطبيقية 
وهي برمجيات متخصصة في أداء المهام التي يرغب المستخدم تنفيذها من خلال الحاسوب. ويعتبر تنوع البرمجيات التطبيقية، إضافة للتسهيلات الكبيرة التي تقدمها أنظمة التشغيل المتطورة، السبب الأهم في انتشار الحواسيب وتطبيقاتها المتعددة وشمولها معظم مناحي الحياة. نجد ضمن هذه الفئة من البرمجيات البرمجيات التقليدية التي يستعملها معظم مستخدمي الحواسيب مثل برامج معالجة النصوص وبرامج تصفح المعلومات على شبكة إنترنت وبرمجيات البريد الإلكتروني وغيرها، وكذلك البرمجيات المكرسة لتنفيذ أعمال متخصصة مثل إدارة المخزون والتصميم بمعونة الحاسوب والتحكم الصناعي والأنظمة المصرفية وأنظمة التحكم بإشارات المرور وغيرها من التطبيقات التي يصعب حصرها.
إضافة للنوعين السابقين توجد برمجيات متخصصة في مساعدة مطوري البرمجيات. تضم هذه الفئة من البرمجيات مترجمات لغات البرمجة وأنظمة تنقيح البرمجيات Debugging والأنظمة المساعدة في هندسة البرمجيات CASE : Computer Aided Software Engineering.

تطوير البرمجيات

 1 ـ تطور التطبيقات البرمجية:
اقتصرت البرمجيات التي واكبت ظهور الحواسيب الأولى على تطبيقات علمية وعسكرية، إلا أن ذلك لم يدم طويلاً؛ فسرعان ما تنبهت الحكومات والشركات إلى القدرات الكامنة لهذه الحواسيب في حل مسائل تندرج ضمن التطبيقات الإدارية والمالية. وقد شهدت فترة الستينات ازدياداً كبيراً في التطبيقات الإدارية والمالية خاصة مع ظهور اللغات المتخصصة بهذا النوع من التطبيقات مثل لغة COBOL. ومع ازدياد القدرات الحسابية وسعات التخزين التي توفرها الحواسيب وظهور الحواسيب الشخصية في بداية الثمانينيات شهد حقل المعلوماتية موجة جديدة من التطبيقات البرمجية شملت طيفاً واسعاً يمتد من التطبيقات التخصصية مثل إدارة المصارف والمستشفيات والتحكم بوسائل النقل مروراً بالتطبيقات الصناعية مثل أنظمة المحاكاة والتصميم والتصنيع بمعونة الحاسوب وصولاً إلى التطبيقات الشخصية مثل إدارة جدول المواعيد والنشر المكتبي وغيرها.
ومع انتشار شبكة إنترنت ظهرت تطبيقات جديدة متخصصة بالبريد الإلكتروني والنشر عبر الشبكة العنكبوتية العالمية WWW : World Wide Web ومحركات البحث، كما اكتست التطبيقات الجديدة حلّة جديدة فظهرت التطبيقات المصرفية عبر الإنترنت e-banking ووسائل المال الإلكتروني e-money والتجارة الإلكترونية e-commerce  وعلى رأس هذه التطبيقات تأتي تطبيقات الحكومة الإلكترونية e-government التي تضم برمجيات تتيح للمواطنين إجراء معاملاتهم الحكومية وتوفر للحكومة إمكانية التخاطب مع المواطنين من خلال الشبكة.
 2- تطور وسائل البرمجة
تطورت وسائل البرمجة وفق منحيين متلازمين :
تطور لغات البرمجة والأدوات المساعدة في تطوير البرمجيات.
تطور منهجيات وأساليب البرمجة.
في المنحى الأول، يمكن تشبيه ما حدث في البرمجة بالتطور في الإلكترونيات حيث انتقل العمل من مستوى التعامل مع العناصر الإلكترونية الأساسية (المقاومة والمكثف والترانزستور وغيرها) إلى التعامل مع دارات متكاملة تكافئ كلّ منها آلافاً وربما ملايين من هذه العناصر المرتبة وفق نسق معين لتحقيق وظيفة معينة.
وفي البرمجيات انتقل العمل من مستوى التعليمات المكتوبة بلغة الآلة إلى استخدام مكونات برمجية مختبرة وجاهزة، مكتوبة بلغة برمجية عالية المستوى تتيح تضمينها ضمن صلب البرنامج الذي يسعى المبرمج لتطويره.
خلال هذا التطوير ظهرت أدوات عديدة أهمها مترجمات ومفسرات لغات البرمجة وأدوات إدارة النصوص البرمجية وأنظمة إدارة قواعد المعطيات ومولدات التطبيقات البرمجية، كما جرى تطوير أنظمة برمجية متخصصة بمتابعة المنتج البرمجي خلال مراحل حياته المختلفة.
وفي مجال تطوير منهجيات وأساليب البرمجة جرى التركيز على الانتقال بالبرمجة من «مهارة» تعتمد على خبرة المبرمجين وذكائهم إلى عمل هندسي ذي قواعد وأصول تضمن تضافر جهود أعضاء فرق العمل وتناغمها للوصول إلى المنتج البرمجي المنشود. خلال هذه المرحلة شهدت البرمجة ظهور مفهوم البرمجة المهيكلة Structured programming والبرمجة غرضية التوجهObject oriented programming  وغيرها، كما ظهرت منهجيات البرمجة التي هدفت إلى وضع دليل عمل للمبرمجين يفيدهم في وضع الدراسات التحليلية والتصميمية التي  تسبق عمليات كتابة البرامج وكذلك اختبار البرمجيات وتوثيقها وتحديثها لاحقاً.
هندسة البرمجيات وإدارة المشروعات البرمجية
بدأ الاهتمام بتحويل البرمجة إلى علم هندسي مع ازدياد المتطلبات والقيود المفروضة على البرمجيات من جهة وزيادة تعقيد البرمجيات لتلبي هذه المتطلبات من جهة أخرى، ولذلك كان لابدّ من إيجاد منهج مرتب ومنظم وقابل للقياس لعمليات تطوير وتشغيل وصيانة البرمجيات. تقدم هندسة البرمجيات مجموعة من الطرائق التقنية لبناء البرمجيات. تشمل هذه الطرائق مهمات تحليل المتطلبات والتصميم وبناء البرامج واختبارها وصيانتها، كما جرى تطوير أنظمة برمجية متخصصة بتقديم الدعم خلال تنفيذ هذه المهمات.
تعتبر مهمة إدارة المشروعات البرمجية من المهام المعقدة نظراً لتعدد الأطراف الداخلة في المشروع البرمجي (المديرون والمبرمجون والزبن والمستخدمون النهائيون) ولتعدد القيود (الزمن، الجودة، تحقيق المتطلبات) ولذلك تواجه إدارة المشروعات البرمجية مسألة الحاجة إلى تقديرات كمية لحجم العمل اللازم لإنجازها وضرورة التخطيط والتنسيق بين مختلف الأطراف.
جرى تعريف عدة نماذج للمساعدة في إرشاد القائمين على إدارة المشروعات البرمجية خلال تنفيذ المراحل الأساسية لتطوير البرمجيات مثل النموذج التتابعي الخطي والنموذج التزايدي والنموذج الحلزوني ونموذج الطرائق الصورية وغيرها.
جودة البرمجيات
يُقصد بجودة البرمجيات تطبيق قياسات تقنية موضوعية للتوثق من تلبية البرمجيات للأهداف التي أُنتجت لتحقيقها. تشمل جودة البرمجيات جودة التصميم الذي ينمذج حل المشكلة المطروحة، ودقة النص البرمجي ومطابقته للتصميم، والاختبارات التي تجرى على البرمجيات لاكتشاف العيوب البرمجية.
يعتبر تحقيق المتطلبات المقياس الأهم في تقدير جودة البرمجيات وكل برنامج لا يعمل على وجه صحيح يصبح ضئيل الأهمية. ثمة معايير أخرى تستخدم لقياس جودة البرمجيات مثل الصيانية Maintainability التي يقصد بها سهولة تصحيح البرنامج لإزالة الأخطاء التي قد يتضمنها، وسلامة البرنامج ومقاومته للمهددات الخارجية (الفيروسات)، والفعالية، والمرونة، والاستقلال عن العتاديات، وغيرها من المعايير التي توفر للعاملين في البرمجيات طرقاً كمية لتقييم المنتج البرمجي وجودته أثناء بنائه. تشمل هذه الطرق مقاييس تهتم بالوظائف التي ينبغي على البرنامج تحقيقها، والجوانب التصميمية من حيث المكونات والواجهات.
 
راكان رزوق
 
 

المراجع

موسوعة الأبحاث العلمية

التصانيف

الأبحاث