用于验证脚本的代码覆盖工具

ani*_*ish 7 shell code-coverage

有没有办法验证shell脚本的覆盖范围?我的项目有很多shell脚本,需要确保可以对shell脚本的覆盖范围执行静态分析.有没有可用的工具?

Gre*_*Cat 7

我严重怀疑,有可能是在shell脚本进行任何静态代码分析-特别是由于这样的事实,shell脚本应该调用外部程序和所依据的这些外部程序返回-有外部程序和外部环境状态的无数.它类似于严重依赖类似eval机制的代码静态分析问题,但shell脚本完全关于eval风格的编程.

但是,有一些通用指针可能对主要语言执行的"正确"验证,代码覆盖和shell脚本文档化有用:

  • 您始终可以使用-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 ]
    
    Run Code Online (Sandbox Code Playgroud)
  • Bash可以将此流重定向到外部FD(使用BASH_XTRACEFD变量) - 这在实践中更容易解析.

  • 这不是一件容易的事,但是可以编写一个程序来查找使用xtrace输出执行的相关代码片段,并使您获得一个奇特的"代码覆盖率"报告 - 就像所谓的多少次,哪些代码没有运行完全没有测试覆盖率.

  • 实际上,有一个名为shcov的奇妙工具已经编写过使用这个过程 - 尽管它有点过于简单,并且不能很好地处理所有可能的情况(特别是当我们谈论长而复杂的行时)

  • 最后,但并非最不重要 - 有一个简约的shelldoc项目(类似于javadoc),它有助于根据shell脚本中的注释生成文档.是的,这是一个无耻的插头:)

  • 静态分析?代码覆盖率通常由动态分析确定,运行一组测试用例并跟踪执行的代码.你对跟踪内容的讨论至少是这样的. (2认同)