инструменты покрытия кода для проверки скриптов - PullRequest
7 голосов
/ 25 августа 2011

Есть ли способ проверить охват сценариев оболочки?У меня есть проект с большим количеством сценариев оболочки, и я должен обеспечить выполнение статического анализа покрытия сценариев оболочки.Доступен ли какой-либо инструмент?

Ответы [ 4 ]

7 голосов
/ 26 августа 2011

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

Однако, есть некоторые общие указатели, которые могут оказаться полезными для «правильной» проверки, покрытия кода и документирования сценариев оболочки, как это делают основные языки:

  • Вы всегда можете запустить скрипт с опцией -x (AKA xtrace) - он выведет трассировку, похожую на эту, в stderr:

    + log_end_msg 0
    + [ -z 0 ]
    + retval=0
    + log_end_msg_pre 0
    + :
    + log_use_fancy_output
    + TPUT=/usr/bin/tput
    + EXPR=/usr/bin/expr
    + [ -t 1 ]
    + [ xxterm != x ]
    + [ xxterm != xdumb ]
    
  • Bash позволяет перенаправить этот поток на внешний FD (используя переменную BASH_XTRACEFD ) - на практике разбирать его намного проще.

  • Это не тривиально, но можно написать программу, которая будет находить соответствующие фрагменты кода, выполняемые с использованием вывода xtrace, и делать вам фантастический отчет о «покрытии кода» - как то, что называлось сколько раз, какие фрагменты кода вообще не выполнялись и поэтому не имеют покрытия для тестирования.

  • На самом деле, уже есть замечательный инструмент под названием shcov , который уже использует этот процесс - хотя он несколько упрощен и не очень хорошо обрабатывает все возможные случаи (особенно когда мы говорим о длинные и сложные линии)

  • И последнее, но не менее важное: есть минималистичный проект shelldoc (похожий на javadoc ), который помогает генерировать документацию на основе комментариев в сценариях оболочки. Да, это бесстыдная вилка:)

3 голосов
/ 08 сентября 2014

Я написал инструмент, который может выполнять покрытие сценариев оболочки, имя shAge означает покрытие сценария оболочки, проект размещен здесь

Чтобы выполнить покрытие, если какие-либо сценарии оболочки выполняют следующие действия:

  1. Сначала загрузите shAge.jar
  2. Убедитесь, что у вас установлено обновление 65 jdk1.6 и выше
  3. запустить программу, как

    java -jar shAge.jar hello.sh

  4. содержимое сценария оболочки будет выполнено и, наконец, отчет будетполучить сгенерированный

  5. Отчет будет составлен с именем файла в формате .html hello.sh.html
  6. Вот пример выходных данных

enter image description here

3 голосов
/ 11 сентября 2012

Вы можете попробовать shcov , инструмент на Python, лицензированный под GPL v2.Похоже, что автор, возможно, от него отказался, но он создает графические отчеты на основе HTML и, как мне показалось (в моем ограниченном тестировании), достаточно точен с точки зрения анализа покрытия.

3 голосов
/ 26 августа 2011

Я не думаю, что есть инструменты COTS, доступные для тестового покрытия, независимо от языка сценариев, и их много.

Другой автор предложил специальный подход, который может работать с некоторыми инструментами: заставить ихсбросьте некоторые данные трассировки и попытайтесь сопоставить их с реальным кодом, чтобы получить покрытие.Он говорит, что это вроде работает ... в этом и заключается проблема большинства hueristics.

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

...