Я не знаю ни одного инструмента COTS, который вычисляет входное покрытие, поэтому я ожидаю, что вам придется создать инструмент, который сделал бы то, что вы хотели.
Моя техническая статья Покрытие ветвлений для произвольных языков Made Easy описывает подход к созданию инструментов покрытия тестов для произвольных языков с использованием Системы преобразования программ для вставки произвольных проб в исходный код.
Документ, естественно, сфокусирован на покрытии кода здания, но техника вставки зонда является общей, и вы можете решить, где разместить зонды и что они делают. В вашем случае вы хотите размещать пробники только при входе в метод, и вы хотите, чтобы пробники отслеживали экземпляры входных аргументов. В статье показано, как размещать зонды в любом месте, используя шаблон исходного кода, чтобы указать точку вставки; Запись метода легко описать как шаблон.
Захватить входные данные более неудобно, но выполнимо. Вы должны решить, что такое «вход»; это просто значения аргументов или какая-то глубокая копия аргументов? Вероятно, вам нужно создать (для каждого метода инструментированный) тип объекта, члены данных которого соответствуют параметрам, создать экземпляр такого объекта с копией (до соответствующей глубины) аргументов и сохранить этот объект в каждом методе. хеш-таблица. (Правила преобразования могут вставить все это, если вы знаете, что вы хотите сделать как идиома кода). При этом во время исполнения ваша хеш-таблица создает набор аргументов, который является ключом к тому, что вы хотите.
Вы можете (непрерывно) считать уникальных экземпляров набора аргументов, управляя тем, что происходит, когда вы вставляете дубликаты в хеш-таблицу; этим количеством (для каждого метода) можно управлять в глобальном массиве, который экспортируется при завершении программы. В документе обсуждается такой глобальный массив, а также различные способы его экспорта / отображения.
Наша линейка тестовых покрытий и профилировщиков построена с использованием методов, описанных в статье. Профилировщики ведут подсчет / время в таких глобальных массивах (в основном то, что вам нужно) и экспортируют их в механизм отображения, который отображает тепловые гистограммы, показывая, где находятся горячие точки. Эти механизмы отображения являются независимыми от языка и зондирующих источников данных в том смысле, что они входят в любой из наших (профилировщиков) инструментов, включая профилировщик Java, так что вы можете использовать один из них в качестве службы для задачи отображения.