Research of test coverage at the Java byte-code level

Keywords: code coverage, statement coverage, branch coverage, Java byte-code, operand stack, transition instruction, JaCoCo Library.

Abstract

Кількісною характеристикою оцінки обсягу тестування програмних продуктів, рішення про завершення тестування і, врешті, визначення якості продукту та готовності його до дистрибуції є ступінь тестового покриття. Покриття коду тестами є підтипом тестового покриття і воно найчастіше визначається інженерами-програмістами. Ми можемо вимірювати ступінь покриття коду тестами за декількома критеріями, такими як покриття методу, покриття рядків, покриття операторів, покриття гілок, покриття умов гілок тощо. При оцінці результатів вимірювання покриття популярними інструментами, наприклад JaCoCo Java Code Coverage Library, за критеріями операторів, гілок та умов гілок результати є неочевидними внаслідок того, що у таких випадках ступені покриття визначаються на рівні байт-коду. Стаття наводить детальний аналіз визначення ступенів покриття на рівні байт-коду за вказаними критеріями при модульному тестуванні типових методів з комбінованою умовою з логічним оператором AND (&) у першому випадку та з оператором швидкої оцінки AND (&&) у другому випадку. Отриманий байт-код методів вивчався з відтворенням станів стеку операндів до та після кожної команди, що дозволило правильно інтерпретувати переходи у програмі. Було з’ясовано, що при визначенні ступеню покриття за критеріями гілок та умовами гілок враховувались виключно інструкції умовних переходів, причому кількість гілок дорівнювалася подвоєній кількості таких інструкцій. Також були визначені ступені покриття коду тестами за критеріями операторів та гілок для обох методів при різних наборах вхідних даних. Було визначено, що внаслідок визначення ступенів покриття саме на рівні байт-коду, для 100% покриття методу з комбінованою умовою з логічним оператором AND (&) достатньо два тестових прогони, у той час як для того ж методу, але з комбінованою умовою з оператором швидкої оцінки AND (&&) необхідні, як мінімум, три прогони.

References

Majid Ashouri, Paul Davidsson , Romina Spalazzese (2021) Quality attributes in edge computing for the Internet of Things: A systematic mapping study. In Proceedings of the Engineering Cyber Physical Human Systems. V.13. P. 1-20.

Mauricio Aniche. Effective Software Testing. A Developer’s Guide. Manning Shelter Island, 2022. 329 p.

Shreya Bose. Code Coverage vs Test Coverage : A Detailed Guide. [Electronic resource] - Access mode: https://www.browserstack.com/guide/code-coverage-vs-test-coverage.

ISO/IEC/IEEE 29119-4:2021(en) Software and systems engineering – Software testing – Part 4: Test techniques. [Electronic resource] - Access mode: https://www.iso.org/obp/ui/#iso:std:iso-iec-ieee:29119:-4:ed-2:v1:en.

JaCoCo Java Code Coverage Library. [Electronic resource] - Access mode: https://www.eclemma.org/jacoco.

R. Sivaguru, G. V. Kanimozhi, S. Alaudeen Basha (2019) Assessment on Various Code Coverage Tools. Global Research and Development Journal for Engineering. V. 4, Issue 10. P. 21-24.

Samar Ali Abdallah, Ramadan Moawad (2015) Challenges and Proposed Solutions of Coverage Based Testing Tools. European Journal of Scientific Research. V. 131, No 1. P. 7-21.

Khushbu, Dr. Kamna Solanki, Sandeep Dalal (2018) Systematic Study of Tools for Code Coverage Analysis. Journal of Emerging Technologies and Innovative Research. V. 5, Issue 2. P. 216-222.

The javap Command. Java® Development Kit Version 17 Tool Specifications. [Electronic resource] - Access mode: https://docs.oracle.com/en/java/

Tim Lindholm, Frank Yellin, Gilad Bracha, Alex Buckley, Daniel Smith. The Java® Virtual Machine Specification. Java SE 17 Edition. Chapter 6. The Java Virtual Machine Instruction Set. [Electronic resource] - Access mode: https://docs.oracle.com/javase/specs/


Abstract views: 88
PDF Downloads: 100
Published
2022-07-01
How to Cite
Kolomoiets , H. (2022). Research of test coverage at the Java byte-code level. COMPUTER-INTEGRATED TECHNOLOGIES: EDUCATION, SCIENCE, PRODUCTION, (47), 83-90. https://doi.org/10.36910/6775-2524-0560-2022-47-13
Section
Computer science and computer engineering