gpt4 book ai didi

unit-testing - 证明单元测试的正确性

转载 作者:行者123 更新时间:2023-12-04 05:28:22 24 4
gpt4 key购买 nike

我正在创建一个用于学习目的的图形框架。我正在使用 TDD 方法,所以我正在编写很多单元测试。但是,我仍在想办法证明我的单元测试的正确性

比如我有这个类(不包括实现,我已经简化了)

public class SimpleGraph(){
//Returns true on success
public boolean addEdge(Vertex v1, Vertex v2) { ... }

//Returns true on sucess
public boolean addVertex(Vertex v1) { ... }
}

我也创建了这个单元测试
@Test
public void SimpleGraph_addVertex_noSelfLoopsAllowed(){
SimpleGraph g = new SimpleGraph();
Vertex v1 = new Vertex('Vertex 1');
actual = g.addVertex(v1);
boolean expected = false;
boolean actual = g.addEdge(v1,v1);
Assert.assertEquals(expected,actual);
}

好吧,太棒了。这里只有一个症结,我已经证明这些功能仅适用于这种情况。然而,在我的图论类(class)中,我所做的只是在数学上证明定理(归纳、矛盾等)。

所以我想知道有没有办法在数学上证明我的单元测试的正确性?那么有没有好的做法呢。因此,我们正在测试该单元的正确性,而不是针对某个特定结果进行测试。

最佳答案

不。单元测试不会试图证明一般情况下的正确性。他们应该测试具体的例子。我们的想法是选择足够多的代表性示例,如果出现错误,它可能会被一个或多个测试发现,但您不能确保以这种方式捕获所有错误。例如,如果您正在对 add 函数进行单元测试,您可能会测试一些正数、一些负数、一些大数和一些小数,但是单独使用这种方法,您会很幸运地发现这种实现不起作用的情况:

int add(int a, int b) {
if (a == 1234567 && b == 2461357) { return 42; }
return a + b;
}

但是,您可以通过结合单元测试和 code coverage 来发现此错误。然而,即使有 100% 的代码覆盖率,也可能存在未被任何测试捕获的逻辑错误。

可以证明代码的正确性。它被称为 formal verification ,但这不是单元测试的用途。除了最简单的软件外,其他所有软件都这样做成本很高,因此在实践中很少这样做。

关于unit-testing - 证明单元测试的正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5190807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com