اختبار الطفرات
يُستخدم اختبار الطفرات (أو تحليل الطفرات أو طفرة البرنامج ) لتصميم اختبارات برمجية جديدة وتقييم جودة الاختبارات البرمجية الحالية. يتضمن اختبار الطفرات إجراء تغييرات طفيفة على البرنامج قيد الاختبار. [ 1 ] يُطلق على كل نسخة مُعدّلة اسم " طفرة" . يكتشف الاختبار الطفرة، وبالتالي يرفضها عند فشل الاختبار - يشير الفشل إلى أن الاختبار قد نجح في تمييز أن سلوك الطفرة يختلف عن سلوك الكود الأصلي. يُطلق على الرفض اسم " إزالة الطفرة". تُقاس قيمة مجموعة الاختبارات بنسبة الطفرات التي تُزيلها. يمكن بعد ذلك تحسين مجموعة الاختبارات بإضافة اختبارات جديدة مُصممة لإزالة طفرات إضافية.
يتم إنشاء الطفرات باستخدام عوامل الطفرة المحددة جيدًا والتي إما تحاكي أخطاء البرمجة النموذجية (مثل استخدام عامل التشغيل أو اسم المتغير الخاطئ) أو تجبر على إنشاء اختبارات قيمة (مثل قسمة كل تعبير على صفر).
اختبار الطفرات هو شكل من أشكال اختبار الصندوق الأبيض . [ 2 ] [ 3 ] والغرض منه هو مساعدة المختبِر على تطوير اختبارات انحدار فعالة من خلال تحديد نقاط الضعف في بيانات الاختبار المستخدمة لاختبار البرنامج واكتشاف أجزاء من كود البرنامج المختبر التي نادرًا ما يتم الوصول إليها أو لا يتم الوصول إليها أبدًا أثناء التنفيذ .
مقدمة
يتناول معظم هذا المقال "تعديل البرامج"، حيث يتم تغيير البرنامج نفسه. ويُعرّف تحليل التعديلات بشكل أعم بأنه استخدام قواعد محددة بدقة، مبنية على البنى النحوية، لإجراء تغييرات منهجية على مكونات البرمجيات. [ 4 ] وقد طُبّق تحليل التعديلات على مشاكل أخرى، ولكنه يُستخدم عادةً في مجال الاختبار. لذا، يُعرّف اختبار التعديلات بأنه استخدام تحليل التعديلات لتصميم اختبارات برمجية جديدة أو لتقييم الاختبارات البرمجية الحالية. [ 4 ] وبالتالي، يمكن تطبيق تحليل التعديلات واختبارها على نماذج التصميم، والمواصفات، وقواعد البيانات، والاختبارات، وXML، وأنواع أخرى من مكونات البرمجيات، مع أن تعديل البرامج هو الأكثر شيوعًا. [ 5 ]
ملخص
Tests can be created to verify the correctness of the implementation of a given software system, but the creation of tests still poses the question of whether the tests are correct and sufficiently cover the requirements associated with the implementation.[6] (This technological problem is itself an instance of a deeper philosophical problem named "Quis custodiet ipsos custodes?" ["Who will guard the guards?"].)
The idea behind mutation testing is that the program being tested works as intended, so if a mutant is introduced and functionality changes this means a bug is introduced, which the tests should then find. In this way, the tests are tested. If a mutant is not detected by the test suite, this typically indicates that the test suite is unable to locate the faults represented by the mutant, but it can also indicate that the mutation introduces no faults. That is, the mutation is a valid change, one that either produces a desired result or one that does not affect functionality. One (common) way a mutant can be valid is that the code that has been changed is "dead code" that is never executed.
For mutation testing to function at scale, a large number of mutants are usually introduced, leading to the compilation and execution of an extremely large number of copies of the program. This problem of the expense of mutation testing had reduced its practical use as a method of software testing. However, the increased use of object-oriented programming languages and unit testing frameworks has led to the creation of mutation testing tools that test individual portions of an application.
Goals
The goals of mutation testing are multiple:
- identify weakly tested pieces of code (those for which mutants are not killed)[1]
- identify weak tests (those that never kill mutants)[7]
- compute the mutation score,[4] the mutation score is the number of mutants killed / total number of mutants.
- learn about error propagation and state infection in the program
History
Mutation testing was originally proposed by Richard Lipton as a student in 1971,[8] and first developed and published by DeMillo, Lipton and Sayward.[1] The first implementation of a mutation testing tool was by Timothy Budd as part of his PhD work (titled Mutation Analysis) in 1980 from Yale University.[9]
في الآونة الأخيرة، ومع توفر قوة الحوسبة الهائلة، كان هناك عودة لتحليل الطفرات داخل مجتمع علوم الكمبيوتر، وتم العمل على تحديد طرق تطبيق اختبار الطفرات على لغات البرمجة الموجهة للكائنات واللغات غير الإجرائية مثل XML و SMV وآلات الحالة المحدودة .
في عام ٢٠٠٤، قامت شركة سيرتيس (التي أصبحت الآن جزءًا من سينوبسيس ) بتوسيع نطاق العديد من المبادئ لتشمل مجال التحقق من الأجهزة. فبينما يقتصر تحليل الطفرات على اكتشاف اختلاف في المخرجات، تتجاوز سيرتيس ذلك بالتحقق من قدرة أداة الفحص في بيئة الاختبار على اكتشاف هذا الاختلاف فعليًا. ويعني هذا التوسع تقييم جميع مراحل التحقق الثلاث، وهي: التنشيط، والانتشار، والاكتشاف. وقد أطلقوا على هذه العملية اسم التأهيل الوظيفي.
يمكن اعتبار اختبار التشويش حالة خاصة من اختبار الطفرات. في اختبار التشويش، تُجرى تعديلات على الرسائل أو البيانات المتبادلة داخل واجهات الاتصال (سواء داخل البرنامج نفسه أو بين نسخ البرنامج المختلفة) لاكتشاف حالات الفشل أو الاختلافات في معالجة البيانات. وقد طوّرت شركتا Codenomicon [ 10 ] (2001) و Mu Dynamics (2005) مفاهيم اختبار التشويش إلى منصة اختبار طفرات متكاملة ذات حالة كاملة، مزودة بأجهزة مراقبة لاختبار تطبيقات البروتوكولات بدقة.
نظرة عامة على اختبار الطفرات
يعتمد اختبار الطفرات على فرضيتين. الأولى هي فرضية المبرمج الكفء ، التي تنص على أن المبرمجين الكفء يكتبون برامج قريبة من الصحة. [ 1 ] ويُقصد بكلمة "قريبة" هنا السلوك، وليس القواعد النحوية. أما الفرضية الثانية فتُسمى تأثير الاقتران، الذي يؤكد أن الأخطاء البسيطة قد تتسلسل أو تترابط لتُشكل أخطاءً ناشئة أخرى. [ 11 ] [ 12 ]
تكشف الطفرات من الرتبة الأعلى عن عيوب دقيقة وهامة، مما يدعم تأثير الاقتران. [ 13 ] [ 14 ] [ 7 ] [ 15 ] [ 16 ] وتُمكن الطفرات من الرتبة الأعلى من خلال إنشاء طفرات تحتوي على أكثر من طفرة واحدة.
يُجرى اختبار الطفرات باختيار مجموعة من عوامل الطفرات، ثم تطبيقها على البرنامج المصدري واحدًا تلو الآخر لكل جزء قابل للتطبيق من شفرة المصدر. تُسمى نتيجة تطبيق عامل طفرة واحد على البرنامج " طفرة" . إذا تمكنت مجموعة الاختبارات من اكتشاف التغيير (أي فشل أحد الاختبارات)، يُقال حينها إن الطفرة قد تم القضاء عليها .
على سبيل المثال، انظر إلى جزء الكود التالي المكتوب بلغة C++:
إذا كان ( أ && ب ) { ج = 1 ؛ } وإلا { ج = 0 ؛ }سيقوم عامل الطفرة الشرطية باستبدال &&و ||إنتاج الطفرة التالية:
إذا كان ( أ || ب ) { ج = 1 ؛ } وإلا { ج = 0 ؛ }أما الآن، لكي ينجح الاختبار في قتل هذا المتحول، يجب استيفاء الشروط الثلاثة التالية:
- يجب أن يصل الاختبار إلى العبارة المعدلة.
- ينبغي أن تؤثر بيانات الإدخال التجريبية على حالة البرنامج من خلال إحداث حالات مختلفة للبرنامج المُعدَّل والبرنامج الأصلي. على سبيل المثال، سيؤدي اختبار باستخدام `
a = 1and`b = 0إلى تحقيق ذلك. - يجب أن تنتقل حالة البرنامج غير الصحيحة (قيمة 'c') إلى مخرجات البرنامج وأن يتم التحقق منها بواسطة الاختبار.
تُسمى هذه الشروط مجتمعة بنموذج RIP . [ 8 ]
يتطلب اختبار الطفرات الضعيفة (أو تغطية الطفرات الضعيفة ) استيفاء الشرطين الأول والثاني فقط. أما اختبار الطفرات القوية فيتطلب استيفاء الشروط الثلاثة جميعها. يُعد اختبار الطفرات القوية أكثر فعالية، لأنه يضمن قدرة مجموعة الاختبارات على اكتشاف المشكلات بدقة. يرتبط اختبار الطفرات الضعيفة ارتباطًا وثيقًا بأساليب تغطية الكود ، ويتطلب قدرة حاسوبية أقل بكثير لضمان استيفاء مجموعة الاختبارات لمتطلبات اختبار الطفرات الضعيفة مقارنةً باختبار الطفرات القوية.
مع ذلك، توجد حالات لا يمكن فيها إيجاد حالة اختبار قادرة على القضاء على هذا البرنامج المُعدَّل. ويكون البرنامج الناتج مكافئًا سلوكيًا للبرنامج الأصلي. وتُسمى هذه البرامج المُعدَّلة بالبرامج المكافئة .
يُعدّ اكتشاف الطفرات المتكافئة أحد أكبر العقبات التي تحول دون الاستخدام العملي لاختبار الطفرات. وقد يكون الجهد المطلوب للتحقق من تكافؤ الطفرات كبيرًا جدًا، حتى بالنسبة للبرامج الصغيرة. [ 17 ] وقد حددت مراجعة منهجية للأدبيات نُشرت عام 2014، تناولت طيفًا واسعًا من المناهج المُستخدمة للتغلب على مشكلة الطفرات المتكافئة [ 18 ] ، 17 تقنية ذات صلة (في 22 مقالة) وثلاث فئات من التقنيات: الكشف (DEM)؛ والاقتراح (SEM)؛ وتجنب توليد الطفرات المتكافئة (AEMG). وأشارت التجربة إلى أن الطفرات من الرتبة العليا بشكل عام، واستراتيجية JudyDiffOp بشكل خاص، تُقدّمان منهجًا واعدًا لحل مشكلة الطفرات المتكافئة.
بالإضافة إلى الطفرات المتكافئة، توجد طفرات مُدمجة ، وهي طفرات موجودة في نفس موقع الكود المصدري لطفرة أخرى، ويُقال إنها "مُدمجة" بواسطة الطفرة الأخرى. لا تظهر الطفرات المُدمجة لأداة اختبار الطفرات، ولا تُساهم في مقاييس التغطية. على سبيل المثال، لنفترض أن لديك طفرتين، A وB، تُغيران سطرًا من الكود بنفس الطريقة. يتم اختبار الطفرة A أولًا، وتكون النتيجة أن الكود لا يعمل بشكل صحيح. ثم يتم اختبار الطفرة B، وتكون النتيجة مماثلة لنتيجة اختبار الطفرة A. في هذه الحالة، تُعتبر الطفرة B مُدمجة بواسطة الطفرة A، لأن نتيجة اختبار الطفرة B هي نفسها نتيجة اختبار الطفرة A. لذلك، لا داعي لاختبار الطفرة B، لأن النتيجة ستكون مماثلة لنتيجة اختبار الطفرة A.
عوامل الطفرة
لإجراء تغييرات نحوية على برنامج ما، يُستخدم عامل الطفرة كدليل لاستبدال أجزاء من شفرة المصدر. ونظرًا لاعتماد الطفرات على هذه العوامل، فقد ابتكر الباحثون مجموعة من عوامل الطفرة لتناسب لغات البرمجة المختلفة، مثل جافا. وتلعب فعالية هذه العوامل دورًا محوريًا في اختبار الطفرات. [ 19 ]
استكشف الباحثون العديد من عوامل التغيير. فيما يلي بعض الأمثلة على عوامل التغيير للغات الإجرائية:
- حذف البيان
- تكرار أو إدراج العبارة، على سبيل المثال
goto fail;[ 20 ] - استبدال التعبيرات المنطقية الفرعية بالقيمتين " صحيح" و "خطأ".
- استبدال بعض العمليات الحسابية بعمليات أخرى، على سبيل المثال،
+باستخدام*،-باستخدام/ - استبدال بعض العلاقات المنطقية بعلاقات أخرى، على سبيل المثال
>مع>=،==و<= - استبدال المتغيرات بمتغيرات أخرى من نفس النطاق (يجب أن تكون أنواع المتغيرات متوافقة)
- قم بإزالة جسم الدالة. [ 21 ]
تُسمى عوامل التغيير هذه أيضًا عوامل التغيير التقليدية. وهناك أيضًا عوامل تغيير خاصة بلغات البرمجة كائنية التوجه، [ 22 ] وللإنشاءات المتزامنة، [ 23 ] وللكائنات المعقدة مثل الحاويات، [ 24 ] إلخ.
أنواع عوامل الطفرة
تُسمى عوامل تشغيل الحاويات عوامل تغيير على مستوى الفئة . تُغير هذه العوامل بنية البرنامج بإضافة أو إزالة أو تغيير التعبيرات قيد الفحص. وقد وُضعت عوامل تشغيل مُخصصة لكل فئة من فئات التغييرات. [ 19 ] على سبيل المثال، تُوفر أداة muJava عوامل تغيير متنوعة على مستوى الفئة، مثل تغيير مُعدِّل الوصول، وإدراج عامل تحويل النوع، وحذف عامل تحويل النوع. كما طُوّرت عوامل تغيير لإجراء اختبارات ثغرات أمنية في البرامج. [ 25 ]
إلى جانب عوامل التشغيل على مستوى الأصناف ، تتضمن لغة MuJava أيضًا عوامل تشغيل التغيير على مستوى الأساليب ، والتي تُعرف بالعوامل التقليدية. صُممت هذه العوامل التقليدية استنادًا إلى خصائص شائعة في لغات البرمجة الإجرائية. تُجري هذه العوامل تغييرات على العبارات بإضافة عوامل تشغيل أولية أو استبدالها أو إزالتها. تنقسم هذه العوامل إلى ست فئات: عوامل التشغيل الحسابية ، وعوامل التشغيل العلائقية ، وعوامل التشغيل الشرطية ، وعوامل التشغيل الإزاحية ، وعوامل التشغيل المنطقية ، وعوامل التشغيل الإسنادية . [ 19 ]
أنواع اختبار الطفرات
هناك ثلاثة أنواع من اختبارات الطفرات؛
تغيير البيان
تُعرف عملية تغيير التعليمات البرمجية بأنها تعديل مُتعمّد لكتلة من التعليمات البرمجية، إما بحذف أو نسخ تعليمات مُحددة. كما تُتيح هذه العملية إعادة ترتيب التعليمات داخل كتلة التعليمات البرمجية لتوليد تسلسلات مُختلفة. تُعد هذه التقنية بالغة الأهمية في اختبار البرمجيات، إذ تُساعد في تحديد نقاط الضعف أو الأخطاء المُحتملة في التعليمات البرمجية. من خلال إجراء تغييرات مُتعمدة على التعليمات البرمجية ومراقبة سلوكها، يُمكن للمطورين اكتشاف الأخطاء أو العيوب الخفية التي قد تمر دون ملاحظة أثناء الاختبار العادي. [ 26 ] تُشبه عملية تغيير التعليمات البرمجية أداة تشخيصية تُقدم رؤى ثاقبة حول متانة التعليمات البرمجية ومرونتها، مما يُساعد المُبرمجين على تحسين الجودة والموثوقية الشاملة لبرامجهم.
على سبيل المثال، في مقتطف الشفرة أدناه، تمت إزالة قسم "else" بالكامل:
دالة التحقق من بيانات الاعتماد ( اسم المستخدم ، كلمة المرور ) { إذا كان ( اسم المستخدم === "admin" && كلمة المرور === "password" ) { إرجاع صحيح ؛ } }تغيير القيمة
يحدث تغيير القيمة عند إجراء تعديلات على قيم المعاملات أو الثوابت داخل الكود. يتضمن هذا عادةً تعديل القيم بإضافة أو طرح 1، ولكنه قد يشمل أيضًا إجراء تغييرات جوهرية عليها. تشمل التعديلات المحددة التي تُجرى أثناء تغيير القيمة سيناريوهين رئيسيين:
أولًا، هناك عملية تحويل القيمة من قيمة صغيرة إلى قيمة أكبر. تتضمن هذه العملية استبدال قيمة صغيرة في الكود بقيمة أكبر. والهدف من هذا التغيير هو تقييم كيفية استجابة الكود عند مواجهته مدخلات أكبر. يساعد هذا على ضمان قدرة الكود على معالجة هذه القيم الأكبر بدقة وكفاءة دون مواجهة أخطاء أو مشاكل غير متوقعة.
في المقابل، يتضمن السيناريو الثاني تغيير قيمة أعلى إلى قيمة أصغر. في هذه الحالة، نستبدل قيمة أعلى في الكود بقيمة أصغر. يهدف هذا الاختبار إلى تقييم كيفية تعامل الكود مع المدخلات الأصغر. يُعد ضمان أداء الكود بشكل صحيح مع القيم الأصغر أمرًا بالغ الأهمية لتجنب المشاكل أو الأخطاء غير المتوقعة عند التعامل مع بيانات الإدخال هذه.
على سبيل المثال:
// الكود الأصلي function multiplyByTwo ( value ) { return value * 2 ; }// تغيير القيمة: دالة multiplyByTwoMutation1 ( القيمة ) { return القيمة * 10 ; }// تغيير القيمة: تحويل القيمة الأكبر إلى قيمة أصغر. دالة multiplyByTwoMutation2 ( القيمة ) { return القيمة / 10 ; }طفرة القرار
يركز اختبار تحوير القرارات على تحديد أخطاء التصميم في الشيفرة البرمجية، مع التركيز بشكل خاص على اكتشاف العيوب أو نقاط الضعف في منطق اتخاذ القرار بالبرنامج. تتضمن هذه الطريقة تغيير عوامل التشغيل الحسابية والمنطقية عمدًا للكشف عن المشكلات المحتملة. من خلال التلاعب بهذه العوامل، يستطيع المطورون تقييم كيفية استجابة الشيفرة البرمجية لسيناريوهات اتخاذ القرار المختلفة بشكل منهجي. تساعد هذه العملية على ضمان متانة ودقة مسارات اتخاذ القرار في البرنامج، مما يمنع الأخطاء المكلفة التي قد تنشأ عن منطق خاطئ. يُعد اختبار تحوير القرارات أداة قيّمة في تطوير البرمجيات، حيث يمكّن المطورين من تعزيز موثوقية وفعالية أجزاء الشيفرة البرمجية الخاصة باتخاذ القرارات.
على سبيل المثال:
// الكود الأصلي function isPositive ( number ) { return number > 0 ; }// تغيير القرار: تغيير دالة عامل المقارنة isPositiveMutation1 ( number ) { return number >= 0 ; }// تغيير القرار: نفي نتيجة الدالة isPositiveMutation2 ( number ) { return ! ( number > 0 ); }انظر أيضاً
- تصحيح الأخطاء (أو إحداث الأعطال)
- اختبار السلامة
- حقن الأعطال
مراجع
- 1 2 3 4 ريتشارد أ. ديميلو، ريتشارد ج. ليبتون، وفريد ج. سيوارد. نصائح حول اختيار بيانات الاختبار: مساعدة للمبرمج الممارس. مجلة IEEE Computer، 11(4):34-41. أبريل 1978.
- ↑ أوستراند، توماس (2002)، "اختبار الصندوق الأبيض" ، موسوعة هندسة البرمجيات ، الجمعية الأمريكية للسرطان، doi : 10.1002/0471028959.sof378 ، ISBN 978-0-471-02895-6تم الاطلاع عليه بتاريخ 16 مارس 2021
- ↑ ميسرا، س. (2003). "تقييم أربع منهجيات لتغطية اختبار الصندوق الأبيض". المؤتمر الكندي للهندسة الكهربائية وهندسة الحاسوب CCECE 2003. نحو تكنولوجيا رعاية وإنسانية (رقم التصنيف 03CH37436) . المجلد 3. مونتريال، كيبيك، كندا: IEEE. الصفحات 1739-1742 . doi : 10.1109/CCECE.2003.1226246 . ISBN 978-0-7803-7781-3. S2CID 62549502 .
- 1 2 3 بول أمان وجيف أوفوت. مقدمة في اختبار البرمجيات. مطبعة جامعة كامبريدج، 2008.
- ↑ جيا، يو؛ هارمان، مارك (سبتمبر 2009). "تحليل ودراسة لتطوير اختبار الطفرات" (ملف PDF) . معاملات IEEE في هندسة البرمجيات . 37 (5): 649-678 . doi : 10.1109/TSE.2010.62 . S2CID 6853229. مؤرشف من الأصل (ملف PDF) بتاريخ 2017-12-04.
- ↑ داسو، أريستيدس؛ فونيس، آنا (2007). التحقق والتدقيق والاختبار في هندسة البرمجيات . مجموعة آيديا. ISBN 978-1591408512.
- 1 2 سميث ب.، "حول توجيه تعزيز مجموعة اختبار مؤتمتة عبر تحليل الطفرات"، 2008
- 1 2 الطفرة 2000: توحيد المتعامد مؤرشف 2011-09-28 في آلة Wayback بواسطة أ. جيفرسون أوفوت ورولاند هـ. أونتتش.
- ↑ تيم أ. باد، تحليل الطفرات لبيانات اختبار البرامج. أطروحة دكتوراه، جامعة ييل، نيو هيفن، كونيتيكت، 1980.
- ↑ كاكسونين، راولي. طريقة وظيفية لتقييم أمان تنفيذ البروتوكول (رسالة ماجستير). إسبو. 2001.
- ↑ أ. جيفرسون أوفوت. 1992. دراسات حول تأثير اقتران اختبار البرمجيات. معاملات ACM في هندسة البرمجيات ومنهجيتها. 1، 1 (يناير 1992)، 5-20.
- ↑ AT Acree, TA Budd, RA DeMillo, RJ Lipton, and FG Sayward, “Mutation Analysis,” Georgia Institute of Technology, Atlanta, Georgia, Technique Report GIT-ICS-79/08, 1979.
- ↑ يو جيا؛ هارمان، م.، "بناء أخطاء دقيقة باستخدام اختبار الطفرات من الرتبة العليا"، تحليل ومعالجة شفرة المصدر، المؤتمر الدولي الثامن لـ IEEE لعام 2008، المجلد، العدد، الصفحات 249، 258، 28-29 سبتمبر 2008
- ↑ مريم عمر، "تقييم عوامل الطفرة للطفرات المتكافئة"، رسالة ماجستير، 2006
- ↑ بولو م. وبياتيني م.، "اختبار الطفرات: الجوانب العملية وتحليل التكلفة"، جامعة كاستيا لا مانشا (إسبانيا)، عرض تقديمي، 2009
- ↑ أندرسون س.، "اختبار الطفرات"، جامعة إدنبرة، كلية المعلوماتية، عرض تقديمي، 2011
- ↑ بي جي فرانكل، إس إن فايس، وسي هو. اختبار جميع الاستخدامات مقابل اختبار الطفرات: مقارنة تجريبية للفعالية. مجلة الأنظمة والبرمجيات ، 38: 235-253، 1997.
- ↑ التغلب على مشكلة الطفرة المكافئة: مراجعة منهجية للأدبيات وتجربة مقارنة للطفرة من الدرجة الثانية، بقلم ل. ماديسكي، و. أورزيزينا، ر. توركار، م. جوزالا. مجلة IEEE للمعاملات في هندسة البرمجيات
- 1 2 3 حميموني، سكينة؛ فلاح، بوشعيب (24 سبتمبر 2016). "تقنيات اختبار الطفرات: دراسة مقارنة". المؤتمر الدولي للهندسة ونظم المعلومات الإدارية 2016 (ICEMIS) . الصفحات 1-9 . doi : 10.1109/ICEMIS.2016.7745368 . ISBN 978-1-5090-5579-1. S2CID 24301702 .
- ↑ ثغرة SSL/TLS في نظام أبل بقلم آدم لانغلي.
- ↑ نيدرماير، راينر؛ يورغنز، إلمار؛ فاغنر، ستيفان (14 مايو 2016). "هل ستُظهر لي اختباراتي ما إذا كنتُ قد كسرتُ هذا الكود؟" . وقائع ورشة العمل الدولية حول التطوير والتسليم المستمر للبرمجيات . CSED '16. أوستن، تكساس: رابطة آلات الحوسبة. الصفحات 23-29 . arXiv : 1611.07163 . doi : 10.1145/2896941.2896944 . ISBN 978-1-4503-4157-8. S2CID 9213147 .
- ↑ MuJava: نظام آلي لتغيير الفئات مؤرشف في 2012-03-11 في Wayback Machine بواسطة Yu-Seung Ma و Jeff Offutt و Yong Rae Kwo.
- ↑ عوامل الطفرة لجافا المتزامنة (J2SE 5.0) بقلم جيريمي إس. برادبري، جيمس آر. كوردي، يورغن دينجل.
- ↑ طفرة كائنات جافا بقلم روجر تي. ألكساندر، جيمس إم بيمان، سوديبتو غوش، بيكسيا جي.
- ↑ اختبار قائم على الطفرات لتجاوزات المخزن المؤقت، وحقن SQL، وأخطاء سلسلة التنسيق بواسطة H. Shahriar و M. Zulkernine.
- ↑ دينغ، لين؛ أوفوت، جيف؛ لي، نان (22 مارس 2013). "التقييم التجريبي لعامل حذف العبارة". المؤتمر الدولي السادس لمعهد مهندسي الكهرباء والإلكترونيات (IEEE) لاختبار البرمجيات والتحقق منها والتحقق من صحتها ، 2013. الصفحات 84-93 . doi : 10.1109/ICST.2013.20 . ISBN 978-0-7695-4968-2ISSN 2159-4848 . S2CID 12866713 .
- اختبار البرمجيات
