자바와 스프링 프레임워크에 대해 공부를 하면서 펌웨어 개발에 대한 한계를 많이 느낀다. 나의 경험과 실력이 부족한 탓도 있겠지만, 객관적으로 바라봤을 때 펌웨어 개발 환경 자체의 한계가 분명히 존재하는 것 같다. 펌웨어 개발자로써 이러한 문제점들을 파헤쳐보고, 어떻게 하면 펌웨어 개발 환경을 개선시킬 수 있을지 고민해본다.
펌웨어는 테스트를 자동화하기 어렵다.
펌웨어는 하드웨어와의 접점에 있는 소프트웨어다. 기본적으로 하드웨어 디바이스에 탑제되어 버튼, LED 등을 통해 외부 물리적인 공간과 소통한다. 그렇기 때문에 버튼이 눌러지는 것을 펌웨어 쪽 코드가 정상적으로 인지하는지 확인해보기 위해선 실제로 펌웨어를 디바이스에 올린 후 버튼을 눌러봐야 한다. 이런 물리적 공간에서 어느정도의 테스트 자동화를 이루기 위해선 jig라는 도구를 만들어 사용해야 한다.
Mocking
하드웨어 쪽에서 물리적으로나 회로적으로 결함이 없다고 가정할 때 버튼 눌림을 mocking해서 테스트를 만들어 볼 수는 있겠다. 하지만 output 결과를 보여줘야 하는 코드에 대한 테스트는 mocking하기가 어렵다. 예를 들어 고주파 전기자극을 보내는 디바이스의 펌웨어를 개발한다고 해보자. 펌웨어는 특정 주파수로 파형의 전기자극을 외부로 흘러보내야 한다. 이 때 이것을 mocking하여 원하는 파형이 제대로 나오는지를 테스트 하는 것은 쉽지 않다. 실제 전류가 잘 흐르는지를 측정하기 위해서는 몇천만원 하는 오실로스코프를 자극 부위에 연결해서 확인해 봐야 한다.
내가 주로 사용하고 있는 MCU는 nRF52832로 성능은 64 MHz 이다.
펌웨어의 세계는 좁은 것 같다. 온라인으로 내가 직면한 이슈에 대한 정보를 찾기가 쉽지 않다.