Мок-объекты для тестирования Java-систем
Mock objects for testing java systems
2018-11-05
SCID: 54.1/nfp8p668
Discuss with AI
эмпирическое исследование моковзависимости, связанные с инфраструктуроймок-объектысвязность теста и продакшен-кодатестирование Java-систем
Figures from the paper
Abstract (AI)
При тестировании программных артефактов с несколькими зависимостями можно либо инстанцировать эти зависимости, либо использовать мок-объекты для имитации их ожидаемого поведения. Хотя недавние количественные исследования показали, что мок-объекты широко используются как в проектах с открытым исходным кодом, так и в проприетарных проектах, научных знаний о том, как и почему практики используют моки, всё ещё не хватает. Эмпирическое понимание ситуаций, в которых разработчики применяют (и не применяют) моки, а также влияние таких решений на связанность и эволюцию ПО, может помочь практикам адаптировать и улучшать их последующее использование. С этой целью мы изучаем использование мок-объектов в трёх проектах с открытым исходным кодом и в одной промышленной системе. Конкретно, мы вручную анализируем более 2000 случаев использования моков, обсуждаем наши выводы с разработчиками из этих систем и выявляем практики, мотивы и проблемы. Эти результаты подтверждаются структурированным опросом более 100 специалистов. Наконец, мы вручную анализируем, как использование моков в тестовом коде эволюционирует во времени и каково его влияние на связанность между тестовым и продуктивным кодом. Наше исследование показывает, что использование моков сильно зависит от ответственности класса и архитектурных соображений. Разработчики сообщают, что часто мокируют зависимости, затрудняющие тестирование (например, инфраструктурные зависимости), и не мокируют классы, инкапсулирующие доменные концепции или правила системы. Среди ключевых проблем разработчики отмечают, что поддерживать совместимость поведения мока с поведением оригинального класса трудно, и что моки увеличивают связанность между тестовым и продуктивным кодом. Наши данные подтверждают эти представления: моки обычно присутствуют с самой первой версии тестового класса, как правило, остаются на протяжении всего его жизненного цикла, и изменения в продуктивном коде часто вынуждают вносить изменения и в тестовый код.
Key Findings
1
Изменения в продакшен-коде обычно принуждают к соответствующим изменениям в тестовом коде из-за моков
2
Разработчики часто мокают зависимости, которые затрудняют тестирование, например инфраструктурные зависимости
3
Разработчики отмечают, что мокинг увеличивает связанность между тестовым кодом и продакшен-кодом
4
Разработчики, как правило, не мокают классы, инкапсулирующие доменные концепции или бизнес-правила
5
Эмпирические данные показывают, что моки часто присутствуют с первой версии тест-класса и сохраняются на протяжении всего его жизненного цикла
6
В исследовании трех OSS-проектов и одной промышленной системы вручную проанализировано более 2000 использований моков для выявления практик, мотиваций и проблем
7
Поддержание поведения мока в соответствии с оригинальным классом называется разработчиками ключевой проблемой
8
Мок-объекты широко используются в открытых и проприетарных проектах, но отсутствуют детальные эмпирические знания об их применении
9
Результаты структурированного опроса более 100 профессионалов подтверждают качественные выводы ручного анализа и обсуждений с разработчиками
Research Object
Мок-объекты, используемые при тестировании Java-систем
Research Subject
Шаблоны использования практиками, обоснования, проблемы, эволюция во времени и влияние на связанность (coupling) между тестовым и продуктивным кодом при использовании мок-объектов
Publication Details
Publication Date
2018-11-05
Journal
Publisher
ISSN
Open access PDF
Access Type
Author Information
Download PDF
Subscribe to digest