الجمعة، 9 أغسطس 2024

التعاون الفعّال بين مطوري البرمجيات ومهندسي ضمان الجودة في المشاريع البرمجية

إذا كنت تستخدم منهجية رشيقة agile لإدارة مشروعك - كإطار عمل سكروم Scrum -، وكان فريق سكرم الخاص بك يجد نفسه غير قادر على تسليم متطلبات المشروع بنهاية السبرنت sprint لأنها لا تزال قيد الاختبار، فإن هذه المقالة لك.

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

المشكلة

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

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

العواقب

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

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

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

    • وصول متأخر إلى السوق: ستفقد المنظمة -  خصوصاً إذا كانت المنظمة شركة ناشئة ومحاطة بالعديد من المنافسين - الميزة التنافسية لأن الميزات التي تريد إطلاقها إلى السوق تستغرق وقتًا أطول للتطوير - دورتي تطوير بدلاً من دورة واحدة -، فبالتالي سيزداد الوقت اللازم للوصول إلى السوق.

    • التبديل بين المهام  context switching : بحلول الوقت الذي سيتلقى فيه المطورون التقييم لمخرجات عملهم، سيكون الكود قد "تبخَّر" من أذهان المطورين، مما يجعل معالجة الأخطاء البرمجية بسرعة وكفاءة أكثر صعوبة.

  • فقدان تماسك الفريق: يفقد الفريق العقلية المشتركة "نحن جميعًا في هذا معًا". قد يشعر المطورون أنهم أكملوا وظيفتهم، تاركين المختبرين يتحملون مسؤولية إكمال السبرنت.

الطريقة الصحيحة للتعاون بين المطورين ومهندسي ضمان الجودة

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

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

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

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

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

الأربعاء، 17 يونيو 2020

الإطار التنظيمي السعودي للحوسبة السحابية ومطوري Azure

أصدرت هيئة الاتصالات وتقنية المعلومات السعودية في مطلع عام 2018 الإطار التنظيمي للحوسبة السحابية والذي يحدد الحقوق والالتزامات لمزودي خدمات الحوسبة السحابية وللمشتركين بتلك الخدمات. النقطة الجوهرية في هذا الإطار التنظيمي تنص على أن المحتوى الخاص بالمشترك لا ينبغي استضافته لدى مزودي خدمات الحوسبة الحسابية غير المحليين في حال كان المحتوى ينطوي على درجة من الحساسية أو السرية. على سبيل المثال، لو أرادت جهة حكومية ما الاستفادة من خدمات الحوسبة السحابية التي تقدمها شركة مايكروسوفت عبر منصة Azure بواسطة استضافة محتواها على منصة Azure وكان هذا المحتوى حساس وسري فإنه – بناءاً على الإطار التنظيمي للحوسبة السحابية – لا يمكن استخدام منصة Azure بحكم أنها مزود غير محلي ولا يمتلك مركز بيانات بالسعودية.
مطوري Azure هم المطورين الذي يعتمدون في بناء وتشغيل حلولهم على خدمات المطورين التي توفرها منصة Azure أو ما يعرف باسم PaaS (على سبيل المثال: App Service، SignalR Service، Azure Storage، Azure Cache for Redis ...إلخ) والتي توفر عليهم الكثير من الجهد الذي من المفترض أن يواجهوه في حال ذهبوا إلى خيار الـ IaaS.
مع الإطار التنظيمي الجديد للحوسبة السحابية، لن يكون بمقدور المطورين الاستفادة من منصة Azure للأسباب آنفة الذكر. وقد يظن المطورين للوهلة الأولى أنهم سيحرموا من مميزات PaaS التي توفرها منصة Azure، وربما قد يكون عليهم الاتجاه لتعقيدات الـ IaaS والتعامل مع مزود خدمة محلي. الأمر ليس كذلك، فمايكروسوفت قد وفرت ما يتيح لمطوري Azure التعامل مع مزود خدمة محلي والاستفادة من خدمات Azure PaaS، مرحباً Azure Stack!
في عام 2017 أطلقت مايكروسوفت Azure Stack، والذي يتيح إمكانية الوصول لخدمات الحوسبة الحسابية بواسطة بيئة محلية دون الحاجة لاستضافة محتوى المشترك في خوادم Azure أو مع إمكانية الدمج بين الـ Private cloud و الـ Public cloud، على سبيل المثال، يمكن للمنظمات التي تمتلك البنية التحتية الخاصة بها وتستخدم منصة Azure في نفس الوقت أن توحد تجربتها عبر Azure Stack. أيضاً يمكن لمزودي خدمات الحوسبة الحسابية تقديم خدمات Azure لمشتريكم عبر Azure Stack بواسطة البنية التحتية الخاصة بهم ودون استخدام البنية التحتية الخاصة بـAzure  على الإطلاق.  إذاً في هذه الحالة لن يتم مشاركة المحتوى الخاص بالمشترك مع Azure وسيظل محتواه لدى مزود الخدمة المحلي، وهذا ما يهم مطوري Azure.
إذاً مع Azure Stack يمكن لمطورين Azure التعامل مع مزودي خدمات الحوسبة السحابية المحليين والاستفادة من خدمات Azure في نفس الوقت، بل ويمكنهم أيضاً جلب Azure Stack إلى مراكز البيانات الخاصة بهم في حال كانت لهم مراكز بيانات. أختم هذه المقالة بالإجابة على أهم ثلاثة أسئلة تخص مطوري Azure في السعودية.
من هم مزودي خدمات الحوسبة السحابية المحليين الذين يوفرن خدمات Azure؟
شركة صحارى نت، ومؤخرا شركة الاتصالات المتكاملة. لا أعلم إن كان هناك مزودين آخرين في السعودية، إذا كان هناك مزودين آخرين فاذكر لنا أسمائهم في التعليقات.
هل تختلف أسعار الخدمات عن Azure؟
نعم، وبالزيادة :) الأسعار تعتمد على مزود الخدمة المحلي ولا علاقة لمايكروسوفت بها، وكل مزود يقوم بإنشاء الخطط والعروض الخاصة به.
هل جميع خدمات Azure متوفرة في Azure Stack؟
لا، الخدمات الأساسية مثل الخدمات المتعلقة بالمحتوى والبيانات متوفرة في
Azure Stack – وهي الخدمات التي تهم مطوري Azure في السعودية -، للمزيد عن الخدمات المتوفرة بـ Azure Stack يرجى زيارة الرابط.

السبت، 5 ديسمبر 2015

شرح الأتوماتا المحددة المنتهية DFA باللغة العربية مع التطبيق عملياً بلغة C#

اقتربت الامتحانات :) وبهذه المناسبة العطرة،  أتقدم بهدية متواضعة للطلبة الذي يبحثون عن شرح لمادة نظرية الحوسبة (أو الأتوماتا Automata) باللغة العربية: شرح لموضوع الأتوماتا المحددة المنتهية Deterministic Finite Automata باللغة العربية. في الأسفل يوجد شرح للموضوع على هيئة عرض تقديمي مكون من أكثر من 60 شريحة، بالإضافة إلى تطبيق عملي بسيط لبناء آلة DFA ، وأيضا برنامج DFA Recognizer الذي يقوم بالتحقق من قبول السلاسل لأي آلة DFA معرفة بواسطة المستخدم.
 


الخميس، 19 نوفمبر 2015

بيئات التطوير المتكاملة الداعمة لمنصة Xamarin والحصول على منصة Xamarin

مستوى المقالة: مبتدئ
المتطلبات السابقة لقراءة هذه المقالة:
-          إلمام بأساسيات لغة البرمجة C# وبيئة التطوير المتكاملة فيجوال ستوديو
-          إلمام بأساسيات التطوير لمنصة واحدة على الأقل من منصات الهواتف الذكية

تحدثنا في المقالة السابقة عن منصة Xamarin التي توفر ميزة تطوير تطبيقات أصيلة native apps للهواتف الذكية على منصات متعددة باستخدام لغة سي شارب. في هذه المقالة سأتحدث عن بيئات التطوير المتكاملة – Integrated Development Environment - الداعمة لمنصة Xamarin ، كما سنقوم باستعراض تطبيق Hello World لنظام الأندرويد، ومن ثم سنناقش الحصول على منصة Xamarin، وعرض Xamarin لطلبة الجامعات وطريقة الحصول عليه، بالإضافة إلى اشتراك برمجيات DreamSpark المقدم مجانا للطلبة من مايكروسوفت.
بيئة التطوير الافتراضية التي تأتي مع منصة Xamarin هي Xamarin Studio ، وهي بيئة تطوير متكاملة مشابهة لفيجوال ستوديو Visual Studio ، مع أخذ الفارق بعين الاعتبار بين بيئة التطوير فيجوال ستوديو الاحترافية والثرية بالكثير من المزايا والإمكانيات وبين Xamarin Studio ، في الأسفل لقطة شاشة لـ Xamarin Studio
 
ليست بيئة التطوير Xamarin Studio هي البيئة الوحيدة للتطوير مع منصة Xamarin، مرحبا بمايكروسوفت فيجوال ستوديو، يدعم فيجوال ستوديو التطوير لمنصة Xamarin ، وبالتالي سيكون فيجوال ستوديو هو الخيار الأنسب لمبرمجي سي شارب بحكم الألفة معه، أيضا باعتقادي أن استخدام فيجوال ستوديو والاستغناء عن زامارين ستوديو هو الخيار الأفضل لكثرة المزايا والإمكانيات التي يوفرها فيجوال ستوديو والتي تجعل منه – باعتقادي - أفضل بيئة تطوير متكاملة على الإطلاق – سأخصص في الفترة القادمة سلسلة من المقالات عن فيجوال ستوديو 2015 تتناول العديد من مزاياه وإمكانياته - .
سنستعرض الآن تطبيق Hello World بسيط لمنصة الأندرويد. يرجى اتباع الخطوات التالية:
1.       من فيجوال ستوديو 2015 توجه لنافذة إنشاء مشروع جديد، من القوالب المدرجة تحت لغة سي شارب اختر Android ثم اختر مشروعBlank App(Android)  كما هو موضح في الصورة.
 
2.       ستظهر شاشة كما في الأسفل تطلب تسجيل الدخول باستخدام حساب Xamarin أو إنشاء حساب جديد لدى Xamarin ، حتى لو قمت بعمل Build للمشروع لن يتم ذلك حتى تقوم بتسجيل الدخول أولاً.  النافذة التي في منتصف الصورة توضح تفعيل اشتراكي لدى Xamarin والذي هو من نوع Xamarin Business. سنتحدث عن اشتراكات Xamarin لاحقا. 
 
3.       في نافذة مستعرض الحل solution explorer ستجد ملفات المشروع - سنتناول هذه الملفات وغيرها من المواضيع المتعلقة بالتطوير للأندرويد مع منصة Xamarin بشكل أكثر تفصيلاً في المقالة القادمة عن Xamarin.Android والتي ستتضمن تطوير تطبيق أندرويد احترافي من الصفر - ، ما يهمنا في هذه النافذة الآن هما ملفان، ملف Main.axml وهو واجهة المستخدم المكتوبة بلغة xml ، والملف الأخر وهو MainActivity.cs وهو ملف النشاط المرتبط بواجهة المستخدم السابقة والمكتوب بلغة C#.
 
4.       توجه إلى ملف Main.axml للإطلاع عليه فقط، ستجد أنك تستطيع تحرير واجهة المستخدم بشكل رسومي أو عبر التعديل على مصدر الـ xml كتابة. لن نقوم بأي تعديلات على واجهة المستخدم. 
5.       توجه إلى ملف MainActivity ، ستجد الشفرة التالية: 
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
 
namespace App1
{
    [Activity(Label = "App1", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;
 
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
 
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
 
            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.MyButton);
 
            button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };
        }
    }
}
 
الشفرة السابقة مكتوبة بلغة سي شارب! دعنا نغض الطرف عن بعض سطور هذه الشيفرة لأن مقالتي القادمة سوف تتحدث عنها بشكل مفصل. دعنا نتوجه الآن إلى السطرين التالية بداخل الوظيفة OnCreate :
            Button button = FindViewById<Button>(Resource.Id.MyButton);
 
            button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };
 
السطر الأول مهمته إنشاء إشارة إلى الزر الموجود في واجهة المستخدم Main.axml والذي يحمل الاسم MyButton. إذاً المتغير button يمثل زر MyButton. أما السطر الثاني فيمثل وظيفة مجهولة Anonymous method تم ربطها بحدث النقر Click event للزر button وعندما يحدث النقر على الزر يتم تنفيذها. تقوم هذه الوظيفة بحساب عدد النقرات التي تمت على هذا الزر وتخزينها في المتغير count المعرف على مستوى الكلاس.
6.       قم بتجربة البرنامج عبر نشره إلى هاتف أندرويد حقيقي أو إلى محاكي أندرويد الخاص بفيجوال ستوديو Visual Studio Emulator for Android ، سأقوم باستخدام محاكي اندرويد الخاص بفيجوال ستوديو كما في الصورة.
 
الحصول على Xamarin
منصة Xamarin هي منصة تجارية، ولكن إذا أدرت نسخة مجانية ومحدودة الإمكانيات فبإمكانك التوجه إلى حزمة Starter، للحصول عليها توجه إلى الرابط التالي http://xamarin.com/starter . للنسبة للحزم الأخرى فهي حزم تجارية يمكنك الاطلاع عليها في متجر Xamarin عبر الرابط التالي http://store.xamarin.com .
إذا كنت طالب/طالبة فبإمكانك الحصول خطة الـ Business مجاناً، للمزيد يمكنك زيارة الرابط التالي http://xamarin.com/student . أيضاً إذا كنت طالب/طالبة فيمكنك الحصول على العديد من البرمجيات الأصلية مجانا عبر برنامج DreamSpark الذي تقدمه شركة مايكروسوفت لتوفير اشتراكات للحصول على برمجيات أصلية مجانا للطلبة، ومن هذه البرامج منصة Xamarin بالتعاون مع شركة Xamarin. للحصول على اشتراك DreamSpark توجه إلى أندية مايكروسوفت أو ممثلي مايكروسوفت في جامعتك أو كليتك لطلب الاشتراك، وإذا كنت مقيم في السعودية وبحاجة بمزيد من المعلومات فيمكنك التواصل مع Microsoft Imagine في السعودية عبر حسابهم الرسمي على تويتر http://twitter.com/@MSFTImagineSA .