السلام عليكم ورحمة الله وبركاته سنشتغل مع بعض كورس حندسة البرمجيات طيب الكورس المرجع الأساسي فيه هو الكتاب سامرفيل الإصدار العاشرة اللي هو software engineering ال الـ Software engine إخواننا واحدة من المواد المهمة جدا لأنه زي ما عارفين الـ Software الآن والبرمجات بيقيت داخلة تقريبا في كل مناحي الحياة بتاعتنا يعني ما في الآن يعني مؤسسة بتقدر تنجح وتقدر تشتغل من غير ما تعتمد في شغولها على الـ Software حتى إحنا في حياتنا الخاصة في الـ Entertainment الترفيه وكدا بيقى الـ Software واحدة من المكونات الهيوانات الرئيسية. الـ الـ software برضو الان التكلفة بتاعتها بقت هي اعلى من التكلفة بتاعة بتاعة الهاردوير. يعني زمان كان التحدي الكبير هو في الهاردوير والتكلفة كانت الكبيرة تكلفة الهاردوير. لكن الان بقت الـ software أو البرمجات اللي بتشتغل في الأجهزة القيمة بتاعتها ممكن تكون أعلى بمئات المرات من التكلفة بتاعة الأجهزة نفسها يعني وعلى سبيل المثال مثلاً ونتكلم عن أنظمة متكاملة مثلاً زي الأنظمة بتاعة الـ ERP System بتلقي إنه في بعض الأنظمة ممكن الأسعار بتاعة تحصل مليون دولار في حين إنه الجهاز بتاع الكمبيوتر ممكن تشتغل عليه هذه الأنظمة لا يتعدى آلاف الدولارات طيب الـ Software عموماً قاعد توجه تحديات كبيرة جداً لما نحن نجي نبنيها واحدة من التحديات إنه كثير من مشاريع بتاعة الـ Software قاعد تفشل في النهاية وبتفشل يمكن لسببين الرئيسيات يعني السبب الاول انه التعخيد بتاع الsoftware بيجة كبير فبيجة الانظمة نحن قاعدين نبنيها في الsoftware بتكون معقدة حجمها كبير كل مرة بتظهر فيها فنكشن إضافية في السابق ما كان من الممكن أنه أو ما كنا بنقدر نعمل فيه الـ software التعقيد بتاع البرمجيات طبعا ساعد فيه برضو التطور الكبير الحصل في الـ hardware يعني زمان كان الهاردوير بحج التطور بتاع البرمجات دي صورة كبيرة لكن الان بيقى التحدي في الهاردوير تحدي بسيط.
وبالتالي بيقى الانزمة بتاعة الصوفتوير اكثر اكثر تعقيدا يعني بيقى تقديم مهام اكثر تعقيدا. الحاجة الثانية برضو ممكن يعني واحدة من الأسباب الرئيسية في إنه كثير من المشاعرات على البرمجات قاعدة تفشل في إنه ما قاعدين نستخدم software engineering methods ما قاعدين نستخدم أساليب هندسة البرمجيات في التطوير من السهل جداً إنك تكتب ليك كود بأي لغة بتاعة برمجة عشان ينفذ أي مهمة لكن التحدي الكبير هيبقى إنه كيف ممكن تصينه مستقبلاً كيف ممكن تطور فيه مستقبلاً فمن غير ما يتتبع منهجية واضحة في عملية تطوير البرمجيات أو تتبع أساليب حدوث البرمجيات في تطوير البرمجيات سيواجهك تحدي كبير جدا في تطوير الأنظمة التي كتبتها أو الكود الذي كتبته مستخبرا فيبقى استخدام البرمجيات واحدة من الحاجات الأساسية ممكن تساعدنا في أن ننجح في مشاريع البرمجيات طيب إذا إحنا عاوزين نتكلم عن software engineering عندنا أسئلة حقه نجاوب عليها يعني واللي هو في البداية لما نتكلم عن software engineering لازم نعرف software هو إشنون يعني شنو software what is a software طيب لما نتكلم عن software يا إخواننا software هو عبارة عن computer program طبعا لما نقول computer program إنت كلكم عارفين معناته هو عبارة عن برنامج حاسوبي مكتوب بلغة بتاعة برمجة محددة بيستخدم شفرة برمجية أو كود برمجي برمجي محدد. إذا وكلهم ممكن تكونوا كتبتوا كله كده برامج مثلاً قد تكون برامج بسيطة باللغات بتاعة برمجة بسيطة بتقوم بمهام بمهام بسيطة. دي بنسميها computer program. لكن إذا بنتكلم عن software نحن نتكلم عن computer program زائداً plus الـ associated documentation.
فيبقى نحن نتكلم عن حاجتين بيتكلم واحد عن computer program plus نمرة 2 associated documentation فيبقى الـ software عبارة عن كلمة أشمل بتشمل لها البرنامج بتاع الكمبيوتر بالإضافة لها التوفيق المرتبط بيه الـ software عادة نحن عندما نعمله يعملها for generic use للـ general market أو ممكن تكون هي customized based on أو بناء على المطلبات بتاعة customer محدد الـ software توفر فيها بعض الـ Attributes يعني عشان نقدر نقول انها هي Software جيدة وبرمجيات جيدة واللي هي باختصار ممكن نتكلم عنها الان انو تديني الـ Functionality المطلوب منها إذا أنا كتبت برنامج مثلاً بتاع Calculator يبقى لازم يوفر ليه في عناوين المفترضين أن يكون بيع الكالكولاتر من جميع وطريح وضريب وقسمة وغيره الحاجة الثانية لا بد أن يكون الأداء بتاعك كويس فيبقى الperformance لا بد أن يكون جيد على حسب الـ user اللي بيستخدمه لأنك لو كتبت لك برنامج مثلا بتاع تخيل ودوائره يجمع مثلا رقمين أو ثلاثة أرقام مع بعض وبياخد زمن طويل جدا عشان يديك الريزول بتأكيد ما هيكون ناجح ولا يتم استخدامه على الإطلاق. أيضا يكون لا بد أن يكون قابل للصيانة مستقبلا. لأنه الروح ده من الميزات بتاعتنا هي عبارة عن منتج مرن منتج غير محسوس ما ما بتقيده يعني القوانين الفيزياء. الممكن تغيير المنتجات الفيزيائية الأخرى وبالتالي في الغالب سنضطر لعمل فيه كثير من التعديلات كثير من الصيانة مستقبلا الصيانة دي قد تكون استجابة لمتطلبات جديدة لتحديات جديدة وقد تكون الصيانة دي أيضا لعلاج بعض المشاكل هل طرأت أو ظهرت في الصوفتوير بعد استخدامه طيب لا بد أن يكون dependable dependable بمعنى أنه يمكن الاعتماد عليهم اه dependable معناته بدين نتائج مستقرة ما فيه مشاكل بتاعة security إلى آخره والحقيقة لابد أنه يكون usable على حسب ال users ومفتوحين يعملوا بنظامه يعني لو أنت عملت software مثلاً عشان يستخدموه أطفال لابد أنه يكون ال interface بتاعته والطريقة بتاعته الاستخدام بتاعته تكون ساهلة على حسب ال users بتاعين النظام على العكس تماماً من أنك تتعمليك مثلاً برنامج مفتوح أنه يستخدموه المبرمجين طيب ال software engineering هي عبارة عن المجال الهندس engineering discipline that is concerned الذي يهتم لي بكل النواحي بتاعة تطوير البرمجيات أو إنتاج البرمجيات في بقية هي عبارة عن engineering discipline that is concerned with all aspects of software protection سنتحدث عنها أيضاً قبل التفصيل إن شاء الله software engineering عندما نحن نطور أي software لدينا activities أساسية يجب أن نكون بعيدين يعني عندنا أربعة نشاطات أساسية موجودة في أي عملية بتاع التطوير للسوفتوير طيب النشاطات دي هي شنو؟ هي عبارة عن الـ Software Specification تحديد المواصفات العملية بتاع التطوير نفسها الـ Software Development الـ Software Validation اللي هي التحقق منو الحاجة نحن نتجنع دي هي فعلا مطابقة للـ Specification وعندنا الـ Software Evolution اللي هو التطوير في الـ Software أو تعديل الـ Software بعد البدء في استخدام طيب الفرق شنو مع بين ال software engineering و مع بين ال computer science ال computer science بتهتم دايما بال theories بتهتم بالنظريات بتهتم بالأساسيات fundamentals لكن ال software engineering بتهتم بتطبيق هذه النظريات تطبيق هذه الأساسيات بتاعة الكمبيوتر ساينس في أنه نحن تدبلوب عشان نطور سوفتوير وعشان نسلم سوفتوير ممكن تكون منه فائدة السوفتوير برضو عندنا حيثاي بسميها system engineering والفرق بيناتو ان software engineering concerned فقط بالموضوع بتاع software بينما system engineering ممكن تكون بتهتم بالcomputer based system including الهاردوير and software فيبقى لما نقول system engineering بنقصط هندسة الانزمة بما فيها الهاردوير plus الsoftware لكن لما نتكلم عن software engineering نحن بنتكلم سبسيكلي بنتكلم بصورة محددة عن البرمجيات فقط دون المكتب المكون بتاع الهاردوير. طيب ال software engineering بتواجه تحديات هنشوفها برضو مع بعض ليه جدام لكن واحدة من التحديات الأساسية إنه الأجهزة اللي بتشتغل فيها ال software الآن بيجت متنوعة بصورة كبيرة هنتكلم عن الموضوع بالتفصيل دايرين إحنا نقلل للزمن بتاع التطوير لأقل حد ممكن.
ودائرين نطور software يمكن الاعتماد عليها ال user سيقدروا يسيغوا فيها التكاليف بتاعة software ودي برضو واحدة من الحياة المهمة جدا لازم نكون يعني منتبهين لها انو 60% من تكلفة الـ software هي عبارة عن التكلفة بتاعة development و 40% بتكون عبارة عن testing أو نحن نتأكد بأنه فعلاً الـ software ده هو الـ software المفترض أنه يتم إنتاجه لو نجي نتكلم عن الموضوع بتاع evolution cost اللي هو تطوير البرمجيات بعد تسليمة دي مرات التكاليف بتاعتها تكلفة المينتونس تكلفة الصيانة ممكن تتجاوز تكلفة التطوير المبدئية بمرات كثيرة طيب software engineering لو دار طوير software هستخدم يعطو techniques هستخدم يعطو methods نحن حقيقة هنتكلم عن techniques مختلفة من خلال الكورس هنتكلم عن methods مختلفة يمكن استخدامه في تطوير البرمجيات وبيبقى الدور بتاع مهندس البرمجيات software engineer انه هو to select the most appropriate methods and techniques بالنسبة لي السيناريو اللي هو شغال عليه وده لانه software زاعت الانواع بتاعاته مختلفة فبالتالي حنحتاج لطرق مختلفة حنحتاج لـ methods مختلفة لتطوير البرمجيات كل طريقة حتشتغل مع نوع محدد من الـ software حتشتغل مع سيناريو بتاع تطوير محدد طيب واحدة من الحاجات التي عملت فرق كبير جدا في الـ Software Engineering وعملت نقلة كبيرة جدا في الـ Software Engineering وهي ظهور الـ Web أو الـ Web Based Software وهي الأنظمة المبنية على الـ Web وذلك جعلت الـ Software Engineering تقوم تواكب و بيقيت فيه تحديات جديدة و عندها علاقة بالسوفتوير الأنظمة أو البرمجيات المبنية على الويب و خلت إنه زي ما قلنا تظهر بعض التحديات و السوفتوير إنجهينيق استجابت لهذه التحديات بأشكال مختلفة زي ما إحنا حنعرف بالتفصيل من خلال الكورس. طيب. ويجب أن نتكلم عن بصورة عامة.
عندنا زي ما قلنا يجب أن نعمل يعني منتج عام. المنتج ده بيتم استخدامه من قبل عدد كبير من نحن عملناه عشان نبيعه في وبعد ذلك يزور العايز يستخدمه ممكن بس مشي يشتريه من بصورة مباشرة. وعندنا اللي هي أنزمة مخصصة. بيتم إنتاجها وفقا لإحتياجات بتاعة كستومر محددة يعني عندنا زبون محدد عاوز software عشان يعمل حاجة محددة طيب نضرب أمثلة النوع الأول مثلا زي الأنظمة اللي بنستخدمها نحن في أجهزة الكمبيوتر مثلا زي ال Office ال Office عبارة عن برنامج هو generic products أي زور ممكن نمشي يشتريه من السوق أو من الانترنت ويقدر ينزل عنده في إجهازه ويبدأ يشتغل يشتغل عليه مثلا زي الأنظمة بتاعة مشغلات الفيديو هي عبارة عن generic products ما تم تنفيذها وتم تطويرها بناء على مطالبات بتاعة user محدد أو لأ عشان تشتغل شغل محدد لكن في نهاية هي عبارة عن مشغلات مثلا بتاعة بتاعة media طيب ال customized product اللي هو مثلا إذا إحنا نتكلم عن تطوير نظام تسجيل لجامعة النيلين في الحالة دي الcustomer بتاعنا اللي هو الجامعة في هذه الحالة هيدينا مواصفات محددة لل software بتاعه بناء على الطبيعة الطريق اللي هو بيأدي بيها العمل بتاعه بتاع التسجيل فيبقى هيورينا الاجراءات بتاعت التسجيل هيورينا المعاصفات بتاعت الصفصير مفترض تكون شنو بناء على ذلك هنمشي هنطور او هنعمل عملية بتاعت لنظام تسجيل وفق المطالبات تم تحديدها من قبل الكرسيومات.
ودي يا إخواننا ببساطة شيء يمكن نضرب مثال زي لما انت مشي تشتري من السوق ملابس جاهزة تمشي محل بتاع ملابس وكم تشتري لك مثلاً جميص وبنطلون. ده عبارة عن generic products. و عندما تذهب لخياط الخياط يقول لك اريد خياط جلابية يأخذ المجاسات بالضبط و يريد المواصفات بشكل كوم كيف و كذا و كذا و تضيف كل المواصفات و يأخذ الخياط جلابية و يفخ المجاسات فيه يوجد الخياط الخياط زي العملية بتاعته التفصيل هي عبارة عن انتاج برمجات وفق احتياج بتاع خصمه محدد و generic products دي عبارة عن المنتجات بينتجة بصورة عامة عشان تتبع بعد ذاك في السوق طيب دمان ايه نتكلم عن النوعين دي من ناحية المواصفات اللي بيحدد منو انو الصوفتوير دي يكون فيه اشتوه بالنسبة للgeneric products ال specification المواصفات بيحدد الصوفتوير developer حتى التغييرات ممكن تحصل في الصوفتوير بيتخذ القرار فيها decision يتخذوا ال developer طبعا بالتأكيد ده ما بيمنع انه ال developer في الحالة دي بيحاول انه ياخد feedback يعني ياخد تغذية راجعة من المستخدمين بتاعنا النظام يشوف هما محتاجين شنو دايرين شنو و كده يقوم يطور فيه بناء على ال feedbacks اللي بيجيه من المستخدمين بتاعنا النظام لكن في النهاية المواصفات الاولية هو بيطور النظام ويف المواصفات اللي هو وضعه هو عنده decision انه يعمل شنو ما يعمل شنو ويجيب على النظام انه يعمل شنو الـ specification و بحدد لنا الـ customer أو الـ owner بتاع الـ software وبالتالي هول بحدد لنا أنه الـ software دي يكون فيه شي نو أو ما يكون و أي تغييرات مثل تحصل في software decision القرار النهائي هو القرار بتاع الكستومر فيبقى الكستومر هو البيتحكم في المواصفات بتاع software طيب، الـ Software يا إخواننا، زي ما قلنا هي عبارة عن Computer Program Plus Associated Documentation لا بد أنه تتوفر فيها بعض الخصائص عشان نقدر نقول إنه الـ Software ده الجودة بتاعته عالية و عشان نقول إنه الـ Software ده جيد والخصائص ممكن بصورة مبسطة خالص نختصرها في أربعة حاجات أساسية اللي هي أول حاجة أنه الـ Software بتاعنا لا بد أنه يكون قابل للصيان لو ما نقول قابل للصيانة معناته العملية بتاعة التعديل فيه مستقبلاً عشان نستجيب للتغييرات الطالبة الكسومر مفترض إنه عملية التعديل دي تكون ساهلة يكون من الساهل التطوير في الصوفتوير ده مستقبلاً وطبعاً القصة دي يا إخواننا ما هي بالبساطة بتعطينا كده تحتكت بي كود وبعدها كده تقول لا أنا بقدر أعدل فيه مستقبلاً لأني أنا الكاتبه دي بتتطلب إنه الطريقة بتاعة الكتابة بتاعة الكود تكون بشكل محدد عندي تحت تطوير لا بد إنه يكون يكون في توثيق جيد بالنسبة للسوفتوير فبتندرج تحتها حقيقة مجموعة من البركتيس ومجموعة من الممارسات المفترض ان انت تقوم بها أثناء ما انت قاعد تطور في السوفتوير طيب الحاجة الثانية الديبندابيليتي عن سيكوريتي لابد ان السوفتوير يكون يمكن الاعتماد عليه ولما نقول ان السوفتوير ديبندابل معناته لابد ان يكون ريليابل يعني الأداء بتاعه ثابت انا سامع بقوة يقول لي و الله خمسة زائد ثلاثة مرة يقول لي تمني و مرة يديني نتيجة خطأ.
بمعنى انه يقول له الحوالي بدي نتيجة صحيحة. يعني عشان اقدر اعتمد عليه و يعني. ولا بد ان يكون ما فيه مشاكل من ناحية بتاعة آآ سيكيوريتي. يعني لا يديني يمكن يثوق فيها لا يمكن اختراقه وكذا الحاجة الأخيرة أنه يكون سيف للاستخدام بذاته منتكلم عن بعض الأنظمة مثلا بنسميها critical system الأنظمة الحرجة الأنظمة الحرجة دي critical system بتتعامل مع حاجات أو بتتعامل بتشتغل في بيئة الخطأ فيها ممكن يؤدي لخسائر فاتحة ممكن يؤدي حتى لlost of life نفجة حياة ناس مثلا زي الأنظمة تتحكم في الطائرات الأنظمة بتاعة الملاحة وتوجيهها للطائرات الأنظمة بتاعة السواريخ الأنظمة بتاعة المصانع مثلا وكذا طيب الخاصية الثالثة اللي هي الـ Efficiency والـ Software لابد أن يكون الـ Performance بتاعه معقول لابد أن يكون Efficient ما يستخدم الموارد بتاعة الجهاز استخدام سيء إذا ممكن تعمل Software يكون ممتاز وما فيه مشكلة لكن على سبيل المثال بيستخدم الـ Memory بتاعة الجهاز بصورة سيئة بيستخدم الـ البروسيسنج باتاعة الجهاز بصورة بصورة سهية وبالتالي يقوم يمنع مسلا برامج تانية يشتغل او يبقى البرفومنس بتاعه سهي لانه ما بيستخدم الموارد بتاعة الجهاز بصورة بصورة جيدة فيبقى برضو احنا بنعاين لانه عند تنفيذه لا بد انه يستخدم الموارد بتاعة المتاحة بصورة جيدة. الحاجة الأخيرة لا بد أن يكون acceptable برضو عشان نقول إنه acceptable معناته ال user اللي هيستخدمه يقبله ويقدر يتعامل معاه يعني مثلا ما ممكن تعملك software بيشتغل بالcommand lines عشان يستخدموه أطفال بتأكيد this will not be accepted by users ما حيث يتم قبوله بال users فإن إحنا على acceptability إنه ال software لا بد أن يكون مقبول على حسب ال users إن إحنا طورنا software له كل واحدة من الخصائص يا إخواننا تحيط في كلام كثير جدا في software engineering نحن قاعدين نقوله عندنا كثير من الممارسات نحن مفترض نقوم بها عشان to make sure عشان نتأكد بأنه فعلا الصوفسورينج نحن قاعدين ننتيجة بتتوفر في هذه الخصائص وهذه الكراكتريستيكس طيب بما انه عرفنا الـ software و عرفنا الخصائص بلعة الـ software جيدة مفترض تكون شنو بنقدر الان نتكلم عن الـ software engineering طيب الـ software engineering هي عبارة عن زي ما قلنا المجال الهندسي او الفرع الهندسي البيه اهتم لي بكل جوانب all aspects of software production لكل جوانب تطوير البرمجيات والكلام دي يبدأ من المراحل الاولى بتاع التطوير اللي هي تحديد المواصفات لحد استخدام النظام أو كيف نحن نحافظ على النظام ونطوره بعد الاستخدام ودي بتخلي يا إخواني حقيقة الـ Software Engineering تكون مختلفة تماما عن كل المجالات الهندسية التانية وده طبعا برضو الاختلاف الـ Software برضو عن المجالات الفيزيائية لأنه الـ Software هي عبارة عن منتج فيزيائي غير محسوس ما زي كل المنتجات التانية الانتجات البشرية من سيارات من مباني من سدود من مصانع الات وغير وكلها في نهاية هي عبارة عن Physical Products الـ Software هي عبارة عن منتج تقريبا البشري خلينا نقول الـ المتفرد الذي يختلف عن معظم المنتجات الثانية والتي عبارة عن حاجة غير محسوسة بالتالي الصفصورة الجديدة كمجال هندسي تختلف عن كثير من المجالات الهندسية الثانية طيب لو نتكلم إحنا عموما عن engineering discipline نتكلم عن المجالات الهندسية أو نتكلم عن الهندسة الهندسة يعني إحنا نستخدم theories المناسبة appropriate theories والmethods عشان إحنا نحل مشكلة بصورة جيدة وبتكلفة معقولة خاتين في بالنا الـ Financial constraints القيودة المالية وخاتين برضو القيودة التنظيمية بتحكمنا فيبقى لما نتكلم عن engineering بنتكلم إن إحنا عندنا أساس علمي عندنا نظريات عندنا methods بناء على إحنا بنستخدم النظرية المناسبة بنستخدم الميثود المناسبة المنهجية المناسبة عشان إحنا نحل مشكلة محددة لكن حل المشكلة دي بنكون خاتين في الاعتبار بتاعنا يعني الconstraints اللي عندها علاقة بالتكلفة وعندها علاقة بالجوانب الأخرى طيب لما نتكلم عن الـ Software Production لما نقول إنه هتهتم بكل الـ Aspects of Software Production إنتاج البرمجيات إحنا ما حنتكلم زي المجالات الهندسية التانية حنتكلم بس عن Technical Process Development ما حنتكلم عنها من ناحية Technical ما حنقول إنه وليه عشان تكتب Software حقو تكتب الكود بطريقة فلانية وحنجيب في الحد بس لا حنوريك إنه مفترض تكتب الكود كيف مفترض تجمع Requirements كيف دي عبارة عن Technical Process كيف تختبر البرمجيات لكن عندنا أجزاء تانية عندها علاقة بالـ project management كيف نحن ندير المشاريع بتاعة البرمجيات كيف نحن نطور tools تساعدنا في تطوير البرمجيات كيف نحن نطور methods ممكن تساعدنا في تطوير البرمجيات فيبقى ال aspects بساعة software engineering أو ال aspects بساعة software production بيتهم بها software engineering هي كتيرة ما تهتم فقط بالجانب التكنيكا بتاعنا كتا how to write أو how to develop software من ناحية technical الـ Software Engineering أخوان الآن بيجت واحدة من المجالات خلينا نقول المهمة جدا التي لا يمكن الاستغناء عنها يعني في عالم اليوم وده لأنه زي ما قولنا الـ Software بيجت داخل تغريبا في كل الملاحي بتاعت الحياة إذا بتتكلم عن الـ Entertainment تتكلم عن الترفيه الـ Software داخلة فيهم إذا بتتكلم عن الصناعة الـ Software خاشة فيهم هي الآن المصانع كل المشاكل بتاعتها وكذا بتتحكم فيها software إذا بتتكلم عن ال business والinformation ومعالجة معلومات الinformation system software بيجت أساسية فيها إذا بتتكلم عن المجالات في المجالات العسكرية، تدخل الصوفتوير فيها بصورة أساسية.
تتحدث عن التجارة، تتحدث عن الإعلام، تتحدث عن الصوفتوير الخشوه. فلا يمكن أن نتخيل أن الصوفتوير في واحدة من المجالات الحياة لا يدخل فيها. فبقى الصوفتوير واحدة من الحياة الأساسية التي نعتمد عليها في حياتنا كأفراد وكمجموعات وكدول وكشركات وكمؤسسات. هذا يجعل تزييد أهمية الصوفتوير لأنه يهتم بالصوفتوير. يهتم بأنها تنتج لجهة software جيد الكواليتي بتاعته عالية مجدية اقتصاديا بتكلفة معقولة في زمن واجيز فبالتاكيد حتكون حاجات مهمة جدا في تطوير software ومع انتشار استخدام software بصورة أكبر حتزيد الأهمية زي ما قلنا بتاعة software engineering طيب الـ Software engineering برضو مهمة يا إخواننا لأنو أنا قبل قلت لكم إنو الـ Software هي عبارة عن منتج مرين وبالتالي التعديلات فيه مستمرة ما بتقف يعني المرونة دي معناها هي ميزة لكن برضو في نفس الوقت فيها تحدي آخر يعني على سبيل المثال الآن لو قلت صنعت عربية كويس والعربية قلت والله يا أخي عربية بتاعة نقل ركاب بالتأكيد يعني بعد ما تم تصنيعها والبدء في استخدامها من الصعب أنك تتعدل فيها تعديل كبير يعني بحيث أنها تبقى مثلا من عربية نقل ركاب تبقى حاجة تانية تبقى عربية سبورت مثلا على سبيل المثال أو تبقى عربية بتاعة السباق لكن الـ software مرنة لأنه ما فيها يعني التحدي الموجود في المنتجات الفيزيائية والتي يمكن أن يكون صعب بعد إنتاجها هذا يجعل أنه أصف نصوير بين الساهلين نحن نعدل فيها داونز رود أسلامي نحن قاعدين نستخدم فيها ودي بيخلي انو الـ Software الـ Users أو المستخدمين بتاعنا الـ Software بيكونوا دايرين يعدلوا فيها بناء على التغييرات اللي بتحصل في احتياجاتهم فـ كل ما تصار عندهم requirement جديدة بيكونوا دايرين الـ Software دا يقدر تـ accommodate أو يقدر انو هو يستوعب التغييرات الجديدة الحصلت في المطلبات بتاعتهم عشان كنا نتكلم دائما عن software maintenance طيب العملية بتاعت software maintenance يا اخوانا بيجت واحدة من التحديات الكبيرة جدا في software يعني كيف نحن نعمل software ونكون خاتين في بان ان software ده هتيم استخدامه لفترة زمنية طويلة وبالتالي متوقعين انه تحصل عليه عمليات بتاعت maintenance ويتيم تعديله مستقبلا مفترض بيتكلفة معقولة فده برضو خلي انه software engineering تبقى واحدة من المجالات المهمة جدا الان بتدخل في جميع المناحي أو في جميع المجالات اللي بيستخدم فيها الـ software لما نتكلم عن الـ software engineering يا إخواننا زي ما قولنا عندنا software process activities عندنا نشاطات أساسية موجودة في أي عملية بتاع التطوير لأي software يعني لا يمكن إحنا نطوير software وما نعمل الأربعة حاجات دي الأربعة حاجات دي باختصار شديد اللي هي الـ software process activities software specification اول حالة software specification لازم احنا نحدد المواصفات بتاعة software ان احنا دايرين ننتجو والقيودة الموضوع على التشغيل بتاعهم والحاجة دي في الغالب هيقوم بيها الـ customers الزورة تطالب الـ software أو سيستخدم الـ software مع المهندسين البرمجيات لكي يحددوا المواصفات لـ software إذا كنا نتحدث عن نظام تسجيل الطلاب في الجامعة فبقى المهندسين الذين سيطوّرون الـ software مفترض بالتعاون مع الـ customer الذي هو الجامعة في هذه الحالة أو المكتب المسجل أو الـ users أن يعملوا مع بعضهم لكي يحددوا مواصفات نظام التسجيل الذي سيكون فيه وما الذي يفعله البيانات التي تتحفظ كيف الصلاحيات المختلفة لما نجي نشغل وبعدين مفترض ان يكون يكون متاح من خلال الويب فبنحدد المواصفات بالاضافة لالقيود الموضوع على عملية تشغيل الـ software طيب مجرد ما حددنا المواصفات بقيت عندنا المواصفات 1 2 3 4 5 بنقوم بنخش في العملية بتاعت الـ software development تطوير البرمجيات وفق شنو الـ specification دي فبنحدد الـ specs و الـ specs دي بنعمل بناء على أنه تحصل عملية بتاعة التطوير.
وعملية التطوير دي، حنعمل ديزاين في الأول للسوفتوير. حنبدأ نتخيل الشكل بتاعه كيف نعمل ديزاين للشاشات. نقول الله يا حيكون في شاشة هنا فيها كذا، هنا فيها كذا، هنا فيها كذا، فيها أزرار كذا.
وحنصمم التدفق بتاع العمل، الشكل وكيف. حنصمم الخوارزميات أنه إحنا محتاجين لها لبيتشتغل في الـ background. حنصمم كميميا الحقيقة.
بناء على التصميم ده، حنيجي بعد ذلك نقوم بعملية الـ programming. اللي هو حنبدأ نكتب الكود فعليا بناء على التصميم. على التصميم اللي احنا عملناه ودي بنسميها الـ Software Development طيب مجرد ما احنا خلصنا العملية بتاعت الـ Software Development الحاجة المنطقية لازم نتأكد بأنو الحاجة الحاصلية الـ Development دي هي نفسها الحاجة اللي كانت مطلوبة بين في الـ Specification والحاجة دي والإجراء ده المجرد المفصل اللي نقوم به في الحالة دي هو الـ Software التحقق من فدارين نتأكد انه يا اخي بتاعنا ده هو فعلا الحاجة الطالبة في هنا فيبقى هو طلب شنو?
نتأكد بانه فعلا دي الحاجة ان احنا انتجناها او فعلا يقوم بكل المهام المطلوبة أو الطلبة الكستومر في البداية طيب إذا الvalidation طلع مظبوط و سلمنا software و بدأ تشغيله الحلقة اللي عندنا بعد ذاك software evolution software evolution إنه software تحصل فيه تغييرات مستقبلا to reflect the changing customer and market requirements عشان إحنا نحكي التغييرات التمتل في طريقة العمل بتاعة الكسامر عند جديدة او السوق بيفرض علينا مرات نغير بعض الاشياء. يعني اذا فرضنا انه عملنا نظام بتاع تسجيل ما كان فيه دفع الكتروني. بقى شيء قام زهر الدفع الكتروني فدي حتبقى نيو ريكويرمينت ونفصل نحن نعدل النظام بتاعنا الان عشان يستوعب عملية الدفع الالكتروني.
اذا كان نظام بتاع التسجيل مثلا ما فيه تعليم الالكتروني والان قمنا طورنا نظام بتاع التعليم الالكتروني دايرين التسجيل يكون عنده علاقة بالنظام بتاع التعليم الالكتروني عشان الطلاب بصورة مباشرة يتم استيعابهم في المنصة بتاع التعليم الالكتروني. تروني بقت عبارة عن تعديل الان مفترض انه يتم فيه نظام التسجيل ودي بنسميها الـ Software Evolution طيب الـ Software الجاي اخواني بتواجه تحديات حقيقة والتحديات دي هي الـ Software بصورة كبيرة و ستخط علينا أيضاً عبء في أن نختار Method و نستخدم Theories في عملية تطوير البرمجيات التحدي الأول الموجود عندنا يا إخواننا سنسميه heterogeneity وهو التنوع من البيئات في التشغيل و من فضلك تعمل فيها الـ Software بصورة كبيرة جداً الـ الآن إذا بنتكلم مثلا عن الأجهزة بتاعة الكمبيوتر من حيث الهاردوير نحن عارفين أنه عندنا الأجهزة بتاعة IBM بالـ architecture بتاعة الـ IBM و عندنا الأجهزة بتاعة Apple مثلا فـ ديال الأرتيكتشن بتاعتنا من ناحية بتاعة هاردوير مختلفة إذا بيتكلم عن الـ operating system الأنظمة بتاعة التشغيل نلاقي عندنا كمية بتاعة أنظمة بتاعة التشغيل مختلفة عندنا ويندوز بإصداراتهم المختلفة عندنا لينكس عندنا ماكينتوش عندنا عندنا الاندرويد الآن عندنا أنظمة كثيرة جداً تحت تشغيل مختلفة. فيبقى التحدي كيف نحن نعمل أنظمة؟ العنظمة تشتغل في بيئات تشغيل مختلفة في بلاد فورمز مختلفة.
البلاد فورمز المختلفة دي من حيث الهاردوير ممكن تكون مختلفة. الموبايل ديفايز بيختلف من حيث الكمبيوتر. بيختلف من السيرفرات. بيختلف من التابلت. في أنظمة بتاعة تشغيل مختلفة الأندرويد بيختلف من الويندوز.
بيختلف من اللينكس. بيختلف من أنظمة التشغيل الأخرى. الحاجة الثانية عندنا الـ Business and Social Change يا إخواننا الدنيا تتغير بصورة سريعة جداً والتغييرات السريعة دي بتخطي علينا عيب في كيف نحن عندنا إمكانية أنه بصورة سريعة جداً نستجيب للتغييرات الموجودة ونعدل الـ Software بناء عليها في كيف بصورة سريعة نحن نتطلع لـ New Software أو حتى نغير في الـ Software الموجود استجابة للتغييرات الممكن تحصل في بيئات الـ العمل المختلفة.
طيب الان لو بنتكلم عن الويب يا اخوانا والانتشار بتاع والشبكات وكده. بيبقى الموضوع بتاع واحدة من التحديات الاساسية. كيف نحن نعمل يكون نقدر نفيق فيه. كيف نعمل software يدين نتائج صحيحة يعني يمكن الوثوق فيه بالأخص عندما نتكلم عن software يمكن تأثير على حياتنا بصورة مباشرة مثلاً زي الأنظمة اللي عندها علاقة بالمعاملات المالية في البنوك أو زي الأنظمة مثلاً عندها علاقة بالقطاع الصحي وعندها علاقة بالطيران بالملاحة بالجوانب العسكرية بالصناعة وكده الحاجة الأخيرة إنه كيف ال software نحن يكون عندنا تطوير لصوفتوير بأحجام مختلفة يخوانا الصوفتوير ممكن تكون عبارة عن حاجات صغيرة جدا الـ Embedded System عبارة عن أنظمة صغيرة بتشتغل فيها أجهزة محدودة مثلا زي النظام اللي بتتحكم به في الشاشة بتاعت التلفزيون عبارة عن وفي نهاية الانتهاب بالسيستيم، يمكن أن يكون حجمه بسيط جداً وانتهام بالأنظمة المعقدة مثلاً مثل أنظمة الـARP system أو أنظمة التصنيع التي تستخدم في المصانع وغيرها فنحن نتكلم في نهاية أنه الـsoftware الجديد يجب أن يكون عندها استيجاب أو تستطيع أن تستجيب للـ wide range of software الذي هو عندنا اختلاف كبير جدا في حجم الـ software من ابتداء من أنظمة ممكن تكون صغيرة وبسيطة وانتهان بأنظمة ممكن تكون كبيرة جدا ومعقدة للغاية الـ Software System مختلفة وبالتالي سنضطر لإستخدام طرق مختلفة للتطوير كما ذكرنا قبل قليل لذلك سنرى أن الـ Software Engineering لن يقدم لدي وصفة واحدة ستقول لي أعمل واحد اتنين تلات عشان تصل او تصل لعملية بتاع التطوير البرمجيات.
لكن هتديني طرق مختلفة مختلفة في النهاية كلها بتوصلني لنقطة بي انه انا انتج برمجيات. بختار الطريق المناسب. Based on الحاجة اللي أنا شغال عليها بناء على الـ Software Type اللي أنا شغال عليه بناء على الـ Requirement بتاعة الـ Customer بناء على المواصفات المطلوبة في الـ Software بناء على الـ Development Team عنده إمكانيات الخلفية بتاعته برضو عشان نفهم التنوع دي يا إخواننا خلينا نتكلم شوي عن الـ Software Types الأنواع بتاعة الـ Software الـ Software يا إخواننا الأنواع بتاعتها كثيرة جدا بتبدأ عندنا من الـ Standalone Application اللي هيدي الأنظمة بتشتغل بتشتغل تشتغل في جهاز بتاع كمبيوتر مثلاً زي الأنظمة بتاعة النظام أو تعمليك أي نظام يكون بيشتغل في الجهاز بتاعك وبيشتغل براه ومن غير ما يكون في حوجة لأنه الجهاز يكون متصل بالنتويك عشان تجي تفتح مثلاً الويرد لا محتاج أنك تكون موصل بالنتويك ولا محتاج تصل سيرفر أو كذا هو عبارة عن برنامج بيشتغل عندك في جهاز في جهاز بتاع كمبيوتر واحد بنسميها طيب عندنا حاجة تانية اللي هي بنسميها Interactive Transaction Based Application واللي هي عبارة عن أنزمة بتشتغل في سيرفر بيكون ريموتلي وبعد ذلك الناس بيقدروا يوصلوها من خلال أجهزة مختلفة مثلاً زي الأنزمة بتاع التجارة الإلكترونية زي الأنزمة المبنية على الويل أو مثلاً زي النظام التعليمي الإلكتروني نستخدمه هو عبارة عن نظام موجود في سيرفر والستودنس أو الطلاب ممكن يصلوه من أجهزة من أجهزة مختلفة يبقى يبقى عندنا زي سيرفر بيكون موجود فيه وبعد ذلك عندنا مختلفين بيقدروا يخشوا عليه من خلال من خلال الـ network وطبعاً ده بنلاحظ أنه على عكس أنه على الأول عشان تشغل مطلعينك تكون connected بالـ network أو في النهاية عندك access somehow بطريقة ما مربوط مع الـ computer الموجود فيه و server الموجود فيه الـ application طيب عندنا الـ embedded control system العنظمة المضمنة ودي عبارة عن العنظمة دايماً بيكون نحن بنعملها لاستخدام محدد بتشتغل فيه special hardware اللي هو مثلاً زي النظام اللي بيتحكم لك في الغسالة مثلاً هو في النهاية عبارة عن نظام صغير بيكون عندك زرار بسيطة جداً بتستخدمها لتشغيل مثلاً الجهاز بتاع الغسالة مثلاً أو الجهاز بتاع المايكروويف أو مثلاً الشاشة بتاعت التلفزيون أو الريسيفر أو غيره يعني فدي منسميها الـ Embedded Control System هي عبارة عن أنظمة بتأدي غرض محدد بيتم تصميمها عشان تشتغل في هاردوير محدد في الغالب طيب عندنا الباتش بروسيسينج سيستم اللي هي دي عبارة عن الأنظمة التي يتم تصميمها عشان تتعامل مع لارج داتا باتشيز بتتعامل مع بيانات بتكون ضخمة جدا و دي دائما بتكون عملية بتاعة المعالجة فيها كثيرة جدا عشان تدني في النهاية Output محدد زي لما نتكلم مثلا عن الأنظمة الآن عندها علاقة بالأناليسيز بتاع الداتا أو البيك بيك داتا.
طيب عندنا الانترنتيمينت سيسيم والدي الأنظمة بتاعة الترفيه زي الأنظمة مثلا بتاعة مشغلات الفيديو زي الأنظمة الجيمز مثلا ودي عبارة عن أنظمة بتم تصميمها عشان يستخدموها المستخدمين في الترفيه. طيب عندنا الأنظمة اللي بتستخدم في عملية الموديلينج سيموليشن. واللي هيدي أنظمة المحاكاة والنمزجة.
ودي أنظمة دائما بتاخد كمية من عشان تبني في النهاية آآ محدد مثلا زي الأنظمة الممكن تحاكي لي آآ بيار بتاعة عامل محددة. أو ممكن تحاكي لي مثلا حركة السوفم في ميناء عشان تتوريني الزمن بتاع الانتظار وكده دايما إحنا بنستخدم عشان نوفر يعني عشان نكسب الزمن عشان نصل لنتائج من غير ما إحنا نضطر نستخدم حاجة مثلا في بيئاتها الحقيقية أو مثلا زي الأنظمة الآن بتاعة تعليمة الطيارين الأنظمة بتاعة السيموليتر بتاعة الطيارات اللي هو بدربه فيها الطيارين بدل ما نقوم نستخدم طيار ممكن نستخدم أنظمة بتاعة سيموليشن أنظمة بتاعة محاكاة طيب عندنا أنظمة ممكن نصنفها as data collection system واللي دي أنظمة بتاعة تجميع المعلومات ودي أنظمة دايما بتجمع data من الenvironment يعني من البيئة المحيطة بها ودايما بتكون بتستخدم بتجمع المعلومات ممكن بعدها ترسلها لأنظمة تانية مثلاً مثلاً زي ما قلنا زي الأنظمة بتاعة الباتش بروسيسنج سيستيمز طيب عندنا آخر نوع اللي هو سيستيمز أوف سيستيم ودي الأنظمة اللي بتتكون من أنظمة تانية اللي هو أول أنظمة ممكن تقدم خدمات لسوفتويرز لسوفتويرز تاني مثلاً زي الأنظمة الكبيرة بتاعة الـ ERP system اللي هو عبارة عن نظام ممكن يتكون من مجموعة من الأنظمة الفرعية المترابطة مع بعضها البعض ممكن مثلاً برضو مثل الأنظمة التي تقدم خدمات لأنظمة تانية مثل مثل أنظمة التشغيل الموجودة عندنا في جهاز الكمبيوتر هي عبارة عن أنظمة تقدم خدمات لأنظمة تانية أو مثل مثل الدرايفرز التعريفات بتاعة الهاردويرز المختلفة طيب بغض النظر يا إخواننا عن الـ software إن إحنا دايرين ننتقل نوع بتاعه إذا كان standalone أو إذا كان batch processing أو إذا كان simulation أو كده عندنا حاجات أساسية عندها علاقة بالجودة لازم تكون موجودة عندنا في أي والهي أول حاجة أنه لما نجي نعمل له لازم نستخدم طريقة مفهومة طريقة يمكن إدارته ودي عشان نقدر نحن نحدد نقدر نتحكم في العادية بتاع التطوير نفسها نقدر نحدد انو الاخر العملية بتاع تطوير الـ Software هتاخد زمن قدر شنو على سبيل المثال نقدر نحدد التكلفة ممكن تكون قدر شنو وغيرو عشان كده دايماً نحنا في تطوير الـ Software بنقول نحن بنستخدم الـ Software Engineering لأنو بتديني Road Map محدد بتديني طريقة محددة وبتستخدم Methods محددة Approaches محددة في عملية التطوير والطريقة دي بتكون منت يعني يمكن إدارتها مفهومة للناس الشغالين في عملية التطوير تطبيق. الحاجة الثانية لا بد أن أي software يكون dependable والperformance يكون معقول زي ما قلنا لأن أي software performance غير عادي أو سيء بتاكل أن يتم استخدامه في النهاية لا بد أنه برضو يعمل نحن نكون فاهمين كويس الـ requirement يخوانا البداية الصحيحة تقود الى النهاية الصحيحة زي ما عارفين فإذا أنا عرفت من البداية المواصفات بتاعته مفترض تكون شنو عرفت الـ requirement بصورة دقيقة بالتاكيد حصل لـ للمنتج النهائي الصحيح لكن إذا ما عرفت المواصفات من البداية بسورة دغيرة بتاخدت هنتج المنتج الخطأ يعني هنتج software غير صحيح ما بيلبي الغرض ما بيحل المشكلة من الناتجة إحنا قمنا بتطوير software طيب بيجينا الآن يا إخواننا في software engineering قاعدين نتكلم عن أهمية إعادة الاستخدام الرييوز اللي هو قدر الإمكان اللي إحنا دايرين ما نبني الـ software from scratch يعني لما نبني نعمل برنامج ما دايرين نبدأ نكتب الكود من الـ 0 تاني لو في إمكانية في حاجات جاهزة في component جاهزة في أجزاء من الـ software جاهزة إلى حد كبير إحنا عاوزين نعمل عملية إعادة استخدام للأجزاء الموجودة والـ الرييوز الـ use عبارة عن مفهوم كبير الآن موجود عندنا في الـ software engineering بيبدأ من يعادة استخدام الـ design يعادة استخدام الـ code يعادة استخدام الـ أنظمة يعادة استخدام الـ specification نفسها و كده ففيه كلام كتير جدا في الـ software engineering طيب زي ما قولنا قبل إخواننا ظهور بتاع الإنترنت حقيقة خدت يعني تحديات جديدة على الـ Software Engineering الـ Web أو الإنترنت عموما بيقى الآن هو عبارة عن منصة كتير من الأنظمة الآن قاعد تشتغل فيها وظهرت عندنا الـ Web Services الخدمات بتاعت الـ Web واللي هي بتمكن الأنظمة الموجودة في الـ Web فينا تتكلم مع بعض إنها تبيع Access أو ممكن إحنا نصلها من خلال الإنترنت المفاهيم بتاعة الكلاود كيف نحن نقدم كسيرفيس فقط مقابل استخدام بدلا من انهم هم يتملكوا البردو الجزء بتاعة الويب اخوانا خلت الانزيمة تمجى موزعة فالانزيمة بيجت الى حد كبير وده بردو احد من التحديات الكبيرة اللي قاعدت نعيشنا الان في في الـ software software engineering.
طيب البرضو software ال web software engineering يعني لحظة كبير ساهمت فينا الموضوع بتاع software reuse يبقى واحدة من الحاجات الحاجات الاساسية. برضو الانظمة المبنية على ال web يعني خلت ال agile يستخدم في الغالب طريقة بتاعة ال incremental ال agile development الأنظمة المبنية على الويب. سنعرف كل هذا بالتفصيل قريبا.
بدأنا نتكلم عن Service Oriented Systems وهي الأنظمة التي تقدم خدمات أو تقدم خدمات لدينا يمكن الاستفادة منها في أنظمة أخرى. وده برضو بيتعملية الموضوع بتاع بتاع الريوز. بدنا نتكلم عن كيف يعني كيف يكون بيستخدام تقنيات مثلا زي وزي وغيره يعني لأنه إحنا كنا نتكلم زمان عن والآن بيجي نتكلم عن طيب الـ Software Engineering أخواننا بنفتكر بأنه يعني الـ Software Engineering لابد أنه يتحلو ببعض الـ Ethics لأنه هي وظيفة يعني لا تغي الأهمية عن المجالات التانية مثلاً زي الطيب زي المحامة وكذا زي ما المجالات المهنية التانية عندها FX بتحكمها برضو الـ Software Engineers لابد انو تحكمهم FX يعني وده لانو Software Engineers اخوانا برضو بيتطلع على معلومات قد تكون غاية في الحساسية بيتعامل يعمل مع عنده معرفة يمكن يستخدمها استخدام سيء إذا ما عنده ethics ما عنده أخلاقيات بتحكمه فخلونا مع بعض نشوف كده هم الprofessional responsibilities أو الethics المفترضة أنها تكون موجودة عند الناس الsoftware engineering أو بصورة عامة الناس اللي عندهم علاقة بالمجال بتاع الكمبيوتر طيب أول حاجة خبان عندنا الconfidentiality اللي هو احترام الخصوصية والconfidentiality إنك إت مفترض تحافظ على سرية المعرفة المعلومات بتاعة الـ customers أو بتاعة الـ users بغض النظر عن إذا كان الحياة دي مطلوبة بالعقد أو غير مطلوبة لكن من ناحية أخلاقية لا يجوز أنك تتمشي تفشي أسرار مؤسسات أو customers إذا تعاملت معهم على سبيل المثال إذا طلعت على تقارير مالية مثلاً اللي موصلة لك تشتغل تلال نظام بتاع حسابات من غير المقبول وغير أخلاقي إنك تفشي هذه المعلومات أو تقوم بنشرة. طيب الحقيقة عند الموضوع بتاع الكمبيتنس دائما مفصلا انك تلتزم بالحياة بتقدر تعملها فقط وما تقوم تمس ريبريزنت الليفل اوف كومبيتنس بتاعك عفوا يعني ما تقوم انت بتعرف حاجة و بتعرف لغة بتاع الضرمجة او بتقدر تعمل عمل و انت يعني عارف انك انت ما داخل ضمن امكانياتك يعني اه ودي طبعا محتاج اخوانا برضو فيها مشاكل كتير جدا موضوع بتاع الكمبيوتنز ده كتير من الناس قد يقبلوا مشاريع قد يقبلوا ينام يطوروا برمجات وهم ما عندهم المهارات اللازمة اللي يتمكنوا من من إنجاز هذه المشاريع طيب عندنا الموضوع التالي اللي هو احترام الملكية. انك تحترم الملكية بتاعة الاخرين.
وده بيبدأ من الاستخدام بتاع الـ software بيبدأ من الـ code بيبدأ من الانزيمة تعمل بها إلى آخر. إذا نظام ما مرخص يمكنك استخدامه فترد أنك تستخدمه. إذا أنت طورت نظام مثلا لشركة والنظام ده هو ملك للشركة لا يحقق عليك أنك تستخدمه بعد ذلك لأنه دي ملكية بتبقى للشركة اللي تبقى تشغال فيها.
عندنا برضو الحاجة الأخيرة أنك تستخدم المهارات بتاعتك في الكمبيوتر استخدام سيء. إنك تتعمل مثلا فيروسيز أو تقوم بعماريات بتاعت بتاعت هاكينج لأنظمة أو كذا فيبقى. الموجودة عندك مفترض ما تستخدمها استخدام استخدام سيء دي عبارة عن مقدمة بسيطة بالنسبة للصوفتوير انجينيري وفي المحاضرات القادمة هنواصل ان شاء الله وحنعرف الصوفتوير انجينيري بصورة تفصيلية اكتر السلام عليكم ورحمة الله