Testing 为什么不使用函数依赖关系图来加速测试?

Testing 为什么不使用函数依赖关系图来加速测试?,testing,integration-testing,functional-testing,Testing,Integration Testing,Functional Testing,在我看来,如果您有一个源代码的依赖关系图(显示代码库中所有函数的调用堆栈的树),那么您应该能够在每次发布后节省大量的时间进行功能和集成测试 基本上,您将能够告诉测试人员确切地测试什么功能,因为从源代码的角度来看,其余的特性保持不变 例如,若您在一段代码中更改了一个拼写错误,那个么就并没有理由再次运行整个测试脚本“以防万一”您引入了一个关键的bug 我的问题是,为什么在软件工程中不使用依赖树?如果使用它们,如何维护它们?有哪些工具可以生成用于C.net、C++和C源代码的这些树? < P>高级版本

在我看来,如果您有一个源代码的依赖关系图(显示代码库中所有函数的调用堆栈的树),那么您应该能够在每次发布后节省大量的时间进行功能和集成测试

基本上,您将能够告诉测试人员确切地测试什么功能,因为从源代码的角度来看,其余的特性保持不变

例如,若您在一段代码中更改了一个拼写错误,那个么就并没有理由再次运行整个测试脚本“以防万一”您引入了一个关键的bug


我的问题是,为什么在软件工程中不使用依赖树?如果使用它们,如何维护它们?有哪些工具可以生成用于C.net、C++和C源代码的这些树?

< P>高级版本Visual Studio 2010(Primple and Engestor),结合TFS,提供了这种依赖性分析,称为“影响分析”。 见“”和
“”.

理想情况下,您应该使用某种类型的连续集成,特别是如果您有多个开发人员,那么您的源存储库中保存的所有内容每天至少可以测试一次,以确保在所有内容都在一起时,确保没有引入新的bug

我很少修改拼写错误,就像修改实际的错误或添加新功能一样

但是,您可以在VS2010、architectural tools()或VS2008中找到所需内容,这可能会有所帮助:

我对VS2010图表的问题是,要使它完整,它变得太复杂,没有多大用处


理想情况下,如果有某种方法可以选择一个函数或一组函数/类,并让它突出显示可能受到影响的所有内容,这可能会很有用,但只会有助于进行一些功能测试,例如,您的测试人员仍应检查所有内容,以防发生其他可能导致问题的情况。

我不同意您的假设。除了执行路径依赖项之外,代码还具有数据依赖项。假设线程
A
B
正在运行
A
调用
A()

shared_memory.x.inc_by(2);
线程B调用
B()

而且一切都很好(比方说;))。然后有一天,你改变了第一个函数

shared_memory.x.inc_by(3);
而是出于某种原因。如果您仅根据
a()
检查函数,您将永远无法测试
b()
,因为它在某个地方进行了分支,甚至可能是一个动态回调

这并不局限于多线程,只是选择了它作为一个例子。每个共享数据或与外部世界通信的地方都需要检查——这意味着“整个程序”实际上使用了您列出的语言


在某种程度上,在某些语言中进行此类分析是可能的,这可能是因为没有副作用,或者是因为对托管代码进行了一些静态分析,但在某些情况下(C/C++),在许多情况下,您无法从中获得任何有用的数据。

除了visual studio之外,还有许多独立的源代码依赖关系分析器可用于此分析;是一种提供依赖关系图和可视化调用堆栈的工具。

这是一个非常好的主意,一旦您开始使用更昂贵的测试用例(需要花费很多时间运行)。此外,一个好的测试套件可能会因为没有人运行而被破坏,因为开发人员没有耐心等待运行

Softagram是一个独立的源代码依赖关系分析器,它还提供用于测试自动化目的的信息。分析了java、C++、C++、C语言、python、PHP、JavaScript、TypeScript etc.

等主流语言 目前有一个RESTAPI,提供Jenkins脚本中通常使用的信息。借助webhooks和集中分析设置,Softagram可以在所有请求出现或修改时自动分析它们,以及任何未合并的分支,然后测试自动化就有尽可能新的数据可用于选择受影响的测试用例

为开发人员环境用例编写从分析服务器请求数据的脚本也很容易。当您有大量的测试,甚至在将更改从计算机中向前推进之前就想找到错误时,这使得单元测试更加可行

当前的限制是Softagram analyzer不能安装到开发人员工作站,而是服务器安装。它不分析副作用。在动态语言中,很难正确检测所有函数调用,因此,如果您的代码中还有一些#include/import语句,使分析工具了解您的文件到文件的依赖关系,这将非常有用

免责声明:我来自,我们自己使用它来实现上述目的。

Pex间接相关——使用代码分析根据可能的代码路径和可能的参数值生成测试。手动测试?:-)大多数东西(即使是GUI)都可以——而且应该——在没有糟糕的人工点击按钮的情况下模拟所有的基本回归测试。(而且计算机时间相对便宜。)
shared_memory.x.inc_by(3);