Everyone Is An Achiever

Thursday, February 25, 2016

إدارة المشاريع: إدارة المخاطر

5:52 PM Posted by Unknown No comments

إدارة المشاريع

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

إدارة المخاطر Risk Management 

إدارة المخاطر هي أحد أهم وظائف مدير المشروع. إدارة المخاطر تتضمن توقع المخاطر المحتمل مواجهتها والتي قد تأثر على جدول وميزانية المشروع أو جودة المشروع واتخاذ خطوات مناسبة لتجنب هذه المخاطر. يمكن لنا أن نُصنف هذه المخاطر بشكل رئيسي إلى ثلاثة أقسام:
1- مخاطر على المشروع: هذا النوع من المخاطر قد يؤثر على جدول أو موارد المشروع. على سبيل المثال مغادرة أحد فريق العمل للمشروع وبالمقابل فإن الحصول على شخص مناسب لتغطية مكانه قد يأخذ وقتاً الأمر الذي يجعل جدول المشروع يطول عن المدة المحددة
2- مخاطر على المُنتج:  وهي المخاطر التي قد تؤثر على جودة المشروع أو أداء المنتج البرمجي جاري تطويره مثل نقص إحدى أدوات التطوير أو خروج إحدى أدوات التطوير عن العمل
3- مخاطر على الشركة: وهذا النوع من المخاطر قد يؤثر على الشركة المنتجة للبرنامج. على سبيل المثال تقوم شركتك بتطوير برنامج معين ولكن أحد منافسيك يُصدر برنامج منافس لك

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





1- تحديد المخاطر
تحديد المخاطر هي المرحلة الأولى في عملية إدارة المخاطر. في هذه المخاطر نُحدد المخاطر التي قد تشكل خطر كبير على المشروع، المنتج أو الشركة. في هذه المرحلة يجتمع فريق العمل في جلسة عصف ذهني لاستتنباط المخاطر المحتملة التي قد يواجهها المشروع المراد تطويره. بعد ذلك، يقوم مدير المشروع بتحديد أخطر المشاكل. في هذه المرحلة يُمكن أيضا وضع قائمة بالمخاطر المحتملة. هناك على الأقل 6 أنواع يمكن أن تتضمنها هذه القائمة:
I) مخاطر تكنولوجية
II) مخاطر بشرية
III) مخاطر تهدد الشركة
IV) مخاطر تتعلق بالأدوات
V) مخاطر تتعلق بالمتطلبات (متطلبات الزبون)
VI) مخاطر تتعلق بالتقديرات (الجدول الزمني، الميزانية،...)







2- تحليل المخاطر
في هذه المرحلة يجب أن تأخذ كل مشكلة محتملة على حدة ثم الحكم على خطورتها وتأثيرها. يمكنك أن تصنف على حسب :
- احتمال حدوثها [ (منخفض جدا: أٌقل من 10%) (منخفض: 10% - 25%) (متوسط: 25% - 50%) (مرتفع: 50% - 75%) (مرتفع جدا: أكبر من 75%)  ]
- تأثيرها: [كارثي – خطير – يمكن التعامل معه – غير هام]
بعد عملية التحليل يجب أن تُكون جدول فيه المخاطر واحتمالية حدوثها مرتبة تنازليا من حيث احتمالية حدوثها وتأثيرها (من كارثي .... إلى غير هام).





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






4- مراقبة المخاطر
في هذه المرحلة يتم مراقبة المخاطر التي تم التعرف عليها و وضع خطط مناسبة للتعامل معها والمخاطر التي يُمكن أن تحدث لاحقا في المشروع. أيضا في هذه المرحلة تراقب سير عمر استراتيجية التعامل مع المشاكل وأن كل مايطرأ على المشروع هو ضمن خطة سير العمل ويمكن التعامل معه. مراقبة المخاطر يجب أن تتم في كل مراحل تطوير المشروع ويجب أن تناقش بشكل دوري المشاكل المحتملة قبل بدء خطوة معينة في المشروع.









المصدر: 
Software Engineering 9th edition (chapter 22) – Ian Sommerville 

Tuesday, February 23, 2016

طريقة عمل المتصفحات

1:59 PM Posted by Unknown No comments

طريقة عمل المتصفحات
تعتبر المتصفحات أحد أكثر البرامج استخداماً سواء على الحواسب الشخصية أو المحمولة أو أجهزة الهاتف الذكية. الكثير من الشركات البرمجية تتنافس في صُنع متصفحات بمختلف الأشكال والمميزات لجذب أكبر عدد من المستخدمين. حاليا يوجد 5 متصفحات مهيمنة في مجال الانترنت وهي: جوجل كروم، فايرفوكس، انترنت اكسبلورر، سفاري و أوبرا (1).
نظرة عامة على عمل المتصفح
أهم وظيفة للمتصفح هي عرض الصفحة التي يطلبها المستخدم عن طريق طلب الصفحة من السرفر ثم عرضها للمستخدم في حالة توفرها. في حالة توفر الصفحة غالبا ماتكون بصيغة HTML لكن يمكن أن تكون أيضا PDF أو صورة أو فيديو .... . موقع الصفحة المُراد عرضها يحدد بال URL (Uniform Resource Locator).
الطريقة التي يتبعها المتصفح في عرض صفحات ال HTML مُحددة في مواصفات HTML and CSS من قِبل منظمة  W3C.
تركيب المتصفح:
الصورة التالية توضح أهم الأجزاء التي تدخل في تركيب المتصفح.
صورة 1: أجزاء المتصفح (2)

الأجزاء الرئيسية للمتصفح هي:
1-    واجهة المستخدم User Interface: وهي تتضمن شريط العنوان، أزرار الرجوع للخلف أو للأمام، قائمة المفضلة ... إلخ
2-    محرك المتصفح Browser engine: الواجهة للاستعلام أو التحكم بمحرك العرض ويعتبر الوسيط بين محرك العرض و واجهة المستخدم
3-    محرك العرض Rendering engine: مسؤول عن عرض الصفحات المطلوبة. على سبيل المثال عن طلبك لصفحة HTML فإن المحرك يقوم بتحليل ال HTML and CSS في الصفحة ثم عرضها
4-    طبقة الشبكات  Networking: هذه الطبقة مسؤولة عن اتصالات الشبكة، مثل الاتصال باستخدام بروتوكول HTTP وغيره
5-    مترجم جافا سكربت JavaScript Interpreter: يقوم بتحليل وتنفيذ أكواد الجافا سكربت في الصفحة المطلوبة
6-    واجهة المستخدم الخلفية UI Backend: وهذه الطبقة مسؤولة عن رسم الأدوات الأساسية مثل combo box وغيره
7-    تخزين البيانات Data Storage: في هذه الطبقة يقوم المتصفح بحفظ البيانات على القرص الصلب. في السابق كان تخزين البيانات مقتصر على ال cookies لكن حاليا بالاضافة إلى ال cookies قدمت HTML5 مميزات تخزين اضافية (قواعد بيانات) مثل IndexedDb، local Storage  أو Session Storage

مالذي يحدث عند كتابة www.google.com في المتصفح؟
عند طلبك لصفحة معينة (مثل جوجل مثلا) يقوم المتصفح أولا بتحديد موقع الصفحة باستخدام ال URL الذي كتبته وذلك عن طريق طلب ال IP الخاص بال URL من ال Domain Name Server (DNS). بعد أن يتم التواصل مع السرفر والتأكد أن الصفحة موجودة يقوم السرفر Server بإرسال نسخة HTML من الصفحة. يقوم المتصفح بتحليل ال HTML وإنشاء شجرة ال DOM (Document Object Model). بعد إنشاء شجرة ال DOM يتم إنشاء شجرة العرض Rendering Tree ثم إنشاء Layout Tree وأخيرا يتم عرض الصفحة.
محرك العرض Rendering Engine
مسؤولية محرك العرض هي عرض صفحات ال HTML بما تحتويه من صور ومن تنسيق CSS.
محرك العرض Gecko يستخدم في الفايرفوكس بينما يستخدم الجوجل كروم و سفاري محرك عرض Webkit. يستخدم انترنت اكسبلورر محرك Trident بينما يستخدم أوبرا محرك Presto (3).

عمل محرك العرض Rendering Engine workflow:
صورة 2 : عمل محرك العرض
في البداية، يستقبل محرك العرض البيانات الخاصة بالصفحة المطلوبة من طبقة الشبكات Networking layer، وبعد أن يستقبل البيانات يقوم المحرك بـ :
-        تحليل ال HTML لإنشاء شجرة ال DOM
-        إنشاء شجرة DOM
-        تخطيط ال DOM
-          عرض الشجرة للمستخدم
يقوم محرك العرض بتحليل ال HTML وتحويل ال Tags إلى DOM nodes وإنشاء شجرة تسمى "شجرة المحتوى content tree". في هذه الخطوة أيضا يقوم المحرك بتحليل بيانات ال CSS. معلومات الاستايل مع بيانات العرض في ال HTML تُستخدم لإنشاء شجرة أخرى تسمى "شجرة العرض render tree".
شجرة العرض تتكون من مستطيلات مع تأثيرات بصرية كالألوان. هذه المستطيلات تكون مرتبة بشكل صحيح ليتم عرضها على الشاشة.
بعد إنشاء شجرة العرض تأتي مرحلة التخطيط وفي هذه المرحلة يتم إعطاء كل عنصر node إحداثيات وأبعاد عرضه على الشاشة. بعد ذلك تأتي مرحلة الرسم وهي باستخدام واجهة المستخدم الخلفية UI Backend.
هذه المراحل تُنفذ بشكل تدرجي. يعمل محرك العرض على إظهار المحتوى على الشاشة بشكل فوري. لا ينتظر محرك العرض أن يتم تحليل كل ال HTML. الجزء الذي تم تحليله يتم عرضه وهكذا إلى أن يتم عرض كل محتويات الصفحة. يمكنك أن تلاحظ هذا كثيرا في حالة لو كانت سرعة اتصالك بالانترنت بطيئة بحيث أنك ترى بعض أجزاء من الصفحة قبل أن يتم الانتهاء كليا من تحميل الصفحة.
  
الصورتان التاليتان توضحان عمل كل من محرك عرض Webkit و Gecko.
صورة 3: عمل محرك عرض Webkit


صورة 4: عمل محرك عرض Gecko

 تحليل ال HTML:
يقوم المحرك بتحليل كود HTML وإنشاء شجرة ال DOM. على سبيل المثال، يقوم المحرك بتحويل الكود التالي :
       <html>
<body>
<p>
Hello World
</p>
<div> <img src="example.png"/></div>
</body>
</html>
    
          

إلى الشجرة التالية:



مواصفات ال DOM يتم تطويرها من قِبل منظمة W3C (4).
تحليل كود HTML صعب ومعقد وذلك لأن:
-         القواعد النحوية لل HTML ليست Context Free Grammar (5)
-         مرونة HTML هي أحد المواصفات التي تجعل تحليل HTML صعب. يمكنك أن تكتب كود HTML وبغض النظر عن الأخطاء سيقوم المتصحح بتصحيح غالبيتها
-         أيضا أكواد JavaScript أو CSS ضمن كود HTML يجعل عملية تحليل HTML معقدة أكثر من غيرها
تُنفذ عملية التحليل باستخدام مكونين رئيسيين وهما: ال Tokenizer و Parser. وظيفة ال Tokenizer هي تجزيء كود HTML إلى مصطلحات ومفردات HTML و وظيفة ال Parser هي بناء شجرة العناصر. أيضا على المُحلل Parser أن يقوم بعملية إصلاح الأخطاء الشائعة (مثل نسيان إغلاق تاج معين closing tags ..) الموجودة في كود HTML.

إنشاء شجرة العرض Render Tree:
في هذه المرحلة يتم تحويل شجرة ال DOM إلى شجرة العرض render tree. شجرة العرض عبارة عن شجرة تحتوي على معلومات العرض التي يحتاجها المتصفح لعرض الصفحة. العناصر في شجرة العرض تكون على شكل صناديق مشابهة للصناديق المستخدمة في CSS Box Model.
في الصورة التالية:
إلى اليسار يوجد لدينا شجرة ال DOM وإلى اليمين يوجد لدينا شجرة العرض Render Tree المقابلة لها. يمكنك أن تلاحظ أن شجرة العرض render tree تحتوي فقط على العناصر المرئية في الصفحة visual element (لو لاحظت ستجد أن عنصر ال غير موجود في الشجرة كذلك العناصر التي تحتوي على ميزة display=none attribute لاتظهر).

تخطيط شجرة العرض Layout of render tree:
تحتوي هذه الشجرة على إحداثيات وأبعاد الصناديق الموجودة في شجرة العرض.
عرض الصفحة:
في هذه المرحلة وبعد أن أصبح معنا شجرة العرض وتخطيطها، يقوم المتصفح بعرض الصفحة باستخدام طبقة واجهة المستخدم الخلفية UI Backend layer.


هل يتوقف الأمر عند هذا الحد؟
لا. بسبب ديناميكية الصفحات (تغير المحتوى، التعامل مع المستخدم، إظهار وإخفاء بعض العناصر، تغيير حجم النافذة ... إلخ) يقوم المتصفح بعمل إعادة تصميم وتخطيط  وإعادة عرض على حسب المتغيرات التي تطرأ على الصفحة. مع هذا، يحاول المتصفح أن يجعل هذه التغيرات على أقل نسبة، فمثلا لو قمت بعمل تغيير غير هندسي مثل تغيير لون أحد العناصر ففي هذه الحالة لايقوم المتصفح بعمل إعادة تخطيط للصفحة ولكن فقط إعادة رسم العنصر المطلوب. ولو قمت بتغيير هندسي لأحد العناصر يقوم المتصفح بعمل التغيرات الهندسية على ذلك العنصر فقط وهذا باستخدام نظام يتبعه المتصفح يسمى Dirty Bit System. التغيرالهندسي قد يسري على العناصر بشكل هرمي، فمثلا في الكود التالي:
           
              
   
<html>

<body> 
  <div id=”main”>
<p>
Hello World
</p>
<div> <img src="example.png"/></div>
  </div>
</body>
</html>



إذا قمت بتغيير حجم عنصر ال <div id=”main”> (جعله أصغر على سبيل المثال) سيطرأ هذا التغيير على كل العناصر التي تقع تحت هذا العنصر.

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

المصدر:
المراجع: