정적코드분석/코딩표준

코딩 표준에서 continue 문을 지양하는 이유

JSF AV C++ Coding Standard에서는 continue 문 사용을 금지하고 있습니다. 그런데 왜 사용 금지하는지 이유를 적어놓지는 않았습니다. MISRA-C:2004 14.5(MISRA-C:1998 58번)을 봐도 사용하지 말라는 말 딱 한 마디만 적혀있고, 가타부타 이유를 대지 않습니다. 불친절한 것들.. -_-

continue와 knot count

굳이 이유를 들자면, 제어 흐름이 복잡해져서 가독성 및 유지보수성이 안 좋아지기 때문입니다. 제어흐름의 복잡성에 대한 메트릭은 Cyclomatic Complexity 가 있지만?또 하나의 메트릭을 소개하자면 바로 Knot Count 입니다.?Knot Count는 제어 흐름 사이에 피할 수 없는 교차점의 갯수죠.

이것이 knot count
이것이 knot count

어떤 프로그램 P에 대해서 그래프를 그려봅시다. 하나의 Statement(구문)을 Vertex으로, 프로그램의 제어흐름을 Edge로 표현합니다. Edge는 모두 왼쪽 혹은 오른쪽으로 그려야 합니다. 이 그래프의 Edge의 교차점이 바로 Knot 이고, 이 Knot 의 수를 Knot Count라고 합니다.

실제 (이렇게 짤리는 없겠지만) 코드로 살펴보면, 아래의 소스 코드의 Knot Count는 5가 됩니다.

knot_count1

결론

이로서 JSF AV C++ 이나 MISRA에서 continue 문을 쓰지 말라는 이유는 명확해집니.

  1. continue문을 사용하면 Knot Count 수치가 높아집니다. 그 의미는 그만큼 코드가 복잡하다는 사실을 의미합니다.
  2. Readability와 Maintainability 가 힘들어집니다.
  3. continue 문은 다른 알고리즘으로 대체 가능합니다. 기왕이면 다른 알고리즘을 사용해야겠죠.

단, Safety-Critical 한 곳에만 사용하십시오. 일반 프로그램에도 이 규칙을 적용하면 프로그래머 입장에서는 힘들 수 있습니다.

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *