2009-06-26 4 views
4

주어진 프로그램에 포함 된 버그 수의 상한선이 있습니까? 명령어의 수가 알려지면 프로그램에 'n'개 이상의 버그가 포함될 수 없다고 말할 수 있습니까? 예를 들어 다음 함수에 몇 개의 버그가 포함될 수 있습니까?주어진 프로그램의 버그 상한선

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

파서 함수에 네 개의 용어를 계산 것이고, 나는 이러한 오류 셀 수 : (

  • 잘못된 번호 구문
  • 잘못된 금리 (비즈니스 요구 사항 오류)
  • 잘못 계산 곱해야 함)
  • 0으로 나누기 가능성

제한된 수의 명령어가 주어진다면 분명히 버그 수는 무한하지 않습니다. 또는 함수가 2^64 입력을 받아 들일 수 있으며, 그 중 몇 개가 올바른 출력을 생성 하는지를 말할 수 있습니다. 그러나 공식적으로 상한을 증명할 수있는 방법이 있습니까?

+0

하나의 명령어로 무엇을 정의합니까? –

+0

어, 2^8 = 256 복식보다 훨씬 많습니다!? –

+1

"Bug"및 "Error"라는 단어를 동일한 것으로 사용하십시오. 구문 분석기에서 파생 된 구문 오류, 런타임 오류 (버그), 논리 오류 (버그) 및 설계 오류 (결함)가 있습니다. 내 정의가 귀하의 것과 일치하지 않을 수 있지만 문제와 발견 방법이 다릅니다. 버그로 간주되는 시점과 그 결과는 질문에 대한 궁극적 인 대답을 변경합니다. 질문에 대해 적어도 두 개의 "버그"카운트가 있으며, 실행중인 프로그램과 런타임에 발생하는 프로그램을 중지시키는 소스 코드의 오류가 있습니다. – Paxic

답변

4

"프로그램에서 요구 사항을 충족하지 못함"인 경우은 요구 사항 수에 제한이 없으므로 줄 수 또는 기타 수의 제한이 없습니다.

print "hello world" 

백만 개의 버그가있을 수 있습니다. 그것은 분홍색 코끼리를 만들지 않습니다.나는이 프로그램에 만족하지 않는 999999 다른 요구 사항을 생각해 내기 위해 독자에게 맡긴다.

+3

"분홍색 코끼리가 생기지 않습니다." 파일의 마지막에 개행 문자가 없으면 분홍색 코끼리가 생성 될 수 있습니다 (정의되지 않은 동작). –

0

버그에 대한 이론적 인 상한선이 있지만 대부분의 사소한 프로그램을 제외하고는 계산하기가 거의 불가능합니다. 그러나 engines such as Pex은 오래된 대학 시도를합니다.

+0

이론상의 한계는 무엇입니까? – bdonlan

+1

간단한 신청을 하시겠습니까? 어디서 구문 오류가 발생할 수 있습니까? –

2

지침의 수는 프로그램이 사용자가 원하는 것을 수행하는지 여부와 관련이 없습니다. 내 말은, GCC가 나의 수표 책을 어떻게 균형 잡히게하는지 보자. 버기는 모두 나가서, 쓸모없는 오른쪽 아래로!

1

이것은 모두 '버그'정의 방법에 따라 다릅니다.

일부 입력에서 출력으로 함수를 정의하고 해당 함수의 정의로 사양을 지정하고 주어진 입력에 대한 사양의 출력 차이가있는 버그를 정의하면 아마도 무한한 버그가있을 수 있습니다. 그러나 이것은 버그에 대한 다소 쓸데없는 정의입니다. 프로그램의

0

법 :.

"If You will find all compile-time bugs, then n logical ones are still hidden, waiting to surprise You at run-time." 
1

상한이 숫자는 1부터 n까지 상태를 번호를 수있는 실제 시스템에 유한하기 때문에 프로그램이 될 수있는 상태의 수입니다. 이 상태가 버그 일 경우 각 상태에 대해 레이블을 지정할 수 있습니다. 그렇습니다. 그렇지만 16 바이트의 메모리를 가진 작은 프로그램조차도 2^128 개의 상태를 가지며 모든 다른 상태를 분석하는 문제는 다루기가 어렵습니다.

0

버그를 계산하는 방법에 따라 다르므로 "제한이 없습니다"라고 말할 수 있습니다. 나는 너에 대해 모른다. 그러나 나는 을 쉽게 쓸 수있다. 같은 줄의 코드에 몇개의 버그를 써라. 예를 들어이 Java 코드에 몇 개의 버그가 있습니까? :-P

public int addTwoNumbers(int x, String y) 
{{ 
    z == x + y; 
    return y; 
} 
0

버그가 충분히 중요하면 하나는 적습니다.