This set of tutorial demonstrate how to use Waijung2 ESP32 block set to create products efficiently and to make it more reliable by testing it with Simulink Test which provides the facility to conduct standard industrial testing.
oModel-in-the-Loop (MIL) Testing
oProcessor-in-the-Loop (PIL) Testing
Unit testing refers to the process of verifying and validating individual components or units of a Simulink model. Simulink is a graphical programming environment for modeling, simulating, and analyzing dynamic systems, commonly used in fields such as control systems, signal processing, and automotive engineering.Unit testing in Simulink follows similar principles to traditional software unit testing but with some unique considerations due to the nature of Simulink models. Here's an overview of how unit testing is typically approached in Simulink:
1.Identify units: In Simulink, a unit can be a subsystem, a model, or an individual block. The choice of units depends on the granularity of your system and the specific components you want to test. Units are generally isolated to focus on their individual behavior and functionality.
2.Define test objectives: Clearly define the objectives of each unit test. Determine the specific inputs, expected outputs, and criteria for success. This may involve analyzing requirements, specifications, or design documents to ensure that the units are tested against their intended functionality.
3.Create test harnesses: Test harnesses are the infrastructure that sets up and controls the execution of unit tests. In Simulink, a test harness is typically a separate model or subsystem that provides the necessary inputs to the unit under test and captures its outputs for comparison against expected results. Test harnesses may include signal generators, stimulus files, or other simulation components.
4.Generate test cases: Test cases are specific scenarios or inputs that exercise the unit under test. In Simulink, test cases are often created by defining input signals or test vectors for the test harnesses. These test cases should cover a wide range of scenarios, including normal and boundary conditions, to ensure thorough coverage of the unit's behavior.
5.Execute tests: Run the unit tests using the defined test harnesses and test cases. In Simulink, this involves simulating the model with the test inputs and comparing the generated outputs with the expected results. Test execution can be automated using tools like Simulink Test or MATLAB scripts.
6.Analyze test results: Examine the test results to determine whether the unit under test behaves as expected. Identify any discrepancies between the expected and actual outputs. Failed tests indicate potential defects or errors that need to be addressed.
7.Debug and fix issues: If a unit test fails, investigate the cause of the failure and debug the unit or the test itself. Simulink provides various debugging capabilities, such as signal logging, breakpoints, and visualization tools, to aid in the debugging process. Once the issues are identified, modify the unit or test case as necessary to fix the problems.
8.Repeat and maintain: Unit testing is an iterative process, and it's important to regularly repeat the tests as changes are made to the units or the overall system. Additionally, maintain a test suite and update it as the system evolves to ensure ongoing testing and quality assurance.
Simulink provides dedicated tools and features to facilitate unit testing, such as Simulink Test, which is an extension of Simulink that enables test case creation, test execution, and result analysis. It also integrates with other MATLAB testing frameworks, such as MATLAB Unit Test Framework, for more advanced testing capabilities.
By conducting unit testing in Simulink, engineers can verify the correctness and functionality of individual components, identify and fix issues early in the development process, and build reliable and robust dynamic systems. |
Integrated testing refers to the process of testing the interaction and integration between multiple components or subsystems within a Simulink model. It focuses on verifying that the different components work together as intended and produce the desired system-level behavior.
When it comes to integrated testing in Simulink, there are a few key considerations:
1.Identify integration points: Determine the interfaces and interactions between the various components or subsystems within your Simulink model. These integration points can be signal connections, data exchanges, function calls, or other forms of communication.
2.Design integration tests: Based on the identified integration points, design integration tests that exercise the interactions between the components. Integration tests should cover various scenarios and input combinations to ensure comprehensive coverage. Test cases can be defined using test vectors, stimuli files, or other means of generating input data.
3.Develop test harnesses: Create test harnesses or simulation setups that provide the necessary inputs to the integrated system and capture its outputs. Test harnesses in Simulink are typically separate models or subsystems that facilitate the execution of integration tests. They may include components for generating input signals, logging output data, and comparing results.
4.Execute integration tests: Run the integration tests by simulating the entire system with the defined test harnesses and test cases. This involves simulating the interactions between the components and observing the overall behavior of the integrated system. Capture and analyze the outputs to assess the correctness and consistency of the results.
5.Analyze test results: Analyze the results of the integration tests to identify any discrepancies, failures, or deviations from expected behavior. Compare the actual outputs with the expected outputs and examine the consistency of the integrated system's behavior. Failed integration tests indicate issues or defects that need to be addressed.
6.Debug and fix issues: If integration tests fail, debug the integrated system to identify the root causes of the failures. Utilize Simulink's debugging features, such as signal tracing, breakpoints, and visualization tools, to diagnose and address the issues. Modify the components or the integration logic as necessary to resolve the problems.
7.Iterate and maintain: Integrated testing is an iterative process that should be repeated as changes are made to the system or its components. Update the integration tests and test harnesses as the system evolves to ensure ongoing testing and validation. Maintain a comprehensive test suite to capture the integrated system's behavior and ensure its reliability.
Simulink provides tools and functionality to support integrated testing, such as simulation capabilities, signal logging, and debugging tools. Additionally, Simulink Test, an extension of Simulink, offers features for defining integration tests, managing test cases, and analyzing test results. |
Regression tests ensure that changes or modifications made to a Simulink model do not introduce new defects or regressions. They validate that the existing functionality of the model remains intact after changes are made. Regression tests help identify unintended changes or unexpected behavior. Here's how regression testing is typically performed in Simulink:
1.Identify Regression Test Cases: Select a set of test cases that cover the critical functionality of the Simulink model. These test cases should represent different scenarios and cover various aspects of the model's behavior.
2.Create Baseline Results: Execute the identified test cases on the original, unmodified version of the Simulink model. Capture and save the expected outputs or reference results generated by the baseline model. These results serve as the benchmark for comparison during regression testing.
3.Make Changes to the Model: Apply the desired changes, updates, or modifications to the Simulink model. This can include modifying block parameters, changing model configurations, adding or removing components, or updating the model structure.
4.Re-execute Regression Tests: Run the same set of test cases on the modified Simulink model. Compare the obtained outputs against the saved baseline results. Verify if the changes have introduced any discrepancies or deviations from the expected behavior.
5.Analyze Regression Test Results: Analyze the differences between the expected outputs (baseline results) and the obtained outputs from the modified model. Identify any failures or regressions that have occurred due to the changes. Investigate and debug the discrepancies to understand the root causes.
6.Address Regression Issues: Once regression issues are identified, debug and fix the introduced defects or deviations. Modify the model, block parameters, or configuration settings to address the regressions and restore the desired behavior.
7.Re-run Regression Tests: After fixing the regression issues, rerun the affected test cases to validate that the fixes have resolved the problems. Verify that the model's behavior matches the expected outputs obtained during the baseline testing.
Regression testing helps ensure that modifications or updates to a Simulink model do not inadvertently affect its existing functionality. It provides confidence in the stability and correctness of the modified model and facilitates the detection and resolution of regressions early in the development process.
Simulink Test, an extension of Simulink, provides features and functionalities to support regression testing. It allows you to define regression test suites, manage test cases, compare results against baselines, and generate comprehensive reports to aid in the regression testing process. |
Equivalence tests compare the behavior of two or more Simulink models. They verify if different versions of a model or alternative implementations produce equivalent outputs. Equivalence tests are useful for ensuring consistency and validating model transformations, optimizations, or code generation. Here's an overview of how equivalence testing is typically performed in Simulink:
1.Identify the Models: Select the Simulink models that you want to compare for equivalence. These models can be different versions of the same model, alternative implementations of a functionality, or models created by different teams or tools.
2.Define Inputs and Execution Settings: Determine the inputs or test cases that will be used for the equivalence testing. These inputs should cover a range of scenarios and test different aspects of the model's behavior. Set the execution settings, such as simulation time, solver settings, and sample time, to ensure consistent simulation conditions.
3.Simulate the Models: Run simulations on the identified models using the defined inputs and execution settings. Capture the outputs generated by each model during the simulation. This includes signals, states, logged data, or any other relevant outputs that represent the behavior of the models.
4.Compare Outputs: Compare the outputs generated by the different models to assess their equivalence. This can be done using built-in comparison methods, MATLAB functions, or custom comparison scripts. You may need to consider tolerances or acceptable deviations based on the nature of the outputs being compared.
5.Analyze Differences: Analyze the differences between the outputs of the models. Identify any discrepancies, divergences, or inconsistencies in their behavior. Investigate the root causes of the differences to understand whether they are expected variations or indications of non-equivalence.
6.Resolve Discrepancies: If discrepancies are identified, investigate and debug the models to identify the reasons behind the non-equivalence. Make necessary modifications to the models, block parameters, or simulation settings to resolve the differences and align the models' behavior.
7.Repeat and Validate: After resolving the discrepancies, repeat the equivalence testing process to verify that the models now produce consistent and equivalent outputs. Confirm that the changes made to the models have indeed resolved the non-equivalence and aligned their behavior.
Equivalence testing is valuable when comparing different versions or implementations of a Simulink model, ensuring consistency across model transformations or code generation, or validating the correctness of alternative designs. It helps to establish confidence in the equivalence of the models and ensures consistent behavior across different implementations.
Simulink Test provides functionality to support equivalence testing, such as the ability to define test cases, simulate models, capture outputs, and perform automated comparisons. MATLAB scripting capabilities can also be utilized to create custom comparison scripts or implement specific comparison logic based on the nature of the models and their outputs. |
Coverage tests assess the completeness and thoroughness of testing efforts by measuring the coverage of different aspects of a Simulink model. They provide metrics, such as decision, condition, and MC/DC (Modified Condition/Decision Coverage), to quantify the extent to which a model has been exercised by tests. Coverage tests help identify areas that require additional testing.Here's an overview of coverage testing in Simulink:
1.Identify Coverage Metrics: Determine the coverage metrics you want to measure for your Simulink model. Simulink provides various coverage metrics, including decision coverage, condition coverage, MC/DC (Modified Condition/Decision Coverage), and more. Each metric captures different aspects of the model's behavior and helps quantify the extent of coverage.
2.Configure Coverage Settings: Configure the coverage settings in Simulink to specify which coverage metrics you want to measure and track during simulation. Set the simulation duration, test inputs, and other relevant parameters for coverage analysis.
3.Execute Test Cases: Run the identified test cases or test suites on the Simulink model. The test cases should be designed to exercise different parts of the model and cover various scenarios. Simulate the model using the defined inputs and collect coverage data during the simulation.
4.Analyze Coverage Results: Analyze the coverage results obtained from the simulation. Simulink provides visualizations and reports that display the coverage metrics and highlight the areas of the model that have been covered and those that remain untested.
5.Interpret Coverage Metrics: Interpret the coverage metrics to understand the level of coverage achieved. The coverage metrics indicate the percentage or level of coverage for different elements of the model, such as blocks, decision points, conditions, or expressions. Use these metrics to assess the completeness of the testing effort and identify areas that require additional testing.
6.Improve Coverage: Based on the coverage analysis, identify areas of the model with low coverage or uncovered parts. Develop additional test cases or modify existing ones to target these areas and increase the coverage. Repeat the testing process to improve the overall coverage of the model.
7.Track Progress: Continuously track the coverage metrics over time to monitor the progress of testing efforts. Set coverage goals or targets to ensure that an adequate level of coverage is achieved before releasing the Simulink model.
Coverage testing helps ensure that different parts and behaviors of a Simulink model are adequately tested. It helps identify areas of the model that have not been exercised by the test cases and may require additional testing to achieve comprehensive coverage.
Simulink provides built-in coverage analysis tools and features, such as the Coverage Advisor, coverage reports, and visualizations, to support coverage testing. These tools help visualize coverage results, track progress, and identify areas for improvement in the testing process. Additionally, Simulink Test allows for the integration of coverage analysis with other testing activities, such as unit tests, regression tests, or requirements-based tests, to ensure comprehensive testing and validation of the Simulink model. |
Requirements-based testing links test cases to specific requirements or design specifications. This type of testing ensures that each requirement is tested and validated. By tracing requirements to test cases, requirements-based tests ensure comprehensive coverage and adherence to system requirements. Here's an overview of requirements-based testing in Simulink:
1.Identify Requirements: Identify the requirements or design specifications that the Simulink model is expected to fulfill. These requirements can be functional requirements, performance specifications, safety constraints, or any other relevant criteria.
2.Capture Requirements: Document the requirements and their associated details within a requirements management tool or document. This helps maintain a clear traceability link between the requirements and the subsequent testing activities.
3.Define Test Cases: Based on the identified requirements, define test cases that directly correspond to each requirement. Each test case should be designed to verify and validate a specific requirement.
4.Implement Test Cases: Implement the defined test cases within Simulink Test or other testing frameworks. Specify the inputs, expected outputs, and pass/fail criteria for each test case.
5.Execute Test Cases: Execute the defined test cases on the Simulink model. Simulate the model using the specified inputs and collect the actual outputs generated during the simulation.
6.Traceability and Reporting: Establish traceability links between the executed test cases and the associated requirements. This ensures that each requirement is covered by at least one test case. Generate comprehensive test reports that demonstrate the coverage of requirements and provide evidence of their validation.
7.Validation and Compliance: Analyze the test results to determine whether the Simulink model satisfies the identified requirements. Evaluate whether the outputs of the model align with the expected behavior specified by the requirements. Assess whether any deviations or failures indicate non-compliance with the requirements.
8.Iterative Refinement: If discrepancies or failures are identified, debug and refine the Simulink model to address the issues. Modify the model, block parameters, or simulation settings to ensure compliance with the requirements. Re-run the test cases to validate the modifications and confirm the fulfillment of the requirements.
Requirements-based testing ensures that the Simulink model is designed and implemented in accordance with the specified requirements. It establishes a clear link between the requirements, test cases, and the model's behavior, facilitating comprehensive validation and verification.
Simulink Test provides functionality to support requirements-based testing. It allows for the definition of test cases linked to requirements, the execution of these test cases, and the generation of traceability reports. Additionally, Simulink Test integrates with requirements management tools, such as IBM Rational DOORS or Jama Connect, to facilitate seamless traceability and streamlined testing workflows. |
Scenario tests evaluate the behavior of a Simulink model under specific scenarios or use cases. They simulate real-world situations to validate the model's functionality, performance, or response to different inputs or environmental conditions. Scenario tests verify that the model meets the desired system-level behavior. Here's an overview of scenario testing in Simulink:
1.Identify Scenarios: Identify the specific scenarios or use cases that you want to test within the Simulink model. These scenarios can represent different operational conditions, input variations, or specific sequences of events that the model should handle correctly.
2.Define Test Cases: Based on the identified scenarios, define test cases that capture the inputs, initial conditions, and expected outputs for each scenario. Test cases should encompass the necessary steps and inputs to recreate the desired real-world situations.
3.Configure Simulation Settings: Configure the simulation settings in Simulink to ensure that the test cases accurately simulate the desired scenarios. Set the simulation time, solver settings, sample time, and any other relevant parameters to reflect the conditions of the scenarios being tested.
4.Execute Test Cases: Run the defined test cases on the Simulink model by simulating the model with the specified inputs and simulation settings. Capture the outputs generated during the simulation.
5.Analyze Results: Analyze the outputs obtained from the simulation to assess whether the model behaves as expected under the defined scenarios. Compare the actual outputs against the expected outputs specified in the test cases. Identify any discrepancies, failures, or unexpected behavior.
6.Debug and Refine: If discrepancies or failures are identified, investigate and debug the Simulink model to understand the root causes. Modify the model, block parameters, or simulation settings to address the issues and refine the model's behavior.
7.Re-run and Validate: After making modifications, re-run the test cases to validate that the model now exhibits the desired behavior under the tested scenarios. Verify that the outputs align with the expected results and confirm that the model adequately handles the specified situations.
Scenario testing helps assess the model's performance, robustness, and adherence to desired behaviors under real-world conditions. It is particularly useful for validating the model's behavior in complex, dynamic environments and ensuring that it meets the desired system-level requirements.
Simulink Test provides functionality to support scenario testing. It allows for the definition of test cases that capture the inputs and expected outputs for different scenarios. Simulink Test also provides simulation capabilities to execute the test cases, capture the simulation results, and compare the actual outputs against the expected ones. These features facilitate scenario testing and aid in validating the model's behavior under specific situations. |
Back-to-back tests compare the behavior and outputs of a Simulink model with a reference or golden model. They ensure that a new or modified model produces results consistent with an established reference. Back-to-back tests validate model updates, transitions from legacy models, or compatibility between different model versions. Here's an overview of back-to-back testing in Simulink:
1.Identify Models: Identify the Simulink models that you want to compare in a back-to-back test. These models can include different versions of the same model, alternative implementations, or reference models that are considered to be correct.
2.Define Inputs: Define a set of inputs or test cases that will be used to evaluate the models. These inputs should cover a range of scenarios and be representative of the expected operational conditions for the models.
3.Simulate Models: Simulate each model using the defined inputs. Collect the outputs generated by each model during the simulation, including signals, states, logged data, or any other relevant outputs that represent the behavior of the models.
4.Compare Outputs: Compare the outputs generated by the different models to assess their consistency and correctness. Use built-in comparison methods, MATLAB functions, or custom comparison scripts to analyze the differences between the outputs.
5.Analyze Differences: Analyze the differences between the outputs of the models. Identify any discrepancies, deviations, or inconsistencies in their behavior. Investigate the root causes of the differences to understand whether they indicate errors or variations between the models.
6.Resolve Discrepancies: If discrepancies are identified, debug and refine the models to address the differences. Modify the models, block parameters, or simulation settings to align their behavior and resolve any errors or inconsistencies.
7.Re-run and Validate: After resolving the discrepancies, re-run the test cases to validate that the models now produce consistent outputs. Verify that the behavior of the models matches the reference implementation or the expected results.
Back-to-back testing helps ensure that different implementations of a Simulink model produce consistent results or that a model matches a reference implementation. It provides confidence in the correctness and accuracy of the models and helps identify errors, discrepancies, or variations between different implementations.
Simulink Test provides functionality to support back-to-back testing. It allows for the definition of test cases, the simulation of multiple models, and the comparison of outputs between models. MATLAB scripting capabilities can also be utilized to create custom comparison scripts or implement specific comparison logic based on the nature of the models and their outputs. |
Here are a few links to get you started:
Simulink Test:
Documentation: https://www.mathworks.com/help/sltest/ug/unit-testing-with-simulink-test.html
Verify and validate embedded systems using Model-Based Design:
Documentation: https://www.mathworks.com/help/overview/verification-validation-and-test.html?s_tid=hc_panel
Code Verification:
Documentation: https://www.mathworks.com/help/overview/code-verification.html?s_tid=hc_panel
MATLAB Unit Test Framework:
Documentation: https://www.mathworks.com/help/matlab/matlab-unit-test-framework.html
Copyright 2024 Aimagin Co.,Ltd. Rev.1454