Всем привет.
честно говоря я еще не видел ниодного интрумента измерения покрытия кода, без самого доступа к коду
так что я не думаю, что такие существуют, а даже если существуют, то как они работают - это загадка для меня (декомпиляция?!)
когда мне надо было померять покрытие кода, надо было подключать определенные библиотеки к коду
даже не знаю, что можно посоветовать в данном случае, только идти и требовать доступ к коду :)
сам рад бы услышать другие возможные варианты
На разных платформах все по разному ;) Для .NET проектов, например, получается так, что проект компилируется в очень высокоуровневый объектно ориентированный ассемблер – MSIL. Из которого очень легко восстановить исходники проекта, если, конечно же, специально не применялась обфускация. Делается это при помощи ILSpy.
Так же можно измерить покрытие кода тестами без исходников. Нужна, правда, просто дебаговая версия проекта. PartCover это умеет.
Только теперь это OpenCover (согласно легенде, автор-исполнитель партковера понял, что да данной архитектуре (много забытого C++, да и мало оригинальных разработчиков) далеко не уедешь, да и переписал с нуля, назвав OpenCover). Попутно ещё оживил другой проект этой же тематики. :)
Для доставания исходников раньше был неплохой плагин к рефлектору (забыл, как называется, да и зачем? Это ж надо чень старую версию рефлектора найти, 5 или 4 (не помню уже), которая не лазит в инет за новой или ещё не очень настойчиво лазит). Было удобно: мышкой махнул, и готов *.sln и весь проект (собрать один в один не получится, но как сырьё подойдёт).
на чем написано приложение? какие технологии используются?
Java - backend,
JavaScript - frontend
Кстати, а зачем вам эта метрика покрытия нужна то?
Обычно ее используют для юнит-тестов, как стимул покрывать больше. И даже в юни тестах не все области приложения могут быть доступны. Говорят, что покрытие около 80% – это нормально.
Вот, предположим что после прохождения всех сценариев, у вас будет число 60%.
Что вы будете с ним делать дальше?
Если у вас есть доступ к бинарникам, то они прекрасно декомпилируются. Есть для этого инструменты, типа http://java.decompiler.free.fr/
У меня в иерархии фреймворков есть пустые классы. Зачем? Когда создаю одну или несколько командлет, сразу делаю не менее одного уровня прослойки (ну там параметры может потребоваться общие разместить и т.д.).
примерно так: Get-ThisWindows -> ThisWindowCmdletBase -> WindowCmdletBase -> CommonCmdletBase
Если в результате рефакторинга параметры или методы переползут вверх, вниз, или вообще в другой класс, ой как опенковер будет недоволен! Нашёл аж один или два непройденных класса! Медаль попросить может.
А страдает ли качество от таких "непройденных" классов? Да никак. Поэтому покрытие - фича зачастую для поддержки морального духа менеджмента...
Вот поэтому 100% покрытия добиться сложно. Я тоже создаю такие пустые классы-прослойки, которые в большинстве своем так и остаются пустыми, но иногда очень помогают добавить новый функционал или переопределить старый без перелопачивания всех исходников в проекте.