안녕하세요, FA분야에서 일하고 있는 반나무입니다.
FA분야에서 일하고 있다보니 제작하는 프로그램이 대부분 H/W(IO, PLC, Camera 등)에 종속되어있습니다. 하지만 프로그램은 기구가 없는 상황에서 제작 되어야 하고 그 뒤로 유지 보수를 진행할 때도 H/W가 없는 상태에서 S/W만 단일 실행해서 검사 결과를 뽑아내야 합니다.
저는 그런 상황에 놓일 때를 대비해 IsTestMode 라는 Property를 설정에 만들어 놓고 사용합니다.
아래 예시로 카메라를 Open하는 행위에서도 테스트 할 때는 H/W 구성 환경이 없다 보니 많은 부분이 제거된 상태로 테스트를 해야 합니다.
/// <summary>
/// 카메라를 Open하는 함수
/// </summary>
private void OnCamOpen()
{
try
{
_log.Info("카메라 Open 시작");
if (_settings.GeneralSettings.IsTestMode)
{
TestModeOpen();
}
else
{
InspectModeOpen();
}
}
catch (Exception ex)
{
_log.Error(ex.Message);
}
}
private void InspectModeOpen()
{
// TODO : DC 전원 입력
// 카메라 Open
CameraManager.CameraOpen();
// TODO : 검사 A
// TODO : 검사 B(IO가 사용됨)
}
private void TestModeOpen()
{
// TEST일 때는 POE로 전원을 인가해 사용하지않음
// 카메라 Open
CameraManager.CameraOpen();
// TODO : 검사 A
// 검사 B는 IO가 사용되기 때문에 하지않음
}
하지만 이런 방법은 Test용 Method와 실제 Method가 분리되며, Region으로 구분해도 소스 코드가 늘어나 보기가 불편합니다. 뭔가 불편하다고 느끼는 이유가 제가 좋지 않은 구조를 사용하고 있어서 그런 거 같단 생각에 글을 남깁니다.
어떤 게 명확한 답이다는 없을 것 같은 주제지만, 혹시 이런 다양한 H/W를 사용하며 테스트할 수 없는
환경일 때 다른 분들은 어떤 식으로 구조를 만들어 사용하시는지, 이런 구조에 대한 프로그래밍을 배울 수 있는 서적이 있는지 궁금합니다.