slmetric.metric.ResultDetail class
Package: slmetric.metric
Superclasses:
(To be removed) Details about instances of
slmetric.metric.Result
objects
slmetric.metric.ResultDetail
will be removed in a future release. For
size, architecture, and complexity metrics, use the metric.Engine
API and
the model maintainability metrics instead. For more information, see metric.Engine
and Collect Model Maintainability Metrics Programmatically.
Description
Details about what the metric engine counts for the
slmetric.metric.Result
object property
Value
.
Construction
Calling the slmetric.Engine.execute
method creates the slmetric.metric.Result
objects, which optionally includes the
slmetric.metric.ResultDetail
objects. Details1 =
slmetric.metric.ResultDetail = (ID, Name)
creates an
slmetric.metric.ResultDetail
object. You must supply the ID and
Name as inputs to the constructor.
Properties
ID
— Unique identifier
character vector
Unique identifier for the entity that the result detail instance counts. This property is read/write.
Data Types: char
Name
— Name of model entity
character vector
Name of model entity that result detail instance counts. This property is read/write.
Data Types: char
Value
— Value of ID
property
double
Scalar value generated by metric algorithm for ID
. This
property is read/write.
Data Types: double
Methods
getGroupIdentifier | Obtain the identifier for a group of
slmetric.metric.ResultDetail objects |
getGroupName | Obtain the name for a group of slmetric.metric.ResultDetail
objects |
setGroup | Set the name and identifier for a group of
slmetric.metric.ResultDetail objects |
Examples
Obtain Clone Group Names and Identifiers
Use the getGroupName
and
getGroupIdentfier
methods to obtain the name and
identifier for a group of clones.
Open the example model.
openExample('slcheck/EnableSubsystemReuseWithCloneExample','supportingfile','ex_clone_detection');
Save the example model to your current working folder.
Call the execute
method. Apply the getMetrics
method for
themathworks.metric.CloneDetection
metric.
metric_engine = slmetric.Engine(); setAnalysisRoot(metric_engine,'Root','ex_clone_detection','RootType','Model'); execute(metric_engine); rc = getMetrics(metric_engine,'mathworks.metrics.CloneDetection');
For each slmetric.metric.Result
object, display the
ComponentPath
. For each
slmetric.metric.ResultDetail
object, display the
clone group name and identifier.
for n=1:length(rc.Results) if rc.Results(n).Value > 0 for m=1:length(rc.Results(n).Details) disp(['ComponentPath: ',rc.Results(n).ComponentPath]); disp(['Group Name: ',rc.Results(n).Details(m).getGroupName]); disp(['Group Identifier: ',rc.Results(n).Details(m).getGroupIdentifier]); end else disp(['No results for ComponentPath: ',rc.Results(n).ComponentPath]); end disp(' '); end
The results show that the model contains one clone group,
CloneGroup1
, which contains two clones.
Set Group Names and Group Identifiers for a Custom Model Metric
Use the setGroup
method to group detailed results.
When you create a custom model metric, you apply this method as part of the
algorithm
method.
Open the sldemo_mdlref_dsm
model.
openExample('sldemo_mdlref_dsm');
Using the createNewMetricClass
function, create a metric class
named DataStoreCount
. This metric counts the number of
Data Store Read and Data Store Write blocks and
groups them together by the corresponding Data Store Memory block. The
createNewMetricClass
function creates a file,
DataStoreCount.m
in the current working folder. The file
contains a constructor and empty metric algorithm method. For this example, make
sure that you are working in a writable folder.
className = 'DataStoreCount';
slmetric.metric.createNewMetricClass(className);
To write the metric algorithm, open the DataStoreCount.m
file
and add the metric to the file. For this example, you can create the metric
algorithm by copying this logic into the DataStoreCount.m
file.
classdef DataStoreCount < slmetric.metric.Metric % Count the number of Data Store Read and Data Store Write % blocks and correlate them across components. methods function this = DataStoreCount() this.ID = 'DataStoreCount'; this.ComponentScope = [Advisor.component.Types.Model, ... Advisor.component.Types.SubSystem]; this.AggregationMode = slmetric.AggregationMode.Sum; this.CompileContext = 'None'; this.Version = 1; this.SupportsResultDetails = true; %Textual information on the metric algorithm this.Name = 'Data store usage'; this.Description = 'Metric that counts the number of Data Store Read and Write'; 'blocks and groups them by the corresponding Data Store Memory block.'; end function res = algorithm(this, component) % Use find_system to get all blocks inside this component. dswBlocks = find_system(getPath(component), ... 'SearchDepth', 1, ... 'BlockType', 'DataStoreWrite'); dsrBlocks = find_system(getPath(component), ... 'SearchDepth', 1, ... 'BlockType', 'DataStoreRead'); % Create a ResultDetail object for each data store read and write block. % Group ResultDetails by the data store name. details1 = slmetric.metric.ResultDetail.empty(); for i=1:length(dswBlocks) details1(i) = slmetric.metric.ResultDetail(getfullname(dswBlocks{i}),... get_param(dswBlocks{i}, 'Name')); groupID = get_param(dswBlocks{i},'DataStoreName'); groupName = get_param(dswBlocks{i},'DataStoreName'); details1(i).setGroup(groupID, groupName); details1(i).Value = 1; end details2 = slmetric.metric.ResultDetail.empty(); for i=1:length(dsrBlocks) details2(i) = slmetric.metric.ResultDetail(getfullname(dsrBlocks{i}),... get_param(dsrBlocks{i}, 'Name')); groupID = get_param(dsrBlocks{i},'DataStoreName'); groupName = get_param(dsrBlocks{i},'DataStoreName'); details2(i).setGroup(groupID, groupName); details2(i).Value = 1; end res = slmetric.metric.Result(); res.ComponentID = component.ID; res.MetricID = this.ID; res.Value = length(dswBlocks)+ length(dsrBlocks); res.Details = [details1 details2]; end end end
In the DataStoreCount
metric class, the
SupportsResultDetail
method is set to true. The metric
algorithm contains the logic for the setGroup
method.
Now that your new model metric is defined in DataStoreCount.m
,
register the new
metric.
[id_metric,err_msg] = slmetric.metric.registerMetric(className);
To collect metric data on models, use instances of
slmetric.Engine
. Using the getMetrics
method, specify the metric that you want to collect. For this example, specify the
data store count metric for the sldemo_mdlref_dsm
model.
Create a metric engine object and set the analysis root.
metric_engine = slmetric.Engine(); setAnalysisRoot(metric_engine,'Root','sldemo_mdlref_dsm',... 'RootType','Model');
Collect metric data for the Data Store count metric.
execute(metric_engine); rc=getMetrics(metric_engine, id_metric);
For each slmetric.metric.Result
object, display the
ComponentPath
. For each
slmetric.metric.ResultDetails
object, display the Data Store
group name and identifier.
for n=1:length(rc.Results) if rc.Results(n).Value > 0 for m=1:length(rc.Results(n).Details) disp(['ComponentPath: ',rc.Results(n).ComponentPath]); disp(['Group Name: ',rc.Results(n).Details(m).getGroupName]); disp(['Group Identifier: ',rc.Results(n).Details(m).getGroupIdentifier]); end else disp(['No results for ComponentPath: ',rc.Results(n).ComponentPath]); end disp(' '); end
Here are the results.
ComponentPath: sldemo_mdlref_dsm Group Name: ErrorCond Group Identifier: ErrorCond No results for ComponentPath: sldemo_mdlref_dsm/A No results for ComponentPath: sldemo_mdlref_dsm/A1 No results for ComponentPath: sldemo_mdlref_dsm/More Info1 ComponentPath: sldemo_mdlref_dsm_bot Group Name: RefSignalVal Group Identifier: RefSignalVal ComponentPath: sldemo_mdlref_dsm_bot2 Group Name: ErrorCond Group Identifier: ErrorCond ComponentPath: sldemo_mdlref_dsm_bot/PositiveSS Group Name: RefSignalVal Group Identifier: RefSignalVal ComponentPath: sldemo_mdlref_dsm_bot/NegativeSS Group Name: RefSignalVal Group Identifier: RefSignalVal
For this example, unregister the data store count metric.
slmetric.metric.unregisterMetric(id_metric);
Close the model.
clear; bdclose('sldemo_mdlref_dsm');
Version History
Introduced in R2017bR2022a: Warns
The slmetric.Engine
API will be removed in a future release. For
size, architecture, and complexity metrics, use the metric.Engine
API
and the model maintainability metrics instead. For more information, see metric.Engine
and Collect Model Maintainability Metrics Programmatically.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)