Embedded C에서 TDD를 실천하기 위해 시도했던 경험과 방법을 기록해 보았습니다.
HW로부터 생기는 버그인지 SW로부터 생기는 버그인지 짐작조차 되지 않는 상황이 자주 발생한다면, TDD를 시작해보세요.
이 자료에서는 호스트 시스템(PC)에서 TDD를 실천하는 방법과 타깃 시스템(nRF51-DK)에서 TDD를 실천하는 방법을 기록하였습니다.
또한, nRF51-DK가 아닌 다른 보드를 가지고 있더라도 실천 가능합니다.
ktim610@gmail.com
2. • 평범한 학부생이 Embedded C에서 TDD를 실천하기 위해 시도했던 경험과 결과물입니
다.
• 정답이 아닐 수도 있지만, 임베디드 개발을 하면서 느꼈던 폐쇄적인 정보 공유가 조금이
라도 개방 되었으면 하는 바람으로 작성하였습니다.
3. • 개발 환경
• Windows 10
• 타깃 보드 : nRF51-DK
• 타깃 시스템 환경
■ SDK version : SDK 10
■ Soft Device version : soft device 110
■ Compiler : arm-none-eabi-gcc 4.9.3
• TDD를 시작하기에 앞서 타깃 시스템 개발 환경이 구축되어있지 않다면, 먼저 다른 예제
를 통해 환경을 구축하고 시작 하시는 것을 권장합니다.
• nRF51-DK 환경 구축(Link1, Link2)
4. TDD 실행에 앞서 Embedded C에서 쓰이는 unit test framework는 뭐가 있을까요?
19. Ceedling - TDD
• ..../TDD/test/support에 테스트에 필요한 파일을 추가 해주면 별도의 경로
지정 없이 code 내에서 include 가능합니다.
• Assert 함수는 ..../TDD/vendor/ceedling/vendor/unity/src/unity.h에서
확인 가능합니다.
• SUT와 Test code를 수정하면서 TDD를 진행하면 됩니다.
• Ceedling의 자세한 사용법은 여기를 참고해주세요.
20. Ceedling은 프로젝트 생성, 모듈 추가 그리고 테스트 환경 구축까지
빠른 주기로 실행 가능한 강력한 Bootstrapping Tool입니다.
21. 그렇다면, 호스트 시스템(PC)이 아닌 타깃 시스템(nRF51-DK)에서 실행되는 테스트 코드는
어떻게 실행 결과를 확인할 수 있을까요?
22. 타깃 시스템 - Unity framework
• 복잡한 동작 방식과는 관계없이 최종적으로 Unity framework는 출력 함수
putchar() 를 통해 테스트 결과를 출력하는 기능을 가지고 있습니다.
UNITY
23. 타깃 시스템 - 출력 함수
• 그렇기 때문에, 테스트 결과를 PC에서 출력하는 방법은 간단합니다.
• 타깃 시스템이 putchar() 함수를 지원하도록 하거나,
• Unity framwork에서 출력 함수 putchar() 를 타깃 시스템이 지원하는 출력 함수로 대체 합
니다.
UNITY
putchar() write()
24. 타깃 시스템 - nRF51-DK
• nRF51-DK는 <stdio.h> 파일을 include 하여 putchar()함수를 지원합니
다.
putchar()
37. 마지막 절차인 타깃 시스템이 보낸 테스트 결과를 시리얼 터미널로 확인 가능하게 되었습니다!
이제는 하드웨어에 의존적인 부분까지도 TDD를 실천할 수 있습니다.
Text color, 출력 옵션, Test code 추가 등 TDD를 진행하면서 궁금한 점은 여기를 참고해주세
요.
38. 임베디드 시스템에서 TDD를 실천하는 것은 도전적이라고 생각합니다.
열악한 디버깅 환경에서
SW로부터 발생하는 문제인지,
HW로부터 발생하는 문제인지,
확인조차 되지 않는 일이 매일 같이 발생합니다.
TDD를 실천함으로써 HW와 SW 경계가 명확해지고,
설계는 더욱 개선됩니다.
이 자료가 정답이 아닐 수도 있지만,
조금이라도 도움이 되어 즐거운 TDD 라이프가 만들어지면 좋겠습니다.
39. 또한, 임베디드 개발자는 컴파일러, 타깃 시스템 등 특성을 많이 타고
범용적이지 않은 상황을 자주 마주하게 됩니다.
그때마다 서로의 경험을 공유하고 지식을 나눈다면,
더 많은 임베디드 개발자분들이 더 신뢰가 가고 안정적인 프로젝트를 만들지 않을까 싶습니다.