代码之家  ›  专栏  ›  技术社区  ›  brianegge

给定程序中错误的上限

  •  4
  • brianegge  · 技术社区  · 7 年前

    给定程序中包含的错误数量是否有上限?如果指令的数量已知,可以说程序不能包含超过“n”个错误吗?例如,以下函数可以包含多少个错误?

    double calcInterest(double amount) {
        return -O.07 / amount;
    }
    

    解析器将计算函数中的四个术语,我可以计算这些错误:

    • 数字语法错误
    • 错误利率(业务需求错误)
    • 计算错误(应乘以)
    • 电位除以零

    显然,给定有限数量的指令,错误的数量并不是无限的。或者,可以说函数接受2^64个输入,其中有多少个输出正确。然而,有没有什么方法可以正式证明一个上限?

    8 回复  |  直到 17 年前
        1
  •  4
  •   Rafał Dowgird    17 年前

    如果BUG是 “程序未满足的要求” ,那么对于bug的数量没有限制(每行或其他),因为需求的数量没有限制。

    print "hello world"
    

    可能包含一百万个错误。它不会造成粉红的大象。我把它留给读者来提出999999这个程序不满足的其他要求。

        2
  •  2
  •   Will Hartung    17 年前

    指令的数量与程序是否执行用户希望它执行的操作无关。我是说,看看GCC在平衡我的支票簿方面做得有多差。四轮马车都出来了,下去就没用了!

        3
  •  1
  •   bdonlan    17 年前

    这完全取决于你如何定义一个“bug”。

    如果您将一个程序定义为从某个输入到某个输出的函数,将一个规范定义为该函数的定义,将一个bug定义为输出与给定输入上的规范之间的任何差异,那么是的,您可以想象拥有可数无限的bug——但是这是一个有点无用的bug定义。

        4
  •  1
  •   clemahieu    17 年前

    上限是程序可以处于的状态数。因为这个数字在真实的机器上是有限的,所以您可以将状态从1到n进行编号。对于每个状态,如果这个状态是bug,您可以标记它。所以是的,但是即使是一个16字节内存的小程序也有2^128个状态,分析所有不同状态的问题也是很难解决的。

        5
  •  0
  •   Robert Harvey    17 年前

    对于bug有一个理论上的上限,但是对于除了最普通的程序以外的所有程序来说,它几乎是不可能计算的,尽管 engines such as Pex 一定要试试老学院的做法。

        6
  •  0
  •   zeroDivisible    17 年前

    程序设计定律:

    "If You will find all compile-time bugs, then n logical ones are still hidden, waiting to surprise You at run-time."
    
        7
  •  0
  •   DreadPirateShawn    17 年前

    取决于你如何计算错误,这让我说“不,没有限制”。我不了解你,但我可以 容易地 在同一行代码中编写几个错误。例如,这个Java代码中有多少个bug?-P

    public int addTwoNumbers(int x, String y)
    {{
        z == x + y;
        return y;
    }
    
        8
  •  0
  •   user127239    17 年前

    如果这个bug足够重要的话,就只有一个。

    推荐文章