Orlando-pt / evosuite_defect-prediction-techniques

EvoSuite - automated generation of JUnit test suites for Java classes
http://www.evosuite.org
GNU Lesser General Public License v3.0
0 stars 0 forks source link

PreMOSA #2

Open Orlando-pt opened 1 year ago

Orlando-pt commented 1 year ago

PreMOSA

In this issue it will be gathered information about PreMOSA.

How to run it

  1. Clone the repository
  2. Checkout to the premosa branch
  3. Create an executable jar file
    • mvn clean package -DskipITs -DskipTests
  4. Copy the master jar file to a project where evosuite can be executed. It is located at master/target/...
  5. Run the jar executable in a project
    java -jar evosuite-master-1.2.1-SNAPSHOT.jar -mem 24000 -permSize 256 \
    -class <classpath to the class we want to make tests> \
    -projectCP <projectcp> -criterion branch \
    -Dstrategy=MOSuite -Dalgorithm=PreMOSA \
    -Dselection_function=RANK_CROWD_DISTANCE_TOURNAMENT \
    -Dsearch_budget=120 -Dassertion_strategy=ALL \
    -Dminimize=false -Dwrite_covered_goals_file=true \
    -Dstop_zero=false -Dcoverage=false -Dnew_statistics=false \
    -Dwrite_junit_timeout=1200 -Dassertion_timeout=3300 \
    -Djunit_check_timeout=2400 -Dmax_loop_iterations=-1 \
    -Dcovered_goals_file=report/covered.goals -Dtest_dir=report/tests \
    -Ddefect_prediction_level=METHOD \
    -Ddefect_prediction_csv=<path to the csv where resides information on DP> -Ddp_input_format=JVM \
    -Dlog_time_taken=true -Dlog_age=true -Dbalance_test_cov=true \
    -Dremove_covered_targets=false \
    -Darchive_all=true -Dnum_test_files=8

    Fill in the missing arguments.

jose commented 1 year ago

Alguma ideia do que significam os seguintes argumentos/propriedades?

-Dlog_time_taken=true
-Dlog_age=true
-Dbalance_test_cov=true
-Dremove_covered_targets=false
-Darchive_all=true -Dnum_test_files=8
Orlando-pt commented 1 year ago

-Dlog_time_taken: apenas coloca um comentário no teste gerado com o tempo que o demorou a criar, do género // time taken: 4s -Dlog_age: faz o msm q o anterior mas desta feita para a idade do test case -Dbalance_test_cov: balanceia a test coverage. Basicamente, quando este argumento é chamado executa-se a seguinte função. -Dremove_covered_targets: este argumento removia os targets que tinham acabado de ser covered do Set uncovered goals. Na altura o PreMOSA n fazia isso por defeito, esta variável é usada p.e no código q removêmos por se ter inserido lógica no Archive.java. Apesar de tudo, esta variável continua a ser usada aqui. -Darchive_all: arquiva todos os test cases gerados. Apenas é utilizada neste if.

Na minha opinião, os 2 primeiros argumentos de log não têm importância, podemos desativá-los. Os 3 últimos desempenham lógica importante para o PreMOSA.

jose commented 1 year ago

Entendido. Concordo, podemos descartar os dois primeiros argumentos. Só para confirmar log_time_taken e log_age são false por defeito, certo?

Orlando-pt commented 1 year ago

sim, confirmo

jose commented 1 year ago

Acho que a descrição do parâmetro defect_prediction_csv

https://github.com/Orlando-pt/evosuite_defect-prediction-techniques/blob/94c8b976e5368f961c2554c874a61b40f031bb3e/client/src/main/java/org/evosuite/Properties.java#L1426-L1427

está errada. Não deveria ser File in which defect scores are stored, certo?

jose commented 1 year ago

O PreMOSA deve ser invocado com o default, i.e.,

-generateMOSuite -Dstrategy=MOSUITE

ou tem que ser executado com a strategy antiga

-generateSuite -Dstrategy=EVOSUITE

? Eu diria que é a former, mas queria confirmar contigo @Orlando-pt.

Orlando-pt commented 1 year ago

Acho que a descrição do parâmetro defect_prediction_csv

https://github.com/Orlando-pt/evosuite_defect-prediction-techniques/blob/94c8b976e5368f961c2554c874a61b40f031bb3e/client/src/main/java/org/evosuite/Properties.java#L1426-L1427

está errada. Não deveria ser File in which defect scores are stored, certo?

Sim, correto. Mudei o comportamento da propriedade mas esqueci-me de lhe mudar novamente a descrição :/

Orlando-pt commented 1 year ago

O PreMOSA deve ser invocado com o default, i.e.,

-generateMOSuite -Dstrategy=MOSUITE

ou tem que ser executado com a strategy antiga

-generateSuite -Dstrategy=EVOSUITE

? Eu diria que é a former, mas queria confirmar contigo @Orlando-pt.

Com a segunda alternativa dá um erro.

* Defect Prediction Guidance: METHOD
* Finished analyzing classpath
* Generating tests for class org.jfree.data.category.DefaultIntervalCategoryDataset
* Test criterion:
  - Branch Coverage
* Computation finished
[MASTER] 21:37:42.139 [logback-2] ERROR ClientNodeImpl - Error when generating tests for: org.jfree.data.category.DefaultIntervalCategoryDataset with seed 1688416657447. Configuration id : null
java.lang.UnsupportedOperationException: isMaximizationFunction() called on mock
        at org.evosuite.ga.FitnessFunctionMock.isMaximizationFunction(FitnessFunctionMock.java:81)
        at org.evosuite.ga.localsearch.DefaultLocalSearchObjective.addFitnessFunction(DefaultLocalSearchObjective.java:70)
        at org.evosuite.ga.metaheuristics.GeneticAlgorithm.addFitnessFunction(GeneticAlgorithm.java:432)
        at java.util.ArrayList.forEach(ArrayList.java:1259)
        at org.evosuite.ga.metaheuristics.GeneticAlgorithm.addFitnessFunctions(GeneticAlgorithm.java:436)
        at org.evosuite.strategy.MOSuiteStrategy.generateTests(MOSuiteStrategy.java:88)
        at org.evosuite.TestSuiteGenerator.generateTests(TestSuiteGenerator.java:643)
        at org.evosuite.TestSuiteGenerator.generateTestSuite(TestSuiteGenerator.java:220)
        at org.evosuite.rmi.service.ClientNodeImpl.lambda$startNewSearch$0(ClientNodeImpl.java:140)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
jose commented 1 year ago

Não percebo. Com a segunda opção dá erro quando o stacktrace mostra coisas (e.g., at org.evosuite.strategy.MOSuiteStrategy.generateTests(MOSuiteStrategy.java:88)) da primeira opção?