특정 상황에 발생하는 논리 오류 처리
업데이트: 2007년 11월
이 단원에서는 특정 상황에서만 발생하는 논리 오류를 찾는 방법을 배웁니다.
이전 단원 예상과 다른 동작: 논리 오류 찾기에서는 논리 오류를 찾아서 수정하는 방법을 배웠습니다. 해당 단원의 예제 코드에는 여전히 버그가 숨어 있었습니다. 이는 특정 상황에서만 발생하는 버그이므로 발견하기가 더욱 어렵습니다.
프로그램 테스트
프로그래머가 프로그램을 테스트하여 원하는 대로 작동하는지 여부를 확인하는 데는 기본적인 문제가 존재합니다. 프로그래머는 프로그램이 어떻게 작동하는지를 알기 때문에 실수를 통해 논리 오류를 발견할 가능성은 거의 없습니다. 그러나 프로그램에 익숙하지 않은 사용자는 프로그래머가 생각하지 못한 방식으로 오류를 발견할 수가 있습니다.
예를 들어 이동한 마일을 여행에 걸린 시간으로 나누어 시간 당 마일을 계산하는 프로그램에서 시간 또는 마일을 0으로 입력하면 어떤 결과가 나올까요? 직접 실행하여 확인해 봅시다.
실습
프로그램을 테스트하려면
이전 단원 예상과 다른 동작: 논리 오류 찾기에서 만든 LogicErrors 프로젝트를 엽니다.
참고: 이전에 만든 프로젝트를 완료하거나 저장하지 않았으면 먼저 돌아가서 해당 과정을 완료한 후 계속 진행해야 합니다.
F5 키를 눌러 프로그램을 실행합니다. 첫 번째 텍스트 상자에 0(분을 나타냄)을 입력하고 두 번째 텍스트 상자에 5(마일을 나타냄)를 입력한 다음 Button1을 클릭합니다.
메시지 상자에 "Average speed Infinity"라는 메시지가 표시됩니다.
다음 프로시저에서 논리 오류를 찾는 방법을 배울 것이므로 프로젝트는 계속 열어 둡니다.
5를 0으로 나누면 = 무한대?
이전 프로시저에서 "무한대"가 예상한 값은 아니었지만 5를 0으로 무한 번 나눈다는 것은 수학적으로는 올바른 결과입니다. 그러나 이는 프로그램 사용자가 원하는 결과는 아닙니다. 이러한 결과가 나오지 않게 하려면 어떻게 해야 할까요?
문제 해결 방법: 오류 처리 단원에서 배운 프로시저인 오류 처리기의 추가를 생각할 수 있습니다. 하지만 이 경우에는 이 방법이 작동하지 않습니다. "무한대"는 원하는 결과가 아닐 뿐 오류는 아니기 때문입니다.
속도가 0으로 표시되면 안 되므로 문제를 해결하는 한 가지 방법은 0 값에 대해 테스트한 다음 0보다 큰 값을 입력하도록 사용자에게 경고 메시지를 표시하는 것입니다. 이때 음수를 입력해도 잘못된 결과가 나올 수 있기 때문에 사용자가 음수 역시 입력하지 못하도록 해야 합니다.
다음 프로시저에서는 값이 0보다 큰 경우에만 GetMPH 함수를 호출하도록 Button1_Click 이벤트 처리기의 코드를 수정합니다.
실습
버그를 수정하려면
코드 편집기에서 Button1_Click 이벤트 처리기의 코드를 다음과 같이 변경합니다.
Dim minutes As Integer = CInt(Textbox1.Text) Dim miles As Double = CDbl(Textbox2.Text) Dim hours As Double = 0 If minutes <= 0 Or miles <= 0 Then MsgBox("Please enter a number greater than zero") Else hours = minutes / 60 MsgBox("Average speed " & GetMPH(miles, hours)) End If
F5 키를 눌러 프로그램을 다시 실행합니다. 첫 번째 텍스트 상자에 0을 입력하고 두 번째 텍스트 상자에 5를 입력합니다. 그런 다음 Button1을 클릭합니다.
0보다 큰 숫자를 입력하라는 메시지 상자가 나타나야 합니다. 수정된 버그가 만족스러울 때까지 다른 숫자를 조합하여 프로그램을 테스트해 보십시오.
다음 단계
이 단원에서는 예기치 못한 동작의 원인이 되는 논리 오류를 찾아서 수정하는 방법을 배웠습니다. 다음 단원에서는 코드에 주석을 사용하는 방법을 배웁니다.
다음 단원: 프로그램에 설명 넣기: 주석 사용