目前,我们的一个生产系统是由3000多个程序编写的1986年到现在。代码库是用非标准语言编写的,不幸的是缺乏现代的测试工具。
为了提高我们的代码质量,我一直致力于整合过程和构建工具,以改进开发和测试。我刚刚有一个完整的行覆盖工具,这样我们就可以在开发过程中帮助识别死代码+未经测试的代码。
现在,我想开始在工具中添加路径覆盖。
我该怎么做?
鉴于此:
1)行覆盖工具充当注入代码的预处理器。
2)我已经有能力收集我在上述代码中设置的统计数据。
在程序执行时我应该记录哪些数据,以及如何解释它?
如何通过表示结果?
我已经读过关于如何开始“编写”代码覆盖工具?的问题,它是关于Java的,但是没有帮助(包括“任意语言的分支覆盖变得容易”)。
感谢事先给出的指导!
发布于 2009-08-19 07:55:41
要进行路径覆盖,您需要以某种方式获取程序控制流。一种很明显的方法是构造一个真实的控制流图,然后遍历其中的段来选择用于路径覆盖分析的“路径片段”(例如,基本路径)。(您可以尝试通过字符串攻击源代码来实现这一点,但很可能失败;解析和流分析太复杂)。
有关基本路径的良好堆栈溢出讨论,请参见基本路径覆盖的意义是什么?。
要实现所需的路径覆盖工具,您可能需要彻底解析完整的遗留语言。对于3000个程序和对测试的强烈需求,使用工业强度解析器和基础设施进行测试将是有意义的。
我们的DMS软件重组工具包不仅可以用于构造解析器,还可以用来构建收集路径覆盖数据所需的控制流分析和检测。(如果您只想收集分支覆盖率数据,那么“任意语言的分支覆盖率”就说明了这一点,但是DMS不仅仅是解析)。如果需要,DMS还支持构造控制图(和数据流),就像在本例中所做的那样;请参见DMS构造控制流图。
DMS用于为C、Java和COBOL构建控制和数据流分析器,并用于为一些30+语言构建解析器。如果您认真对待这个问题,它可以处理您的遗留语言。
编辑10/31/2011: DMS现在可以计算C++的控制流,因此它将是C++路径覆盖工具的一个很好的基础。
https://stackoverflow.com/questions/1296577
复制相似问题