d خليل سليم – الصفحة 18 – مدونة الفريق

الكاتب: خليل سليم

  • العمل الجماعي في visual studio باستخدام team foundation server

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

    قبل كل شئ عليك التسجيل في موقع يقدم خدمة team foundation server
    هناك مواقع كثيره مدفوعه تقدم هذه الخدمه باسعار مرتفعه جدا
    لاكن موقع codeplex.com
    يقدم الخدمه بشكل مجاني تماما

    بعد التسجيل في كود بلكس اضف
    بروجكت جديد
    Create Project


    بعد اضافة بروجكت جديد
    اذهب للفيجوال ستوديو
    من قائمة team explorer
     اضغط على هذه الايقونه
    team_explorer.gif
    اضف هذه البيانات نافذة الاتصال

    2010_AddTFSServer.png
    اختر البروجكت 2010_SelectTeamCollection.png

    وادخل اليوزر نيم والباسورد المسجل في الكودبلكس

    لاضافة مطورين اكثر معك اذهب لموقع كودبلكس
    من قائمة people اختار
    manage team
    وتستطيع اضافة من تشاء من المطورين
    بعدها يستطيعون الدخول للفريق عبر الفيجوال ستوديو كما في الخطوه السابقه باستخدام اليوزر والباسورد الخاص بهم
    للاسف وقت اضافة المقال هناك مشكلة في موقع الكود بلكس ولايمكنني الاتصال بالتيم سيرفر وشرح مزيد من الخصائص

  • العمل الجماعي في visual studio باستخدام team foundation server

    قبل كل شئ عليك التسجيل في موقع يقدم خدمة team foundation server

    هناك مواقع كثيره مدفوعه تقدم هذه الخدمه باسعار مرتفعه جدا

    لاكن موقع codeplex.com

    يقدم الخدمه بشكل مجاني تماما

    بعد التسجيل في كود بلكس اضف

    بروجكت جديد

    Create Project

    لاضافة البرنامج

    افتح البرنامج في الفيجوال ستوديو ومن قائمه السولوشن اختر الاتي

    في نافذة البيانات تجد معلومات الاتصال واليوزر نيم في صفحتك في الكودبلكس تحت اقائمة

    source code

    2010_AddTFSServer.png

    اختر البروجكت 

    لحفظ البرنامج الى سيرفر التيم فاونديشن سيرفر في الكود بلكس
    من نفس القائمة

    لاضافة مطورين اكثر معك اذهب لموقع كودبلكس

    من قائمة people اختار

    manage team

    وتستطيع اضافة من تشاء من المطورين

    عندما تذهب للصفحة الخاصة في الكود بلكس ستلاحظ البرنامج موجود في
    ال source code
    وهنا ميزه جيده
    وتلاحظ انه في حالة تطوير اكثر من مبرمج لصفحه واحده وعمل
     check in
    فان التعديلات لاتضيع وتستطيع الرجوع لها
    لدخول باقي فريق المبرمجين الطريقه
    من قائمة
    file
    open
    team project
    وادخال البيانات كما موضع في الصورة

  • System.Tuple فئة جديدة في منصة الدوت نت 4.0

    استكمالا لسلسة مقالات: الجديد في منصة دوت  نت 4.0 سنقوم اليوم بالتطرق لفئة Tuple وهي عبارة عن نوع جديد من المتغيرات.

    ال Tuple  عبارة عن مجموعة ثابتة الحجم من العناصر تتكون من عدة متغيرات متشابهة النوع أو مختلفة (heterogeneous)، وعند طرح هذه الفكرة قد تخطر على بالك المصفوفة التقليدية وهو فعلا تصور صحيح، ولكن يختلف النوع Tuple عن المصفوفة في أنه كما ذكرت يمكن أن يحتوي على عدة أنواع من المتغيرات وليس نوع واحد فقط، ولا يخطر بذهنك أنه يحتوي على عدة  أنواع مختلفة من المتغيرات على أن ال Tuple  يحتوي على عناصر عامة مثلا من نوع Object، لا فالTuple يحتوي على أنواع متغيرات محددة (strong typing)  وهذا مثال على إنشاء Tuple جديد

    Code – Visual Basic.NET

    Dim t As New Tuple(Of String, Integer, Boolean)("developers", 1, True)

    Code – C#.NET

    Tuple<string, int, bool> t = new Tuple<string, int, bool>("www.developers.ps", 1, true);

    System.tuple

    كما في الصورة فعند تعريف المتغير ووضع نوع الحقول، نرى أن إسناد القيم سيكون في تعليمات المتغير مثل ترتيب أنواع المتغيرات المرسلة وهي تسمى بالأسماء الافتراضية item1,item2,item3,item4…etc

    يمكن الوصول لعناصر الـ Tuple  عبر كتابة اسم المتغير ثم اسم العنصر كالتالي

    Code

    Response.Write(t.Item1)

    حيث سيطبع developers  مع العلم أنها عناصر للقراءة فقط ولا يمكن إسناد قيم جديدة لها، بمعنى أن قيم عناصر الTuple  ترسلها مرة واحدة وهي عند التصريح عنه ولا يمكن تغييرها (Tuple is immutable)

    توجد طريقة أخرى لإنشاء متغير من هذه الفئة عبر الطريقة المشتركة Tuple.Create

    Code – Visual Basic.NET

    Dim tv = Tuple.Create(1,"www.developers.ps",2,4,44)

    Code – C#.NET

    var tt = Tuple.Create("Hello", 2);

    بقي أن أتطرق إلى أن هذا النوع من المتغيرات هو من النوع المرجعي Reference Type  ويعطيك حتى 8 عناصر قابلة للزيادة لأي عدد من العناصر تريده.

    قد تكون فكرة الـ Tuple غريبة نوعا ما، ولم تخطر ببالك كيفية استخدامها بعد، ولكن كن واثق بأنها  حل سريع وبديل عن بعض الطرق التي نستخدمها حاليا

    وفق الله الجميع

  • [فيديو] بدايتك لبرمجة تطبيقات على Windows Phone

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

  • احمي موقعك من الاختراق: هجوم SQL Injection

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

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

    فهذا النوع من الهجمات يعتمد على إضافة جملة استعلام إلى المتغيرات الممررة للنظام بحيث يتم تنفيذ هذه الإضافة كجزء من جملة الاستعلام الأساسية الموجودة في النظام.

    فعلى سبيل المثال لو قمت بكتابة الأمر التالي في موقعك:-

     

    
    String str="Select count(*) from users where username=' " + txtuser.Text + " ' and password=' " + txtpassword.Text + " ' ";
    Int x;
    SqlCommand cmd=new SqlCommand(str,con);
    X=(int) cmd.ExecuteScalar();
    If (x>0){
    FormsAuthentication.RedirectFromloginPage(txtuser.Text,false);
    }
    else{
    lblMsg.Text="Login attempt failed";
    }
    Con.Close();
    
    

     

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

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

    ‘ or 1=1 – –
    فتصبح جملة الاستعلام كالتالي وذلك لأن – – تقوم بحذف جميع ما بعدها :
     
    
    Select count(*) from users where username = ' ' or 1=1 --
    
    وهنا الشرط سيتحقق حيث 1 = 1 والطرف هذا مسبوق ب ( أو )

    أترى خطورة الأمر…أنت الآن قدمت موقعك للمخترق على طبق من ذهب

    رغم خطورة هذا الأمر ، إلا أن الحل لا يحتاج إلى جهد كبير أو خبرة عالية.

    لأن الحل أسهل مما تتوقع ، فالأسلوب البرمجي بحد ذاته يعتبر عامل أساسي في تحديد مستوى الأمان الذي يتحلى به الموقع

    فلحماية موقعك من هجوم ال SQL Injection، يتطلب منك فقط تحسين أسلوبك البرمجي بإتباع التالي:

    •   لا تثق أبدا بما يدخله المستخدم من قيم في موقعك فيجب عليك التحقق من القيم المدخلة بواسطة أدوات التحقق وأيضا تقليل طول المدخلات التي يدخلها المستخدم فإذا كانت كلمة السر طولها 10 أحرف فيجب عدم السماح للمستخدم بتعدي الطول المسموح وذلك من خلال الخاصية maxlength

    •   لا تستخدم أبدا طريقة تمرير قيم المستخدم مباشرة في جملة الاستعلام كما في المثال الذي طرحته سابقا، ولكن يجب عليك استخدام الوسيطات ( SQL Parameters) أو الإجراءات المخزنة (Stored Procedures)

    ولنكتب المثال السابق بطريقة آمنة ولكن لا تنسى قبل استخدام الوسيطات التحقق من القيم الممررة:

     

    
    String str="Select count(*) from users where username=@username and password= @password";
    cmd.Parameters.AddWithValue("@username", txtuser.Text);
    cmd.Parameters.AddWithValue("@password", txtpassword.Text);
    Int x;
    SqlCommand cmd=new SqlCommand(str,con);
    X=(int) cmd.ExecuteScalar();
    If (x>0){
    FormsAuthentication.RedirectFromloginPage(txtuser.Text,false);
    }
    else{
    lblMsg.Text="Login attempt failed";
    }
    Con.Close();
    
    

     

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

     

    
    CREATE PROCEDURE sp_getUser
    @username varchar(200) = NULL AS
    DECLARE @sql nvarchar(4000)
    SELECT @sql = ' SELECT [name], [address] ' + ' FROM [USERS] Where [username] = "' + @username + ""
    EXEC (@sql)
    

     

    في هذا المثال يتم أخذ قيمة المتغير @username مباشرة من المستخدم ويدمج مع النص @sql والدالة EXEC تستخدم لتعطي النص كوسيط لتنفيذ الاستعلام وهذا الإجراء قابل للاختراق بالرغم من أخذ قيمة المستخدم كوسيط

    فالمشكلة تكمن في أن الوسيط بدلا من أن يكون هو النص المستخدم للبحث من خلاله في الاستعلام سيكون جزء من الاستعلام نفسه

    ولجعل هذا الإجراء أكثر أمنا بالشكل التالي:
     

     

    
    CREATE PROCEDURE sp_getUser
    @username varchar(200) = NULL
    AS
    DECLARE @sql nvarchar(4000)
    SELECT @sql = ' SELECT [name], [address] ' + ' FROM [USERS] Where [username] = '
    SELECT @sql = @sql + ' [username] LIKE @username'
    EXEC sp_executesql @sql, N'@username varchar(200)', @username
    

     

    •   لا تستخدم حساب المدير للاتصال بقاعدة البيانات بل استخدم حساب محدود.

    •   لا تخزن معلومات حساسة في ملفات واضحة بل قم بتشفير كلمات السر وجميع البيانات الحساسة وأيضا يجب تشفير جملة الاتصال إذا كانت تحتوي على كلمة سر

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

    الآن وبعد توضيح طريقة هجوم ال SQL Injection وإعطاءك الحلول اللازمة لتفادي هذا الهجوم والحفاظ على موقعك بشكل آمن

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

     

  • تعرف على SQL CE 4.0

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

    SQL CE لا يحتاج لتنصيب أي نظام إدارة قواعد بيانات أو برنامج أو خدمة في النظام من أجل التعامل مع قواعد البيانات طالما أن إطار العمل دوت نت 4 موجود أو ببساطة يمكنك نسخ المكتبات الخاصة يـ SQL CE  إلى مجلد bin الموجود في تطبيق الـ ASP.NET. لا يوجد هناك أي حاجة لتنصيب أي تطبيق و لا داعي للحصول على سماحيات مدير النظام “administrator”, إنما عليك نسخ تطبيق الويب إلى بيئة الاستضافة فقط.

  • لماذا يظهر خطا 404 في المواقع التي تستخدم asp.net routing

    إن  asp.net routing مفهوم جديد في الدوت نت 4 ، رغم وجود بدايات له في الإصدار 3.5.1 ،  وعند العمل على الخادم المحلي localhost ستعمل معاك هذه التقنية بدون أدنى مشاكل ، ولكن عند الرفع على الاستضافة ، ستجد ظهور مشكلة
    404 – File or directory not found.
    واجهتني هذه المشكلة في كل مرة أرفع مواقعي ، وقررت أن أضع الحل حتى لا يتغلب به إخوة مرة أخرى ، لانني في كل مرة ، كنت أفتح ملف الإعدادات القديم Web.Config  وأنسخ ما وضعته مرة أخرى
    الحل يكمن في التأكد من أن HTTP Redirection ، منصبة على خادم الاستضافة Hosting Server ، وهنا أغلبنا لا يملك الوصل إلى الخادم Server ، وإنما لديه لوحة تحكم عادية ، وغالبا ما تكون هذه الميزة مفعلة في الخادم، وإن أكملت باقي الخطوات ولم تنجح ، قم بمراسلة شركة الاستضافة لتفعلها لك

    الخطوة الثانية ، يتوجب عليك ن تكون بإضافة هذه الوسوم إلى ملف الإعدادات Web.config  ، كالتالي

           <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    <remove name="UrlRoutingModule"/>
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
    <handlers>
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </handlers>
    </system.webServer>

    أيضا لا تنسى من وجود المواصفة targetFramework="4.0" في وسم الإعدادات compilation بهذا الشكل

         <compilation targetFramework="4.0" />      

    بإذن الله ستعمل معاك الأمور الآن بشكل تمام إذا كانت الشيفرة المكتوبة صحيحة ، أيضا في بعض الأحيان ، كان يتوجب علي أن أغير المزود من asp.net 4.0 classic إلى asp.net 4.0 Integrated pipeline
  • هندسة البرمجيات: المنهجيات

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

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

    ما حصل فعليا في النقاط بين البداية والنهاية هي الطريقة المتبعة لاخراج المشروع وهي من مهمة software methodology، وسنحاول أن نستعرض بعض هذه المنهجيات.

    اثناء سير البرنامج من بدايته الى نهايته يمر في عدة مراحل كما اتفقنا، هذه العملية تسمى دورة حياة المشروع software life cycle
    في دورة حياة المشروع هنالك مجموعة عمليات وأنشطة وفعاليات ومهام تقسم وتوزع، طريقة سير هذه المهام تسمى نموذج model

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

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

    منطقيا أول نموذج استخدمه البشر او المبرمجون هو نموذج اللا نموذج، أي العمل بدون وجود نموذج، وهو ما يمكن أن نطلق عليه نموذج ابني وصلح او كوّد وصلح build and fix , code and fix
    build and fix
    وحين الحديث عن هذا النموذج حيث لا طريقة علمية مستخدمة فمن البديهي ان تكون مزاياه أنه يمكنك العمل مباشرة، ولا تحتاج الى تخطيط، لا يحتاج إلى تدريب أو دورات خاصة، كذلك لا تحتاج إلى قواعد للسير عليها، أنت المدير وأنت المحلل، وأنت المبرمج، وأنت مختبر النظام، ولكن حين الحديث عن عيوب هذا المنهج، فحدث ولا حرج، سأقول بعضها، وأترك لكم الباقي، صعوبة صيانة النظام، وصعوبة تطويره مستقبلا، صعوبة فهم النظام من قبل مبرمج آخر إذا أردت أن تسلمه المشروع…. إلخ.

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

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

  • هندسة برمجيات : from z to Agile الجزء الأول

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

    نبدأ بسؤال بسيط ما هو ال Software
    الإجابة سهلة : هو برنامج
    النتيجة : الإجابة خطأ

    البرنامج هو Program ، أما ال Software فله قصة أخرى.

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

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

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

    قرر مهندسوا البرمجيات أن ال Software ليس مجرد برنامج ، ولكنه نظام بمعنى أوسع، له العديد من الأجزاء، لعل آخرها هو الكود، ولربما لا يكون الكود منها أحيانا.

    فقبل عملية بدء البرمجة، يجب أن يكون هنالك فترة جمع المتطلبات، وفهمها وتحليلها، وكتابتها، ومراجعتها … إلخ
    وهذه تسمى عملية التوثيق Documntation ، وهي أساسية في دورة حياة صناعة البرنامج أو النظام، فبدونها سيعمل المبرمج أي كلام، وسيكتب كود قد لا يكون مناسب للمشكلة القائمة.
    أيضا هنالك عملية إدارة المشروع Management، وتحديد وقت البداية ووقت النهاية والمدخلات والموارد.
    ومن تحديد الموارد، هنالك الموارد البشرية، واختيار الفريق، سواء كان المبرمجين أو المصممين، أو محللي النظام … إلخ.
    أيضا هنالك عدة آليات أثناء كتابة الكود، وبعد كتابته مثل Quality Assurance ، و عملية الاختبار Testing ، أيضا حتى بعد تسليم المشروع هنالك فترة الصيانة، والتي تعتبر من ضمن الSoftware

    إذا ما هو ال Software
    هو مجموع كل من التوثيق، وإدارة المشروع، والكود، وفحص الجودة والكفاءة، وكافة الاختبارات، وفترة الصيانة

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

    قام مهندسوا البرمجيات، بوضع خطط وآليات حول كيفية سير ال Software ( سأطلق عليه الآن البرنامج )
    وهذه الخطط لضمان النجاح الأمثل لدورة حياة البرنامج، وتضمنت العديد من الآليات والنماذج.

    سميت هذه الآليات بالنماذج Models ، بها خطة دقيقة وعمليات معينة يجب أن يسير عليها المشروع لضمان نجاحه

    لكي لا أطيل، قام المهندسون بوضع بنموذج لإتمام العمل اسمه الشلال waterfall ، هذا النموذج ينص على بعض المفاهيم منها


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

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

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

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