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

标签 shell code-coverage

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

最佳答案

我严重怀疑是否可能对 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 ]
    
  • Bash 可以将此流重定向到外部 FD(使用 BASH_XTRACEFD 变量)——这在实践中更容易解析。
  • 这不是微不足道的,但是可以编写一个程序,该程序将使用 xtrace 输出找到正在执行的相关代码段,并为您制作精美的“代码覆盖率”报告——比如调用了多少次,哪些代码段没有运行完全没有,因此缺乏测试覆盖率。
  • 事实上,有一个很棒的工具叫shcov已经写过使用这个过程 - 尽管它有点简单并且不能很好地处理所有可能的情况(特别是当我们谈论长而复杂的行时)
  • 最后但并非最不重要的 - 极简主义 shelldoc项目(类似于 javadoc )有助于根据 shell 脚本中的注释生成文档。是的,这是一个无耻的插件:)
  • 关于shell - 用于验证脚本的代码覆盖率工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7188081/

    相关文章:

    shell - TF命令行工具: Add files to directory

    code-coverage - Cobertura 中条件覆盖的计算

    c# - 100% 代码覆盖率,提示 MoveNext()

    .net-core - 在.Net Core 3.1中如何从代码覆盖率中排除自动属性?

    python - 有什么方法可以过滤 Nose 中的覆盖率报告吗?

    linux - 如何使用shell脚本删除文件中的某些单词?

    linux - awk 模式总是匹配最后一条记录?

    linux - 为什么 shell 脚本(或任何进程)的子进程继承其父进程的标准输入?

    c++ - 进程内运行线程的名称

    mockito - PowerMockito禁用 Sonar 分公司的覆盖范围