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

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중