어쨌든 그렇게 복잡하지는 않습니다. 상태 머신 코드는 매우 간단하고 짧습니다.
변수에 상태를 저장합니다. myState라고 가정합니다.
상태 머신은 각 상태에 대한 코드를 실행하기 위해 myState 변수 값을 분기하는 switch 문이됩니다.나는이 제안 상태 전이 요구 사항을 적용하려면
myState = newState;
, 당신이
void DoSafeStateTransition(int newState)
{
// check myState -. newState is not forbidden
// lots of ways to do this
// perhaps nested switch statement
switch(myState) {
…
case X: switch(newState)
case A: case B: case Z: HorribleError(newState);
break;
...
}
// check that newState is not undetermined
switch(newState) {
// all the determined states
case A: case B: case C … case Z: myState = newState; break;
default: HorribleError(newState);
}
}
void HorribleError(int newState)
{ printf("Attempt to go from %d to %d - disallowed\n",
myState, newState);
exit(1);
}
처럼, 대신 호출 약간의 방법을 추가해야합니다
코드는 다음과 같은 라인의 모든 것 간단하고 충분히 짧은 검사는 단위 테스트보다 더 나은 일을 할 것입니다 - 확실히 더 빠를 것입니다!
단위 테스트의 요점은 테스트 코드가 테스트 된 코드보다 간단하므로 정확성을 검사하기가 쉽고 복잡한 코드를 테스트하는 데 사용된다는 것입니다. 상태 머신 테스트 코드보다 상태 머신 코드를 확인하는 것이 더 쉽습니다. 단위 테스트가 정확한지 거의 알지 못할 때 100 % 단위 테스트 단계를보고하는 데 많은 의미가 없습니다.
다른 방법으로 말하자면, 상태 머신을 코딩하는 것이 쉽고, 올바른 것을 설계하는 것이 어렵습니다. 단위 테스트는 설계가 올바로 코딩되었는지 여부 만 알려주며, 설계가 올바른지 여부는 알려주지 않습니다.
검색 – bobah