<div dir="ltr">Dear LO developers,<div><br></div><div><div>A simple/naive idea: <br>Loading ODT files into LO while doing a coverage test. </div><div>The source code coverage DIFF will reveal the source code being used exclusively for the ODT feature DIFF of the two documents. <br><br>For example:</div><div><ol><li style="margin-left:15px">Load a very simple test document, like a single paragraph with "Hello World" with LibreOffice and during load doing a code coverage test to identify all the source code, which is being used for loading the ODF test document.</li><li style="margin-left:15px">Enhance the simple test document by a single feature, like making the text bold and do the loading & code coverage again. </li><li style="margin-left:15px">The difference (DIFF) between the two source code coverages represents source code exclusively relevant to the feature bold.</li><li style="margin-left:15px">Future commits changing source code of such an "ODF feature area" would trigger the load/save roundtrip test of these special ODF test document(s).<br><b>The advantage is to have a relevant minimum regression test not taking long to execute.</b></li></ol></div>I already interviewed Maarten, yesterday, who wrote some years ago scripts to run the coverage tests on LO, but they seem not to be executed for a long time:</div><div><a href="https://dev-builds.libreoffice.org/lcov_reports/master-2015-06-10_23.49.39/" target="_blank">https://dev-builds.libreoffice.org/lcov_reports/master-2015-06-10_23.49.39/</a><br></div><div><br></div><div>Is there some LO build VM available that can be extended to reactivate the code coverage tests, so interested parties might follow this approach?</div><div>Especially, I am longing for a "black box script" where I can give a text file with a list of ODF files as an input parameter to be code-cover-tested and receive for each input ODF the code coverage as a text file. Is there any script that can e used?</div><div>In post-processing, the source code DIFF would than be created afterwards. Shouldn't be too difficult (famous last words)... ;-)</div><div><br></div><div>Is anyone interested to join this adventure? :-)</div><div><br></div><div>Cheers,</div><div>Svante</div><div><br></div><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>Von: <strong class="gmail_sendername" dir="auto">Maarten Hoes</strong> <span dir="auto"><<a href="mailto:hoes.maarten@gmail.com" target="_blank">hoes.maarten@gmail.com</a>></span><br>Date: Mo., 2. Nov. 2020 um 22:35 Uhr<br>Subject: Re: Code Coverage LibreOffice<br>To: Svante Schubert <<a href="mailto:svante.schubert@gmail.com" target="_blank">svante.schubert@gmail.com</a>><br>Cc: Michael Stahl <<a href="mailto:mst@libreoffice.org" target="_blank">mst@libreoffice.org</a>><br></div><br><br><div dir="ltr">Hi Svante/Michael,<br><br><br>I'm glad to be of help, if I can be. :)<br><br>First of all, a disclaimer: I'm not a developer. I can write Unix/Linux shell scripts, and used to be a professional Unix/Linux system administrator, but I couldn't write a 'hello world' program in C or C++ if my life depended on it.<br><br>Perhaps I should start with some basics. When talking about 'code coverage', people generally mean 'measure what source code gets executed' (generally by the execution of a test suite), so that you can see how much and what parts of the source code gets covered by the test suite.<br><br>There is a wiki page [1] that describes how to set up lcov/gcov on Linux for the LibreOffice codebase, but I can't tell how accurate or up to date that wiki page currently is. Years ago, I wrote a shell script to automate that [2] process. If I recall correctly, it used to be run automatically (daily ?) by Jenkins, but the host/vm the job ran on became unavailable ages ago, and no-one seemed to notice or care enough to restore it. Old examples of what the generated reports look like can be found on the <a href="http://dev-builds.libreoffice.org" target="_blank">dev-builds.libreoffice.org</a> website [3].<br><br>The process basically looks somewhat like this:<br><br>- Compile your code using additional flags, so that a record will be kept of what code gets executed.<br>- Run the test suite (or whatever else of which you want to see what source code gets executed by running it).<br>- Generate a human readable report that shows what sourcecode got executed.<br><br>Now, on to your specific questions:<br><br>1. Yes, lcov/gcov code coverage will show you all the source code lines that get executed by loading your 'Hello World' test document.<br>2. Yes, loading the same document multiple times will execute the exact same source code every time you do it, provided you don't change any of the conditions (like changing the source code in between runs).<br>3. Yes, I believe that if you take your 'Hello World' test document, and make that text bold, then the difference between the two runs should be the additional code that gets executed by making the text bold.<br><br>One thing to note though, as it may not be immediately obvious: When you start LibreOffice, and open a document, a lot more code will get executed than 'just' the code needed to display the text in the document. All of this additional code will get marked as having been executed in the report. I know of no way around that. So I am assUming (but you know what happens when we assUme) that you need to be intimately familiar with the entire LibreOffice codebase in order to differentiate between 'this is code that gets executed on startup, this is code needed for the GUI, this is code needed for parsing the document' and 'this is the code for the bold feature I want to test'. So I'm not so sure if this gets you specifically what you are looking for. (PS: There is a way to filter out / omit source code that you are not interested in in the final report, but this filtering is done on a per directory-basis. So you can for example filter out 'src/but/not/this/directory', but then you need to be very sure up-front that the code you are looking for is not contained in that directory. This also won't help you if you have 'code you are interested in' and 'code not interested in' that are both located in the same directory).<br><br><br>I hope this may assist to get you started. As I may have raised more questions than I attempted to answer, please feel free to let me know, and I will try my best to be of further assistance.<br><br><br><br>- Maarten<br><br><br><br>[1]<br><a href="https://wiki.documentfoundation.org/Development/Lcov" target="_blank">https://wiki.documentfoundation.org/Development/Lcov</a><br><br>[2]<br><a href="https://git.libreoffice.org/buildbot/+/refs/heads/master/lcov-report/" target="_blank">https://git.libreoffice.org/buildbot/+/refs/heads/master/lcov-report/</a><br><br>[3]<br><div><a href="https://dev-builds.libreoffice.org/lcov_reports/" target="_blank">https://dev-builds.libreoffice.org/lcov_reports/</a></div><div><br></div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 2, 2020 at 8:55 PM Svante Schubert <<a href="mailto:svante.schubert@gmail.com" target="_blank">svante.schubert@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Maarten,<div><br></div><div>Michael Stahl - who is as me a TDF member - dropped your name after the OASIS ODF TC call, in which we are both participating.</div><div>I was curious about LO Code Coverage, but I am more working on ODF than on LibreOffice itself, for instance, the <a href="https://github.com/tdf/odftoolkit" target="_blank">https://github.com/tdf/odftoolkit</a></div><div>There is a little experiment I have in mind, my hope is that you might get curious enough to join it ;-)</div><div><br></div><div>The simple 

idea:</div><div><ol><li>Load a very simple test document, like a single paragraph with "Hello World" with LibreOffice and during load doing a code coverage of all the source code being used for loading the test document.</li><li>Load the simple test document multiple times, is it always the same code coverage? (As I said I am new to LO Code and do not know the result)</li><li>If it is the same (or changes within a predictable range), enhance the simple test document by a single feature, like making the text bold and do the loading & code coverage again. Is the difference between the two coverages the feature bold?</li></ol><div>The question is: Is it possible to create an ODF feature <=> source code relation by doing the above?</div><div>The advantage, if certain parts of source code are being changed, we have better insights on the ODF Testdocuments we are in need.</div><div><br></div><div>The reason why I am asking is that the ODF Toolkit has a library ODFDOM, which is able to transform <a href="https://github.com/tdf/odftoolkit/blob/master/docs/docs/presentations/character-styles.odt" target="_blank">an ODT document</a> into an equivalent list of <a href="https://github.com/tdf/odftoolkit/blob/master/docs/docs/presentations/character-styles.json" target="_blank">user changes (in JSON)</a> as if the document was created from top to bottom. By this, we are able to define more precisely the feature delta of the coverage scenario.</div></div><div><br></div><div>In the upcoming year, I am trying to do several things:</div><div><ol><li>Add to the OASIS ODF specification these user changes (you may call them as well "ODF user features" or "ODF user semantics" or simply "ODF feature")<br>In addition, to add a semantic dictionary.</li><li>Refactor the work on the ODFDOM of ODF Toolkit...(many details)...</li></ol><div></div><div>I would be very curious to set-up an environment, which I can use as a black box, providing a document as input and receive the code coverage as output!🤗</div><div>Would you be so kind to assist me in that, Maarten? As I have frankly little idea where to start ;-)<br></div><div><br></div><div>Best regards,</div><div>Svante</div></div><div><br></div></div>
</blockquote></div>
</div></div></div>