본문 바로가기

computer/develop

Progress before hardware By: James Grenning


Embedded software engineers는 보통 H/W, S/W가 동시(concurrent)에 개발된다.
그럼 S/W는 어떻게 H/W가 나오기 전에 Test되어야 하는가?

Jack Granssle says
The only reasonable way to build an embedded system is to start integrating today...The biggest schedule killers are unknowns; only testing and running code and hardware will reveal the existence of these unknowns.
Test and integration are no longer individual milestones; they are the very fabric of development.
  • TDD + OOD(C++) "Interface"(Mock)를 사용하면 Interface layer를 사용하여 H/W와 분리 할 수 있다.
  • Embedded S/W
    • The development machine are often differnt from the target machine.
    •  일반 APP의 문제 + a
      • real-time constaraints (timing constraints)
      • concurrent processing (concurrency)
      • resource constraints such as limited memory space or processing power are the norm.
      • testing a large application
  • 그림추가할것
  • 소스
TEST(HomeGuard, WindowIntrusion)
{
    MockAlarmPannel *pannel = new MockAlarmPanel();
    HomeGuard hg(pannel);

    hg.arm();
    hg.windowIntrusion();
    CHECK(true == pannel->isArmed());
    CHECK(true == pannel->isAudibleArmedOn());
    CHECK(true == pannel->isVisualAlarmOn());
    CHECK(pannel->getDisplayString() == "Window Intrusion");
}


  • Embedded TDD Cycle
그림 추가 할것(ppt의 새로운 그림)
      1. Quickly add a test
      2. Run all the tests and see the new one fail
      3. Make a little change
      4. Run all the tests and see the new one pass
      5. Refactor to remove duplicateion
그림 추가 Embedded TDD Cycle (Target Compile 포함)

결론
real H/W에서 모든 시나리오에 대한 자동화된 시험은 이루어질 수 없다. 자동화된(automated) Tests와 수동(manual) Tests가 같이 수행되어야 한다.(보드 탈장등을 자동화 할 수는 없다.)
하지만, 테스트 환경안에서는 임의로 상태나 이벤트를 발생시킬 수 있으므로 모든 시나리오를 자동화 할 수 있다.



소스 참고 : http://fitnesse.org/FitServers.CppFit.CppTestTools
연구 : 그럼 원 소스가 C인 경우 어떻게 Mock를 생성하여 Test할 수 있는가? 위 소스내의 예제를 살펴보자.