علة البرمجيات
تطوير البرمجيات |
---|
و علة البرنامج هو خطأ، عيب أو خطأ في برنامج كمبيوتر أو نظام أن يؤدي إلى إنتاج نتيجة غير صحيحة أو غير متوقعة، أو أن تتصرف بطرق غير مقصودة. يُطلق على عملية البحث عن الأخطاء وإصلاحها اسم " تصحيح الأخطاء " وغالبًا ما تستخدم تقنيات أو أدوات رسمية لتحديد الأخطاء ، ومنذ الخمسينيات من القرن الماضي ، تم تصميم بعض أنظمة الكمبيوتر لردع أخطاء الكمبيوتر المختلفة أو اكتشافها أو تصحيحها تلقائيًا أثناء العمليات.
تنشأ معظم الأخطاء من الأخطاء والأخطاء التي تحدث إما في تصميم البرنامج أو في كود المصدر الخاص به ، أو في المكونات وأنظمة التشغيل التي تستخدمها هذه البرامج. بعضها ناتج عن المترجمين الذين ينتجون رمزًا غير صحيح. والبرنامج الذي يحتوي على العديد من الحشرات، و / أو الأخطاء التي تتدخل بجدية مع وظائفه، هو ان يكون عربات التي تجرها الدواب (عيب). يمكن أن تؤدي الحشرات إلى حدوث أخطاء قد يكون لها تأثيرات مضاعفة . قد يكون للأخطاء تأثيرات خفية أو تتسبب في تعطل البرنامج أو تجميد الكمبيوتر. يتم تصنيف الأخطاء الأخرى على أنها أخطاء أمنية ويمكن ، على سبيل المثال ، تمكين المستخدم الضار من تجاوزهاضوابط الوصول من أجل الحصول على امتيازات غير مصرح بها . [1]
تم ربط بعض أخطاء البرامج بالكوارث. كانت الأخطاء الموجودة في الشفرة التي كانت تتحكم في آلة العلاج الإشعاعي Therac-25 مسؤولة بشكل مباشر عن وفيات المرضى في الثمانينيات. في عام 1996 ، تعين تدمير النموذج الأولي لصاروخ آريان 5 التابع لوكالة الفضاء الأوروبية الذي تبلغ تكلفته مليار دولار أمريكي بعد أقل من دقيقة من إطلاقه بسبب خلل في برنامج كمبيوتر التوجيه على متن الطائرة. في يونيو 1994 ، تحطمت طائرة هليكوبتر تابعة للقوات الجوية الملكية من طراز شينوك في Mull of Kintyre ، مما أسفر عن مقتل 29. تم رفض هذا في البداية باعتباره خطأ طيارًا ، لكن تحقيق أجراه Computer Weekly أقنع مجلس اللوردات الاستفسار الذي قد يكون ناتجًا عن خطأ برمجي في كمبيوتر التحكم في محرك الطائرة . [2]
في عام 2002، دراسة كلفت من قبل الولايات المتحدة وزارة التجارة الصورة المعهد الوطني للمعايير والتكنولوجيا خلص إلى أن "البق البرمجيات، أو أخطاء، وتنتشر جدا وضار بحيث تكلف الاقتصاد الأميركي ما يقدر ب 59 مليار $ سنويا، أي حوالي 0.6 في المائة من الناتج المحلي الإجمالي ". [3]
التاريخ
الكلمة الإنجليزية الوسطى bugge هي أساس المصطلحين " bugbear " و " bugaboo " كمصطلحات مستخدمة لوحوش . [4]
مصطلح "علة" لوصف العيوب كان جزءًا من المصطلحات الهندسية منذ سبعينيات القرن التاسع عشر وهو يسبق أجهزة الكمبيوتر الإلكترونية وبرامج الكمبيوتر ؛ ربما تم استخدامه في الأصل في هندسة الأجهزة لوصف الأعطال الميكانيكية. على سبيل المثال ، كتب توماس إديسون الكلمات التالية في رسالة إلى زميل في عام 1878: [5]
لقد كان الأمر كذلك في جميع اختراعاتي. الخطوة الأولى هي الحدس ، وتأتي مع انفجار ، ثم تنشأ الصعوبات - هذا الشيء يخرج و [يكون] حينئذٍ أن "الحشرات" - كما تسمى مثل هذه العيوب والصعوبات الصغيرة - تظهر نفسها وأشهر من المشاهدة المكثفة والدراسة والعمل ضروري قبل الوصول إلى النجاح التجاري أو الفشل بالتأكيد. [6]
تم الإعلان عن لعبة Baffle Ball ، وهي أول لعبة كرة والدبابيس ميكانيكية ، على أنها "خالية من الأخطاء" في عام 1931. [7] تمت الإشارة إلى مشاكل المعدات العسكرية أثناء الحرب العالمية الثانية على أنها أخطاء (أو مواطن الخلل ). [8] في كتاب نُشر في عام 1942 ، قالت لويز ديكنسون ريتش ، متحدثة عن آلة قطع الثلج التي تعمل بالطاقة ، "تم تعليق نشر الجليد حتى يمكن إحضار المبدع لإخراج الحشرات من حبيبه." [9]
استخدم إسحاق أسيموف مصطلح "حشرة" للإشارة إلى مشاكل مع إنسان آلي في قصته القصيرة " Catch That Rabbit " ، التي نُشرت عام 1944.
تم استخدام مصطلح "خطأ" في حساب رائد الكمبيوتر جريس هوبر ، الذي نشر سبب وجود عطل في جهاز كمبيوتر كهروميكانيكي مبكر. [10] النسخة النموذجية للقصة هي:
في عام 1946 ، عندما تم تسريح هوبر من الخدمة الفعلية ، انضمت إلى كلية هارفارد في مختبر الحوسبة حيث واصلت عملها في Mark II و Mark III . تتبع المشغلون خطأ في Mark II إلى فراشة محاصرة في مرحل ، وصاغ مصطلح علة . تمت إزالة هذا الخطأ بعناية وتسجيله في دفتر السجل. انطلاقًا من الخطأ الأول ، نطلق اليوم على الأخطاء أو مواطن الخلل في البرنامج خطأ . [11]
Hopper did not find the bug, as she readily acknowledged. The date in the log book was September 9, 1947.[12][13][14] The operators who found it, including William "Bill" Burke, later of the Naval Weapons Laboratory, Dahlgren, Virginia,[15] were familiar with the engineering term and amusedly kept the insect with the notation "First actual case of bug being found." Hopper loved to recount the story.[16] This log book, complete with attached moth, is part of the collection of the Smithsonian National Museum of American History.[13]
على المدى ذات الصلة " التصحيح يبدو" أيضا تسبق استخدامه في الحوسبة: من قاموس أوكسفورد الإنكليزية " انجليزيه الصورة كلمة يحتوي على شهادة من عام 1945، في سياق محركات الطائرات. [17]
مفهوم هذا البرنامج قد تحتوي على أخطاء يعود إلى ملاحظات آدا لوفليس 1843 على المحرك التحليلي ، والتي كانت تتحدث عن إمكانية برنامج "بطاقات" ل تشارلز باباج الصورة المحرك التحليلي يجري الخاطئ:
... يجب إجراء عملية التحليل بشكل متساوٍ لتزويد المحرك التحليلي بالبيانات التشغيلية اللازمة ؛ وقد يكون هذا أيضًا مصدرًا محتملًا للخطأ. مع افتراض أن الآلية الفعلية لا تخطئ في عملياتها ، فإن البطاقات قد تعطيها أوامر خاطئة.
تقرير "الأخطاء في النظام"
أصدر معهد التكنولوجيا المفتوحة ، الذي تديره مجموعة New America ، [18] تقريرًا بعنوان "Bugs in the System" في أغسطس 2016 ينص على أنه يجب على صانعي السياسة في الولايات المتحدة إجراء إصلاحات لمساعدة الباحثين على تحديد ومعالجة أخطاء البرامج. التقرير "يسلط الضوء على الحاجة إلى الإصلاح في مجال اكتشاف الثغرات الأمنية والكشف عنها". [19] قال أحد مؤلفي التقرير أن الكونجرس لم يفعل ما يكفي لمعالجة ضعف البرمجيات السيبرانية ، على الرغم من أن الكونجرس قد أقر عددًا من مشاريع القوانين لمكافحة القضية الأكبر للأمن السيبراني. [19]
الباحثون الحكوميون والشركات وخبراء الأمن السيبراني هم الأشخاص الذين يكتشفون عادةً عيوب البرامج. ويدعو التقرير إلى إصلاح قوانين جرائم الكمبيوتر وحقوق التأليف والنشر. [19]
قال التقرير إن قانون الاحتيال وإساءة استخدام الكمبيوتر ، وقانون حقوق النشر الرقمية للألفية وقانون خصوصية الاتصالات الإلكترونية ، يجرم ويضع عقوبات مدنية على الإجراءات التي ينخرط فيها الباحثون الأمنيون بشكل روتيني أثناء إجراء أبحاث أمنية مشروعة. [19]
المصطلحات
في حين أن استخدام مصطلح "خطأ" لوصف أخطاء البرامج أمر شائع ، فقد اقترح الكثيرون أنه يجب التخلي عنها. إحدى الحجج هي أن كلمة "خطأ" مفصولة عن الإحساس بأن الإنسان تسبب في المشكلة ، وبدلاً من ذلك تشير ضمناً إلى أن الخلل نشأ من تلقاء نفسه ، مما يؤدي إلى دفع للتخلي عن مصطلح "خطأ" لصالح مصطلحات مثل "عيب" بنجاح محدود. [20] منذ سبعينيات القرن الماضي ، اقترح جاري كيلدال بطريقة فكاهية استخدام مصطلح "خطأ". [21] [22]
في هندسة البرمجيات ، يشير التحول الخاطئ (من اللغة اليونانية meta = "change" ، morph = "form") إلى تطور عيب في المرحلة الأخيرة من نشر البرنامج. يُطلق على تحول "الخطأ" الذي ارتكبه المحلل في المراحل الأولى من دورة حياة تطوير البرمجيات ، والذي يؤدي إلى "خلل" في المرحلة الأخيرة من الدورة ، "تحول الخطأ". [23]
يمكن وصف المراحل المختلفة من "الخطأ" في الدورة بأكملها بأنها "أخطاء" ، و "شذوذ" ، و "أخطاء" ، و "فشل" ، و "أخطاء" ، و "استثناءات" ، و "أعطال" ، و "مواطن الخلل" ، و "أخطاء" أو "عيوب" أو "حوادث" أو "آثار جانبية". [23]
منع
بذلت صناعة البرمجيات الكثير من الجهد لتقليل عدد الأخطاء. [24] [25] وتشمل هذه:
أخطاء مطبعية
تظهر الأخطاء عادة عندما يرتكب المبرمج خطأ منطقيًا . ابتكارات مختلفة في أسلوب البرمجة و برمجة دفاعية تهدف إلى جعل هذه الأخطاء أقل احتمالا، أو أسهل على الفور. تسمح بعض الأخطاء المطبعية ، خاصةً في الرموز أو العوامل المنطقية / الرياضية ، بتشغيل البرنامج بشكل غير صحيح ، بينما قد يمنع البعض الآخر ، مثل رمز مفقود أو اسم به خطأ إملائي ، البرنامج من العمل. يمكن أن تكشف اللغات المترجمة عن بعض الأخطاء المطبعية عند تجميع شفرة المصدر.
منهجيات التطوير
تساعد العديد من المخططات في إدارة نشاط المبرمج بحيث يتم إنتاج عدد أقل من الأخطاء. تطبق هندسة البرمجيات (التي تتناول مشكلات تصميم البرامج أيضًا) العديد من التقنيات لمنع العيوب. على سبيل المثال ، تحدد مواصفات البرنامج الرسمية السلوك الدقيق للبرامج بحيث يمكن التخلص من أخطاء التصميم. لسوء الحظ ، المواصفات الرسمية غير عملية لأي شيء عدا البرامج الأقصر ، بسبب مشاكل الانفجار الاندماجي وعدم التحديد .
يتضمن اختبار الوحدة كتابة اختبار لكل وظيفة (وحدة) يقوم البرنامج بأدائها.
في وحدة التطوير التي تعتمد على الاختبار ، تتم كتابة الاختبارات قبل الكود ولا يعتبر الكود مكتملاً حتى تكتمل جميع الاختبارات بنجاح.
يتضمن تطوير البرمجيات الرشيقة إصدارات متكررة من البرامج مع تغييرات صغيرة نسبيًا. يتم الكشف عن العيوب من خلال ملاحظات المستخدم.
يسمح تطوير المصدر المفتوح لأي شخص بفحص شفرة المصدر. مدرسة فكرية شعبية من قبل إريك ريموند كما القانون ينوس تقول أن شعبية برمجيات المصدر المفتوح لديه أكثر من فرصة وجود عدد قليل أو أي البق من البرامج الأخرى، لأن "نظرا مقل العيون بما فيه الكفاية، جميع البق هي ضحلة". [26] تم الطعن في هذا التأكيد: كتب اختصاصي أمن الكمبيوتر إلياس ليفي أنه "من السهل إخفاء الثغرات في شفرة مصدر معقدة وغير مفهومة وغير موثقة ،" لأنه "حتى لو كان الأشخاص يراجعون الكود ، فإن ذلك لا يعني" يعني أنهم مؤهلون للقيام بذلك ". [27] مثال على هذا يحدث بالفعل ، عن طريق الخطأ ،كانت نقطة ضعف OpenSSL لعام 2008 في دبيان.
دعم لغة البرمجة
لغات البرمجة وتشمل الميزات للمساعدة في منع الحشرات، مثل ثابتة أنظمة نوع ، وقيدت النطاقات و البرمجة وحدات . على سبيل المثال ، عندما يكتب المبرمج (pseudocode) LET REAL_VALUE PI = "THREE AND A BIT"
، على الرغم من أن هذا قد يكون صحيحًا من الناحية التركيبية ، فإن الكود يفشل في فحص النوع . تلتقط اللغات المترجمة هذا دون الحاجة إلى تشغيل البرنامج. تلتقط اللغات المفسرة مثل هذه الأخطاء في وقت التشغيل. تستبعد بعض اللغات عن عمد الميزات التي تؤدي بسهولة إلى حدوث أخطاء ، على حساب الأداء البطيء: المبدأ العام هو أنه من الأفضل دائمًا كتابة رمز أبسط وأبطأ من الشفرة الغامضة التي تعمل بشكل أسرع قليلاً ، لا سيما بالنظر إلى تكلفة الصيانةجوهري. على سبيل المثال ، لا تدعم لغة برمجة Java المؤشر الحسابي ؛ تطبيقات لبعض اللغات مثل باسكال و البرمجة اللغات غالبا ما يكون وقت التشغيل حدود فحص صفائف، على الأقل في بناء التصحيح.
تحليل الكود
تساعد أدوات تحليل الكود المطورين من خلال فحص نص البرنامج بما يتجاوز قدرات المترجم لتحديد المشكلات المحتملة. على الرغم من أن مشكلة العثور على جميع أخطاء البرمجة بشكل عام في ضوء المواصفات غير قابلة للحل (انظر إيقاف المشكلة ) ، فإن هذه الأدوات تستغل حقيقة أن المبرمجين البشريين يميلون إلى ارتكاب أنواع معينة من الأخطاء البسيطة غالبًا عند كتابة البرامج.
الأجهزة
قد يتم تضمين أدوات مراقبة أداء البرنامج أثناء تشغيله ، إما على وجه التحديد للعثور على مشاكل مثل الاختناقات أو لتقديم ضمان لتصحيح العمل ، في الكود بشكل صريح (ربما يكون بسيطًا مثل عبارة تقول PRINT "I AM HERE"
) ، أو يتم توفيرها على النحو التالي أدوات. غالبًا ما يكون من المفاجئ العثور على المكان الذي يستغرقه جزء من التعليمات البرمجية في معظم الأحيان ، وقد يؤدي حذف الافتراضات إلى إعادة كتابة الكود.
اختبار
مختبرو البرامج هم الأشخاص الذين تتمثل مهمتهم الأساسية في العثور على الأخطاء أو كتابة التعليمات البرمجية لدعم الاختبار. في بعض المشاريع ، قد يتم إنفاق المزيد من الموارد على الاختبار أكثر من تطوير البرنامج.
يمكن أن توفر القياسات أثناء الاختبار تقديرًا لعدد الأخطاء المحتملة المتبقية ؛ يصبح هذا أكثر موثوقية كلما طالت مدة اختبار المنتج وتطويره. [ بحاجة لمصدر ]
تصحيح

يعد البحث عن الأخطاء وإصلاحها أو تصحيح الأخطاء جزءًا رئيسيًا من برمجة الكمبيوتر . وصف موريس ويلكس ، أحد رواد الحوسبة الأوائل ، إدراكه في أواخر الأربعينيات من القرن الماضي أن الكثير من بقية حياته سيقضي في البحث عن أخطاء في برامجه الخاصة. [28]
عادةً ما يكون الجزء الأصعب من عملية التصحيح هو العثور على الخطأ. بمجرد العثور عليه ، يكون التصحيح عادةً سهلاً نسبيًا. تساعد البرامج المعروفة باسم المصححات المبرمجين في تحديد موقع الأخطاء عن طريق تنفيذ التعليمات البرمجية سطرًا بسطر ، ومراقبة القيم المتغيرة ، والميزات الأخرى لمراقبة سلوك البرنامج. بدون مصحح أخطاء ، يمكن إضافة التعليمات البرمجية بحيث يمكن كتابة الرسائل أو القيم إلى وحدة تحكم أو نافذة أو ملف سجل لتتبع تنفيذ البرنامج أو إظهار القيم.
ومع ذلك ، حتى بمساعدة مصحح الأخطاء ، فإن تحديد موقع الأخطاء يعد بمثابة فن. ليس من غير المألوف أن يتسبب خطأ في أحد أقسام البرنامج في حدوث إخفاقات في قسم مختلف تمامًا ، [ بحاجة لمصدر ] مما يجعل تتبعه أمرًا صعبًا (على سبيل المثال ، خطأ في روتين عرض الرسومات يتسبب في إدخال / إخراج للملف روتين للفشل) ، في جزء لا علاقة له على ما يبدو من النظام.
في بعض الأحيان ، لا يكون الخطأ عيبًا منفردًا ، ولكنه يمثل خطأ في التفكير أو التخطيط من جانب المبرمج. تتطلب مثل هذه الأخطاء المنطقية إصلاح جزء من البرنامج أو إعادة كتابته. كجزء من مراجعة الكود ، غالبًا ما يؤدي التنقل خلال الشفرة وتخيل أو نسخ عملية التنفيذ إلى العثور على أخطاء دون إعادة إنتاج الخطأ على هذا النحو.
بشكل أكثر شيوعًا ، فإن الخطوة الأولى في تحديد موقع الخطأ هي إعادة إنتاجه بشكل موثوق. بمجرد أن يصبح الخطأ قابلاً للتكرار ، قد يستخدم المبرمج مصحح أخطاء أو أداة أخرى أثناء إعادة إنتاج الخطأ للعثور على النقطة التي ضل فيها البرنامج.
تم الكشف عن بعض الأخطاء من خلال المدخلات التي قد يصعب على المبرمج إعادة إنشائها. كان أحد أسباب موت آلة العلاج الإشعاعي Therac-25 هو وجود خلل (على وجه التحديد ، حالة السباق ) الذي حدث فقط عندما دخل مشغل الجهاز بسرعة كبيرة في خطة العلاج ؛ استغرق الأمر أيامًا من الممارسة لتصبح قادرًا على القيام بذلك ، لذلك لم يظهر الخطأ في الاختبار أو عندما حاولت الشركة المصنعة نسخها. قد تتوقف الأخطاء الأخرى عند زيادة الإعداد للمساعدة في العثور على الخطأ ، مثل تشغيل البرنامج باستخدام مصحح أخطاء ؛ هذه تسمى heisenbugs (بشكل فكاهي على اسم مبدأ عدم اليقين Heisenberg ).
منذ التسعينيات ، وخاصة بعد كارثة Ariane 5 Flight 501 ، ارتفع الاهتمام بالمساعدات الآلية لتصحيح الأخطاء ، مثل تحليل الكود الثابت عن طريق التفسير المجرد . [29]
بعض فئات الأخطاء ليس لها علاقة بالكود. قد يؤدي التوثيق أو الجهاز الخاطئ إلى مشاكل في استخدام النظام ، على الرغم من تطابق الرمز مع الوثائق. في بعض الحالات ، تؤدي التغييرات في الرمز إلى التخلص من المشكلة على الرغم من أن الرمز لم يعد يطابق الوثائق. غالبًا ما تعمل الأنظمة المضمنة على حل أخطاء الأجهزة ، نظرًا لأن إنشاء إصدار جديد من ذاكرة القراءة فقط أرخص بكثير من إعادة تصنيع الأجهزة ، خاصةً إذا كانت عناصر سلعية .
معيار الأخطاء
لتسهيل البحث القابل للتكرار حول الاختبار وتصحيح الأخطاء ، يستخدم الباحثون معايير منظمة للأخطاء:
- معيار سيمنز
- ManyBugs [30] هو معيار لـ 185 C bugs في تسعة برامج مفتوحة المصدر.
- Defects4J [31] هو معيار لـ 341 من أخطاء Java من 5 مشاريع مفتوحة المصدر. يحتوي على الرقع المقابلة ، والتي تغطي مجموعة متنوعة من أنواع التصحيح. [32]
- تعتبر الدببة [33] معيارًا للتكامل المستمر لإخفاقات البناء مع التركيز على إخفاقات الاختبار. تم إنشاؤه من خلال مراقبة الإنشاءات من مشاريع مفتوحة المصدر على Travis CI .
إدارة الأخطاء
تتضمن إدارة الأخطاء عملية التوثيق ، والتصنيف ، والتخصيص ، وإعادة الإنتاج ، والتصحيح ، والإفراج عن الشفرة المصححة. يتم تعقب عادة وإدارتها باستخدام - التغييرات المقترحة على برنامج - البق وكذلك طلبات تحسين وحتى الإصدارات الكاملة نظم تتبع علة أو أنظمة تتبع القضية . [34] قد تسمى العناصر المضافة عيوبًا أو تذاكر أو مشكلات أو باتباع نموذج التطوير السريع والقصص والملاحم. قد تكون الفئات موضوعية أو ذاتية أو مجموعة ، مثل رقم الإصدار ومنطقة البرنامج والخطورة والأولوية ، بالإضافة إلى نوع المشكلة ، مثل طلب ميزة أو خطأ.
يقوم فرز الأخطاء بمراجعة الأخطاء ويقرر ما إذا كان سيتم إصلاحها ومتى يتم إصلاحها. يعتمد القرار على أولوية الخطأ ، وعوامل مثل جداول المشروع. لا يهدف الفرز إلى التحقيق في سبب الأخطاء ، بل تكلفة إصلاحها. يحدث الفرز بانتظام ، ويمر عبر الأخطاء التي تم فتحها أو إعادة فتحها منذ الاجتماع السابق. يحضر عملية الفرز عادة مدير المشروع ، ومدير التطوير ، ومدير الاختبار ، ومدير البناء ، والخبراء الفنيين. [35] [36]
شدة
الخطورة هي تأثير الخطأ على تشغيل النظام. قد يكون هذا التأثير هو فقدان البيانات ، المالية ، فقدان الشهرة والجهود المهدرة. مستويات الخطورة ليست موحدة. تختلف التأثيرات عبر الصناعة. يكون لأي عطل في لعبة فيديو تأثير مختلف تمامًا عن تعطل متصفح الويب أو نظام المراقبة في الوقت الفعلي. على سبيل المثال ، قد تكون مستويات خطورة الخطأ "تعطلًا أو تعليقًا" ، "لا يوجد حل بديل" (بمعنى أنه لا توجد طريقة يمكن للعميل أن ينجز بها مهمة معينة) ، "لديه حل بديل" (بمعنى أن المستخدم لا يزال بإمكانه إنجاز المهمة) ، "مرئي عيب "(على سبيل المثال ، صورة مفقودة أو زر نازح أو عنصر نموذج) ، أو" خطأ في التوثيق ". يستخدم بعض ناشري البرامج درجات خطورة أكثر تأهيلاً مثل "حرجة" أو "عالية" أو "منخفضة" أو "مانع" أو "تافهة ". [37] قد تكون شدة الخطأ فئة منفصلة عن أولويتها للإصلاح ، ويمكن قياس الاثنين وإدارتهما بشكل منفصل.
الأولوية
ضوابط الأولوية حيث يقع الخطأ في قائمة التغييرات المخطط لها. يتم تحديد الأولوية من قبل كل منتج برامج. قد تكون الأولويات عددية ، مثل 1 إلى 5 ، أو مسماة ، مثل "حرجة" أو "عالية" أو "منخفضة" أو "مؤجلة". قد تكون مقاييس التصنيف هذه متشابهة أو حتى متطابقة مع تصنيفات الخطورة ، ولكن يتم تقييمها على أنها مزيج من شدة الخطأ مع الجهد المقدر لإصلاحه ؛ قد يكون للخلل ذي الخطورة المنخفضة ولكن سهل الإصلاح أولوية أعلى من الخطأ ذي الخطورة المعتدلة الذي يتطلب جهدًا مفرطًا لإصلاحه. قد تتماشى تصنيفات الأولوية مع إصدارات المنتج ، مثل الأولوية "الحرجة" التي تشير إلى جميع الأخطاء التي يجب إصلاحها قبل إصدار البرنامج التالي.
إصدارات البرامج
من الشائع إصدار برنامج به أخطاء معروفة وذات أولوية منخفضة. قد تتطلب الأخطاء ذات الأولوية العالية إصدارًا خاصًا لجزء من الكود يحتوي فقط على وحدات مع تلك الإصلاحات. تُعرف هذه البقع . تتضمن معظم الإصدارات مزيجًا من التغييرات السلوكية وإصلاحات الأخطاء المتعددة. تُعرف الإصدارات التي تركز على إصلاحات الأخطاء بإصدارات الصيانة ، لتمييزها عن الإصدارات الرئيسية التي تؤكد على إضافات الميزات أو تغييراتها.
تشمل الأسباب التي تجعل ناشر البرنامج لا يختار تصحيح خطأ معين أو حتى إصلاحه ما يلي:
- يجب الوفاء بالموعد النهائي والموارد غير كافية لإصلاح جميع الأخطاء بحلول الموعد النهائي. [38]
- تم إصلاح الخطأ بالفعل في إصدار قادم ، وهو ليس ذا أولوية عالية.
- التغييرات المطلوبة لإصلاح الخطأ مكلفة للغاية أو تؤثر على العديد من المكونات الأخرى ، مما يتطلب نشاط اختبار كبير.
- قد يكون هناك شك ، أو معروف ، أن بعض المستخدمين يعتمدون على سلوك عربات التي تجرها الدواب ؛ قد يؤدي الإصلاح المقترح إلى إدخال تغيير جذري .
- المشكلة في منطقة سوف تصبح قديمة مع الإصدار القادم ؛ إصلاحه غير ضروري.
- "ليست علة، ولها ميزة". [39] نشأ سوء فهم بين السلوك المتوقع والمتصور أو الميزة غير الموثقة .
أنواع
في مشاريع تطوير البرمجيات ، قد يظهر "خطأ" أو "خطأ" في أي مرحلة. تنشأ الأخطاء من عمليات المراقبة أو سوء الفهم الذي يقوم به فريق البرنامج أثناء المواصفات أو التصميم أو الترميز أو إدخال البيانات أو التوثيق. على سبيل المثال ، برنامج بسيط نسبيًا لترتيب قائمة الكلمات أبجديًا ، فقد يفشل التصميم في مراعاة ما يجب أن يحدث عندما تحتوي الكلمة على واصلة . أو عند تحويل تصميم مجرد إلى رمز ، قد يقوم المبرمج عن غير قصد بإنشاء خطأ واحد تلو الآخر ويفشل في فرز الكلمة الأخيرة في القائمة. قد تكون الأخطاء بسيطة مثل أخطاء الكتابة: "<" حيث كان المقصود ">".
فئة أخرى من الأخطاء تسمى حالة السباق التي قد تحدث عندما تحتوي البرامج على مكونات متعددة يتم تنفيذها في نفس الوقت. إذا تفاعلت المكونات بترتيب مختلف عما أراده المطور ، فقد تتداخل مع بعضها البعض وتوقف البرنامج عن إكمال مهامه. قد يكون من الصعب اكتشاف هذه الأخطاء أو توقعها ، لأنها قد لا تحدث أثناء كل تنفيذ للبرنامج.
الأخطاء المفاهيمية هي سوء فهم المطور لما يجب أن يفعله البرنامج. قد يعمل البرنامج الناتج وفقًا لفهم المطور ، ولكن ليس وفقًا لما هو مطلوب بالفعل. أنواع أخرى:
حسابي
- القسمة على الصفر .
- تجاوز أو تحت التدفق الحسابي .
- فقدان الدقة الحسابية بسبب التقريب أو الخوارزميات غير المستقرة عدديًا .
المنطق
- حلقات لانهائية وتكرار لانهائي .
- خطأ واحد تلو الآخر ، حساب واحد كثير جدًا أو قليل جدًا عند التكرار.
بناء الجملة
- استخدام عامل التشغيل الخطأ ، مثل أداء المهمة بدلاً من اختبار المساواة . على سبيل المثال ، في بعض اللغات ، سيعمل x = 5 على تعيين قيمة x إلى 5 بينما x == 5 سيتحقق مما إذا كانت x هي حاليًا 5 أم رقمًا آخر. تسمح اللغات المفسرة لمثل هذا الرمز بالفشل. يمكن للغات المترجمة اكتشاف مثل هذه الأخطاء قبل بدء الاختبار.
المورد
- dereference مؤشر فارغ.
- استخدام متغير غير مهيأ .
- استخدام تعليمات صالحة على نوع بيانات خاطئ (راجع النظام العشري المعبأ / النظام الثنائي المشفر ).
- انتهاكات الوصول .
- تسرب الموارد ، حيث يتم استنفاد مورد نظام محدود (مثل الذاكرة أو مقابض الملفات ) من خلال التخصيص المتكرر دون تحرير.
- تجاوز سعة المخزن المؤقت ، حيث يحاول البرنامج تخزين البيانات بعد انتهاء التخزين المخصص. قد يؤدي هذا أو لا يؤدي إلى انتهاك الوصول أو انتهاك التخزين . تُعرف هذه الأخطاء الأمنية .
- العودية المفرطة التي - على الرغم من أنها صحيحة منطقيًا - تسبب تجاوز سعة المكدس .
- خطأ Use-after-free ، حيث يتم استخدام المؤشر بعد أن يحرر النظام الذاكرة التي يشير إليها.
- خطأ مزدوج مجاني.
متعدد الخيوط
- حالة توقف تام ، حيث لا يمكن للمهمة "أ" أن تستمر حتى تنتهي المهمة "ب" ، ولكن في نفس الوقت ، لا يمكن أن تستمر المهمة "ب" حتى تنتهي المهمة "أ".
- حالة السباق ، حيث لا يؤدي الكمبيوتر المهام بالترتيب الذي يقصده المبرمج.
- أخطاء التزامن في مقاطع الهامة ، الاستثناءات المتبادلة وغيرها من الميزات من معالجة المتزامنة . وقت الفحص إلى وقت الاستخدام (TOCTOU) هو شكل من أشكال الأقسام الحرجة غير المحمية.
التواصل
- استخدام غير صحيح لواجهة برمجة التطبيقات. [40]
- تنفيذ بروتوكول غير صحيح.
- معالجة غير صحيحة للأجهزة.
- افتراضات غير صحيحة لمنصة معينة.
- أنظمة غير متوافقة. قد يبدو أن واجهة برمجة تطبيقات جديدة أو بروتوكول اتصالات يعمل عندما يستخدم نظامان إصدارات مختلفة ، ولكن قد تحدث أخطاء عند تغيير وظيفة أو ميزة مطبقة في أحد الإصدارات أو فقدانها في إصدار آخر. في أنظمة الإنتاج التي يجب أن تعمل باستمرار ، قد لا يكون إيقاف تشغيل النظام بأكمله لإجراء تحديث رئيسي ممكنًا ، كما هو الحال في صناعة الاتصالات [41] أو الإنترنت. [42] [43] [44] في هذه الحالة ، يتم ترقية الأجزاء الأصغر من نظام كبير بشكل فردي لتقليل تعطيل الشبكة الكبيرة. ومع ذلك ، قد يتم التغاضي عن بعض الأقسام وعدم ترقيتها ، مما يتسبب في حدوث أخطاء توافق قد يصعب العثور عليها وإصلاحها.
- التعليقات التوضيحية غير الصحيحة للشفرة [45]
العمل الجماعي
- تحديثات غير متكاثرة على سبيل المثال ، قام المبرمج بتغيير "myAdd" ولكنه ينسى تغيير "mySubtract" ، والذي يستخدم نفس الخوارزمية. يتم تخفيف هذه الأخطاء من خلال فلسفة " لا تكرر نفسك" .
- التعليقات قديمة أو غير صحيحة: يفترض العديد من المبرمجين أن التعليقات تصف الكود بدقة.
- الاختلافات بين الوثائق والمنتج.
دلالات
The amount and type of damage a software bug may cause naturally affects decision-making, processes and policy regarding software quality. In applications such as manned space travel or automotive safety, since software flaws have the potential to cause human injury or even death, such software will have far more scrutiny and quality control than, for example, an online shopping website. In applications such as banking, where software flaws have the potential to cause serious financial damage to a bank or its customers, quality control is also more important than, say, a photo editing application. NASA's Software Assurance Technology Center managed to reduce the number of errors to fewer than 0.1 per 1000 lines of code (SLOC)[ بحاجة لمصدر ] ولكن لم يتم الشعور بأن هذا ممكن للمشاريع في عالم الأعمال.
وفقًا لدراسة أجرتها وكالة ناسا حول " تعقيد برامج الطيران " ، "يمكن لعملية تطوير برمجيات جيدة بشكل استثنائي أن تحافظ على عيوب منخفضة تصل إلى عيب واحد لكل 10000 سطر من التعليمات البرمجية." [46]
بخلاف الأضرار التي تسببها الأخطاء ، فإن بعض تكلفتها ترجع إلى الجهد المبذول في إصلاحها. في عام 1978 ، Lientz and al. أظهر أن متوسط المشاريع يستثمر 17 في المائة من جهود التطوير في إصلاح الأخطاء. [٤٧] في بحث أجري في عام 2020 على مستودعات جيثب أظهر أن الوسيط هو 20٪. [48]
البق المعروفة
A number of software bugs have become well-known, usually due to their severity: examples include various space and military aircraft crashes. Possibly the most famous bug is the Year 2000 problem, also known as the Y2K bug, in which it was feared that worldwide economic collapse would happen at the start of the year 2000 as a result of computers thinking it was 1900. (In the end, no major problems occurred.) The 2012 stock trading disruption involved one such incompatibility between the old API and a new API.
In popular culture
- In both the 1968 novel 2001: A Space Odyssey and the corresponding 1968 film 2001: A Space Odyssey, a spaceship's onboard computer, HAL 9000, attempts to kill all its crew members. In the follow-up 1982 novel, 2010: Odyssey Two, and the accompanying 1984 film, 2010, it is revealed that this action was caused by the computer having been programmed with two conflicting objectives: to fully disclose all its information, and to keep the true purpose of the flight secret from the crew; this conflict caused HAL to become paranoid and eventually homicidal.
- In the English version of the Nena 1983 song 99 Luftballons (99 Red Balloons) as a result of "bugs in the software", a release of a group of 99 red balloons are mistaken for an enemy nuclear missile launch, requiring an equivalent launch response, resulting in catastrophe.
- In the 1999 American comedy Office Space, three employees attempt to exploit their company's preoccupation with fixing the Y2K computer bug by infecting the company's computer system with a virus that sends rounded off pennies to a separate bank account. The plan backfires as the virus itself has its own bug, which sends large amounts of money to the account prematurely.
- The 2004 novel The Bug, by Ellen Ullman, is about a programmer's attempt to find an elusive bug in a database application.[49]
- The 2008 Canadian film Control Alt Delete is about a computer programmer at the end of 1999 struggling to fix bugs at his company related to the year 2000 problem.
See also
- Anti-pattern
- Bug bounty program
- Glitch removal
- ISO/IEC 9126, which classifies a bug as either a defect or a nonconformity
- Orthogonal Defect Classification
- Racetrack problem
- RISKS Digest
- Software defect indicator
- Software regression
- Software rot
- Automatic bug fixing
References
- ^ ميتال ، فارون. أديتيا ، شيفام (1 يناير 2015). "التطورات الأخيرة في مجال إصلاح الأخطاء" . بروسيديا علوم الكمبيوتر . المؤتمر الدولي للحاسوب والاتصالات والتقارب (ICCC 2015). 48 : 288 - 297. دوى : 10.1016 / j.procs.2015.04.184 . ISSN 1877-0509 .
- ^ البروفيسور سيمون روجرسون . "كارثة هليكوبتر شينوك" . Ccsr.cse.dmu.ac.uk. مؤرشفة من الأصلي في 17 يوليو 2012 . تم الاسترجاع 24 سبتمبر ، 2012 .
- ^ "أخطاء البرامج تكلف الاقتصاد الأمريكي عزيزي" . 10 يونيو 2009. مؤرشفة من الأصلي في 10 يونيو 2009 . تم الاسترجاع 24 سبتمبر ، 2012 .CS1 maint: unfit URL (link)
- ^ موظفو عالم الكمبيوتر (3 سبتمبر 2011). "العثة في الجهاز: تصحيح أصول 'علة ' " . عالم الكمبيوتر . مؤرشفة من الأصلي في 25 أغسطس 2015.
- ^ "هل تعلم؟ ابتكر إديسون مصطلح" علة " " . 1 أغسطس 2013 . تم الاسترجاع 19 يوليو ، 2019 .
- ^ إديسون إلى بوشكاش ، ١٣ نوفمبر ١٨٧٨ ، أوراق إديسون ، مختبر إديسون الوطني ، خدمة المتنزهات القومية الأمريكية ، ويست أورانج ، نيوجيرسي ، مقتبس في هيوز ، توماس بارك (1989). سفر التكوين الأمريكي: قرن من الاختراع والحماس التكنولوجي ، 1870-1970 . كتب البطريق. ص. 75. ردمك 978-0-14-009741-2.
- ^ "Baffle Ball" . قاعدة بيانات الإنترنت والدبابيس.
(انظر صورة الإعلان في إدخال المرجع)
- ^ "حاملات الطائرات الحديثة هي نتيجة 20 عامًا من التجارب الذكية" . الحياة . 29 يونيو 1942. ص. 25. مؤرشفة من الأصلي في 4 يونيو 2013 . تم الاسترجاع 17 نوفمبر ، 2011 .
- ^ ديكنسون ريتش ، لويز (1942) ، أخذنا إلى الغابة ، JB Lippincott Co ، p. 93، LCCN 42024308 ، OCLC 405243 ، مؤرشفة من الأصلي في 16 مارس 2017.
- ^ اختبار FCAT NRT ، هاركورت 18 مارس 2008
- ^ "دانيس ، شارون آن:" الأدميرال جريس موراي هوبر " " . ei.cs.vt.edu. 16 فبراير 1997 . تم الاسترجاع 31 يناير ، 2010 .
- ^ " Bug أرشفة 23 مارس 2017 ، في آلة Wayback. " ، ملف المصطلحات اللغوية ، الإصدار. 4.4.7. تم الاسترجاع 3 يونيو ، 2010.
- ^ a b " Log Book With Computer Bug أرشفة 23 مارس 2017 ، في آلة Wayback. " ، المتحف الوطني للتاريخ الأمريكي ، مؤسسة سميثسونيان.
- ^ " أول" خطأ في الكمبيوتر "، المركز التاريخي البحري. لكن لاحظ أنكمبيوتر Harvard Mark II لم يكتمل حتى صيف عام 1947.
- ^ حوليات IEEE لتاريخ الحوسبة ، المجلد 22 العدد 1 ، 2000
- ^ جيمس س.هاغينز. "أول خطأ في الكمبيوتر" . Jamesshuggins.com. مؤرشفة من الأصلي في 16 أغسطس 2000 . تم الاسترجاع 24 سبتمبر ، 2012 .
- ^ مجلة الجمعية الملكية للطيران . 49 ، 183/2 ، 1945 "تراوحت ... عبر مرحلة اختبار النوع واختبار الطيران و" تصحيح الأخطاء "..."
- ^ ويلسون ، آندي. شولمان ، روس ؛ بانكستون ، كيفن ؛ هير ، تري. "الأخطاء في النظام" (PDF) . معهد السياسة المفتوحة . مؤرشف من الأصل (PDF) في 21 سبتمبر 2016 . تم الاسترجاع 22 أغسطس ، 2016 .
- ^ أ ب ج د روزنز ، تريسي (12 أغسطس 2016). "الإصلاحات السيبرانية ضرورية لتعزيز اكتشاف أخطاء البرمجيات والكشف عنها: تقرير أمريكا الجديدة - أخبار التأهب للوطن" . تم الاسترجاع 23 أغسطس ، 2016 .
- ^ "News at SEI 1999 Archive" . cmu.edu . مؤرشفة من الأصلي في 26 مايو 2013.
- ^ شوستيك ، لين (2 أغسطس 2016). "بكلماته الخاصة: غاري كيلدال" . شعب رائع . متحف تاريخ الكمبيوتر . مؤرشفة من الأصلي في 17 ديسمبر 2016.
- ^ كيلدال ، جاري أرلين (2 أغسطس 2016) [1993]. كيلدال ، سكوت ؛ كيلدال ، كريستين ، محرران. "اتصالات الكمبيوتر: الأشخاص والأماكن والأحداث في تطور صناعة الكمبيوتر الشخصي" (مخطوطة ، الجزء 1). عائلة كيلدال: 14-15. مؤرشفة من الأصلي في 17 من تشرين الثاني 2016 . تم الاسترجاع 17 نوفمبر ، 2016 . Cite journal requires
|journal=
(help) - ^ أ ب "تجربة الاختبار: te: المجلة للمختبرين المحترفين". تجربة الاختبار . ألمانيا: تجربة الاختبار: 42. مارس 2012. ISSN 1866-5705 . (الاشتراك المطلوبة)
- ^ هويزينجا ، دوروتا ؛ كولاوا ، آدم (2007). منع الخلل الآلي: أفضل الممارسات في إدارة البرامج . مطبعة جمعية الكمبيوتر Wiley-IEEE. ص. 426. ردمك 978-0-470-04212-0. مؤرشفة من الأصلي في 25 أبريل 2012.
- ^ ماكدونالد ، مارك ؛ موسون ، روبرت ؛ سميث ، روس (2007). الدليل العملي للوقاية من العيوب . مايكروسوفت برس. ص. 480 . رقم ISBN 978-0-7356-2253-1.
- ^ "الإصدار المبكر ، الإصدار كثيرًا" أرشفة 14 مايو 2011 ، في آلة Wayback. ، Eric S. Raymond ، الكاتدرائية والبازار
- ^ "المصدر المفتوح على نطاق واسع" أرشفة 29 سبتمبر 2007 ، في آلة Wayback. ، إلياس ليفي ، SecurityFocus 17 أبريل 2000
- ^ اقتباسات موريس ويلكس
- ^ "تاريخ تقنيات PolySpace" . christele.faure.pagesperso-orange.fr . تم الاسترجاع 1 أغسطس ، 2019 .
- ^ Le Goues, Claire; Holtschulte, Neal; Smith, Edward K.; Brun, Yuriy; Devanbu, Premkumar; Forrest, Stephanie; Weimer, Westley (2015). "The ManyBugs and IntroClass Benchmarks for Automated Repair of C Programs". IEEE Transactions on Software Engineering. 41 (12): 1236–1256. doi:10.1109/TSE.2015.2454513. ISSN 0098-5589.
- ^ Just, René; Jalali, Darioush; Ernst, Michael D. (2014). "Defects4J: a database of existing faults to enable controlled testing studies for Java programs". Proceedings of the 2014 International Symposium on Software Testing and Analysis - ISSTA 2014. pp. 437–440. CiteSeerX 10.1.1.646.3086. doi:10.1145/2610384.2628055. ISBN 9781450326452. S2CID 12796895.
- ^ سوبريرا ، فيكتور ؛ Durieux ، توماس ؛ ماديرال ، فرناندا ؛ مونبيروس ، مارتن ؛ دي ألميدا مايا ، مارسيلو (2018). "تشريح مجموعة بيانات خطأ: تشريح 395 بقعة من Defects4J". 2018 المؤتمر الدولي الخامس والعشرون IEEE حول تحليل البرمجيات والتطور وإعادة الهندسة (SANER) . ص 130 - 140. arXiv : 1801.06393 . دوى : 10.1109 / SANER.2018.8330203 . رقم ISBN 978-1-5386-4969-5. S2CID 4607810 .
- ^ ماديرال ، فرناندا ؛ أورلي ، سيمون ؛ مايا ، مارسيلو ؛ مونبيروس ، مارتن ؛ مايا ، مارسيلو أ. (2019). "الدببة: معيار أخطاء جافا الموسعة لدراسات إصلاح البرامج تلقائيًا". 2019 المؤتمر الدولي السادس والعشرون IEEE حول تحليل البرمجيات والتطور وإعادة الهندسة (SANER) . ص 468-478. arXiv : 1901.06024 . دوى : 10.1109 / SANER.2019.8667991 . رقم ISBN 978-1-7281-0591-8. S2CID 58028949 .
- ^ Allen, Mitch (May–June 2002). "Bug Tracking Basics: A beginner's guide to reporting and tracking defects". Software Testing & Quality Engineering Magazine. Vol. 4 no. 3. pp. 20–24. Retrieved December 19, 2017.
- ^ Rex Black (2002). "Managing The Testing Process (2Nd Ed.)". Wiley India Pvt. Limited. p. 139. ISBN 9788126503131. Retrieved June 19, 2021.
- ^ كريس فاندر ماي (24 أغسطس 2012). "عظمة الشحن - دروس عملية حول إنشاء وإطلاق برامج متميزة ، تم تعلمها أثناء العمل في Google و Amazon" . أورايلي ميديا . ص. 79-81. رقم ISBN 9781449336608.
- ^ "5.3. تشريح حشرة" . bugzilla.org . مؤرشفة من الأصلي في 23 مايو 2013.
- ^ "The Next Generation 1996 Lexicon A to Z: Slipstream Release". الجيل القادم . رقم 15. تخيل وسائل الإعلام . مارس 1996. ص. 41.
- ^ Carr, Nicholas (2018). "'It's Not a Bug, It's a Feature.' Trite—or Just Right?". wired.com.
- ^ Monperrus, Martin; Bruch, Marcel; Mezini, Mira (2010). "Detecting Missing Method Calls in Object-Oriented Software". ECOOP 2010 – Object-Oriented Programming (PDF). Lecture Notes in Computer Science. 6183. pp. 2–25. doi:10.1007/978-3-642-14107-2_2. ISBN 978-3-642-14106-5. S2CID 16724498.
- ^ Kimbler, K. (1998). Feature Interactions in Telecommunications and Software Systems V. IOS Press. p. 8. ISBN 978-90-5199-431-5.
- ^ Syed, Mahbubur Rahman (July 1, 2001). Multimedia Networking: Technology, Management and Applications: Technology, Management and Applications. Idea Group Inc (IGI). p. 398. ISBN 978-1-59140-005-9.
- ^ Wu, Chwan-Hwa (John); Irwin, J. David (April 19, 2016). Introduction to Computer Networks and Cybersecurity. CRC Press. p. 500. ISBN 978-1-4665-7214-0.
- ^ RFC 1263: "TCP Extensions Considered Harmful" quote: "the time to distribute the new version of the protocol to all hosts can be quite long (forever in fact). ... If there is the slightest incompatibly between old and new versions, chaos can result."
- ^ Yu, Zhongxing; Bai, Chenggang; Seinturier, Lionel; Monperrus, Martin (2019). "Characterizing the Usage, Evolution and Impact of Java Annotations in Practice". IEEE Transactions on Software Engineering. 47 (5): 1. arXiv:1805.01965. doi:10.1109/TSE.2019.2910516. S2CID 102351817.
- ^ Dvorak ، Daniel L. 1 دراسة ناسا حول تعقيد برامج الطيران . CiteSeerX 10.1.1.711.2976 .
- ^ لينتز ، بي بي ؛ سوانسون ، إ. تومبكينز ، جنرال إلكتريك (1978). "خصائص صيانة برامج التطبيقات". اتصالات من ACM . 21 (6): 466-471. دوى : 10.1145 / 359511.359522 . S2CID 14950091 .
- ^ أميت ، عيدان. Feitelson ، Dror G. (2020). "مقياس جودة رمز الالتزام التصحيحي". arXiv : 2007.10912 [ cs.SE ].
- ^ أولمان ، إلين (2004). الخطأ . بيكادور . رقم ISBN 978-1-250-00249-5.
External links
- "Common Weakness Enumeration" – an expert webpage focus on bugs, at NIST.gov
- BUG type of Jim Gray – another Bug type
- Picture of the "first computer bug" at the Wayback Machine (archived January 12, 2015)
- "The First Computer Bug!" – an email from 1981 about Adm. Hopper's bug
- "Toward Understanding Compiler Bugs in GCC and LLVM". A 2016 study of bugs in compilers