ذكرنا في تغريدات سابقة بداية تخصص هندسة البرمجيات وكيف إنه هذا التخصص ساعدنا في إنشاء إطارات تطوير مختلفة ممكن تسهل علينا عملية بناء السوفتوير ونوعاً ما مضمونة النتائج إذا إتبعت بشكل صحيح
في هذه السلسلة رح نتعرف أكثر على أشهر هذه الإطارات وميزاتها
#برمجة #هندسة_البرمجيات #swe
في هذه السلسلة رح نتعرف أكثر على أشهر هذه الإطارات وميزاتها
#برمجة #هندسة_البرمجيات #swe
في نهايات القرن الماضي .. كانت أغلب إطارات التطوير تنتمي للـ plan-driven models وأشهرها طبعاً الـ waterfall model .. واللي يركز بشكل أساسي على تقسيم حياة تطوير السوفتوير إلى عدة مراحل منفصلة تماماً بحيث ما تبدأ أي مرحلة جديدة بدون الانتهاء من المرحلة القديمة بشكل كلي
النقطة الثانية هي الـ documentation .. واللي يعتبر أهم النقطتين .. الـ waterfall model يقدس شي إسمه documentation وإنه لازم يكون عملك منظم ومدروس .. بحيث قبل ما تبدأ تشتغل على المرحلة الأهم وهي مرحلة البرمجة .. يكون عندك نظرة شاملة على السوفتوير من عدة جوانب مهمة
الكلام هذا جميل .. لكن بدأت تظهر مشاكل الـ waterfall model لما بدأنا نحسب تكلفة إضافة أو تغيير requirement معين حتى لو كان بسيط .. لأنه هذا التغيير رح يكلفك أكثر كونه رح يرجعك للبداية وتضطر على الأقل تعيد دراسة الـ components اللي رح تتأثر بإضافة هذا الـ requirement
لذلك الـ requirements stability نقطة مهمة جداً إذا حبيت تتبنى هذا الإطار .. لكن هذا الكلام غير واقعي بالمرة .. متى كان آخر مشروع إشتغلت عليه ما كان فيه تغيير في الـ requirements وأحياناً تكون تعديلات كبيرة جداً لدرجة تتضطر لعمل contract جديد إذا كنت شغال على مشروع مع جهة ثانية
أيضاً من مشاكل هذا الإطار هي قلة الـ feedbacks أوالـ customer involvement
من أساسيات نجاح أي مشروع سواء كان تقني أو لا .. هي
1-الـ communication عشان تعرف الطريق الصحيح اللي لازم تمشي عليه
2- والـ feedback المستمر عشان تضمن إنك مازلت ماشي على الطريق الصحيح اللي اخترته
من أساسيات نجاح أي مشروع سواء كان تقني أو لا .. هي
1-الـ communication عشان تعرف الطريق الصحيح اللي لازم تمشي عليه
2- والـ feedback المستمر عشان تضمن إنك مازلت ماشي على الطريق الصحيح اللي اخترته
والنوع الثاني من العمليات هو الـ empirical processes واللي تعتمد على فكرة إدخال Inputs لـ process معينة .. وبعدين ناخد الـ outputs ونقارنها مع الـ desired outputs ونشوف هل نحتاج أي تعديل على المدخلات ونرجع نعيد العملية حتى نوصل للـ desired outputs
غالباً ما تكون عملية بناء السوفتوير فيها كثير من الـ Empirical Processes واللي زي ما ذكرنا نحتاج فيها إلى feedback عشان نعرف هل نحن إتخذنا القرارات الصح .. أو نحتاج نعدل في بعض الأمور .. وبالتالي نحتاج إلى الـ feedback المستمر من العميل حتى لو كان بسيط
للأسف .. هذه النقطة تستخدم بشكل محدود في هذا الإطار .. أي ambiguity ولو كانت بسيطة في الـ requirements ممكن تسبب تباين كبير بين تصور العميل لنقطة معينة وفهم مهندس البرمجيات لنفس النقطة لذلك صرنا نحتاج إنه يكون فيcustomer involvement ولكن من المهم تقنينه حتى لا يساء استخدامه
ومازلنا مع المشاكل .. وحدة من أصعب الأمور اللي ممكن تسويها لما تتبنى واحدة من الـ plan-driven models هي قياس الـ progress .. أو نسبة الإنتهاء من المشروع اللي شغال عليه
في عالم الـ waterfall .. من الصعب إنك تعطي نسبة محددة وخصوصاً إنه أطول فترة رح يعيش فيها المشروع التقني .. هي فترة التطوير والإختبار .. واللي غالباً تكون آخر فترتين والوقت اللي رح يُستغرق في هذه المرحلتين صعب جداً تقيسه قبل ما تبدأ .. وغالباً رح تعتمد على خبرتك في عمل هذا القياس
كل هذه المشاكل وأكثر كانت السبب في إننا نشوف إطار ثاني مع بداية الألفية .. في عام 2001 .. بدأنا نسمع عن إطار الـ Agile بشكل كبير وبدأنا نشوف كثير من الشركات تتبنى هذا الإطار في مشاريعها التقنية .. وخصوصاً إنه يحل كثير من المشاكل اللي كنا نعاني منها مع الـ plan-driven models
مبدأ الـ Agile مبني على نقطتين رئيسية ..
- الـ rapid development .. بمعنى .. حاول إنك تبدأ تكتب الكود من أول يوم ..
- الـ customer involvement في كل خطوة صغيرة أو كبيرة .. وهذه تعتبر نقطة جيدة إذا اعتبرنا إنه الـ customer واحد من أهم الـ stakeholders في أي مشروع
- الـ rapid development .. بمعنى .. حاول إنك تبدأ تكتب الكود من أول يوم ..
- الـ customer involvement في كل خطوة صغيرة أو كبيرة .. وهذه تعتبر نقطة جيدة إذا اعتبرنا إنه الـ customer واحد من أهم الـ stakeholders في أي مشروع
لكن الـ model الأشهر لما نذكر الـ agile .. هو الـ scrum model .. واللي يعتمد على تقسيم المميزات اللي رح يقدمها السوفتوير إلى تاسكات أصغر وأصغر .. يتم إعطاء كل تاسك priority معينة .. وبعدها كل أسبوع أو أسبوعين رح يكون في عندنا sprint نحاول ننجز فيها التاسكات المطلوبة ..
مبدأ الـ agile حل أغلب المشاكل اللي كنا نواجهها في الـ waterfall .. أهمها طبعاً الـ requirements stability .. إذا كان الـ customer حابب يعدل على نقطة معينة .. ممكن فريق التطوير بكل بساطة يسلمها في الـ sprint القادم وبتأثير جداً بسيط ولا يقارن مع الـ waterfall model
مع تطبيق فكرة الـ agile رح يقدر الفريق التقني يعطي progress واضح لعملية التطوير .. وأيضاً بعد كل sprint رح يكون الفريق قادر على إعطاء تقديرات أفضل للوقت والجهد اللازم لتطوير feature معينة كونه صار عندنا خبرة من الـ sprints الماضية وهذا طبعاً رح يحسن من دقة الجدول الزمني للمشروع
لكن .. مع تطبيق فكرة الـ rapid development بدأنا نشوف بعض الآثار الجانبية .. مثل الاستغناء عن الـ documentation كونك ممكن تصرف وقت طويل عليه بدل ما تركز على عملية الـ development .. وهي نقطة غير مقبولة أبدأ وخصوصاً لما تتعامل مع شركات كبيرة أو على مشاريع كبيرة
أغلب هذه الشركات تفكر في مرحلة ما بعد التطوير .. وهي مرحلة تشغيل المشروع واللي ممكن تسند إلى شركة ثانية غير الشركة اللي طورت .. عدم وجود مستندات تشرح آلية عمل وبناء السوفتوير من الألف للياء معناها ضياع وقت وجهد على مرحلة الـ reverse engineering for documenting software components
من الآثار الجانبية اللي بدأنا نواجهها أيضاً هي جودة السوفتوير .. وهذه نقطة مهمة جداً .. ممكن ألخصها بتعليق قرأته قبل فترة .. إذا قلت لمجموعة من مهندسي البرمجيات وهم على وشك ركوب الطيارة بأنه عملية تطوير نظام الطيران الآلي كانت agile .. غالباً مارح يركبوا في الطيارة 😁
السبب إنه الـ agile model ما يتوسع بشكل كبير في عملية إختبار السوفتوير وغالباً رح يقتصر على الـ feature level اللي رح تطلقها .. لكن إختبارات الـ integration والـ system ومعرفة تاثير هذه الـ feature على باقي الخدمات اللي كانت أصلاً موجودة .. فمهمشة تقريباً
أخيراً .. لكل نمط مميزاته وعيوبه .. وتبقى مهمتك الأساسية هي تحديد النمط المناسب لفريق التطوير وإمكانياته وجودته .. وأيضاً طبيعة المشروع وحجمه .. كلها عوامل رح تأثر في إختيارك 👍
#انتهى
#انتهى
جاري تحميل الاقتراحات...