내 토론을 위해 Bool은 True 또는 False의 두 가지 상태를 가질 수 있습니다. 다른 것은 프로그래밍 언어 사양에 부적합합니다. 공구 체인이 사양에 맞지 않으면 어떤 작업을 하든지 호스가 연결됩니다. 개발자가 상태가 2 개 이상인 Bool 유형을 만든 경우 코드베이스에서 마지막으로 수행 한 작업입니다.
옵션 A.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
옵션 B
if (var == true) {
...
} else {
...
}
옵션 B가 더 강력하다고 주장합니다 .....
모든 트위트가 예기치 않은 오류를 처리하도록 지시 할 수 있습니다. 그것들은 일단 생각하면 감지하기가 쉽습니다. 당신의 교수가 제시 한 예는 일어날 수있는 것이 아니므로 아주 좋지 않은 예입니다.
복잡한 테스트 하네스 없이는 테스트 할 수 없습니다. 만들 수 없다면 어떻게 테스트하겠습니까? 코드를 테스트하지 않았다면 어떻게 작동하는지 어떻게 알 수 있습니까? 작동하는지 모른다면 강력한 소프트웨어를 작성하지 않은 것입니다. 나는 그들이 아직도 그것을 Catch22라고 부른다고 생각한다.
옵션 B는 테스트하기가 쉽지 않습니다.
다음 문제는 교수님에게 "부울이 True도 False도 아닌 경우 어떻게 하시겠습니까?" 그것은 매우 흥미로운 토론으로 이어질 것입니다 .....
대부분의 경우 코어 덤프가 적절하며 최악의 경우 사용자를 성가 시게하거나 많은 비용이 듭니다. 예를 들어, 우주 왕복선 실시간 재진입 계산 시스템 인 경우 어떻게됩니까? 아무리 부정확하더라도 응답은 중단하는 것보다 나빠질 수 없으므로 사용자를 죽일 수 있습니다. 따라서 어떻게해야하는지에 대한 답이 틀렸다는 것을 알고 있다면 50/50으로 가거나 중단하고 100 % 실패로 가십시오. 내가 승무원이라면 50/50을 가져갈 것입니다.
옵션 A는 저를 죽입니다. 옵션 B는 저에게 생존의 기회를줍니다.
그러나 잠깐만 요. 그것은 우주 왕복선 재진입의 시뮬레이션입니다. 그렇다면 무엇입니까? 당신이 그것에 대해 알 수 있도록 중단하십시오. 좋은 생각 같나요? -아닙니다-배송하려는 코드로 테스트해야하기 때문입니다.
옵션 A는 시뮬레이션에 더 좋지만 배포 할 수는 없습니다. 쓸모없는 옵션 B는 배포 된 코드이므로 시뮬레이션은 실제 시스템과 동일하게 수행됩니다.
이것이 유효한 관심사라고 가정 해 봅시다. 더 나은 솔루션은 오류 처리를 응용 프로그램 논리에서 분리하는 것입니다.
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
추가 정보 -Therac-25 Xray 머신, Ariane 5 Rocket 실패 및 기타 (링크에 많은 링크가 끊어졌지만 Google에서 도움이되는 정보가 충분 함)