Proven by Intelligence
보이지 않는 안전을 인텔리전스로 증명하다.
기술 인사이트를 만나보세요.
안녕하세요. 🤗
임베디드 소프트웨어 검증 센터를 운영하고 있는 MDS인텔리전스 입니다.
혹시~? 앞의 이어지는 글을 확인하셨나요? 아래 콘텐츠를 확인해 보시고 오시면 이해가 쏙쏙! 👍
🔎 연재글 [SW검증센터] Code Coverage 중요성과 오해(1)
앞선 내용에서는 코드 커버리지에 대한 중요성에 대해 알아보았습니다. 소프트웨어 관련 표준에서 코드 커버리지에 대한 부분이 필수적으로 언급되다 보니 소프트웨어 검증 과정에서 개발자들로부터 이러한 질문을 많이 접하게 됩니다.

Code Coverage를 몇 퍼센트 달성해야 합니까?


Code Coverage를 100% 달성하지 못했는데 어떻게 하죠?

코드 커버리지 자체가 동적 검증 중 중요한 항목이기 때문에 간혹 코드 커버리지 달성률을 소프트웨어 품질 자체로 오해하는 상황을 흔하지 않게 볼 수 있습니다.
물론 코드 커버리지 달성률과 테스트 품질을 완전히 나누어 이야기할 수는 없습니다. 코드 커버리지 달성률이 높으면 높을수록 소프트웨어 내에 결함을 발견할 확률이 높아지고 소프트웨어 품질 또한 높아지게 되지만, 높은 코드 커버리지 달성률이 테스트가 잘 되었다고 보장할 수는 없습니다.
코드 커버리지의 진짜 의미
두 가지의 예제 코드를 살펴보겠습니다.

첫 번째 코드는 Statement 커버리지를 100% 만족하는 사례입니다. 3개의 데이터를 0으로 초기화하는 기능을 구현한 것입니다. 하지만 코드를 자세히 살펴보면 전체 데이터를 초기화하지 못하고 첫 번째 데이터만 초기화가 되는 결함이 존재합니다. 물론 개발자가 의도한 코드일 수 있지만, 실수로 만들어진 결함일 수 있습니다. 만약 Statement 커버리지가 100%인 것을 확인하고 테스트를 종결했다면 테스트가 제대로 되었다고 볼 수 있을까요? 실수로 작성된 코드라면 결함이 코드 상에 그대로 남아있게 될 것입니다.

두 번째는 코드는 메모리 할당을 시도하고, 이를 실패할 경우 로그를 남기도록 구현되어 있습니다. 로그를 남기는 부분은 개발자가 만약을 대비해 만들어 놓은 방어 코드가 될 것입니다. 메모리 할당이 실패하는 경우가 존재하지 않는다고 가정한다면 방어 코드는 실행되지 않고 Statement 커버리지는 당연히 100%가 될 수 없습니다. 그렇다면 이 코드는 위의 Statement 커버리지를 100% 달성한 코드보다 소프트웨어 품질이 떨어지는 것일까요?

좋은 테스팅은 무엇일까?

그렇다면 좋은 테스팅. 제대로 된 테스팅은 무엇일까요? 그동안의 예를 종합하면 이렇게 요약할 수 있을 것입니다.
첫째, 충분한 테스트를 통해 코드 커버리지를 최대한 확보할 것
둘째, 코드의 실제적인 기능을 고려하여 정상작동을 하는지 확인할 것
결국 제대로 된 테스트를 수행하기 위해서는 충분한 테스트케이스를 이용해 버그 발견 확률을 최대로 끌어올리는 동시에, 꼼꼼한 코드 리뷰를 통해 잠재적인 결함을 발견해 내는 것이 중요합니다. 그렇기에 제대로 된 코드 리뷰 수행 능력과 코드 커버리지를 손쉽고 정확하게 측정할 수 있는 도구의 뒷받침이 성공적인 테스트의 요인이 됩니다.

MDS인텔리전스 소프트웨어 검증센터에서는 성공적인 소프트웨어 검증을 위한 높은 역량의 테스트 엔지니어들이 준비되어 있습니다. 소프트웨어 품질 향상을 위해 소프트웨어 검증을 준비하고 계신다면 MDS인텔리전스의 노하우를 경험해 보시기 바랍니다.
소프트웨어 검증에 도움이 필요하시거나,
기타 문의사항이 있으시다면 sve@mdsit.co.kr로 문의 메일 부탁드립니다.
MDS인텔리전스 소프트웨어 검증센터에서는 다양한 검증 영역에 대해 도움을 드리고 있습니다.

MDS인텔리전스
임베디드 소프트웨어 고품질 및 신뢰성 확보를 위한, SW 검증센터
E. sve@mdsit.co.kr
