Test an autopilot subsystem against a requirement.
This example demonstrates testing a subsystem against a requirement, using the test manager, test harness, Test Sequence block, and Test Assessment block. The requirements document links to the test case and test harness, and
verify statements assess the component under test.
As you build your model, you can add test cases to verify the model against requirements. Subsequent users can run the same test cases, then add test cases to accomplish further verification goals such as achieving 100% coverage or verifying generated code.
This example tests the
Roll Reference subsystem against a requirement using three scenarios. A Test Sequence block provides inputs, and a Test Assessment block evaluates the component. The
Roll Reference subsystem is one component of an autopilot control system.
Roll Reference controls the reference angle of the aircraft's roll control system. The subsystem fails one assessment, prompting a design change that limits the subsystem output at high input angles.
Enter the following to store paths and file names for the example:
filePath = fullfile(matlabroot,'toolbox','simulinktest','simulinktestdemos'); topModel = 'TestAndVerificationAutopilotExample'; reqDoc = 'RollAutopilotRequirements.txt'; rollModel = 'RollAutopilotMdlRef'; testHarness = 'RollReference_Requirement1_3'; testFile = 'AutopilotTestFile.mldatx'; harnessLink = 'http://localhost:31415/matlab/feval/rmiobjnavigate?arguments=[%22RollAutopilotMdlRef:urn:uuid:523e5d2d-bb86-43b2-a187-43c52a2bc174.slx%22,%22GIDa_3fe26a28_ee1e_4aff_b1cd_3303ca12539c%22]';
RollAutopilotMdlRef model. The full control system
TestAndVerificationAutopilotExample references this model.
Open the test file.
tf = sltest.testmanager.load(fullfile(filePath,testFile)); sltest.testmanager.view;
You can also open the test file by selecting Analysis > Test Manager to open the Test Manager, then opening the test file in the
Open the requirements document. In the test browser, expand AutopilotTestFile and Basic Design Test Cases in the tree, and click Requirement 1.3 test. In the Requirement 1.3 test tab, expand Requirements and click the link to open the requirement file.
In the document, requirement 1.3 states: "When roll hold mode becomes the active mode, the roll hold reference shall be set to the actual roll attitude of the aircraft, except under the following conditions:
The roll hold reference shall be set to zero if the actual roll angle is less than 6 degrees in either direction, at the time of roll hold engagement.
The roll hold reference shall be set to 30 degrees in the same direction as the actual roll angle if the actual roll angle is greater than 30 degrees at the time of roll hold engagement.
The roll reference shall be set to the cockpit turn knob command, up to a 30 degree limit, if the turn knob is commanding 3 degrees or more in either direction.
The test case creates three scenarios to test the normal conditions and exceptions in the requirement.
The requirements document traces to the test harness using URL's that map to the Test Sequence block and test steps. Open the test harness using the command
The Test Sequence block, Test Assessment block, and component under test link to the requirements document. Highlight requirements links by selecting Analysis > Requirements Traceability > Highlight Model in the Simulink editor, or clicking the Toggle Requirements Links button in the Test Sequence Editor toolstrip.
sltest.harness.open([rollModel '/Roll Reference'],testHarness) rmi('highlightModel','RollReference_Requirement1_3')
Open the Test Sequence block.
The Test Sequence block creates test inputs for three scenarios:
In each test, the test sequence sets a signal level, then engages the autopilot. The test sequence checks that
PhiRef is stable for a minimum time
DurationLimit before it transitions to the next signal level. For the first two scenarios, the test sequence sets the
EndTest local variable to
1, triggering the transition to the next scenario.
These scenarios check basic component function, but do not necessarily achieve objectives such as 100% coverage.
Open the Test Assessment block.
The Test Assessment block evaluates
Roll Reference. The assessment block is a library linked subsystem, which facilitates test assessment reuse between multiple test harnesses. The block contains
verify statements covering:
The requirement that
Phi operates inside the low and high limits.
The requirement that
PhiRef = 0 when
Phi < 6 degrees.
The requirement that
PhiRef = 30 when
Phi > 30 degrees.
The requirement that when
TurnKnob is engaged,
PhiRef = TurnKnob if
TurnKnob >= 3 degrees.
Run the test. In the test manager, right-click Requirement 1.3 Test and click Run.
The simulation returns
verify statement results and simulation output in the Test Manager. The
verify_high_pos statement fails.
Warning: Test verification failed at t = 10.125 : PhiRef must equal 30 for high pos angle operation.
Click Results and Artifacts in the test manager.
In the results tree, expand Verify Statements. Click Simulink: verify_high_pos. The trace shows when the statement fails.
In the Data Inspector tab, click Subplots and select two plots arranged vertically. Select the lower plot in the Visualize pane.
In the results tree, expand Results, Requirement 1.3 Test, and Sim Output.
Phi. The output traces align with the
verify results in the above plot. Observe that
PhiRef exceeds 30 degrees when
Phi exceeds 30 degrees.
RollReference to limit the
PhiRef signal. Add a Saturation block as shown. Set the lower limit to
-30 and the upper limit to
Run the test again. The
verify statement passes, and the output in the test manager shows that
PhiRef does not exceed 30 degrees.
close_system(rollModel,0); close_system(topModel,0); close_system('RollRefAssessLib',0); close_system('RollRefAssess_Req1_3',0); sltest.testmanager.clear; sltest.testmanager.clearResults; sltest.testmanager.close; clear filePath topModel reqDoc rollModel testHarness testFile harnessLink