출처 : Debugging Using Assertions - BlackWasp


What is an Assertion?

Assertion은 유용한 디버깅 툴을 제공한다. 프로그램의 실행시간에 Assertion을 수행한다. 모든 Assertion은 필수 조건, Boolean 조건을 갖으며 항상 true가 됨을 예측한다. 만약 조건이 거짓이 된다는 것은 가정이 잘못됬다는 것이고 코드에 버그가 있다는 것이다. 이 때 프로그램을 계속 진행시키는것 보다는 코드를 중지시키고 문제를 해결하는게 정신건강에 좋다.

개발하는 동안 Assertion을 활성화 시키지만 프로그램이 개발 완료되어 사용자에게 전달할 때에는 Assertion을 비활성화 시킨다. .NET 프로그램은 Release모드로 컴파일된 어셈블리는 자동으로 Assertion이 제거되어진다.

Assertion은 private 메소드의 precondition 과 postcondition을 검증하는데 사용되기도 한다.

Assertion은 단지 디버깅의 목적만으로 사용될 수 도 있다. Assert 되는 것을 프로그램의 정상적이지 않은 처리로 여겨진다. 또는 예외 처리 메소드로 사용되어진다.


Debug.Assert Method

Debug 클래스의 Assert 정적 메소드를 이용하면 C# 코드에서 쉽게 Assertion을 생성할 수 있다. Debug 클래스는 System.Diagnostics 네임스페이스에 있다.

다음은 간단한 콘솔 데모 프로그램이다.

Debug 클래스를 사용하는 클래스 파일 최 상단에 네임스페이스를 선언한다.

        using System.Diagnostics;


        public static void Main(string[] args)
        {
            string inputString;
            int minutes;
            do
            {
                Console.WriteLine("Enter a number of minutes to add.");
                inputString = Console.ReadLine();
            } while (!int.TryParse(inputString, out minutes));
            ShowTimePlusMinutes(minutes);
            Console.ReadLine();
        }

        private static void ShowTimePlusMinutes(int minutes)
        {
            Debug.Assert(minutes >= 0);
            DateTime time = DateTime.Now.AddMinutes(minutes);
            Console.WriteLine("In {0} minutes it will be {1}", minutes, time);
        }


 간단히 Debug.Assert 메소드에 Boolean 조건식을 매개변수로 전달하여 사용할 수 있다. 이 조건식이 참이면 Assert를 통과하고 거짓이면 Assert 실패 대화상자가 출력된다.
 위 예제에서 ShowTimePlusMinutes 메소드에 Assert 메소드가 있다. minutes 값이 0보다 크거나 같으면 다음 코드로 이동하고, minutes 값이 0보다 작으면 Assertion Failed 대화상자가 출력된다. 대화상자에는 Assert 한 곳에서의 stack trace 가 출력된다.



Assertion Failed 대화상자는 3개의 옵션 버튼을 갖는다.

1. Abort (중단)
: 프로그램이 즉시 중단되고 종료된다.

2. Retry (다시 시도)
: Assert 한 곳에서 부터 Debug 모드로 들어간다.

3. Ignore
: Assertion을 무시하고 프로그램을 계속 동작시킨다.


Adding Assertion Messages

위 Assertion Failed 대화상자를 보면 X 아이콘 옆이 비어있는것을 볼 수 있다. Assert 메소드의 두 번째 매개변수를 전달하면 X 아이콘 옆에 설정한 메시지가 출력된다.

Debug.Assert(minutes >= 0, "Minutes must be zero or more");

 


 

X 아이콘 옆에 자세한 메시지도 추가할 수 있다. Assert 메소드의 세 번째 매개변수를 이용한다.
Debug.Assert(minutes >= 0, "Minutes must be zero or more", "The number of minutes was " + minutes);



Demo Program


Posted by six605
,