/*
*
*/
package br.uff.ic.oceano.experiments.ostra;
import br.uff.ic.oceano.CppProjectsHelper;
import br.uff.ic.oceano.controller.SessaoDoUsuario;
import br.uff.ic.oceano.core.exception.ObjetoNaoEncontradoException;
import br.uff.ic.oceano.core.exception.ServiceException;
import br.uff.ic.oceano.core.factory.ObjectFactory;
import br.uff.ic.oceano.core.model.Metric;
import br.uff.ic.oceano.core.model.Revision;
import br.uff.ic.oceano.core.model.SoftwareProject;
import br.uff.ic.oceano.core.model.transiente.Language;
import br.uff.ic.oceano.core.service.RevisionService;
import br.uff.ic.oceano.core.tools.metrics.service.MeasurementService;
import br.uff.ic.oceano.core.tools.metrics.service.MetricService;
import br.uff.ic.oceano.ostra.controller.DataMiningBean;
import br.uff.ic.oceano.ostra.model.DataBaseSnapshot;
import br.uff.ic.oceano.ostra.model.DataMiningResult;
import br.uff.ic.oceano.ostra.service.DataMiningResultService;
import br.uff.ic.oceano.ostra.service.OstraMetricService;
import br.uff.ic.oceano.util.DateUtil;
import br.uff.ic.oceano.util.NumberUtil;
import br.uff.ic.oceano.util.Output;
import br.uff.ic.oceano.util.file.Archive;
import br.uff.ic.oceano.util.test.AbstractNGTest;
import br.uff.ic.oceano.view.SelectableItem;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
import org.testng.annotations.BeforeClass;
/**
*
*
*/
public class DataMiningNGTest extends AbstractNGTest {
private int maxRules = 1000;
private double minSupport = 0.01;
private int maxBadResults = 2;
private DataMiningBean dataMiningBean;
private SoftwareProject neoPz;
@BeforeClass
@Override
public void beforeClass() {
try {
boolean clearOldResults = false;
if (clearOldResults) {
cleanOldResults();
}
startTimer();
neoPz = CppProjectsHelper.getDBNeoPZProject();
double percentOfRevisionsToMine = 100.0; //0.25 ~ 10, 1% - 49
dataMiningBean = createBean(neoPz, percentOfRevisionsToMine);
dataMiningBean.configureDataMining();
endTimer("Preparing database time cost");
print(dataMiningBean.getDataBaseSnapshot());
} catch (Exception ex) {
fail(ex.getMessage(), ex);
}
}
@Test
public void testNeoPzDataMiningLeverage() throws Exception {
String assocRuleMetric;
double minMetric;
assocRuleMetric = "Conviction";
minMetric = 0.5; //0.5, ..., 1, ...inf (best rules)
runDatamining(assocRuleMetric, minMetric);
assocRuleMetric = "Lift";
minMetric = 1.1; // [0, inf)
runDatamining(assocRuleMetric, minMetric);
assocRuleMetric = "Confidence";
minMetric = 0.1; // > 1 is the highest (means 100% sure)
runDatamining(assocRuleMetric, minMetric);
assocRuleMetric = "Leverage";
minMetric = -0.25;// [−0.25, 0.25]
runDatamining(assocRuleMetric, minMetric);
}
//------------------------------------------------------------------------------
/**
* ~1 minutes/result
* @throws Exception
*/
//@Test
public void testNeoPzDataMiningConvictionLoop() throws Exception {
//chances of the rule is wrong
//low is better
String assocRuleMetric = "Conviction";
//range 0.5, ...1.. inf
//higher the better
DataMiningResult result;
List<DataMiningResult> mined = new LinkedList<DataMiningResult>();
//go from low to high, since highest isn't known
double conviction = 20;
do {
//remove bad results
removeBadResults(mined);
//Mining
result = runDatamining(assocRuleMetric, conviction);
if(result != null){
mined.add(result);
}
conviction += 1;
} while (result != null && result.getNumberOfMinedPatterns() != 0);
}
/**
* ~15 minutes/result
* @throws Exception
*/
//@Test
public void testNeoPzDataMiningLiftLoop() throws Exception {
String assocRuleMetric = "Lift";
List<DataMiningResult> mined = new LinkedList<DataMiningResult>();
DataMiningResult result;
//1.0 means that the rule is invalid. A does not interfere with B
//go from high to low to avoid memory problems
double lift = 2.0;
do {
//remove bad results
removeBadResults(mined);
//Mining
result = runDatamining(assocRuleMetric, lift);
if(result != null){
mined.add(result);
}
lift += 0.1;
} while (result != null && result.getNumberOfMinedPatterns() != 0);
}
/**
* Takes too long
* @throws Exception
*/
//@Test
public void testNeoPzDataMiningConfidenceLoop() throws Exception {
String assocRuleMetric = "Confidence";
List<DataMiningResult> mined = new LinkedList<DataMiningResult>();
//Confidence of 100% is the highest
//range 0-100
double confidence = 1.0;
DataMiningResult result;
do {
//remove bad results
removeBadResults(mined);
//Mining
result = runDatamining(assocRuleMetric, confidence);
if(result != null){
mined.add(result);
}
confidence += 0.5;
} while (result != null && result.getNumberOfMinedPatterns() != 0 && confidence <= 100.0);
}
/**
* Leverage metric is takes too long (http://michael.hahsler.net/research/association_rules/measures.html#leverage)
* @throws Exception
*/
//@Test
public void testNeoPzDataMiningLeverageLoop() throws Exception {
String assocRuleMetric = "Leverage";
//Difference between support and expected support if rule head
//and body were independent
//leverage is a lower bound for support
List<DataMiningResult> mined = new LinkedList<DataMiningResult>();
DataMiningResult result;
double leverage = 1.0;
do {
//remove bad results
removeBadResults(mined);
//Mining
result = runDatamining(assocRuleMetric, leverage);
if(result != null){
mined.add(result);
}
leverage += 1.0;
} while (result != null && result.getNumberOfMinedPatterns() != 0 && leverage <= 100.0);
}
private ListDataModel getSelectedMetrics() throws ServiceException {
OstraMetricService ostraMetricService = ObjectFactory.getObjectWithDataBaseDependencies(OstraMetricService.class);
List<SelectableItem> metrics = new LinkedList<SelectableItem>();
List<Metric> ignoredMetrics = getIgnoredMetrics(ostraMetricService);
List<Metric> allMetrics = ostraMetricService.getAll();
for (Metric metric : allMetrics) {
if (ignoredMetrics.contains(metric)) {
continue;
}
if (!metric.isFromProject()) {
continue;
}
// if (metric.isDerived()) {
// continue;
// }
if (!MetricService.isLanguageAvailable(Language.CPP, metric)) {
continue;
}
if (!isAvgValueDiffZero(metric)) {
continue;
}
metrics.add(new SelectableItem(metric, true));
}
println("Metrics selected: " + metrics.size());
for (SelectableItem metric : metrics) {
println(metric.getItem().toString());
}
return new ListDataModel(metrics);
}
private DataMiningBean createBean(SoftwareProject project, double percentRevisions) throws ServiceException {
SessaoDoUsuario sessao = new SessaoDoUsuario();
DataMiningBean bean = new DataMiningBean(sessao) {
@Override
protected void info(String message) {
overloadedLog("info", message);
}
@Override
protected void warn(String message) {
overloadedLog("warn", message);
}
@Override
protected void error(String message) {
overloadedLog("error", message);
}
private void overloadedLog(String type, String message) {
println("Overloaded " + type + ":" + message);
}
};
//Setting project as selected for mining
List<SelectableItem> projects = new LinkedList<SelectableItem>();
projects.add(new SelectableItem(project, true));
ListDataModel list = new ListDataModel(projects);
bean.setTableSelectProjects(list);
//defining revisions to be mined
RevisionService revisionService = ObjectFactory.getObjectWithDataBaseDependencies(RevisionService.class);
Set<Revision> revisions = revisionService.getByProject(project);
List<Revision> sorted = new LinkedList<Revision>(revisions);
Collections.sort(sorted);
double revCount = sorted.size() * percentRevisions / 100.0;
int start = (int) (sorted.size() - revCount); //
int end = sorted.size(); //sublist is exclusive at the end
println("Revisions mined from " + start + " to " + end + " (" + (end - start) + ")");
sorted = sorted.subList(start, end);
project.setRevisions(new HashSet<Revision>(sorted));
//setting standard parameters for mining
bean.setCalculateStandardDeviation(true);
bean.setIgnoreRevisionsThatDontCompile(true); // avoid rule with compile=true
bean.setTableSelectMetrics(getSelectedMetrics());
return bean;
}
private String toString(DataMiningResult result) {
StringBuilder sb = new StringBuilder();
sb.append("Data mining result\n");
sb.append("Time: ").append(result.getFormatedMinedInTime()).append("\n");
sb.append("Description\n").append(result.getDescription());
sb.append("result").append("\n");
List<String> results = result.getResultAsStringList();
if(results == null){
sb.append("Null collection").append("\n");
} else if(results.isEmpty()){
sb.append("Collection empty").append("\n");
} else{
for (String string : results) {
sb.append(string).append("\n");
}
}
return sb.toString();
}
private void print(DataBaseSnapshot baseSnapshot) {
System.out.println("");
System.out.println("Instancias");
System.out.println("_________________________________________________");
for (String instance : baseSnapshot.getInstances()) {
System.out.println(instance);
}
System.out.println("");
System.out.println("");
System.out.println("Attributes");
System.out.println("_________________________________________________");
for (String attribute : baseSnapshot.getAttributes()) {
System.out.println("attribute: " + attribute);
}
}
private void setAssociationRuleMetric(String assRuleMetric, DataMiningBean bean) {
//1 = Confidence
//2 = Lift
//3 = Leverage
//4 = Conviction
boolean found = false;
for (SelectItem selectItem : bean.getComboAssociationRuleMetric().getListaSelecao()) {
String assRule = selectItem.getLabel();
if (assRuleMetric.compareTo(assRule) == 0) {
found = true;
break;
}
}
assertTrue(found, "Associantion Rule not found: " + assRuleMetric);
bean.getComboAssociationRuleMetric().setSelecao(assRuleMetric);
bean.updateMetricType();
}
private DataMiningResult runDatamining(String assocRuleMetric, double minMetric) {
setAssociationRuleMetric(assocRuleMetric, dataMiningBean);
setMiningControl(minMetric, dataMiningBean);
Output.clearLog();
Output.println("Mining with " + assocRuleMetric);
Output.println("Support:" + NumberUtil.format(dataMiningBean.getMiningControl().getMinSup()));
Output.println("Metric type:" + dataMiningBean.getMiningControl().getMetricType());
Output.println("Metric value:" + NumberUtil.format(dataMiningBean.getMiningControl().getMinMetric()));
try {
//Mining
startTimer("Mining association rules");
dataMiningBean.mineAssociationRules();
endTimer("mineAssociationRules time cost");
} catch (Exception ex) {
println(ex.getMessage());
return null;
}
//save to database
startTimer("Saving datamining");
dataMiningBean.saveDataMiningResult();
endTimer("saveDataMiningResult time cost");
//print result
DataMiningResult result = dataMiningBean.getCurrentDataMiningResult();
Output.println(toString(result));
String fileName = ".\\target\\assocRuleMetric_" + DateUtil.currentFile()+".txt";
Archive arc = new Archive(fileName);
arc.openAppendAndClose(Output.getLog());
return result;
}
private void addMetric(List<Metric> ignoredMetrics, OstraMetricService ostraMetricService, String metricName) throws ServiceException {
try {
ignoredMetrics.add(ostraMetricService.getMetric(metricName));
return;
} catch (ServiceException ex) {
//not the name of the metric
}
//trying acronym
try {
ignoredMetrics.add(ostraMetricService.getByAcronym(metricName));
} catch (ObjetoNaoEncontradoException ex) {
System.out.println("Not found metric: " + metricName);
// throw new ServiceException( ex);
}
}
private void removeBadResults(List<DataMiningResult> dataMiningResults) {
DataMiningResultService dataMiningResultService = ObjectFactory.getObjectWithDataBaseDependencies(DataMiningResultService.class);
if (dataMiningResults.size() > maxBadResults) {
DataMiningResult dataMiningResult = dataMiningResults.remove(0); //remove worst
try {
dataMiningResultService.delete(dataMiningResult);
} catch (ObjetoNaoEncontradoException ex) {
fail(ex.getMessage(), ex);
}
}
}
private boolean isAvgValueDiffZero(Metric metric) throws ServiceException {
final MeasurementService ms = ObjectFactory.getObjectWithDataBaseDependencies(MeasurementService.class);
Double value = ms.getAvgValue(metric, neoPz);
boolean diffZero = !NumberUtil.isZero(value);
println("Avg of " + metric.getName() + ": " + NumberUtil.format(value) + " is diff zero: " + diffZero);
return diffZero;
}
private List<Metric> getIgnoredMetrics(OstraMetricService ostraMetricService) throws ServiceException {
List<Metric> ignoredMetrics = new LinkedList<Metric>();
// //Calculating
// //addMetric(ignoredMetrics, ostraMetricService, "Lines Of Code"); //same as "Lines of Code Total"
// //addMetric(ignoredMetrics,ostraMetricService,"Lines of Code Total");
// //addMetric(ignoredMetrics,ostraMetricService,"average component dependency (ACD)");
// //addMetric(ignoredMetrics,ostraMetricService,"max depth of type inheritance");
// //addMetric(ignoredMetrics,ostraMetricService,"number of components");
// //addMetric(ignoredMetrics,ostraMetricService,"cumulative component dependency (CCD)");
// //addMetric(ignoredMetrics,ostraMetricService,"normalized cumulative component dependency (NCCD)");
// //addMetric(ignoredMetrics,ostraMetricService,"cumulative component dependency for balanced binary tree");
// //addMetric(ignoredMetrics,ostraMetricService,"cumulative component dependency for cyclically dependent graph");
// //addMetric(ignoredMetrics,ostraMetricService,"max depth of package hierarchy");
// //addMetric(ignoredMetrics,ostraMetricService,"number of outgoing compilation unit dependencies");
// //addMetric(ignoredMetrics,ostraMetricService,"number of outgoing layer dependencies");
// //addMetric(ignoredMetrics,ostraMetricService,"number of outgoing package dependencies");
// //addMetric(ignoredMetrics,ostraMetricService,"number of outgoing subsystem dependencies");
// //addMetric(ignoredMetrics,ostraMetricService,"number of outgoing type dependencies");
// //addMetric(ignoredMetrics,ostraMetricService,"number of project external compilation units");
// //addMetric(ignoredMetrics,ostraMetricService,"number of project external packages");
// //addMetric(ignoredMetrics,ostraMetricService,"number of project external types");
// //addMetric(ignoredMetrics,ostraMetricService,"number of project internal compilation units");
// //addMetric(ignoredMetrics,ostraMetricService,"number of project internal packages");
// //addMetric(ignoredMetrics,ostraMetricService,"number of project internal types");
// addMetric(ignoredMetrics, ostraMetricService, "percentage of project internal layers with a relational cohesion >= 1.0");
// addMetric(ignoredMetrics, ostraMetricService, "percentage of project internal packages with a relational cohesion >= 1.0");
// addMetric(ignoredMetrics, ostraMetricService, "percentage of project internal subsystems with a relational cohesion >= 1.0");
//
// //Not calculating or not project metric
// //intersting why not extracting
// addMetric(ignoredMetrics, ostraMetricService, "number of compilation unit cycles");
// addMetric(ignoredMetrics, ostraMetricService, "number of compilation unit tangles");
// addMetric(ignoredMetrics, ostraMetricService, "number of concrete types");
// addMetric(ignoredMetrics, ostraMetricService, "afferent (incoming) coupling (Ca)");
// addMetric(ignoredMetrics, ostraMetricService, "afferent (incoming) coupling (Ca) - project external");
// addMetric(ignoredMetrics, ostraMetricService, "abstractness (A)");
// addMetric(ignoredMetrics, ostraMetricService, "average usage of assertions per class");
// addMetric(ignoredMetrics, ostraMetricService, "contains accessible types but no incoming outer package dependencies exist");
// addMetric(ignoredMetrics, ostraMetricService, "depends upon");
// addMetric(ignoredMetrics, ostraMetricService, "depth of class inheritance");
// addMetric(ignoredMetrics, ostraMetricService, "depth of interface inheritance");
// addMetric(ignoredMetrics, ostraMetricService, "depth of package hierarchy");
// addMetric(ignoredMetrics, ostraMetricService, "distance (D)");
// addMetric(ignoredMetrics, ostraMetricService, "efferent (outgoing) coupling (Ce)");
// addMetric(ignoredMetrics, ostraMetricService, "instability (I)");
// addMetric(ignoredMetrics, ostraMetricService, "more package external than internal relations exist");
// addMetric(ignoredMetrics, ostraMetricService, "no dependencies detected");
// addMetric(ignoredMetrics, ostraMetricService, "no incoming dependencies detected");
// addMetric(ignoredMetrics, ostraMetricService, "number of abstract types (Na)");
// addMetric(ignoredMetrics, ostraMetricService, "number of accessible types");
// addMetric(ignoredMetrics, ostraMetricService, "number of assertions");
// addMetric(ignoredMetrics, ostraMetricService, "number of children (NOC)");
// addMetric(ignoredMetrics, ostraMetricService, "number of contained packages");
// addMetric(ignoredMetrics, ostraMetricService, "number of contained subsystems");
// addMetric(ignoredMetrics, ostraMetricService, "number of external type relations");
// addMetric(ignoredMetrics, ostraMetricService, "number of forbidden outgoing compilation unit dependencies");
// addMetric(ignoredMetrics, ostraMetricService, "number of forbidden outgoing dependencies");
// addMetric(ignoredMetrics, ostraMetricService, "number of forbidden outgoing package dependencies");
// addMetric(ignoredMetrics, ostraMetricService, "number of incoming dependencies");
// addMetric(ignoredMetrics, ostraMetricService, "number of incoming dependencies - project external");
// addMetric(ignoredMetrics, ostraMetricService, "number of internal type relations");
// addMetric(ignoredMetrics, ostraMetricService, "number of layer cycles");
// addMetric(ignoredMetrics, ostraMetricService, "number of layer tangles");
//
// addMetric(ignoredMetrics, ostraMetricService, "number of not assigned packages");
// addMetric(ignoredMetrics, ostraMetricService, "number of outgoing dependencies");
// addMetric(ignoredMetrics, ostraMetricService, "number of outgoing dependencies to project external");
// addMetric(ignoredMetrics, ostraMetricService, "number of outgoing vertical slice dependencies");
//
// addMetric(ignoredMetrics, ostraMetricService, "number of package cycles");
// addMetric(ignoredMetrics, ostraMetricService, "number of package external relations");
// addMetric(ignoredMetrics, ostraMetricService, "number of package internal relations");
// addMetric(ignoredMetrics, ostraMetricService, "number of package tangles");
// addMetric(ignoredMetrics, ostraMetricService, "number of project internal vertical slices");
// addMetric(ignoredMetrics, ostraMetricService, "number of subsystem cycles");
// addMetric(ignoredMetrics, ostraMetricService, "number of subsystem tangles");
// addMetric(ignoredMetrics, ostraMetricService, "number of type cycles");
// addMetric(ignoredMetrics, ostraMetricService, "number of type tangles");
// addMetric(ignoredMetrics, ostraMetricService, "number of types (Nc)");
// addMetric(ignoredMetrics, ostraMetricService, "number of vertical slice tangles");
// addMetric(ignoredMetrics, ostraMetricService, "percentage of project internal vertical slices with a relational cohesion >= 1.0");
// addMetric(ignoredMetrics, ostraMetricService, "relational cohesion (RC)");
// addMetric(ignoredMetrics, ostraMetricService, "the most external relations exist with package");
//
// addMetric(ignoredMetrics, ostraMetricService, "Number of Overridden Methods");
// addMetric(ignoredMetrics, ostraMetricService, "Abstractness");
// addMetric(ignoredMetrics, ostraMetricService, "Cyclomatic Complexity");
// addMetric(ignoredMetrics, ostraMetricService, "Average Number Of Ancestors");
// addMetric(ignoredMetrics, ostraMetricService, "Class Interface Size");
// addMetric(ignoredMetrics, ostraMetricService, "Cohesion Among Methods In Class");
// addMetric(ignoredMetrics, ostraMetricService, "Data Access");
// addMetric(ignoredMetrics, ostraMetricService, "Direct Class Coupling");
// //addMetric(ignoredMetrics, ostraMetricService, "Design Size In Classes");
// addMetric(ignoredMetrics, ostraMetricService, "Lack Of Cohesion Of Methods");
// addMetric(ignoredMetrics, ostraMetricService, "Measure Of Aggregation");
// addMetric(ignoredMetrics, ostraMetricService, "Measure Of Functional Abstraction");
// addMetric(ignoredMetrics, ostraMetricService, "Method Lines Of Code");
// addMetric(ignoredMetrics, ostraMetricService, "Number Of Attributes");
// addMetric(ignoredMetrics, ostraMetricService, "Number Of Hierarchies");
// addMetric(ignoredMetrics, ostraMetricService, "Number of Interfaces");
// addMetric(ignoredMetrics, ostraMetricService, "Number Of Methods");
// addMetric(ignoredMetrics, ostraMetricService, "Number Of Polymorphic Methods");
// addMetric(ignoredMetrics, ostraMetricService, "Number Of Static Methods");
// addMetric(ignoredMetrics, ostraMetricService, "Number Of Static Attributes");
// addMetric(ignoredMetrics, ostraMetricService, "Total Cyclomatic Complexity");
//
// //Derived metrics
// addMetric(ignoredMetrics, ostraMetricService, "Effectiveness");
// addMetric(ignoredMetrics, ostraMetricService, "Extendability");
// addMetric(ignoredMetrics, ostraMetricService, "Flexibility");
// addMetric(ignoredMetrics, ostraMetricService, "Functionality");
// addMetric(ignoredMetrics, ostraMetricService, "Reusability");
// addMetric(ignoredMetrics, ostraMetricService, "Understandability");
//addMetric(ignoredMetrics, ostraMetricService, "Average Number Of Ancestors");
//addMetric(ignoredMetrics, ostraMetricService, "AverageComponentDependency");
//addMetric(ignoredMetrics, ostraMetricService, "CumulativeComponentDependency");
addMetric(ignoredMetrics, ostraMetricService, "CumulativeComponentDependencyForBalancedBinaryTree");
addMetric(ignoredMetrics, ostraMetricService, "CumulativeComponentDependencyForCyclicallyDependentGraph");
//addMetric(ignoredMetrics, ostraMetricService, "Design Size In Classes");
//addMetric(ignoredMetrics, ostraMetricService, "Lines of Code Total");
addMetric(ignoredMetrics, ostraMetricService, "MaxDepthOfPackageHierarchy");
addMetric(ignoredMetrics, ostraMetricService, "MaxDepthOfTypeInheritance");
addMetric(ignoredMetrics, ostraMetricService, "NormalizedCumulativeComponentDependency");
//addMetric(ignoredMetrics, ostraMetricService, "NumberOfComponents");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfForbiddenOutgoingCompilationUnitDependencies");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfForbiddenOutgoingPackageDependencies");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfForbiddenOutgoingSubsystemDependencies");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfForbiddenOutgoingTypeDependencies");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfNotAssignedPackages");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfNotImplementedSubsystems");
//addMetric(ignoredMetrics, ostraMetricService, "NumberOfOutgoingCompilationUnitDependencies");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfOutgoingLayerDependencies");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfOutgoingPackageDependencies");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfOutgoingSubsystemDependencies");
//addMetric(ignoredMetrics, ostraMetricService, "NumberOfOutgoingTypeDependencies");
//addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectExternalCompilationUnits");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectExternalPackages");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectExternalSubsystems");
//addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectExternalTypes");
//addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectInternalCompilationUnits");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectInternalPackages");
addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectInternalSubsystems");
//addMetric(ignoredMetrics, ostraMetricService, "NumberOfProjectInternalTypes");
addMetric(ignoredMetrics, ostraMetricService, "PercentageOfProjectInternalLayersWithARelationalCohesionGreaterThanOne");
addMetric(ignoredMetrics, ostraMetricService, "PercentageOfProjectInternalPackagesWithARelationalCohesionGreaterThanOne");
addMetric(ignoredMetrics, ostraMetricService, "PercentageOfProjectInternalSubsystemsWithARelationalCohesionGreaterThanOne");
return ignoredMetrics;
}
private void cleanOldResults() {
DataMiningResultService dataMiningResultService = ObjectFactory.getObjectWithDataBaseDependencies(DataMiningResultService.class);
List<DataMiningResult> tableDataMiningResults = dataMiningResultService.getAll();
for (DataMiningResult dataMiningResult : tableDataMiningResults) {
try {
dataMiningResultService.delete(dataMiningResult);
} catch (ObjetoNaoEncontradoException ex) {
fail(ex.getMessage(), ex);
}
}
}
private void setMiningControl(Double metricValue, DataMiningBean dataMiningBean) {
dataMiningBean.getMiningControl().setVerboseMode(true);
dataMiningBean.getMiningControl().setMinSup(minSupport);
dataMiningBean.getMiningControl().setMinMetric(metricValue);
dataMiningBean.getMiningControl().setMaxRules(maxRules);
}
}