이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
Simulink Test Manager를 사용하여 결함을 주입하는 테스트 작성 및 실행
Simulink® Test™가 있다면, 결함 세트를 생성하여 테스트 케이스에 결함을 추가하고 이를 모델에 주입할 수 있습니다. 각 테스트 케이스에서, 결함 세트는 해당 테스트에 적용되는 활성 결함을 지정합니다. 모델에 결함을 추가하는 방법에 대한 자세한 내용은 결함 정의 및 모델링를 참조하십시오. 테스트 스위트 내에서 활성 결함의 다양한 조합을 사용하여 여러 테스트 케이스를 생성함으로써 다양한 조합을 시뮬레이션할 수 있습니다. 결함을 주입한 후, 시간적 평가를 통해 신호를 분석함으로써 해당 결함이 의도한 출력을 유발했는지 확인할 수 있습니다. Simulink Test에서 기본 테스트를 작성하는 방법에 대한 자세한 내용은 Baseline Testing (Simulink Test)를 참조하십시오.
Simulink Test Manager에서 결함 세트 생성
테스트 케이스에서 결함 세트를 생성하려면:
Simulink Test 앱을 실행하십시오. 앱 탭에서 Simulink Test를 클릭합니다.
Simulink Test Manager를 엽니다. 테스트 탭에서 Simulink Test Manager를 클릭합니다.
새 테스트 케이스를 생성하거나 기존 테스트 케이스를 불러오십시오.
결함 설정 섹션을 펼친 다음 추가 > Add Fault Set를 클릭하십시오.
새로운 결함 세트는 비어 있습니다. 결함을 추가하려면 결함 세트를 선택한 다음 추가 > 결함 추가를 클릭하십시오.
결함 세트를 추가한 후 모델에 결함을 추가하는 경우, 새로 고침를 클릭하여 Simulink Test Manager가 모델에서 식별한 결함을 업데이트하십시오. 각 결함이 서로 다른 모델 요소에 속해 있는 한, 여러 개의 결함을 추가할 수 있습니다. 확인을 클릭합니다. 결함 세트에는 각 결함 이름, 할당된 모델 요소 및 트리거가 표시됩니다.

Fault Set/Model Element 열에서 결함을 선택하여 시뮬레이션하십시오. 각 모델 요소는 한 번만 선택할 수 있으며, 각 모델 요소에는 하나의 결함만 선택할 수 있습니다. 모델 요소에 두 개 이상의 결함이 포함된 경우, 결함 이름 열의 목록을 펼쳐 다른 결함을 선택할 수 있습니다 (R2025a 이후).
테스트를 실행하면, 해당 테스트가 모델에 할당된 결함의 활성화 상태를 덮어씁니다. 결함 세트를 선택하지 않으면, 테스트는 모델에 지정된 결함 설정을 사용하여 시뮬레이션을 실행합니다. 결함 없이 테스트를 실행하려면 결함 세트를 선택하고 결함을 해제하십시오.
추가적인 결함 조합을 지정하려면 새 결함 세트를 생성하고 다른 결함 항목을 선택하십시오. 테스트 내의 각 시뮬레이션마다 하나의 결함 세트를 선택할 수 있습니다. 테스트에서 두 가지 이상의 결함 조합을 실행하려면 테스트 반복을 생성하십시오. Test Iterations (Simulink Test) 항목을 참조하십시오. 각 테스트에서 추가적인 결함 속성을 조정하려면 콜백을 생성하십시오. Callbacks (Simulink Test) 항목을 참조하십시오.
시뮬레이션을 마친 후, 임베디드 시뮬레이션 데이터 인스펙터에서 결함 시뮬레이션 결과를 확인하십시오.
프로그래밍 방식으로 결함 세트 생성
또한 프로그래밍 방식으로 결함 세트를 생성하고 수정할 수도 있습니다. 테스트할 모델에는 이미 결함이 존재해야 합니다. 모델에서 프로그래밍 방식으로 결함을 생성하는 방법에 대한 자세한 내용은 프로그래밍 방식으로 결함 추가 및 구성를 참조하십시오.
프로그래밍 방식으로 결함 세트를 추가하려면:
sltest.testmanager.TestCase(Simulink Test) 객체를 가져오거나 생성합니다.createTestCase(Simulink Test),getTestCases(Simulink Test),getTestCaseByName(Simulink Test) 항목을 참조하십시오.addFaultSet메서드를 사용하여 테스트 케이스에 결함 세트를 추가합니다. 이 메서드는sltest.testmanager.FaultSet클래스의 인스턴스를 생성합니다.테스트 대상 모델에서
sltest.testmanager.refreshFaults함수를 사용하여 사용 가능한 결함을 업데이트하십시오.addSpecifiedFault메서드를 사용하여 결함 세트에 결함을 추가합니다. 이 메서드는sltest.testmanager.SpecifiedFault클래스의 인스턴스를 생성합니다.
테스트 케이스에 이미 결함 세트가 있는 경우, sltest.testmanager.TestCase 객체에 getFaultSets 메서드를 적용하여 sltest.testmanager.FaultSet 객체를 가져올 수 있습니다. 마찬가지로, sltest.testmanager.FaultSet 객체에 getSpecifiedFaults 메서드를 적용하여 결함 세트에서 sltest.testmanager.SpecifiedFault 객체를 가져옵니다.
결함 세트 및 결함을 제거하려면 해당 결함 세트나 결함에 대해 remove 메서드를 사용하십시오.
예제 모델에 대해 결함 주입 테스트 실행
이 예제는 오류 집합을 사용하여 결함을 활성화하고 주입하는 테스트를 실행하는 방법을 보여줍니다. 결함을 주입한 후, 신호를 분석하고 시간적 평가를 통해 해당 결함이 의도한 출력을 유발했는지 확인할 수 있습니다.
모델 열기
sldemo_fuelsys_fault_analyzer 모델을 열고 fuelSysFaultTestSetup 헬퍼 함수를 사용하여 결함을 설정하십시오. 헬퍼 함수는 기존 Simulink® Fault Analyzer™ 모델 아티팩트를 삭제하고 이를 예제에서 사용된 결함으로 대체합니다.
mdlName = "sldemo_fuelsys_fault_analyzer";
open_system(mdlName)
fuelSysFaultTestSetup결함 설정 코드를 보려면 fuelSysFaultTestSetup MATLAB® 파일을 열거나 헬퍼 함수 섹션으로 이동하십시오.
이 모델은 가솔린 엔진의 연료 제어 시스템을 나타내며, Model Fault-Tolerant Fuel Control System의 모델을 수정한 버전입니다. 이 모델은 컨트롤러에서 결함을 검출한 후 연료 모드 신호를 생성합니다. 컨트롤러가 단일 결함을 감지하면, fuel_mode 신호를 저배출 상태를 나타내는 LOW 신호에서 풍부한 혼합 상태를 나타내는 RICH로 변경합니다. 컨트롤러가 두 번째 결함을 검출하면 fuel_mode를 DISABLED로 설정합니다. 컨트롤러가 결함을 감지하면, 모델은 normal_operation 신호를 false로 설정하여 이 동작을 기록합니다.
이 모델에는 네 개의 결함이 포함되어 있습니다. 결함을 확인하려면 결함 테이블 창을 엽니다. 앱 탭에서 결함 분석기를 클릭합니다. 결함 분석기 탭의 보기 섹션에서 결함 테이블을 클릭합니다. 각 모델 요소를 확장하여 결함을 확인합니다. 각 결함은 시간 기반 트리거를 사용하며, 지정된 시뮬레이션 시점에 결함이 주입됩니다.

테스트 보기
각 결함이 발생하면 결함이 주입된 후 normal_operation 신호가 false로 출력됩니다. 이 예제에서는 해당 동작을 확인하기 위해 테스트를 실행합니다. Simulink Test Manager를 열고 fault_tests_example.mldatx 테스트 파일을 불러옵니다. 앱 탭에서 Simulink Test를 클릭하십시오. 테스트 탭에서 Simulink Test Manager를 클릭합니다. Simulink Test Manager에서 fault_tests_example.mldatx 테스트 파일을 엽니다. 또는 다음 명령어를 입력하십시오:
tf = sltest.testmanager.load("fault_tests_example.mldatx");
sltest.testmanager.view;테스트 파일에는 네 개의 테스트 케이스가 있습니다.

각 테스트 케이스는 하나의 선택된 결함을 포함하는 결함 세트를 지정하여 결함을 발생시킵니다. 결함 세트를 확인하려면 Simulink Test Manager의 왼쪽 창에서 테스트 브라우저를 클릭하십시오. 테스트 파일과 테스트 스위트를 펼친 다음, 테스트를 선택합니다. 결함 설정 섹션을 확장하면 결함 세트와 결함 항목을 확인할 수 있습니다. 이 이미지는 throttle_fault 결함을 주입하는 테스트 케이스의 결함 세트를 보여줍니다.

결함이 의도한 동작을 유발하는지 확인하기 위해, 각 테스트 케이스에는 시간적 평가가 포함됩니다. Assess Temporal Logic by Using Temporal Assessments (Simulink Test) 항목을 참조하십시오. 테스트에서 논리적 및 시간적 평가 섹션을 펼치십시오. 이 평가에서는 결함이 발생한 신호가 주입된 값과 일치하는 시점을 확인합니다. 신호 값이 결함으로부터 주입된 값과 같다면, normal_operation 신호는 false여야 합니다. 이 그림은 throttle_fault 결함을 주입한 테스트 케이스에 대한 시간적 평가 결과를 보여줍니다.

테스트 실행
테스트를 실행하십시오. 결함 주입 테스트 suite를 선택하고 실행을 클릭하거나, 다음 명령을 입력하십시오:
run(tf);
결과 및 아티팩트을 선택한 다음, 결과를 펼치십시오. 모든 테스트 케이스가 통과되었으므로, 컨트롤러가 각 결함이 주입되었을 때 이를 감지한다는 의미입니다.

Simulink Test Manager에서 테스트의 활성 결함에 대한 결함 트리거 상태를 확인할 수 있습니다.
테스트 결과를 펼친 다음 시뮬레이션 출력을 선택합니다.
데이터 인스펙터 탭에서 결함 목록을 확장합니다.
트리거 상태를 확인하려면 결함 이름을 선택하십시오.
이 이미지는 throttle_fault를 활성화한 테스트에서 발생한 결함 트리거와 normal_operation 신호의 상태를 보여줍니다.

헬퍼 함수
fuelSysFaultTestSetup 함수는 모델에 결함을 추가하고, 테스트 케이스에 결함 세트와 결함을 추가합니다. 결함을 생성하고, 결함을 추가하며, 결함을 활성화하는 예제 코드를 보려면 Create Fault Sets and Add Faults in Test Cases 섹션을 참조하십시오.
function fuelSysFaultTestSetup %% Initializing mdl = "sldemo_fuelsys_fault_analyzer"; bmdl = mdl + "_FaultModel"; load_system(mdl); fault = Simulink.fault.Fault.empty(0,4); ports = 4; Simulink.fault.save(mdl) % Load the test file, and get the test suite and test cases. tf = sltest.testmanager.load("fault_tests_example.mldatx"); ts = getTestSuites(tf); tc = getTestCases(ts); %% Deleting existing faults, conditionals, and fault sets for n = 1:numel(tc) initialFaultSets = getFaultSets(tc(n)); if numel(initialFaultSets) > 0 for m = 1:numel(initialFaultSets) remove(initialFaultSets(m)) end end end warnID = "safetyanalyzer:faultinfo:DeletedEmptyFaultModelWarning"; warning("off",warnID) Simulink.fault.deleteAll(mdl) Simulink.fault.addConditional(mdl,"SampleConditional","x == true"); sltest.testmanager.refreshFaults(mdl) warning("on",warnID) %% Adding faults and behaviors for n = 1:ports fault(n) = Simulink.fault.addFault(mdl ... + "/To Controller/Inport/" + num2str(n)); end % Add behavior to each fault. Three of the faults use stuck-at-ground % behavior and one of them uses stuck-at-constant behavior. addBehavior(fault(1),bmdl,... FaultBehavior="mwfaultlib/Stuck-at-Ground"); addBehavior(fault(2),bmdl,... FaultBehavior="mwfaultlib/Stuck-at-Ground"); addBehavior(fault(3),bmdl,... FaultBehavior="mwfaultlib/Stuck-at-Constant"); addBehavior(fault(4),bmdl,... FaultBehavior="mwfaultlib/Stuck-at-Ground"); load_system(bmdl) set_param(bmdl+"/ego_fault/Constant",Value="12") %% Specify Fault Properties % Define the trigger types. Each fault uses a timed trigger % at a different time. fault(1).TriggerType = "Timed"; fault(1).StartTime = 5; fault(2).TriggerType = "Timed"; fault(2).StartTime = 10; fault(3).TriggerType = "Timed"; fault(3).StartTime = 15; fault(4).TriggerType = "Timed"; fault(4).StartTime = 20; % Disable the faults. Simulink.fault.enable(mdl + "/To Controller/Inport/1",0) Simulink.fault.enable(mdl + "/To Controller/Inport/2",0) Simulink.fault.enable(mdl + "/To Controller/Inport/3",0) Simulink.fault.enable(mdl + "/To Controller/Inport/4",0) save_system(bmdl); Simulink.fault.save(mdl) %% Create Fault Sets and Add Faults in Test Cases % Update the available faults to include the faults in the model % that you can select for the fault set. sltest.testmanager.refreshFaults(mdl) % Create the fault sets and add the faults to each fault set. % Activate only one fault for each fault set, and disable the others. faultSets = sltest.testmanager.FaultSet.empty(0,ports); testedFaults = sltest.testmanager.SpecifiedFault.empty(0,ports); for i = 1:ports faultSets(i) = addFaultSet(tc(i),Name="Fault Set"); for m = 1:ports testedFaults(m) = addSpecifiedFault(faultSets(i),... "sldemo_fuelsys_fault_analyzer/To Controller/Inport/" ... + num2str(m),fault(m).Name); if m == i testedFaults(m).IsActive = true; else testedFaults(m).IsActive = false; end end end end
참고 항목
Simulink Test Manager (Simulink Test)