Верхний предел ошибок в данной программе - PullRequest
4 голосов
/ 26 июня 2009

Существует ли верхний предел для количества ошибок, содержащихся в данной программе? Если число инструкций известно, можно ли сказать, что программа не может содержать более n ошибок? Например, сколько ошибок может содержать следующая функция?

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

Парсер будет считать в функции четыре члена, и я мог бы подсчитать следующие ошибки:

  • неправильный синтаксис номера
  • неверная процентная ставка (ошибка бизнес-требований)
  • неправильный расчет (следует умножить)
  • Потенциальное деление на ноль

Очевидно, что количество ошибок не бесконечно, учитывая конечное количество инструкций. В качестве альтернативы можно сказать, что функция принимает 2 ^ 64 входных данных, и сколько из них выдает правильный вывод. Однако есть ли способ формально доказать верхний предел?

Ответы [ 8 ]

4 голосов
/ 26 июня 2009

Если ошибка равна «требование, не выполненное программой» , то нет ограничения на количество ошибок (на строку или другое), поскольку нет ограничения на количество требований.

print "hello world"

Может содержать миллион ошибок. Это не создает розовый слон. Я оставляю читателю на усмотрение 999999 других требований, не удовлетворяемых этой программой.

2 голосов
/ 26 июня 2009

Количество инструкций не имеет ничего общего с тем, выполняет ли программа то, что хочет пользователь. Я имею в виду, посмотрите, как плохо GCC уравновешивает мою чековую книжку. Глючит, как все вылезают, прямо вниз, бесполезно!

1 голос
/ 26 июня 2009

Верхний предел - это число состояний, в которых может находиться ваша программа. Поскольку на реальных машинах это число конечно, вы можете нумеровать состояния от 1 до n. Для каждого состояния вы можете указать, является ли это состояние ошибкой или нет. Так что да, но даже небольшая программа, имеющая 16 байтов памяти, имеет 2 ^ 128 состояний, и проблема анализа всех различных состояний является неразрешимой.

1 голос
/ 26 июня 2009

Все это будет зависеть от того, как вы определяете «ошибку».

Если вы определяете программу как функцию от некоторого ввода к какому-либо выводу, а спецификацию - как определение этой функции, а ошибку - как любое отличие в выводе от спецификации для данного ввода, тогда да, вы можете предположительно иметь счетные бесконечные ошибки - однако это несколько бесполезное определение ошибки.

0 голосов
/ 26 июня 2009

Всего один, если ошибка достаточно существенная.

0 голосов
/ 26 июня 2009

Зависит от того, как вы считаете ошибки, что заставляет меня говорить: «Нет, нет предела». Я не знаю как вы, но я могу легко написать несколько ошибок в одной строке кода. Например, сколько ошибок в этом Java-коде? : -Р

public int addTwoNumbers(int x, String y)
{{
    z == x + y;
    return y;
}
0 голосов
/ 26 июня 2009

Закон программирования:

"If You will find all compile-time bugs, then n logical ones are still hidden, waiting to surprise You at run-time."
0 голосов
/ 26 июня 2009

Существует теоретический верхний предел для ошибок, но для всех программ, кроме самых тривиальных, его почти невозможно вычислить, хотя движки, такие как Pex , дают ему старую попытку колледжа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...