أدوات تغطية كود جافا
تنقسم أدوات تغطية كود جافا إلى نوعين: أولهما، أدوات تُضيف تعليمات إلى كود جافا المصدري وتتطلب إعادة ترجمته. وثانيهما، أدوات تُراقب الكود الوسيط ، إما قبل التنفيذ أو أثناءه. والهدف هو تحديد أجزاء الكود التي يتم اختبارها من خلال تسجيل أسطر الكود التي تُنفذ عند تشغيل الاختبار.
جاكوكو
JaCoCo هي مجموعة أدوات مفتوحة المصدر لقياس تغطية كود جافا وإعداد التقارير عنها . يتم توزيع JaCoCo بموجب شروط رخصة Eclipse العامة . وقد طُوّرت كبديل لـ EMMA، [ 1 ] ضمن إطار إضافة EclEmma لبيئة Eclipse.
سمات
تقدم شركة JaCoCo التعليمات وتغطية الخطوط والفروع.
على عكس Atlassian Clover و OpenClover ، اللذين يتطلبان تعديل الكود المصدري، يمكن لـ JaCoCo تعديل بايت كود Java باستخدام نهجين مختلفين:
- مثل JCov أثناء تشغيل الكود باستخدام وكيل Java [ 2 ]
- مثل كوبرتورا وجي كوف قبل التنفيذ (غير متصل بالإنترنت)
ويمكن تهيئته لتخزين البيانات المُجمّعة في ملف، أو إرسالها عبر بروتوكول TCP. كما يُمكن دمج الملفات من عمليات تشغيل متعددة أو أجزاء من التعليمات البرمجية بسهولة. [ 3 ] وعلى عكس برنامجي Cobertura و EMMA ، فهو يدعم بالكامل إصدارات Java من 7 إلى 20. [ 4 ]
الأدوات التي تستخدم أو تتضمن JaCoCo
- إضافة JaCoCo لبرنامج SonarQube - إحدى الإضافات الافتراضية لتحليلات التغطية ضمن منصة إدارة جودة التعليمات البرمجية SonarQube
- EclEmma Eclipse (برنامج) Code Coverage Plugin، كان يعتمد سابقًا على EMMA [ 5 ]
- إضافة جينكينز جاكوكو [ 6 ]
- دعم Netbeans JaCoCo [ 7 ]
- IntelliJ IDEA منذ الإصدار 11 [ 4 ]
- إضافة Gradle JaCoCo [ 8 ] [ 9 ]
- البرنامج المساعد Maven JaCoCo [ 10 ] [ 11 ]
- خدمات فريق Visual Studio [ 12 ]
- تيم سيتي [ 13 ]
- STAMP ( https://www.stamp-project.eu/ ) [ 14 ]
فيروس كورونا
JCov هي الأداة التي طُوّرت واستُخدمت مع Sun JDK (ولاحقًا Oracle JDK) منذ بدايات جافا، بدءًا من الإصدار 1.1. تستطيع JCov قياس تغطية كود جافا وإعداد التقارير عنها . تُوزّع JCov بموجب شروط رخصة جنو العمومية العامة (الإصدار 2، مع استثناء مسار الفئة). أصبحت JCov مفتوحة المصدر كجزء من مشروع أدوات كود OpenJDK في عام 2014.
سمات
يستطيع برنامج JCov الإبلاغ عن أنواع تغطية التعليمات البرمجية التالية:
- تغطية الكتلة
- تغطية الخط
- تغطية الفروع
- تغطية الأساليب
يطبق برنامج JCov طريقتين مختلفتين لحفظ البيانات التي تم جمعها:
- إلى ملف على نظام الملفات
- على خادم (المعروف أيضًا باسم "ملتقط الشبكة").
يعمل برنامج JCov عن طريق تعديل بايت كود جافا باستخدام نهجين مختلفين:
- التجهيز الثابت الذي يتم مسبقًا، وتغيير الكود المختبر
- يتم إجراء عملية التتبع الديناميكي أثناء التشغيل باستخدام وكيل جافا
يتميز فيروس JCov ببعض السمات المميزة الأخرى التي تشمل، على سبيل المثال لا الحصر:
- التغطية الميدانية
- تغطية واجهة برمجة التطبيقات المجردة
- التغطية المباشرة/غير المباشرة
- معلومات التغطية لكل اختبار (المعروفة أيضًا باسم "مقاييس الاختبار").
- واجهة برمجة التطبيقات العامة وواجهة برمجة التطبيقات الخاصة بها، مما يتيح إمكانية تنفيذ عمليات تصفية مخصصة و/أو استخراج بيانات التغطية.
أدوات تستخدم JCov
- Oracle JDK (SE and ME)
- JCK (مجموعة أدوات توافق جافا)
- مجموعات اختبار Java SE و Java ME المختلفة
- Java FX SDK
- برنامج Java FX Scene Builder
أوبن كلوفر
OpenClover هو برنامج مجاني ومفتوح المصدر، يُعدّ خليفةً لبرنامج Atlassian Clover، وقد تم تطويره كنسخة معدلة من قاعدة بيانات Clover التي نشرتها Atlassian في عام 2017. ويحتوي على جميع ميزات Clover الأصلي (إصدار الخادم). ويقود مشروع OpenClover مطورون قاموا بصيانة Clover خلال الفترة من 2012 إلى 2017. [ 15 ]
يستخدم OpenClover تقنية تحليل شفرة المصدر ويدعم لغات Java و Groovy و AspectJ . تتضمن بعض ميزاته: تحكمًا دقيقًا في نطاق قياس التغطية، وتحسين الاختبارات، وتقارير متطورة.
يتكامل OpenClover مع Ant و Maven و Gradle و Grails و Eclipse و IntelliJ IDEA و Bamboo و Jenkins و Hudson و Griffon و SonarQube و AspectJ.
وكيل تغطية التعليمات البرمجية في IntelliJ IDEA
أداة IntelliJ IDEA Code Coverage Agent هي أداة لتغطية التعليمات البرمجية مدمجة في بيئة تطوير IntelliJ IDEA المتكاملة وخادم TeamCity CI. وهي تدعم تغطية الفروع وتتبع التغطية لكل اختبار.
Testwell CTC++ للغة Java
Testwell CTC++ هي أداة لتغطية التعليمات البرمجية للغات C و C++ و Java و C# . بدأ تطوير هذه الأداة عام 1989 في شركة Testwell بفنلندا. ومنذ عام 2013، تتولى شركة Verifysoft Technology، ومقرها أوفنبورغ بألمانيا ، دعمها وتطويرها . تُحلل Testwell CTC++ جميع مستويات تغطية التعليمات البرمجية، وصولًا إلى تغطية الشروط/القرارات المُعدّلة وتغطية الشروط المتعددة. [ 16 ] وتعمل الأداة مع جميع المُترجمات . [ 17 ]
أدوات تاريخية بارزة
البرسيم
كلوفر هي أداة لتحليل تغطية كود جافا، استحوذت عليها شركة أتلاسين وطورتها لاحقًا . في أبريل 2017، أعلنت أتلاسين عن انتهاء دعم كلوفر، وفي الوقت نفسه أتاحتها كمصدر مفتوح بموجب ترخيص أباتشي 2.0.
يستخدم Clover تقنية تحليل شفرة المصدر (على عكس Cobertura وJaCoCo اللتين تستخدمان تحليل شفرة البايت)، ولها مزاياها (مثل القدرة على جمع مقاييس الشفرة) وعيوبها (إعادة تجميع المصادر ضرورية). [ 18 ] تشمل بعض ميزاته إعداد التقارير التاريخية، والتحكم الدقيق في عملية جمع بيانات التغطية، ومجموعة أدوات سطر الأوامر، وواجهة برمجة التطبيقات للتكامل مع الأنظمة القديمة، وغير ذلك.
يُتيح Clover أيضًا تقليل وقت الاختبار من خلال تشغيل الاختبارات التي تُغطي فقط كود التطبيق الذي تم تعديله منذ الإصدار السابق. يُطلق على هذا اسم تحسين الاختبار [ 19 ] ، ويمكن أن يُؤدي إلى انخفاض كبير في الوقت المُستغرق في انتظار اكتمال الاختبارات الآلية.
يأتي Clover مزودًا بعدد من عمليات التكامل التي طورتها Atlassian (Ant، Maven، Grails، Eclipse، IDEA، Bamboo) ومن قبل مجتمع المصادر المفتوحة (Gradle، Griffon، Jenkins، Hudson، Sonar).
في أبريل 2017، أعلنت شركة أتلاسيان أنها لن تصدر إصدارات جديدة من برنامج كلوفر بعد الإصدار 4.1.2، وأصبح رمز البرنامج متاحًا كبرنامج مفتوح المصدر على منصة بيت باكيت . [ 20 ] [ 21 ]
كوبرتورا
Cobertura هي أداة مفتوحة المصدر لقياس تغطية الكود، وذلك عن طريق تحليل الكود البايتي. وكانت الأداة السابقة لـ JaCoCo.
إيما
إيما هي مجموعة أدوات مفتوحة المصدر لقياس تغطية كود جافا والإبلاغ عنها . يتم توزيع إيما بموجب شروط رخصة Common Public License الإصدار 1.0.
لا يخضع برنامج EMMA حاليًا للتطوير النشط؛ فقد صدر آخر إصدار مستقر منه في منتصف عام 2005. وكبديل له، تم تطوير برنامج JaCoCo. [ 22 ] يعمل برنامج EMMA عن طريق تغليف كل سطر من التعليمات البرمجية وكل شرط بعلامة، يتم تعيينها عند تنفيذ ذلك السطر. [ 23 ]
سمات
- فئات الأدوات للتغطية إما في وضع عدم الاتصال (قبل تحميلها) أو أثناء التشغيل (باستخدام محمل فئات تطبيق الأدوات).
- أنواع التغطية المدعومة: الفئة، والطريقة، والسطر، والكتلة الأساسية. يستطيع برنامج EMMA اكتشاف متى يتم تغطية سطر واحد من التعليمات البرمجية المصدرية جزئيًا فقط.
- يتم تجميع إحصائيات التغطية على مستوى الطريقة، والفئة، والحزمة، و"جميع الفئات".
- أنواع التقارير المتاحة: نص عادي، HTML، XML. تدعم جميع أنواع التقارير خاصية التصفح التفصيلي، مع إمكانية التحكم في مستوى التفاصيل من قِبل المستخدم. يدعم تقرير HTML ربط شفرة المصدر.
- يمكن لتقارير المخرجات تسليط الضوء على العناصر التي تقل مستويات تغطيتها عن العتبات التي يحددها المستخدم.
- يمكن دمج بيانات التغطية التي تم الحصول عليها في أجهزة مختلفة أو عمليات اختبار مختلفة.
- من الممكن تفريغ أو إعادة ضبط بيانات التغطية عن بعد وبدون مخرج JVM.
- لا يتطلب الوصول إلى شفرة المصدر ويتدهور بشكل سلس مع انخفاض كمية معلومات التصحيح المتاحة في فئات الإدخال.
- يمكن إجراء عمليات التتبع
.classعلى ملفات فردية أو على الملفات بأكملها.jars(في مكانها، إذا رغب في ذلك). كما يمكن أيضًا تصفية مجموعات فرعية من التغطية بكفاءة. - يتم دعم تكامل Makefile و ANT build على قدم المساواة.
- يُعدّ العبء الإضافي لوقت التشغيل الناتج عن إضافة أدوات القياس ضئيلاً (5-20%)، كما أن أداة قياس البايت كود نفسها سريعة جدًا (محدودية السرعة في الغالب بسرعة إدخال/إخراج الملفات). أما العبء الإضافي على الذاكرة فيبلغ بضع مئات من البايتات لكل فئة جافا.
- EMMA عبارة عن Java نقية بنسبة 100٪، وليس لها تبعيات مكتبات خارجية، وتعمل في أي JVM Java 2 (حتى 1.2.x).
صفاء
سيرينيتي أداة مفتوحة المصدر تُتيح إنشاء اختبارات قبول برمجية مؤتمتة بكفاءة عالية وفي وقت أقل. تقيس سيرينيتي تغطية كود جافا وتُعدّ تقارير عنها. كما تُنشئ تقارير سهلة الفهم تُوضح وظائف التطبيق وكيفية عمله، بما في ذلك الاختبارات التي تم إجراؤها والمتطلبات التي تم تلبيتها . وهي متوافقة مع أدوات Selenium WebDriver وAppium وBDD.
يتم قياس مؤشرات الأداء الرئيسية للبرنامج، مثل تعقيد الكود الحلقي ، والاستقرار، والتجريد، والمسافة من الدالة الرئيسية. تُحفظ بيانات التقرير في قاعدة بيانات كائنية وتُتاح عبر Jenkins/Hudson. وتُحاكي واجهة البرنامج واجهة بيئة التطوير المتكاملة Eclipse.
تعمل Serenity على تحسين الكود البرمجي ديناميكيًا، مما يجعل خطوة ما بعد التجميع غير ضرورية. تدعم Serenity مشاريع Ant وMaven. يتم التكوين باستخدام ملف XML، ومثال على ذلك في Ant:
<!-- خصائص نظام Serenity. --> <sysproperty key= "included.packages" value= "your.package.name.here" /> <sysproperty key= "included.adapters" value= "coverage,complexity,dependency" /> <!-- سطر أوامر JVM الخاص بـ Serenity. --> <jvmarg line= "-javaagent:serenity/serenity.jar" />ومثال على تكوين Maven سيكون كالتالي:
<properties> <included.packages> -Dincluded.packages=your.package.name.here </included.packages> <included.adapters> -Dincluded.adapters=coverage,complexity,dependency </included.adapters> </properties> <argLine> -javaagent:serenity/serenity.jar -Xms512m -Xmx1024m ${included.packages} ${included.adapters} </argLine>للحصول على مثال كامل للتكوين، يرجى الرجوع إلى ويكي Jenkins على الرابط التالي: https://wiki.jenkins-ci.org/display/JENKINS/Serenity+Plugin .
يتم دعم كل من وحدات Jenkins الفرعية ومشاريع Maven متعددة الوحدات.
مراجع
- ↑ مهمة جاكوكو
- ↑ باتروكلوس بابابترو (19 ديسمبر 2012). "مقارنة أدوات تغطية الكود (JaCoCo، Cobertura، Emma) في Sonar" . Only Software Matters . تم الاطلاع عليه في 3 مارس 2013 .
- ↑ "قياس التغطية من خلال اختبارات التكامل باستخدام سونار - تحديث" . مؤرشف من الأصل بتاريخ 23 فبراير 2013. تم الاطلاع عليه بتاريخ 1 مارس 2013 .
- 1 2 "تغطية الكود" . مساعدة الويب لبرنامج IntelliJ IDEA 12.0 . JetBrains . تم الاطلاع عليه في 3 مارس 2013 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ EclEmma، إضافة تغطية الكود في Eclipse
- ↑ إضافة جينكينز جاكوكو
- ↑ "دعم NetBeans JaCoCo" . مؤرشف من الأصل بتاريخ 31-05-2012 . تم الاطلاع عليه بتاريخ 22-02-2013 .
- ↑ إضافة Gradle JaCoCo
- ↑ Gulati & Sharma 2017 ، ص 99-103 ، الفصل §6 أدوات التكامل - أدوات البناء - Gradle.
- ↑ إضافة Maven JaCoCo
- ↑ Gulati & Sharma 2017 ، ص 115 ، الفصل §6 أدوات التكامل - أدوات البناء - ملحق Maven.
- ↑ تكامل JaCoCo في خدمات فريق Visual Studio
- ↑ دمج JaCoCo في TeamCity
- ↑ يستخدم برنامج Jacoco بواسطة أداة STAMP DSpot كمحدد للاختبارات (يُنظر إليه على أنه معيار لياقة) لاختيار الاختبارات التي تزيد من التغطية ولها مسار تنفيذ فريد
- ↑ أوبن كلوفر - نبذة عنا
- ↑ يدعم Testwell CTC++ جميع مستويات التغطية
- ↑ يدعم Testwell CTC++ جميع المترجمات
- ↑ "لماذا يستخدم كلوفر أدوات تحليل شفرة المصدر؟"
- ↑ تحسين الاختبار
- ↑ "أصبح برنامج Atlassian Clover الآن مفتوح المصدر" . atlassian.com . 11 أبريل 2017.
- ↑ "atlassian/clover" . bitbucket.org .
- ↑ ملفات تغطية كود EMMA على موقع SourceForge.net
- ↑ خبير في Spring MVC و Web Flow؛ بقلم سيث لاد، ودارين دافيسون، وستيفن ديفيجفر، وكولين ييتس، صفحة 289
الاقتباسات
- جولاتي، شيخار؛ شارما، راهول (2017). اختبار الوحدات في جافا باستخدام JUnit 5. بيركلي، كاليفورنيا: Apress . doi : 10.1007/978-1-4842-3015-2 . ISBN 978-1-4842-3014-5.
روابط خارجية
- مقارنة بين OpenClover و Clover و Cobertura و JaCoCo و JCov و CodeCover و PIT
- جاكوكو ضد كلوفر 2
- اختر أداة تغطية الكود في سونار 2.2 ( مؤرشفة بتاريخ 23 فبراير 2013 على موقع Wayback Machine ، وهي قديمة بعض الشيء، حيث يدعم JaCoCo حاليًا تغطية الفروع).
- اختبار تطبيقات جافا باستخدام خدمات فريق Visual Studio
- أدوات اختبار البرمجيات
- أدوات تطوير جافا
