본질적으로, 그러나 당신은 어쨌든 최선을 다해야합니다. 이유를 설명하겠습니다 (또는 인내심이 충분하지 않으면 결론으로 건너 뜁니다)
이진 검색의 구현만큼 사소한 문제를 고려하십시오. 매우 인기있는 구현 중 하나 는 약 20 년 동안 발견되지 않은 버그 가 있었습니다 . 버그가없고 널리 사용되는 것으로 20 개 라인이 20 년이 걸린다면, 실제로 큰 프로그램에 버그가 없을 것으로 예상 할 수 있습니까?
어쨌든 거대한 프로그램이 얼마나 많은 버그를 예상 할 수 있습니까? 내가 찾은 숫자 중 하나는 "1000 줄당 10 개의 결함"(517 페이지의 코드 완성 2 판-데이터를 인용하지 않고 예제를 사용한 것임)입니다. 다행히도 프로그램의 품질을 향상시킬 수있는 방법이 있습니다. 단위 테스트, 코드 검토 및 일반 수동 테스트는 버그 수를 줄이는 것으로 알려져 있습니다. 여전히 숫자는 여전히 높습니다.
우리가 믿을 수 없을 정도로 모든 버그의 95 %를 해결할 수 있다면. 그러나 우리는 여전히 소프트웨어에 10 만에서 15 만개의 버그가 있습니다.
다행히도 소프트웨어가 널리 사용되므로 널리 테스트되므로 버그가 발견 될 것입니다. 따라서 버그가 점차 줄어 듭니다. 그러나 버그가 적다는 것은 나머지 버그를 찾기가 어렵다는 것을 의미하므로 버그 수정에 선형 곡선을 기대하지 마십시오. 마지막으로 몇 가지 버그 찾기가 정말 힘들 것입니다 (그들은 가정하에 몇 년 동안 탐지를 피할 수있는 지금까지 발견).
또한 소프트웨어가 변경되지 않으면 새로운 버그가 나타나지 않는다고 가정하는 실수가있는 것 같습니다. 소프트웨어가 타사 라이브러리에 의존하는 경우 새 버전은 일부 기능을 손상시킬 수 있습니다. 응용 프로그램 코드가 여전히 동일하더라도 새로운 버그가 발생할 수 있습니다. 새로운 운영 체제는 이전에 완벽하게 작동했던 응용 프로그램을 손상시킬 수도 있습니다 (일반적인 예는 Windows Vista 참조). 컴파일러 버그 등도 고려하십시오.
코드 교정 도구가 버그가있는 소프트웨어의 문제를 진정으로 해결할 수 있는지 여부는 확실하지 않습니다. 어떤 프로그램에서든 정지 문제 를 해결할 수는 없지만 프로그램이 지정된대로 작동 함을 증명할 수 있습니다. 어쩌면 증명 프로그램에 버그가있을 수 있습니다. 사양 자체에 버그가있을 수 있습니다.
따라서 버그 수를 크게 줄일 수는 있지만 실제로 제로가 될 가능성은 거의 없습니다.
모든 수정 사항이 더 많은 버그를 생성 한다는 개념이 있기는 하지만 이것이 사실이라고 생각하지 않습니다.
(강조 추가)
당신이 올바른지. 이 진술은 잘못되었습니다. 예를 들면 다음과 같습니다.
int main() {
int x[10];
x[10] = 8; //Buffer overflow here
return 0;
}
이제이 버그를 수정 해 봅시다 :
int main() {
int x[11];
x[10] = 8; //No buffer overflow here
return 0;
}
보다? 우리는 버그를 수정하고 새로운 버그를 도입하지 않았습니다.
그러나 버그를 수정할 때마다 새로운 버그를 생성 할 위험이 있지만,이 위험을 완화 할 수 있습니다 (예 : 단위 테스트 등).
내가 고치는 100 개의 버그마다 우연히 새로운 버그를 소개한다고 가정 해 봅시다. 10 만개의 버그를 고치면 100 개의 새로운 버그가 생깁니다. 새로운 버그를 수정하면 하나의 버그를 소개합니다. 그러나 무엇? 이 프로그램은 버그가 9,999 개 적으므로 이전보다 버그가 10000 배나 높다고 가정했을 때보 다 더 나을 것입니다.
또한 버그를 수정 하면 새로운 버그가 노출 될 수 있습니다. 그러나 이러한 버그도 수정 될 수 있습니다. 올바르게 작업하면 결국 소프트웨어가 시작된 것보다 나은 상태가됩니다.
나는 OP에서 언급 한 개념으로 인해 많은 버그를 수정하지 않는 것이 더 좋은 몇 명의 최고 프로그래머에 의해 늙었습니다.
이 동작은 무시됩니다. 버그가 있으면 고칠 수 있습니다. 해. 물론 새로운 버그를 추가하지 않도록 최선을 다해야하지만 내가 고쳐야 할 10 개의 심각한 버그마다 작은 버그 하나를 도입하면 버그 수정을 중단 할 수있는 정당한 이유가 아닙니다. 실제로 버그를 수정 하는 것이 좋습니다 .
더 적은 버그를 수정하면 앞으로 더 적은 버그가 다시 나타납니다.
수정하는 버그가 적을수록 소프트웨어에 더 많은 버그가 남아 사용자를 성가 시게합니다. 실제로, 그들은 "미래에 당신에게 돌아 오지 않을 것"입니다. 그들은 처음부터 떠나지 않았기 때문에 돌아 오지 않을 것입니다. "복귀"라는 개념은 회귀와 관련이 있습니다. 다시, 회귀의 위험을 줄일 수 있습니다.
사람들이 버그에 의존하기 시작하여 버그를 수정하면 해당 사용자의 프로그램이 중단 될 수 있기 때문에 일부 버그는 널리 사용되기 때문에 수정할 수 없습니다. 일어난다. 그러나이 경우 실제로 버그로 간주 될 수 있습니까?
"버그 수정, 버그 만들기"사고 방식은 그 끔찍한 괴물 과 관련이있을 수 있습니다. 그 코드는 읽을 수없고 관리 할 수없는 코드만으로 버그를 만듭니다. 코드베이스에 몬스터가있는 경우, 어떤 작업을 수행하기 전에 먼저 몬스터를 해제해야합니다.
마지막으로, 당신이 끔찍한 프로그래머라면, 만지는 것이 새로운 버그 를 일으킬 위험이 있습니다 . 이것은 분명히 상급 프로그래머를 긴장하게 만들 것입니다. 그러나 "아무것도하지 마십시오. 아무것도 만지지 마십시오. 숨을 쉬지 마십시오"라고 말합니다. 건강한 작업 환경을 조성하는 올바른 방법이 아닐 수도 있습니다. 교육이 더 좋습니다.
결론:
- 수많은 새로운 기능을 계속 제공하지만 버그 수정이없는 소프트웨어는 필연적으로 빨라질 것입니다.
- 적당한 수의 새로운 기능을 갖지만 버그가 수정 된 소프트웨어는 사용 가능성이 더 높습니다.
- 버그가 거의없는 사람들은 관심이없는 사람들보다 평균적으로 버그가 적습니다.
- 프로그램이 결국 버그가없는 것으로 기대하는 것은 합리적이지 않습니다.
- 선임 프로그래머가 반드시 유능한 것은 아닙니다.
- 버그를 수정하십시오.
- 소프트웨어의 품질을 향상시키는 방법론을 채택하십시오.