On Mon, Apr 9, 2018 at 1:38 PM, Vincent Massol <vinc...@massol.net> wrote:
> Hi Thomas,
>
>> On 6 Apr 2018, at 11:57, Thomas Mortagne <thomas.morta...@xwiki.com> wrote:
>>
>> Not sure what to think of those examples.
>>
>> The theory sounds nice and it probably produce nice result when
>> talking about one method with a few inputs and an output but for
>> anything more complex (like anything involving components) I feel you
>> end up with a generated test which is a lot harder to read than simply
>> looking at the code.
>
> As I said in my original mail, I think that really depends about who handles 
> the issue (a long time committer who’s being working for years on the code 
> and knows it very well) or someone new who doesn’t know the code well.
>
> Also, it really depends on the context. Imagine the following example:you 
> have a NPE stack trace in production and the line where the NPE is has 
> several variables that can be null. Just looking at the code will not tell 
> you what the problem is. But the test will and you can even put a breakpoint 
> to know which variable is actually null.
>
>> * https://jira.xwiki.org/browse/XWIKI-13031: does not produce the same
>> error at all. Looks like evocash just try to produce any
>> ClassCastException but does not care about the actual types in it
>> which is quite useless (plus reading that test requires a lot of
>> effort just to conclude that the type of the field in the document is
>> not String…)
>
> I’ve not tested them all but all the ones I’ve tested do reproduce correctly 
> the stack trace (that’s the point of evocrash so there’s no way it’ll 
> generate a test that doesn’t reproduce the stack trace! ;)).
>
> To give you more info, you run evocrash by giving it a stacktrace and a frame 
> number (the number of stack trace lines you want it to reproduce).
>
> For ex, on:
>
> Caused by: java.lang.ClassCastException: org.apache.lucene.document.Field 
> cannot be cast to java.lang.String
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.getWikiReference(SolrEntityReferenceResolver.java:93)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.getEntityReference(SolrEntityReferenceResolver.java:70)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.resolve(SolrEntityReferenceResolver.java:63)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.resolve(SolrEntityReferenceResolver.java:46)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrDocumentReferenceResolver.resolve(SolrDocumentReferenceResolver.java:48)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrDocumentReferenceResolver.resolve(SolrDocumentReferenceResolver.java:38)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         […]
>
> If you run evocrash with frame = 5, it’ll generate a test that, when executed 
> lead to:
>
> Caused by: java.lang.ClassCastException: org.apache.lucene.document.Field 
> cannot be cast to java.lang.String
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.getWikiReference(SolrEntityReferenceResolver.java:93)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.getEntityReference(SolrEntityReferenceResolver.java:70)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.resolve(SolrEntityReferenceResolver.java:63)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver.resolve(SolrEntityReferenceResolver.java:46)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]
>         at 
> org.xwiki.search.solr.internal.reference.SolrDocumentReferenceResolver.resolve(SolrDocumentReferenceResolver.java:48)
>  ~[xwiki-platform-search-solr-api-7.4.jar:na]

If you execute the test indicated in
https://jira.xwiki.org/browse/XWIKI-13031?focusedCommentId=98082&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-98082
you will get the following exception:

java.lang.ClassCastException:
org.xwiki.model.internal.reference.ExplicitStringEntityReferenceResolver
cannot be cast to java.lang.String

Sure you get the same stack trace from Exception type and methods
calls point of view but what the message describe is a very different
use case.

>
>> * https://jira.xwiki.org/browse/XWIKI-14475: totally unreadable
>
> Actually this test was not that hard to read for me. It just sets up some 
> mocks. Evocrash can make it even simpler by presenting the mocks in a simpler 
> way but that’s cosmetic and not the focus of evocrash just right now (it’s 
> not the hard part). I’ve also raised something a bit related: 
> https://github.com/STAMP-project/EvoCrash/issues/7
>
> Feel free to raise new issues at 
> https://github.com/STAMP-project/EvoCrash/issues/
>
>> * https://jira.xwiki.org/browse/XRENDERING-422: not really useful but
>> I doubt evocrash can do much about this kind of issue
>
> Yes I agree.
>
>> * https://jira.xwiki.org/browse/XWIKI-13196: this one could help a bit
>> I guess but not sure it's really faster to execute evocash than
>> looking at the code :)
>
> Sure but it also give you the test which is nice. And depending on the line 
> generating the NPE, it’s not always easy to know which variable is null by 
> looking at the code.
>
>> * https://jira.xwiki.org/browse/XWIKI-13916: that's a more complex way
>> than it should to express that we call addTextAreaField for an already
>> existing field yes it's useful
>
> Thanks for the feedback.
>
> There are plenty of limitations/issues with evocrash ATM. It’s good if we can 
> identify cases where it generates stuff that could be useful. One direction 
> that the devs are pursuing is looking at existing test classes to mimick how 
> they’re written to produce the new tests. I don’t know how they’d be able to 
> pull this off (that seems really hard to me ;)) but I know they’re working in 
> this direction.
>
> Thanks
> -Vincent
>
>>
>> On Fri, Apr 6, 2018 at 10:44 AM, Vincent Massol <vinc...@massol.net> wrote:
>>> Hi devs,
>>>
>>> Context
>>> ======
>>>
>>> Evocrash is a tool developed as part of the STAMP research project 
>>> (https://www.stamp-project.eu/). Its goal is to take a stack trace (the use 
>>> case is production stack traces) and generate a test that, when executed, 
>>> reproduces the stack trace ;)
>>>
>>> It’s using Guided Genetic Algorithm to simplify the search space (which is 
>>> pretty cool, isn’t it? ;)). More info at 
>>> https://github.com/STAMP-project/EvoCrash and http://www.evocrash.org/
>>>
>>> Results
>>> ======
>>>
>>> So far evocrash was able to generate tests for the following issues (I’ve 
>>> pasted the generated test code as comment):
>>> * https://jira.xwiki.org/browse/XRENDERING-422
>>> * https://jira.xwiki.org/browse/XWIKI-14475
>>> * https://jira.xwiki.org/browse/XWIKI-13031
>>> * https://jira.xwiki.org/browse/XWIKI-13196
>>> * https://jira.xwiki.org/browse/XWIKI-13916
>>>
>>> Using
>>> =====
>>>
>>> The use case I see is the following:
>>> * A user reports a problem when using XWiki and create a jira issue with a 
>>> stack trace
>>> * An XWiki dev finds it and runs evocrash to generate a test reproducing 
>>> the problem
>>> * The XWiki dev uses the test to understand the reason (breakpoints can be 
>>> put in the IDE) of the problem and writes a better test (which can be 
>>> inspired by the test generated by evocrash or be completely different).
>>>
>>> Questions
>>> ========
>>>
>>> The question we need to answer is whether we think it coud be useful or 
>>> not. Are there cases where it can be useful?
>>>
>>> For example if we imagine someone not knowing the xwiki code base well, 
>>> maybe this can help him/her understand the bug in a simpler way than just 
>>> having to read/find where the problem is in the code base?
>>>
>>> I’ve started the work of trying to evaluate how useful it could be on the 
>>> XWiki project by analyzing the examples above. I've only analyzed 2 ATM 
>>> (see the links in the jira comments) and I’d be interested to have your 
>>> analysis too.
>>>
>>> WDYT?
>>>
>>> Thanks
>>> -Vincent
>>
>>
>>
>> --
>> Thomas Mortagne
>



-- 
Thomas Mortagne

Reply via email to