ac 기반 mcu 프로젝트에 어떤 단위 테스트 프레임 워크를 사용할 수 있습니까?


15

mcu 프로젝트에서 단위 테스트를 사용하는 방법과 단순화하기 위해 사용할 수있는 프레임 워크에 대해 생각하고 있습니다.

오늘은 Linux PC에서 OpenOCD-jtag와 함께 stm32를 사용하고 있습니다. 이곳은 모두 고전 Makefile에서 제어되고 gcc로 크로스 컴파일됩니다.

나는 스스로 무언가를 만들 수는 있지만 사용할 수있는 프레임 워크가 있다면 좋을 것입니다. (Jenkins / Hudson이 읽을 수있는 형식으로 프레임 워크가 결과를 출력 할 수 있다면 보너스입니다).

stm32와 함께 단위 테스트 프레임 워크를 사용하는 방법이 있습니까?


3
나는 완전한 답을 쓸 시간이 없지만 이 논문과이 블로그 시리즈 에서 볼 수있는 많은 도구와 기법 들을 사용했다 . 한마디로 : CMock!
케빈 베르메르

답변:


4

CppUTest와 James Grenning의 우수한 http://pragprog.com/book/jgade/test-driven-development-for-embedded-c를 확인하십시오.

CppUTest는 C 및 C ++를 지원하며, 꽤 빨리 시작할 수있는 멋진 Makefile 템플릿이 있습니다.


ePub 버전을 구입했습니다. 그것이 좋은지 알아보십시오 :)
Johan

이 책은 훌륭하지만, 그 책의 다른 틀인 통일성이 나의 필요를 더 잘 충족시킬 것이라고 생각합니다.
요한

책이 나를 올바른 방향으로 밀고 나서 받아 들여졌다.
Johan

5

상황에 가장 적합한 단위 테스트 프레임 워크를 결정하는 많은 변수가 있습니다. 선택에 영향을 줄 수있는 일부 항목은 다음과 같습니다.

  • 대상 언어
  • 사용 가능한 라이브러리 지원 예를 들어 libc 또는 이의 컷 다운 버전.
  • 대상의 운영 체제 예 : 없음, FreeRTOS, 사용자 지정

대부분의 xUnit 유형 프레임 워크는 유용한 기본 기능을 제공합니다. 나는 과거에 Cunit 을 약간의 성공으로 사용했습니다. (Ubuntu / Debian의 libcunit1-dev 패키지). 대부분의 프레임 워크는 libc를 사용할 수 있어야하고 일부는 추가 OS 지원이 필요합니다.

길이가 3 줄인 또 다른 대안은 Minunit 입니다.

테스트를 다운로드하고 실행 한 다음 결과를 얻는 데 적합한 환경을 제시 할 수 있어야하기 때문에 마이크로 컨트롤러를 대상으로 사용하는 단위 테스트가 상당히 번거로운 것으로 나타났습니다. 이 작업을 수행 할 수있는 플랫폼을 확보하는 것은 큰 작업입니다.

내가 취한 또 다른 접근법은 호스트에서 단위 테스트를 수행하여 드라이버와 응용 프로그램 코드 사이에 추상화 계층을 구현하는 것입니다. 대상에 gcc를 사용하고 있으므로 코드도 호스트에서 컴파일해야합니다.

호스트 OS와 모든 도구를 완벽하게 지원하므로 컴파일 호스트에서의 테스트는 일반적으로 훨씬 쉽습니다. 예를 들어, 호스트에서 테스트 할 때 대상에서 실행되는 실제 드라이버와 동일한 인터페이스를 가진 모형의 무선 드라이버 버전이 있습니다. 호스트 버전은 UDP 패킷을 사용하여 무선 패킷 전송을 시뮬레이션하며, 프로토콜을 테스트 할 수 있도록 패킷을 삭제하는 기능을 지원하는 모의 드라이버와 함께 제공됩니다.

내가 작업했던 제품에서는 스레드 OS가 사용 되었기 때문에 호스트 OS 테스트를위한 추상화 계층이 대신 pthread를 사용했습니다.

완벽하지는 않지만 테스트를 작성하고 실행하기가 더 쉬울수록 더 많은 테스트 사례를 구현할 가능성이 높습니다. 다른 플랫폼에서 코드를 실행하는 또 다른 이점은 코드가 이식 가능한지 테스트하는 것입니다. 대상 아키텍처와 호스트 아키텍처가 다른 경우 엔디안 실수를 신속하게 파악할 수 있습니다.

나는 이제 조금 벗어난 주제이지만, 이러한 아이디어가 테스트 프레임 워크 및 테스트 방법 선택에 도움이 될 수 있다고 생각합니다.


대상에서 코드를 얻는 방법을 해결했으며 스크립트 모드에서 gdb를 사용하여 test_ok 또는 test_fail ( fun-tech.se/stm32/TestSuite/index.php ) 과 같은 다른 중단 점에서 멈출 수 있습니다 . 그래서 나는 반쯤입니다. 이것은 다른 "테스트"를 작성하는 방법에 대한 질문입니다. 오늘 내 아이디어는 약간 융통성이 없어서 일종의 프레임 워크를 찾기 시작했습니다.
Johan

1

embUnit http://embunit.sourceforge.net/embunit/index.html을 확인하십시오 . 설치 공간이 적은 임베디드 C 단위 테스트 프레임 워크입니다.

우리는이를 임베디드 마이크로 컨트롤러 프로젝트에서 성공적으로 사용했습니다. 데스크탑 단위 테스트 프레임 워크에서 제공하는 옵션 및 기능을 기대하지 마십시오. 그러나 그것은 충분히 강력합니다.

그것은 당신을 위해 정의 된 어설 션을 가지고 있으므로 minUnit과 같은 사용자 지정 어설 ​​션을 작성하는 데 많은 시간을 낭비하지 않아도됩니다.


1

얼마 전 저는 Ceedling을 사용한 단위 테스트 (임베디드) C 응용 프로그램 주제에 대한 철저한 자습서를 작성했습니다 . 나는이 기술들을 많은 프로젝트에서 사용하고 있으며, 지금까지 매우 기쁘다.


2
이것은 링크 전용 답변이므로 URL이 변경되거나 링크가 다운되면 가치가 없습니다. 답변에 관련 정보 설명해야 하며 링크를 참조로 추가 할 수 있습니다.
파이프

2
@pipe 예. 그러나 질문 (제품 권장 사항)은 이와 같은 답변을 요구합니다.
Dmitry Grigoryev


-1

보푸라기를 시도하지만 단위 테스트, 코드 분석에 대해서는 생각하지 않습니다.


2
정적 코드 분석은 코드를 실행하고 테스트하는 데 도움이되지 않으므로 보풀이 없습니다.
Johan

1
단위 테스트 환경에서는 도움이되지 않지만 모든 종류의 정적 분석 도구를 사용해야합니다.
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.