أفضل ممارسات البرمجة
أفضل ممارسات البرمجة هي مجموعة من القواعد غير الرسمية، وأحيانًا الشخصية، التي يتبعها العديد من مطوري البرامج لتحسين جودة البرمجيات . [ 1 ] تتطلب العديد من برامج الحاسوب أن تكون قوية وموثوقة لفترات طويلة، [ 2 ] لذا يجب أن تُسهّل أي قواعد عملية التطوير الأولي والصيانة اللاحقة لشفرة المصدر من قِبل أشخاص آخرين غير المؤلفين الأصليين.
في قاعدة التسعين والتسعين ، يشرح توم كارغيل سبب تأخر مشاريع البرمجة في كثير من الأحيان: "يستغرق إنجاز أول 90% من الكود 90% من وقت التطوير، بينما تستغرق الـ 10% الأخيرة 90% أخرى من الوقت." [ 3 ] وأي توجيهات من شأنها معالجة هذا القصور في التخطيط جديرة بالدراسة.
يؤثر حجم المشروع أو البرنامج بشكل كبير على معدلات الخطأ، وإنتاجية المبرمج ، ومقدار الإدارة المطلوبة. [ 4 ]
جودة البرمجيات
كما هو موضح أدناه، توجد العديد من السمات المرتبطة بالبرمجيات الجيدة . قد تتعارض بعض هذه السمات فيما بينها (مثل السرعة الفائقة مقابل إجراء فحص شامل للأخطاء)، وقد تختلف أولويات العملاء والمشاركين. يقدم واينبرغ مثالاً على كيفية تأثير الأهداف المختلفة بشكل كبير على كل من الجهد المطلوب والكفاءة. [ 5 ] علاوة على ذلك، يشير إلى أن المبرمجين يسعون عمومًا إلى تحقيق أي أهداف محددة، ربما على حساب سمات الجودة الأخرى.
حدد سومرفيل أربع سمات عامة لا تتعلق بما يفعله البرنامج، ولكن بمدى جودة أدائه: قابلية الصيانة ، والاعتمادية ، والكفاءة، وسهولة الاستخدام . [ 6 ]
حدد واينبرغ أربعة أهداف يجب أن يحققها البرنامج الجيد: [ 7 ]
- هل يفي البرنامج بمواصفاته ( "إخراج صحيح لكل مدخل ممكن")؟
- هل يتم إنتاج البرنامج في الموعد المحدد (وفي حدود الميزانية)؟
- ما مدى قدرة البرنامج على التكيف مع المتطلبات المتغيرة؟
- هل البرنامج فعال بما يكفي للبيئة التي يُستخدم فيها؟
حدد هوار سبعة عشر هدفًا متعلقًا بجودة البرمجيات، بما في ذلك: [ 8 ]
- تحديد واضح للغرض.
- سهولة الاستخدام.
- المتانة (يصعب إساءة استخدامها، وتتحمل الأخطاء).
- التوفر المبكر (التسليم في الوقت المحدد عند الحاجة).
- مصداقية.
- قابلية التوسع في ضوء الخبرة.
- الإيجاز.
- الكفاءة (سريع بما يكفي للغرض الذي وُضع من أجله).
- أقل تكلفة للتطوير.
- الامتثال لأي معايير ذات صلة (بما في ذلك المعايير الخاصة بلغة البرمجة ).
- وثائق المستخدم واضحة ودقيقة ومفصلة .
المتطلبات الأساسية
قبل البدء بالبرمجة، من المهم التأكد من استيفاء جميع المتطلبات الأساسية اللازمة (أو على الأقل الوصول إلى مستوى كافٍ منها لتوفير أساس متين للبرمجة). إذا لم يتم استيفاء هذه المتطلبات، فمن المرجح أن يكون البرنامج غير مُرضٍ، حتى بعد اكتماله.
من ميك وهيث: "ما يحدث قبل الوصول إلى مرحلة البرمجة غالباً ما يكون ذا أهمية بالغة لنجاح المشروع." [ 9 ]
تشمل المتطلبات الأساسية الموضحة أدناه أموراً مثل:
- كيف يتم تنظيم عملية التطوير؟ (دورة الحياة)
- ما الغرض من هذا البرنامج؟ (المتطلبات)
- ما هو الهيكل العام لنظام البرمجيات؟ (البنية)
- ما هو التصميم التفصيلي للمكونات الفردية؟ (التصميم)
- ما هي لغة (لغات) البرمجة المختارة؟
بالنسبة للمشاريع الصغيرة والبسيطة، قد يكون من الممكن الجمع بين الهندسة المعمارية والتصميم واعتماد دورة حياة بسيطة للغاية.
دورة الحياة
منهجية تطوير البرمجيات هي إطار عمل يُستخدم لهيكلة وتخطيط ومراقبة دورة حياة منتج برمجي. تشمل المنهجيات الشائعة: منهجية الشلال ، والنمذجة الأولية ، والتطوير التكراري والتراكمي ، والتطوير الحلزوني ، وتطوير البرمجيات الرشيقة ، والتطوير السريع للتطبيقات ، والبرمجة المتطرفة .
يُعدّ نموذج الشلال منهجًا تطويريًا تسلسليًا؛ إذ يفترض تحديدًا إمكانية تحديد المتطلبات بشكل كامل في بداية المشروع. مع ذلك، يستشهد ماكونيل بثلاث دراسات تُشير إلى أن المتطلبات تتغير، في المتوسط، بنحو 25% خلال المشروع. [ 10 ] وتسعى المنهجيات الأخرى المذكورة أعلاه إلى تقليل تأثير هذه التغييرات في المتطلبات، غالبًا من خلال اتباع نهج تدريجي أو تراكمي أو تكراري. وقد تكون منهجيات مختلفة مناسبة لبيئات تطوير مختلفة.
منذ ظهورها في عام 2001، ازدادت شعبية تطوير البرمجيات الرشيقة، مدفوعةً برغبة مطوري البرمجيات في اتباع نهج أكثر تكرارية وتعاونية في تطوير البرمجيات. [ 11 ]
متطلبات
يقول ماكونيل: "إن أول شرط أساسي يجب عليك استيفاؤه قبل البدء في البناء هو بيان واضح للمشكلة التي من المفترض أن يحلها النظام." [ 12 ]
يؤكد ميك وهيث على أن الهدف المنشود هو وضع مواصفات مكتوبة واضحة وكاملة ودقيقة لا لبس فيها. [ 13 ] تجدر الإشارة إلى أنه قد لا يكون من الممكن تحقيق هذا الهدف، ومن المرجح أن يتغير الهدف على أي حال (كما ذكر في القسم السابق).
يميز سومرفيل بين متطلبات المستخدم الأقل تفصيلاً ومتطلبات النظام الأكثر تفصيلاً. [ 14 ] كما يميز بين المتطلبات الوظيفية (مثل تحديث سجل) والمتطلبات غير الوظيفية (مثل أن يكون وقت الاستجابة أقل من ثانية واحدة).
بنيان
يشير هوار إلى: "هناك طريقتان لتصميم البرمجيات: الأولى هي جعلها بسيطة للغاية بحيث لا تظهر عليها أي عيوب واضحة ؛ والأخرى هي جعلها معقدة للغاية بحيث لا تظهر عليها أي عيوب واضحة . الطريقة الأولى أصعب بكثير." [ 15 ] (التشديد كما في النص الأصلي).
يهتم تصميم البرمجيات بتحديد المهام المطلوبة وتحديد مكون البرنامج المسؤول عنها (أما كيفية تنفيذها فتُترك لمرحلة التصميم التفصيلي لاحقًا). يكتسب هذا أهمية خاصة عندما يحتوي نظام البرمجيات على أكثر من برنامج، إذ يُحدد بشكل فعّال واجهة التفاعل بين هذه البرامج المختلفة. وينبغي أن يشمل أيضًا مراعاة واجهات المستخدم، دون الخوض في تفاصيل مُفرطة.
يجب مراعاة أي متطلبات نظام غير وظيفية (وقت الاستجابة، الموثوقية، قابلية الصيانة، إلخ) في هذه المرحلة. [ 16 ]
كما أن بنية البرمجيات تحظى باهتمام مختلف أصحاب المصلحة (الجهات الراعية، والمستخدمين النهائيين، وما إلى ذلك) لأنها تمنحهم فرصة للتحقق من إمكانية تلبية متطلباتهم.
تصميم
يتمثل الهدف الأساسي للتصميم في استكمال التفاصيل التي لم تُغطَّى بشكل كافٍ في التصميم المعماري. والهدف هو أن يكون التصميم مفصلاً بما يكفي ليكون دليلاً جيداً للبرمجة الفعلية، بما في ذلك تفاصيل أي خوارزميات محددة سيتم استخدامها. على سبيل المثال، قد يُلاحظ على مستوى التصميم المعماري ضرورة فرز بعض البيانات، بينما على مستوى التصميم، من الضروري تحديد خوارزمية الفرز المناسبة . كمثال آخر، إذا تم استخدام منهجية البرمجة الكائنية، فيجب تحديد تفاصيل الكائنات (الخصائص والأساليب).
اختيار لغة (لغات) البرمجة
يقول ماير: "لا توجد لغة برمجة مثالية. بل لا توجد لغة واحدة هي الأفضل؛ إنما توجد لغات مناسبة أو ربما غير مناسبة لأغراض معينة. إن فهم المشكلة ومتطلبات البرمجة المرتبطة بها ضروري لاختيار اللغة الأنسب للحل." [ 17 ]
يقول ميك وهيث: "يكمن جوهر فن اختيار لغة البرمجة في البدء بالمشكلة، وتحديد متطلباتها، وأهميتها النسبية، إذ من المحتمل أن يكون من المستحيل تلبيتها جميعًا بنفس القدر من الكفاءة. بعد ذلك، ينبغي تقييم اللغات المتاحة وفقًا لقائمة المتطلبات، واختيار اللغة الأنسب (أو الأقل إثارةً للمشاكل)." [ 18 ]
من الممكن أن تكون لغات برمجة مختلفة مناسبة لجوانب مختلفة من المشكلة. إذا سمحت اللغات أو مترجماتها بذلك، فقد يكون من الممكن دمج إجراءات مكتوبة بلغات مختلفة ضمن البرنامج نفسه.
حتى في حال عدم وجود خيار بشأن لغة البرمجة التي سيتم استخدامها، يقدم ماكونيل بعض النصائح: "لكل لغة برمجة نقاط قوة وضعف. كن على دراية بنقاط القوة والضعف الخاصة باللغة التي تستخدمها." [ 19 ]
معايير الترميز
يُعد هذا القسم أيضًا شرطًا أساسيًا للبرمجة، كما يشير ماكونيل: "ضع قواعد البرمجة قبل أن تبدأ البرمجة. يكاد يكون من المستحيل تغيير الكود ليتوافق معها لاحقًا." [ 19 ]
كما هو موضح قرب نهاية قسم قواعد البرمجة ، توجد قواعد مختلفة للغات البرمجة المختلفة، لذا قد يكون من غير المجدي تطبيق نفس القواعد على لغات متعددة. لا توجد قاعدة برمجة واحدة موحدة لأي لغة برمجة. لكل مؤسسة معيار برمجة خاص بها لكل نوع من أنواع مشاريع البرمجيات. لذلك، من الضروري أن يختار المبرمج أو يضع مجموعة محددة من إرشادات البرمجة قبل بدء مشروع البرمجيات. بعض قواعد البرمجة عامة، وقد لا تنطبق على كل مشروع برمجي مكتوب بلغة برمجة معينة.
يُعدّ استخدام معايير البرمجة أمرًا بالغ الأهمية، لا سيما عندما يضمّ المشروع أكثر من مبرمج واحد (وقد شهدنا مشاريع شارك فيها آلاف المبرمجين). فمن الأسهل بكثير على المبرمج قراءة الكود المكتوب من قِبل شخص آخر إذا كانت جميع الأكواد تتبع نفس المعايير.
يقدم رودي غرين مقالاً مطولاً (بأسلوب ساخر) حول كيفية إنتاج كود يصعب صيانته، وذلك لتقديم بعض الأمثلة على ممارسات البرمجة السيئة. [ 20 ]
التعليق
بسبب ضيق الوقت أو رغبة المبرمجين المتحمسين في الحصول على نتائج فورية لبرامجهم، غالبًا ما يُهمل التعليق على الكود. وقد وجد المبرمجون العاملون ضمن فريق أن ترك التعليقات أفضل، نظرًا لأن عملية البرمجة عادةً ما تتبع دورات، أو قد يعمل أكثر من شخص على وحدة برمجية معينة. مع ذلك، يمكن لبعض التعليقات أن تُقلل من تكلفة نقل المعرفة بين المطورين العاملين على نفس الوحدة.
في الأيام الأولى للحوسبة، كانت إحدى ممارسات التعليق هي ترك وصف موجز لما يلي:
- اسم الوحدة
- الغرض من الوحدة
- وصف الوحدة
- المؤلف الأصلي
- التعديلات
- المؤلفون الذين قاموا بتعديل الكود مع وصف لسبب تعديله.
ينبغي أن يكون "وصف الوحدة" موجزًا قدر الإمكان ولكن دون التضحية بالوضوح والشمولية.
مع ذلك، فقد أصبح البندان الأخيران غير ضروريين إلى حد كبير مع ظهور أنظمة التحكم في المراجعات . إذ يمكن تتبع التعديلات ومؤلفيها بشكل موثوق باستخدام هذه الأدوات بدلاً من استخدام التعليقات.
أيضًا، إذا تم استخدام منطق معقد، فمن الممارسات الجيدة ترك "كتلة" تعليق بالقرب من ذلك الجزء حتى يتمكن مبرمج آخر من فهم ما يحدث بالضبط.
يمكن أن يكون اختبار الوحدة طريقة أخرى لإظهار كيفية استخدام الكود المقصود.
اصطلاحات التسمية
يُعتبر استخدام اصطلاحات التسمية الصحيحة ممارسة جيدة. أحيانًا يميل المبرمجون إلى استخدام X1 و Y1 وما إلى ذلك كمتغيرات وينسون استبدالها بمتغيرات ذات دلالة، مما يُسبب ارتباكًا.
يُعتبر استخدام الأسماء الوصفية ممارسة جيدة في العادة.
مثال: يمكن تسمية متغير لأخذ الوزن كمعامل للشاحنة TrkWeight أو TruckWeightKilograms أو Truck_Weight_Kilograms، وغالبًا ما يكون TruckWeightKilograms (انظر تسمية المتغيرات في Pascal case ) هو المفضل لأنه يمكن التعرف عليه على الفور، ولكن اصطلاح التسمية ليس دائمًا متسقًا بين المشاريع و/أو الشركات.
اجعل الكود بسيطًا
ينبغي أن يكون الكود الذي يكتبه المبرمج بسيطًا. يجب تقليل المنطق المعقد لتحقيق أمر بسيط إلى أدنى حد، لأن الكود قد يُعدَّل من قِبل مبرمج آخر في المستقبل. قد لا يكون المنطق الذي طبّقه مبرمج ما منطقيًا تمامًا لمبرمج آخر. لذا، احرص دائمًا على أن يكون الكود بسيطًا قدر الإمكان. [ 21 ]
سهولة الحمل
يجب ألا يحتوي كود البرنامج على قيم ثابتة (حرفية) تشير إلى معلمات بيئية، مثل مسارات الملفات المطلقة، وأسماء الملفات، وأسماء المستخدمين، وأسماء المضيفين، وعناوين IP، وعناوين URL، ومنافذ UDP/TCP. وإلا، فلن يعمل التطبيق على مضيف ذي تصميم مختلف عن المتوقع. يمكن للمبرمج الماهر تحديد معلمات هذه المتغيرات وتهيئتها لبيئة الاستضافة خارج التطبيق نفسه (على سبيل المثال، في ملفات الخصائص، أو على خادم التطبيقات ، أو حتى في قاعدة البيانات). قارن ذلك بمبدأ "نقطة تعريف واحدة" [ 22 ] (SPOD).
بالإضافة إلى ذلك، ينبغي أن تحتوي الموارد، مثل ملفات XML، على متغيرات بدلاً من القيم الثابتة، وإلا فلن يكون التطبيق قابلاً للنقل إلى بيئة أخرى دون تعديل ملفات XML. على سبيل المثال، في تطبيقات J2EE التي تعمل على خادم تطبيقات، يمكن تعريف هذه المعلمات البيئية ضمن نطاق JVM، ويجب أن يحصل التطبيق على القيم من هناك.
قابلية التوسع
صمم الكود مع مراعاة قابلية التوسع كهدف أساسي، ففي كثير من الأحيان، تُضاف ميزات جديدة إلى مشاريع البرمجيات، مما يؤدي إلى توسعها. لذا، تُعدّ إمكانية إضافة ميزات جديدة إلى قاعدة بيانات الكود البرمجي أسلوبًا بالغ الأهمية في كتابة البرمجيات.
إمكانية إعادة الاستخدام
إعادة الاستخدام هدف تصميمي بالغ الأهمية في تطوير البرمجيات. فهي تُقلل تكاليف التطوير وتُسرّعه، خاصةً إذا كانت المكونات أو الوحدات المُعاد استخدامها قد خضعت للاختبار مسبقًا. غالبًا ما تبدأ مشاريع البرمجيات بنسخة أساسية موجودة تتضمن المشروع في إصداره السابق، وبحسب طبيعة المشروع، يُعاد استخدام العديد من وحدات ومكونات البرمجيات الموجودة، مما يُقلل وقت التطوير والاختبار، وبالتالي يزيد من احتمالية تسليم المشروع في الموعد المحدد.
إرشادات البناء باختصار
نظرة عامة على كل ما سبق:
- اعرف ما يجب أن يقوم به جزء التعليمات البرمجية
- حافظ على اصطلاحات تسمية موحدة في جميع أنحاء النظام.
- أشر إلى وصف موجز لما يُستخدم فيه المتغير (مع الإشارة إلى التعليقات).
- قم بتصحيح الأخطاء فور حدوثها.
- اجعل الكود الخاص بك بسيطًا
- صمم الكود مع مراعاة قابلية التوسع وإعادة الاستخدام.
تطوير البرمجيات
بناء الكود
تتضمن أفضل الممارسات لبناء التعليمات البرمجية عمليات بناء واختبار يومية، أو الأفضل من ذلك التكامل المستمر ، أو حتى التسليم المستمر .
الاختبار
يُعدّ الاختبار جزءًا لا يتجزأ من تطوير البرمجيات، ويتطلب تخطيطًا مسبقًا. ومن المهم أيضًا أن يتم الاختبار بشكل استباقي؛ أي أن تُخطط حالات الاختبار قبل بدء كتابة الكود، وأن تُطوّر حالات الاختبار أثناء تصميم التطبيق وكتابة الكود.
تصحيح الأخطاء في الكود
يميل المبرمجون إلى كتابة الكود كاملاً ثم البدء في تصحيح الأخطاء والتحقق منها. مع أن هذا الأسلوب قد يوفر الوقت في المشاريع الصغيرة، إلا أن المشاريع الأكبر والأكثر تعقيداً غالباً ما تحتوي على عدد كبير من المتغيرات والوظائف التي تتطلب عناية خاصة. لذا، يُنصح بتصحيح أخطاء كل وحدة برمجية على حدة بعد الانتهاء من كتابة الكود، بدلاً من تصحيح أخطاء البرنامج بأكمله. هذا يوفر الوقت على المدى البعيد، ويجنب إهدار الكثير من الوقت في محاولة اكتشاف المشكلة. ويمكن الاستعانة باختبارات الوحدات البرمجية الفردية، أو الاختبارات الوظيفية لخدمات وتطبيقات الويب ، لتحقيق ذلك.
الانتشار
يُعدّ النشر المرحلة الأخيرة من إطلاق التطبيق للمستخدمين. ومن أفضل الممارسات في هذا الصدد: [ 23 ] [ 24 ]
- اجعل بنية التثبيت بسيطة: قلل عدد الملفات والمجلدات إلى الحد الأدنى. لا تقم بتثبيت أي شيء لن تستخدمه أبدًا.
- احتفظ فقط بما هو ضروري: يجب أن تضمن أنشطة إدارة تكوين البرامج تطبيق هذا المبدأ. يجب أرشفة الموارد غير المستخدمة (الإصدارات القديمة أو المعطوبة من الملفات، وشفرة المصدر، والواجهات، وما إلى ذلك) في مكان آخر للحفاظ على بساطة الإصدارات الأحدث.
- حافظ على تحديث كل شيء: يجب أن تضمن أنشطة إدارة تكوين البرامج تطبيق هذا الإجراء. بالنسبة لعمليات النشر القائمة على التحديثات التفاضلية، تأكد من أن إصدارات الموارد المنشورة حاليًا هي الأحدث قبل نشر التحديثات التفاضلية. إذا لم تكن متأكدًا، فقم بعملية نشر من البداية (احذف كل شيء أولًا ثم أعد النشر).
- اعتمد استراتيجية متعددة المراحل: اعتمادًا على حجم المشروع، قد تكون هناك حاجة إلى المزيد من عمليات النشر. [ 25 ]
- يجب أن تكون هناك استراتيجية للتراجع: يجب أن تكون هناك طريقة للتراجع إلى إصدار سابق (يعمل).
- اعتمد على الأتمتة في العمليات المتكررة: فمجال الخطأ البشري واسع للغاية، لذا يجب تجنب العمليات اليدوية. استخدم أداةً مدمجةً في كل نظام تشغيل، أو استخدم لغة برمجة نصية لعمليات النشر عبر المنصات. [ 26 ] [ 27 ]
- أعد إنشاء بيئة النشر الحقيقية: ضع في اعتبارك كل شيء (أجهزة التوجيه، وجدران الحماية، وخوادم الويب، ومتصفحات الويب، وأنظمة الملفات، وما إلى ذلك).
- لا تقم بتغيير إجراءات النشر والبرامج النصية أثناء التنفيذ، وقم بتوثيق هذه التغييرات: انتظر حتى يتم إصدار نسخة جديدة وسجل هذه التغييرات بشكل مناسب.
- تخصيص عملية النشر: تتطلب منتجات البرمجيات الحديثة، مثل واجهات برمجة التطبيقات والخدمات المصغرة، اعتبارات محددة لضمان نجاح عملية النشر. [ 28 ] [ 29 ] [ 30 ]
- تقليل المخاطر من مراحل التطوير الأخرى: إذا كانت الأنشطة الأخرى مثل الاختبار وإدارة التكوين خاطئة، فمن المؤكد أن عملية النشر ستفشل. [ 31 ] [ 32 ]
- ضع في اعتبارك تأثير كل جهة معنية: الاعتبارات التنظيمية والاجتماعية والحكومية. [ 33 ] [ 34 ] [ 35 ]
انظر أيضاً
- أفضل الممارسات
- قائمة أدوات تحليل الكود الثابت
- رابطة موثوقية برامج صناعة السيارات (MISRA)
- ضمان جودة البرمجيات
- جودة البرمجيات
- قائمة بفلسفات تطوير البرمجيات
- الكاتدرائية والبازار - كتاب يقارن بين البرمجيات مفتوحة المصدر ذات التصميم التنازلي والتصميم التصاعدي
- مبادئ ديفيس 201 لتطوير البرمجيات [ 36 ]
- أين النظرية لهندسة البرمجيات؟ [ 37 ]
- لا تجعلني أفكر (مبادئ التنقل البديهي وتصميم المعلومات) [ 38 ]
ملحوظات
مراجع
- ↑ ماكونيل، ستيف (2004). كود كومبليت . ريدموند، واشنطن: مطبعة مايكروسوفت. ص. . ISBN 978-0-7356-9125-4. OCLC 61315783 .
- ↑ سومرفيل، إيان (2004). هندسة البرمجيات ( الطبعة السابعة). بيرسون. ص 38. ISBN 0-321-21026-3.
- ↑ بنتلي، جون (1985). "لآلئ البرمجة: نصائح عملية في علوم الحاسوب" . مجلة اتصالات رابطة مكائن الحوسبة . 28 (9): 896-901 . doi : 10.1145/4284.315122 . ISSN 0001-0782 . S2CID 5832776 .
- ↑ ماكونيل، ستيف (2004). كود كومبليت ( الطبعة الثانية). مطبعة مايكروسوفت. الصفحات 649-659 . ISBN 0-7356-1967-0.
- ↑ واينبرغ، جيرالد (1998). سيكولوجية برمجة الحاسوب ( طبعة الذكرى السنوية الخامسة والعشرين). دار نشر دورست هاوس، نيويورك. الصفحات 128-132 . ISBN 978-0-932633-42-2.
- ↑ سومرفيل، إيان (2004). هندسة البرمجيات ( الطبعة السابعة). بيرسون. الصفحات 12-13 . ISBN 0-321-21026-3.
- ↑ واينبرغ، جيرالد (1998). سيكولوجية برمجة الحاسوب ( طبعة الذكرى السنوية الخامسة والعشرين). دار نشر دورست هاوس، نيويورك. الصفحات 15-25 . ISBN 978-0-932633-42-2.
- ↑ هوار، سي. أ. ر. (1972). "جودة البرمجيات" . البرمجيات: الممارسة والخبرة . 2 (2). وايلي: 103-105 . doi : 10.1002/spe.4380020202 .
- ↑ ميك، برايان؛ هيث، باتريشيا (1980)، دليل ممارسات البرمجة الجيدة ، إليس هوروود، وايلي، ص 14
- ↑ ماكونيل ، ستيف (2004). كود كومبليت ( الطبعة الثانية). مطبعة مايكروسوفت. ص 40. ISBN 0-7356-1967-0.
- ↑ ساكوليك، إسحاق (8 أبريل 2022). "نبذة تاريخية عن منهجية أجايل" . إنفوورلد . تم الاطلاع عليه في 6 فبراير 2023 .
- ↑ ماكونيل ، ستيف (2004). كود كومبليت ( الطبعة الثانية). مطبعة مايكروسوفت. ص 36. ISBN 0-7356-1967-0.
- ↑ ميك، برايان؛ هيث، باتريشيا (1980)، دليل ممارسات البرمجة الجيدة ، إليس هوروود، وايلي، ص 15
- ↑ سومرفيل، إيان (2004). هندسة البرمجيات ( الطبعة السابعة). بيرسون. الصفحات 118-123 . ISBN 0-321-21026-3.
- ↑ هوار، سي. أ. ر. (1981). "ملابس الإمبراطور القديمة" (ملف PDF) . اتصالات رابطة آلات الحوسبة . 24 (2). رابطة آلات الحوسبة: 75-83 . doi : 10.1145/358549.358561 . S2CID 97895. تاريخ الاسترجاع: 25 نوفمبر 2019 .
- ↑ سومرفيل، إيان (2004). هندسة البرمجيات ( الطبعة السابعة). بيرسون. الصفحات 242-243 . ISBN 0-321-21026-3.
- ↑ ماير، هربرت (1989). برمجة لغة سي المتقدمة على جهاز آي بي إم الشخصي . دار ويندكريست للنشر. ص. 12 (مقدمة). رقم ISBN 0830693637.
- ↑ ميك، برايان؛ هيث، باتريشيا (1980)، دليل ممارسات البرمجة الجيدة ، إليس هوروود، وايلي، ص 37
- 1 2 ماكونيل ، ستيف (2004). كود كومبليت ( الطبعة الثانية). مطبعة مايكروسوفت. ص 70. ISBN 0-7356-1967-0.
- ↑ رودي غرين. "كود غير قابل للصيانة : مسرد مصطلحات جافا" . تم الاسترجاع في 26-11-2013 .
- ↑ متعدد (ويكي). "أفضل الممارسات" . دوكفورج . تم الاسترجاع في 13 نوفمبر 2012 .
- ↑ "تعريف نقطة واحدة من خلال المثال" . تم الاسترجاع في 30 نوفمبر 2015 .
لا تكرر أي شيء. اسعَ إلى تحديد نقطة تعريف واحدة لكل جانب من جوانب طلبك [...].
- ↑ "7 أفضل ممارسات نشر التطبيقات - DevOps المنجز" . dzone.com .
- ↑ "الخطايا السبع المميتة لنشر البرمجيات [ LWN.net ] " . lwn.net .
- ↑ blog.fortrabbit.com/multi-stage-deployment-for-website-development
- ↑ كروز، فيكتور (3 أبريل 2013). "لماذا تفشل 30% من عمليات نشر التطبيقات؟" . وايرد - عبر www.wired.com.
- ↑ "قواعد نشر البرمجيات" . مؤرشف من الأصل بتاريخ 2010-05-13.
- ↑ "الأدوات التي تحتاجها لتسريع عملية النشر لتلبية الطلب" . 3 فبراير 2017.
- ↑ أنكيرهولز، آمبر (14 سبتمبر 2016). "DevOps وفن نشر التطبيقات الآمنة" .
- ↑ "تنظيم عمليات نشر البرامج لتتوافق مع ظروف الفشل" . خدمات أمازون السحابية . 5 مايو 2014.
- ↑ "أفضل الممارسات للنشر الخالي من المخاطر" . TheServerSide.com .
- ↑ أمبلر، سكوت. "نشر البرمجيات الفعال" . دكتور دوبس .
- ↑ "نشر تطبيقات المؤسسات: الجانب الإنساني في تنفيذ البرمجيات" . مؤرشف من الأصل بتاريخ 21-08-2016.
- ↑ "اختراق البيروقراطية: تحسين التوظيف ونشر البرمجيات | 18F: تقديم الخدمات الرقمية" . 18f.gsa.gov . 14 مايو 2014. مؤرشف من الأصل في 18 يناير 2015.
- ↑ هورنينغ، برايان (1 يونيو 2016). "نشر البرمجيات بشكل سيئ أسوأ من عدم القيام بأي شيء" . شركة إنتكت للتكنولوجيا .
- ↑ ديفيس، آلان مارك. (1995). 201 مبدأ لتطوير البرمجيات . نيويورك: ماكجرو هيل. ISBN 0-07-015840-1. OCLC 31814837 .
- ↑ جونسون، بونتوس؛ إكستيدت، ماتياس؛ جاكوبسون، إيفار (2012). "أين نظرية هندسة البرمجيات؟". مجلة IEEE للبرمجيات . 29 (5): 96. doi : 10.1109/MS.2012.127 . ISSN 0740-7459 . S2CID 38239662 .
- ↑ كروغ، ستيف (2014). لا تجعلني أفكر، مُعاد النظر فيه : نهج منطقي لاستخدام الويب . بايل، إليزابيث، سترايجر، آرين، ماتشو، مارك ( الطبعة الثالثة). [سان فرانسيسكو، كاليفورنيا]. ISBN 978-0-321-96551-6. OCLC 859556499 .
{{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط )
- هاربيسون، صموئيل ب.؛ ستيل، جاي ل. (2002). ج - دليل مرجعي . ISBN 978-0-13-089592-9.
- يصف الإصدار 2.0 من "تحسين دورة حياة التطوير لإنتاج برامج آمنة" (أكتوبر 2008) مبادئ وممارسات الأمان التي يمكن لمطوري البرامج والمختبرين والمكاملين اعتمادها لتحقيق الهدفين المزدوجين المتمثلين في إنتاج أنظمة برمجية أكثر أمانًا، والتحقق من أمان البرامج التي ينتجونها.
- دوتا، شيف؛ هوك، غاري (26 يونيو 2003). "أفضل الممارسات للبرمجة بلغة C" . developerWorks . IBM . مؤرشف من الأصل في 13 يوليو 2009. تم الاطلاع عليه في 21 يناير 2010 .
روابط خارجية
- يناقش بول بيردن، المؤلف المشارك لمعايير MISRA C للبرمجة وممثل PRQA في مجموعة عمل MISRA C لأكثر من 10 سنوات، مغالطة شائعة في معايير البرمجة: "لسنا بحاجة إلى معيار برمجة!، نحن فقط بحاجة إلى اكتشاف الأخطاء!"
- عملية تطوير البرمجيات
- برمجة الحاسوب
