Proven by Intelligence
보이지 않는 안전을 인텔리전스로 증명하다.
기술 인사이트를 만나보세요.
안녕안녕하세요. 🤗
임베디드 소프트웨어 검증 센터를 운영하고 있는 MDS인텔리전스 입니다.
이번 포스팅에서는 임베디드 소프트웨어 개발 프로세스와 테스트에서 단위 데스트 관련하여 알려드리겠습니다.
혹시~? 앞의 이어지는 글을 확인 하셨나요? 아래 컨텐츠를 확인해 보시고 오시면 이해가 쏙쏙! 👍
🔎 연재글 [SW검증센터] SW 개발 프로세스와 테스트(1)
개념과 목적
단위 테스트는 개발 프로세스에서 모듈 단계에 대응하는 테스트로 코드의 가장 작은 기능적 유닛이 의도한 대로 작동하는지에 대한 정확성을 테스트하는 기법입니다.
유닛의 기준은 함수, 서브 루틴, 속성, 메소드 등 다양하게 나눌 수 있습니다.
각 회사나 프로젝트마다 모듈 기준은 다르지만 단위 테스트는 독립적으로 격리가 되어진 상태인 모듈로 테스트가 수행되어야 하며, 만약 자동차 차량을 개발할 때에는 ISO26262에서 정의하고 있는 유닛 기준으로 테스트가 수행되어야 합니다.
계획 및 전략
단위 테스트는 소프트웨어 개발 과정에서 매우 중요한 부분입니다.
소프트웨어는 복잡한 시스템으로 구성되어 있고, 실제로는 하나의 소프트웨어에서 여러가지의 많은 작은 유닛으로 나누어져 있습니다.
이러한 작은 유닛이 잘 작동하지 않으면 전체 시스템의 동작에도 영향을 받게 됩니다. 그렇기 때문에 단위 테스트의 계획 및 전략은 중요합니다.
ISO26262는 자동차 개발 분야에서의 안전성을 보장하기 위한 표준 문서이며, 이 문서에서는 소프트웨어 및 전자 시스템의 안전성을 확보하기 위해 테스트의 중요성을 강조합니다.
PART6에서는 안전 기능을 위해 권장하는 테스트 검증 방법을 ASIL에 따라 설명하고 있습니다.
1. 소프트웨어 단위 시험 방법

단위 테스트 검증 방법 중에 모든 ASIL에서 필수 권장인 방법에 대해서 중점적으로 말씀드리겠습니다.
Static code analysis (정적 코드 분석)
실제 실행 없이 코드를 분석하는 기법으로 모든 레벨에서 수행하여 전체 시스템의 안정성을 보장하고 일정한 코딩 스타일을 유지할 수 있습니다.
Requirements-based test (요구사항 기반 테스트)
개발 단계에서 도출되는 요구사항에 기반하여 명세대로 만들어지고 요구된 기능만 포함되었는지를 확인하여 요구사항 추적성을 강화할 수 있는 테스트 기법입니다.
Interface test (인터페이스 테스트)
모듈 안에서 교환되는 데이터의 무결성에 대한 증거를 제공하기위해 사용하는 테스트 기법입니다.
2. 소프트웨어 단위 시험 테스트 케이스 생성 방법

Analysis of requirements (요구사항 분석)
요구사항에서 테이스트 케이스를 도출하는 방법으로 요구사항 간의 모순이나 누락된 부분을 발견하여 신속하게 해결할 수 있습니다.
또한 요구사항과 테스트 간의 강력한 연결성을 확립하여 요구사항 추적성을 강화할 수 있습니다.
Generation and analysis of equivalence classes (동치 클래스의 생성 및 분석)
입력 값의 범위를 여러 클래스로 나눠 각 클래스 마다 대푯값을 설정하여
테스트 케이스를 작성하는 방법입니다.
Analysis of boundary values (경계값 분석)
입력 값의 경계 부근에서 발생할 수 있는 오류를 식별하는 것을 테스트 목적으로 하여 일반적으로 입력 값의 범위 내에서 가장 작은 값, 가장 큰 값, 그리고 경계값 바로 이전과 이후의 값들을 선택하여 테스트 케이스를 작성하는 방법입니다.
앞에서 말씀드린 방법으로 테스트 케이스를 설계 후 소프트웨어 코드가 테스트 케이스에 의해 얼마나 많이 실행되었는지를 커버리지를 통해 측정합니다.
3. 소프트웨어 단위 시험 커버리지 기준

Statement coverage (구문 커버리지)
소스 코드의 각각의 문장이 테스트 케이스에 의해 실행된 비율을 나타냅니다. 코드의 모든 문장이 테스트 케이스에 의해 실행되었는지 여부를 확인하는 지표입니다.
Branch coverage (분기 커버리지)
분기점(branch)이 테스트 케이스에 의해 실행된 비율을 나타냅니다. 코드의 모든 조건문이 참(True), 거짓(False)로 실행되었는지 여부를 확인하는 지표입니다.
MC/DC (Modified Condition / Decision Coverage)
위 두개의 커버리지보다 더 강력하게 측정하는 커버리지 방법입니다.
각 개별 조건식이 다른 개별 조건식에 영향을 받지 않고 독립적으로 전체 결과에 영향이 미치는 조합이 테스트되었는지 확인하는 지표입니다.
지금까지 단위 테스트에 대해 알아보았고, 다음 블로그에서는 통합 테스트에 대한 내용을 알아보겠습니다.
더 구체적인 검증 서비스에 대해서 궁금하시거나, 기타 문의사항은 sve@mdsit.co.kr로 문의 메일 부탁드립니다.
