Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

покрытие кода (тестов) - если нет доступа к исходникам


(johan) #1

Всем привет.

 
Вопрос: возможно ли как-то использовать какой-то инстумент оценивающий тест/код  покрытие (test/code coverage), если нет доступа к исходникам кода девелоперов?
 
Всё что нашел требует наличие ис ходника, в EMMA например говорят что не требует, только не понятно как прогонят тесты с аппликэйшин, и что же она будет считать.
Если я запускаю какой либо инструмент, то он мне показывает покрытие кода моего тестового фрэймворка, что не очень то и надо.
 
Кто вообще пользовался какими либо test (code) coverage инструментами и как выкручивался, если был в подобной ситуации.
 
Заранее спасибо.

(Mykhailo Poliarush) #2

честно говоря я еще не видел ниодного интрумента измерения покрытия кода, без самого доступа к коду

так что я не думаю, что такие существуют, а даже если существуют, то как они работают - это загадка для меня (декомпиляция?!)

когда мне надо было померять покрытие кода, надо было подключать определенные библиотеки к коду

даже не знаю, что можно посоветовать в данном случае, только идти и требовать доступ к коду :)

сам рад бы услышать другие возможные варианты


(Дмитрий Жарий) #3

 

На разных платформах все по разному ;) Для .NET проектов, например, получается так, что проект компилируется в очень высокоуровневый объектно ориентированный ассемблер – MSIL. Из которого очень легко восстановить исходники проекта, если, конечно же, специально не применялась обфускация. Делается это при помощи ILSpy.

Так же можно измерить покрытие кода тестами без исходников. Нужна, правда, просто дебаговая версия проекта. PartCover это умеет.


(apetrovskiy) #4

Только теперь это OpenCover (согласно легенде, автор-исполнитель партковера понял, что да данной архитектуре (много забытого C++, да и мало оригинальных разработчиков) далеко не уедешь, да и переписал с нуля, назвав OpenCover). Попутно ещё оживил другой проект этой же тематики. :)

Для доставания исходников раньше был неплохой плагин к рефлектору (забыл, как называется, да и зачем? Это ж надо чень старую версию рефлектора найти, 5 или 4 (не помню уже), которая не лазит в инет за новой или ещё не очень настойчиво лазит). Было удобно: мышкой махнул, и готов *.sln и весь проект (собрать один в один не получится, но как сырьё подойдёт).


(Mykhailo Poliarush) #5

на чем написано приложение? какие технологии используются?


(johan) #6

Java - backend,

JavaScript - frontend


(Дмитрий Жарий) #7

 

Кстати, а зачем вам эта метрика покрытия нужна то?

Обычно ее используют для юнит-тестов, как стимул покрывать больше.  И даже в юни тестах не все области приложения могут быть доступны. Говорят, что покрытие около 80% – это нормально.

Вот, предположим что после прохождения всех сценариев, у вас будет число 60%.

Что вы будете с ним делать дальше? 


(KaNoN) #8

Если у вас есть доступ к бинарникам, то они прекрасно декомпилируются. Есть для этого инструменты, типа http://java.decompiler.free.fr/


(apetrovskiy) #9

У меня в иерархии фреймворков есть пустые классы. Зачем? Когда создаю одну или несколько командлет, сразу делаю не менее одного уровня прослойки (ну там параметры может потребоваться общие разместить и т.д.).

примерно так: Get-ThisWindows -> ThisWindowCmdletBase -> WindowCmdletBase -> CommonCmdletBase

Если в результате рефакторинга параметры или методы переползут вверх, вниз, или вообще в другой класс, ой как опенковер будет недоволен! Нашёл аж один или два непройденных класса! Медаль попросить может.

А страдает ли качество от таких "непройденных" классов? Да никак. Поэтому покрытие - фича зачастую для поддержки морального духа менеджмента...


(johan) #10

 

Менеджмент хочет полюбоваться и оценить какое покрытие у нас сейчас.
 
Сам понимаю, что это не показатель вообще, т.к. даже у меня много классов и методов "на вырост", т.е. сеичас они не используются, но будут в будущем.
 
  

(Дмитрий Жарий) #11

А вы им пообещайте, что vj;yj хоть Sonar подключить -- не проблемма. Дайте только исходники :)


(Дмитрий Жарий) #12

 

Вот поэтому 100% покрытия добиться сложно. Я тоже создаю такие пустые классы-прослойки, которые в большинстве своем так и остаются пустыми, но иногда очень помогают добавить новый функционал или переопределить старый без перелопачивания всех исходников в проекте.