8 tips for squashing bugs using ASSERT in C


출처: 8 tips for squashing bugs using ASSERT in C

Tip #1. assertion의 정의를 기억하라

“Assertion은 프로그램 내에 버그가 없다면 프로그램의 특정 지점에서 참이어야 하는 불리언 식이다.”

assert의 정의로부터 3가지의 중요한 사항을 명심해야 한다.

  1. assertion은 true혹은 false의 식으로 평가한다.
  2. assertion은 code의 특정 지점의 시스템의 상태에 대한 가정이다.
  3. assertion은 참이 아니라면 code상의 bug를 드러나도록 하여 시스템의 가정(assumption)을 validation한다.

Tip #2. function precondition을 validate하기 위해 assert를 사용하라

26262-6의 기본적인 요건이기도 하다. 설계서에 포함시켜야 할 내용이다.

Tip #3. function post condition을 validate하기 위해 assert를 사용하라

26262-6의 기본적인 요건이기도 하다. 설계서에 포함시켜야 할 내용이다.

Tip #4. assert를 error handling의 목적으로 사용하지 말라

에러 처리와 assert를 혼동해서는 안된다.

에러처리는 양산용 버전에도 존재해야 하는 코드지만, assert 코드는 양산용 버전에는 없어져야 하는 코드이다.

Tip #5. assert는 양산용이 아닌 개발을 위해 의도된 것이다.

assert는 개발도중 소프트웨어의 문제를 쉽게 드러내도록 하기 위한 목적이다. 양산용 코드에는 포함되지 않는다. (물론 logging의 목적으로 사용할 수도 있겠다만..anyway)

Tip #6. side effect를 가지는 assertion을 하지 마라.

assert문 내에는 assignment, function call등이 사용되어서는 안된다. 왜냐면 양산용 코드에는 빠질 테니까

Tip #7. assert는 code의 1~3%가 되어야 한다.

assert문을 어느정도가 적당할지에 대한 해답은 0보다 커야 한다는 점. 적당하게 들어가 있으면 debugging하기가 쉬워진다.

Tip #8. assertion을 executable code comment로 사용하라.

assert는 훌륭한 주석이다!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s