다른 사람들이 버그를 보았을 때 문제를 해결합니까, 아니면 수정하기 전에 충돌 / 데이터 손실 / 사람이 죽을 때까지 기다 립니까?
실시 예 1
Customer customer = null;
...
customer.Save();
이 코드는 분명히 잘못되었으며 그 주위에 방법이 없습니다-null 참조에서 메소드를 호출합니다. Save
인스턴스 데이터에 액세스하지 않기 때문에 충돌이 발생하지 않습니다 . 정적 함수를 호출하는 것과 같습니다. 그러나 아무 데나 작은 변화가 있으면 갑자기 코드가 깨져서 충돌하지 않습니다.
그러나 코드를 수정하는 것도 생각할 수 없습니다 .
Customer customer = null;
...
customer = new Customer();
try
...
customer.Save();
...
finally
customer.Free();
end;
수 소개 충돌; 하나는 완전한 적용 범위를 가진 단위 테스트와 수동 사용자 테스트를 통해 발견되지 않았습니다.
실시 예 2
float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2);
물리학을 아는 사람들은 그것이 분모에서 R 2 이어야한다는 것을 인식 할 것 입니다.
코드가 잘못되었습니다. 절대적으로 잘못되었습니다. 그리고 속도를 과대 평가하면 레트로 로켓이 너무 빨리 발사되어 우주선의 모든 탑승자를 죽일 수 있습니다.
그러나 속도를 과대 평가하여 다른 문제를 숨기고있을 가능성도 있습니다. 셔틀이 너무 빨리 움직이는 동안 에어백을 배치 할 수 없습니다. 코드를 갑자기 수정하면 :
float speed = 0.5 * ((G * mass1 * mass2) / Pow(R, 2)) * Pow(time, 2);
이제 속도가 정확하고 갑자기 에어백이 전개되어서는 안됩니다.
실시 예 3
다음은 최근에 문자열에 유효하지 않은 문자가 포함되어 있는지 확인한 예입니다.
if (StrPos(Address, "PO BOX") >= 0)
{
//Do something
}
Do something
지점에 버그가 있다고 판명되면 어떻게해야 합니까? 명백히 잘못된 코드 수정 :
if (StrPos("PO BOX", Address) >= 0)
{
//Do something
}
코드를 수정하지만 버그가 발생합니다.
내가 보는 방식에는 두 가지 가능성이 있습니다.
- 코드를 수정하고 그것을 깨뜨린 것에 대한 비난을 받는다
- 코드가 충돌하기를 기다렸다가 버그가 있다고 비난받습니다.
무엇을 당신은 정치적으로합니까?
예 4-오늘날의 실제 버그
객체를 생성하고 있지만 잘못된 생성자를 호출합니다.
Customer customer = new Customer();
"매개 변수없는"생성자는 상속 체인에서 다시 매개 변수화 된 생성자임이 밝혀졌습니다.
public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null)
public Customer(InjectedDependancy depends)
그것을 호출하는 것은 실수입니다. 왜냐하면 모든 후속 생성자를 무시하기 때문입니다.
위험한 생성자를 노출시키지 않도록 객체의 계보를 변경할 수 있지만 이제 코드를 다음과 같이 변경해야합니다.
Customer customer = new Customer(depends);
그러나 나는이 변화가 아무것도 깨지지 않을 것이라고 보장 할 수 없습니다. 위의 예제 1 과 마찬가지로 어딘가에 어떤 난해한 조건 하에서 누군가 Customer
가 유효하지 않고 정크로 가득 차도록 구성 되어 있습니다.
아마도 Customer
객체가 올바르게 구성되었으므로 이전에는 없었던 코드를 실행할 수 있으며 충돌이 발생할 수 있습니다.
부인의 인생은 그럴 수 없어
그리고 여기에서 화요일까지 시험해 볼 수 있습니다. 나는 회귀를 소개하지 않은 딸의 삶을 맹세 할 수 없습니다.
나는 :
- 코드를 수정하고 그것을 깨뜨린 것에 대해 비난 받습니까? 또는
- 버그를 남겨두고 고객이 발견하면 비난을 받습니까?