Testing 在数据流覆盖率中,返回变量是否使用它?

Testing 在数据流覆盖率中,返回变量是否使用它?,testing,code-coverage,dataflow,test-coverage,Testing,Code Coverage,Dataflow,Test Coverage,我脑子里有个小问题。我在互联网上对此进行了研究,但没有人给出确切的答案。我的问题是: 在数据流覆盖率标准中,假设有一个方法最终返回变量x。为该方法绘制图表时,返回语句是否被视为使用了x?是,返回语句使用它返回的值。我也找不到一个权威的参考文献用通俗易懂的英语这么说,但这里有两个论点: return语句将控制从程序的一部分传递到另一部分,就像方法调用一样。返回的值类似于函数参数返回因此是一种用途,就像函数参数是一种用途一样 数据流分析中的另一种用途是当值离开程序并对外部世界产生影响时,例如通过打

我脑子里有个小问题。我在互联网上对此进行了研究,但没有人给出确切的答案。我的问题是:


在数据流覆盖率标准中,假设有一个方法最终返回变量
x
。为该方法绘制图表时,返回语句是否被视为使用了
x

是,返回语句使用它返回的值。我也找不到一个权威的参考文献用通俗易懂的英语这么说,但这里有两个论点:

  • return
    语句将控制从程序的一部分传递到另一部分,就像方法调用一样。返回的值类似于函数参数<代码>返回因此是一种用途,就像函数参数是一种用途一样

  • 数据流分析中的另一种用途是当值离开程序并对外部世界产生影响时,例如通过打印。如果我们在分析一个方法,而不是整个程序,
    return
    会导致值离开我们正在分析的范围。所以它的用途和印刷的用途是一样的


我相信关于某个值离开程序的论点,假设外部世界将受到它的影响。我不太确定我是否相信关于返回值的论点。假设我想知道Y是否“覆盖了数据流”,我有一个语句“X:=Y”,但是X在任何地方都没有使用。我想你会同意Y没有真正被覆盖。但是这和“返回Y”有什么不同呢"? 真正的区别在于使用返回值并不明显。您必须进行全局数据流分析以确定这一点(我认为您应该)。。。所以对我来说,“returny Y”语句本身不应该是Y被使用的证据。我认为你应该看到返回值的一种(非平凡的)用法。总的来说,这是正确的,但这是你在孤立地分析一个方法时玩的游戏。如果你坚持在孤立地测试函数,你可以提出这个论点;另外,如果您单独测试一个代码块,并且它为该块中未使用的变量X赋值。使用隔离进行测试肯定比不进行测试或使用较弱的标准进行测试要好,但通常我们是在测试嵌入到更大应用程序中的代码。在某些情况下,您应该测试代码,而不是孤立地进行测试;如果您想在非隔离测试中使用数据流覆盖率,那么我认为您已经验证了离开隔离块的数据流确实可以在该块之外使用。是的,如果函数A没有使用,但只返回了一个值,那么您需要查看A的所有调用者(及其调用者等)中的数据流了解该值是否已在程序中使用。