<?xml version="1.0"?>
<puzzles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.0pdd.com/puzzles.xsd" date="2020-07-26T20:01:02+00:00" version="0.30.21">
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/111" closed="2018-02-19T18:35:03+00:00">111</issue>
    <ticket>15</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>15-9a121b89</id>
    <lines>59-62</lines>
    <body>LORM metric has impediments (see puzzles in LORM.xml). Once they are resolved, cover the metric with autotests and add it to reports list. (details on how to test the metrics are to be negotiated here - #107)</body>
    <file>src/main/java/org/jpeek/App.java</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-26T15:30:48Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/204">204</issue>
        <ticket>111</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>111-5690cd5a</id>
        <lines>27-36</lines>
        <body>LORM: figure out how to extract the concepts from each method of a class and then measure their "dispersal": how far apart they are semantically speaking. This would be the same as asking "to what degree are these methods talking about the same things?". Based on a couple of supporting papers that I added to this ticket (here: https://github.com/yegor256/jpeek/issues/111#issuecomment-365651455), I believe the way forward is to use Latent Semantic Indexing of the methods of the class and see how close or synonymous they are with the concept expressed in the class name itself. There seem to be a few java libraries available for latent semantic indexing that we can use.</body>
        <file>src/main/resources/org/jpeek/metrics/LORM.xsl</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-02-19T18:18:54Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/112" closed="2018-02-08T15:51:37+00:00">112</issue>
    <ticket>15</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>15-c8802e55</id>
    <lines>65-73</lines>
    <body>`conceptual-relations` are pairs of methods in the class for which one method contains conceptual relations forming external links out of the set of concepts that belong to the method to or from the set of concepts belonging to another method in the class (quoted from here: https://github.com/yegor256/jpeek/blob/master/papers/izadkhah17.pdf). Right now it is stubbed because information about the method's conceptual relations are not available anywhere in the project. Ensure that JPeek core collects information on such relations (#110) and unstub the lines commented below.</body>
    <file>src/main/resources/org/jpeek/metrics/LORM.xsl</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-26T15:30:48Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/160">160</issue>
        <ticket>112</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>112-f7b740c5</id>
        <lines>67-88</lines>
        <body>Implement natural language processing techniques to analyze conceptual similarity of methods. Two methods have a `conceptual-relation` if they contain at least one same `concept`. `concepts` are identified by semantic processing of the class/method, as being associated in the knowledge-base with that class/method (original paper in /papers/etzkorn00.pdf). The original paper does not explicitly define the implementation of semantic processing, or which NLP methods are being used, but it is a knowledge-based system, which means that additional input must inserted into the LORM method - that is, a set of possible concepts - which are then recognized in a particular method/piece of code. This set of possible concepts depends on the `domain` that the class is in. One way of interpreting what the `domain` is (this is not defined in the original paper), is the business domain the class is used for. Another definition of `domain` also comes to mind - the programming language being used. Concepts could be defined as all reserved Java keywords and "semantic processing" recognizes which reserved keywords are used in a particular method. Hence, if two methods use same reserved keywords, they have a `conceptual-relation`. Using this definition would require no additional input by the user of the LORM method. Right now it is stubbed because NLP/semantic processing is not implemented yet.k Ensure that JPeek core implements these techniques, collects information on such relations and unstub the lines commented below.</body>
        <file>src/main/resources/org/jpeek/metrics/LORM.xsl</file>
        <author>Rok Povsic</author>
        <email>rok.povsic@gmail.com</email>
        <time>2018-02-08T10:59:31Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/117" closed="2018-03-04T13:37:54+00:00">117</issue>
    <ticket>9</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>9-5e913f6c</id>
    <lines>59-62</lines>
    <body>TCC metric has impediments (see puzzles in TCC.xml). Once they are resolved, cover the metric with autotests and add it to reports list. (details on how to test the metrics are to be negotiated here - #107)</body>
    <file>src/main/java/org/jpeek/App.java</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-26T17:26:02Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/118" closed="2018-05-28T11:29:00+00:00">118</issue>
    <ticket>9</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>9-e2b8b5ba</id>
    <lines>64-67</lines>
    <body>LCC metric has impediments (see puzzles in LCC.xml). Once they are resolved, cover the metric with autotests and add it to reports list. (details on how to test the metrics are to be negotiated here - #107)</body>
    <file>src/main/java/org/jpeek/App.java</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-26T17:26:02Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/252" closed="2019-11-20T13:16:28+00:00">252</issue>
        <ticket>118</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>118-aa952a15</id>
        <lines>73-78</lines>
        <body>Add test for LCC with "IndirectlyRelatedPairs" and others. In "IndirectlyRelatedPairs" all methods exist in one transitive closure, so the result should be {@code 1d}. Also, all classes without transitive relations should have the same LCC metric as TCC metric. Before do it we have to fix puzzles in LCC.xml.</body>
        <file>src/test/java/org/jpeek/MetricsTest.java</file>
        <author>Alexander Menshikov</author>
        <email>sharplermc@gmail.com</email>
        <time>2018-05-27T11:41:14Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/253" closed="2020-02-27T11:48:56+00:00">253</issue>
        <ticket>118</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>118-16445758</id>
        <lines>75-77</lines>
        <body>LCC metric has impediments (see puzzles in LCC.xml and in `MetricsTest`). Once they are resolved add it to reports list.</body>
        <file>src/main/java/org/jpeek/App.java</file>
        <author>Alexander Menshikov</author>
        <email>sharplermc@gmail.com</email>
        <time>2018-05-27T11:41:14Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/356" closed="2020-02-18T18:55:29+00:00">356</issue>
        <ticket>118</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>118-560e90f9</id>
        <lines>53-59</lines>
        <body>Add test for LCC with "IndirectlyRelatedPairs" and others. In "IndirectlyRelatedPairs" all methods exist in one transitive closure, so the result should be {@code 1d}. Also, all classes without transitive relations should have the same LCC metric as TCC metric. Before do it we have to fix puzzles in LCC.xml. @checkstyle JavadocTagsCheck (500 lines)</body>
        <file>src/test/java/org/jpeek/MetricsTest.java</file>
        <author>Mohamed Nizar</author>
        <email>nizarucsc@gmail.com</email>
        <time>2019-11-09T06:44:37Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/119" closed="2018-02-26T10:26:54+00:00">119</issue>
    <ticket>9</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>9-7a54dc2b</id>
    <lines>62-65</lines>
    <body>`indirectly-related-pairs` are pairs of methods, which are through other directly connected methods. https://pdfs.semanticscholar.org/672e/de6e3e600eafd84036a0b983b88e481ac626.pdf Right now it is stubbed because information about method-method communication is yet to be provided in skeleton.xml (issue #106).</body>
    <file>src/main/resources/org/jpeek/metrics/LCC.xsl</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-26T17:26:02Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/217">217</issue>
        <ticket>119</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>119-5f1c56e0</id>
        <lines>61-67</lines>
        <body>`indirectly-related-pairs` are pairs of methods, which are connected through `directly-related-pairs`. See section 3.1 of https://pdfs.semanticscholar.org/672e/de6e3e600eafd84036a0b983b88e481ac626.pdf The key sentence is "The indirect connection relation is the **transitive closure** of direct connection relation". See https://en.wikipedia.org/wiki/Transitive_closure for more info on what is a Transitive Closure. We need to apply a Transitive Closure Algorithm on a graph of `directly-related-pairs`. A simpliest Transitive Closure algorithms has O(V&#xB3;) time complexity and involves a mutable V&#xD7;V table (V is amount of vertices). See https://www.geeksforgeeks.org/transitive-closure-of-a-graph/ for an example.</body>
        <file>src/main/resources/org/jpeek/metrics/LCC.xsl</file>
        <author>rexim</author>
        <email>reximkut@gmail.com</email>
        <time>2018-02-19T10:36:00Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/120" closed="2018-02-17T16:41:39+00:00">120</issue>
    <ticket>9</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>9-57e7e31a</id>
    <lines>48-50</lines>
    <body>`directly-related-pairs` currently don't take into account cases when two methods are directly related through calling the third one. This could be possible to take into account only when skeleton will be able to provide method-method relation information (issue #106)</body>
    <file>src/main/resources/org/jpeek/metrics/TCC.xsl</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-26T17:26:02Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/193">193</issue>
        <ticket>120</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>120-5199fe22</id>
        <lines>42-44</lines>
        <body>TCC: inclusion of inherited attributes and methods in the analysis should be configurable. Come back here after #187 is fixed and adjust the xpath for `attrs` and `methods` accordingly.</body>
        <file>src/main/resources/org/jpeek/metrics/TCC.xsl</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-02-17T16:32:11Z</time>
        <children/>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/194">194</issue>
        <ticket>120</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>120-7c3cf0d4</id>
        <lines>48-49</lines>
        <body>TCC: this metric needs to exclude private methods from the analysis. Adjust the xpath for `methods` accordingly after #188 is fixed.</body>
        <file>src/main/resources/org/jpeek/metrics/TCC.xsl</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-02-17T16:32:11Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/195" closed="2020-03-01T03:20:39+00:00">195</issue>
        <ticket>120</ticket>
        <estimate>30</estimate>
        <role>IMP</role>
        <id>120-bc67ce38</id>
        <lines>57-59</lines>
        <body>TCC: need to come back and refactor the following after #156 is fixed. The ops for fields must be properly filtered to ensure that they belong to the enclosing class.</body>
        <file>src/main/resources/org/jpeek/metrics/TCC.xsl</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-02-17T16:32:11Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/121" closed="2018-12-24T17:21:13+00:00">121</issue>
    <ticket>93</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>93-25a7c267</id>
    <lines>38-40</lines>
    <body>NHD needs to be tested against the following after #103 is fixed: NoMethods, OneVoidMethodWithoutParams, WithoutAttributes, OneMethodCreatesLambda. NHD score for all these is "NaN".</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-26T20:06:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/122" closed="2018-12-19T18:42:02+00:00">122</issue>
    <ticket>93</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>93-12454465</id>
    <lines>41-43</lines>
    <body>NHD calculation needs to take into account the method's visibility, which should be configurable and implemented after #101 is fixed.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-26T20:06:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/124" closed="2018-02-26T05:28:13+00:00">124</issue>
    <ticket>18</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>18-58649db9</id>
    <lines>38-40</lines>
    <body>Impediment: #103 must be fixed before LCOM5 is tested against: NoMethods, OneVoidMethodWithoutParams, WithoutAttributes, OneMethodCreatesLambda. The LCOM5 value for these will be "NaN".</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-27T03:03:11Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/125" closed="2018-02-16T17:41:12+00:00">125</issue>
    <ticket>18</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>18-f4ca747e</id>
    <lines>41-43</lines>
    <body>Impediment: test for LCOM5 with "Bar" is not working because the generated skeleton.xml is not including all attributes being used by a method. See #114.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-29T15:00:59Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/138" closed="2018-02-22T17:51:14+00:00">138</issue>
    <ticket>92</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>92-98d84f5f</id>
    <lines>50-52</lines>
    <body>Impediment: test for LCOM2/3 with "Bar" is not working because the generated skeleton.xml is not including all attributes being used by a method. See #114.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-31T19:23:19Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/139" closed="2018-02-28T19:42:08+00:00">139</issue>
    <ticket>92</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>92-8b89e205</id>
    <lines>53-55</lines>
    <body>Impediment: test for LCOM3 with "OneMethodCreatesLambda" does not work because the skeleton.xml creates a &lt;method&gt; for the lambda with no way to discriminate it from regular methods.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-31T19:23:19Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/228" closed="2018-12-15T10:51:09+00:00">228</issue>
        <ticket>139</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>139-752903d5</id>
        <lines>142-149</lines>
        <body>LCOM3: Must first fix #171 by ignoring synthetic methods. These are constructs generated by the compiler that are not declared in the source code. After fixing, implement test case "OneMethodCreatesLambda" for LCOM3. To ignore synthetic methods, enclose the entire body of this method within an IF that checks if `access` != Opcode.ACC_SYNTHETIC. As per docs for ClassVisitor.visitMethod: "This parameter also indicates if the method is synthetic and/or deprecated."</body>
        <file>src/main/java/org/jpeek/skeleton/XmlClass.java</file>
        <author>George Aristy</author>
        <email>george.aristy@gmail.com</email>
        <time>2018-02-18T18:02:38Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/140" closed="2018-02-26T10:41:14+00:00">140</issue>
    <ticket>68</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>68-6427b294</id>
    <lines>50-53</lines>
    <body>SCOM has an impediment on issue #103: cannot currently be tested in MetricsTest when the resulting value is "NaN". Affected tests are: NoMethods, OneVoidMethodWithoutParams, WithoutAttributes, OneMethodCreatesLambda.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-30T21:05:55Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/141" closed="2018-02-26T19:25:41+00:00">141</issue>
    <ticket>68</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>68-96e0ea92</id>
    <lines>54-56</lines>
    <body>SCOM has an impediment on issue #114: cannot currently be tested against "Bar" because the skeleton is incorrectly excluding some attributes from some methods that are using them.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-31T19:28:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/142" closed="2018-03-19T13:25:32+00:00">142</issue>
    <ticket>68</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>68-03d5665d</id>
    <lines>129-131</lines>
    <body>Calculate SCOM_min as per page 86 of the paper (I don't know what the "int" function means). This value can be used as a guide to determine whether a class needs to be split into several classes.</body>
    <file>src/main/resources/org/jpeek/metrics/SCOM.xsl</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-01-30T21:05:55Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/143" closed="2018-06-14T17:08:44+00:00">143</issue>
    <ticket>17</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>17-e0265053</id>
    <lines>69-72</lines>
    <body>MWE metric has impediments (see puzzles in MWE.xml). Once they are resolved, cover the metric with autotests and add it to reports list. (details on how to test the metrics are to be negotiated here - #107)</body>
    <file>src/main/java/org/jpeek/App.java</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-30T22:14:56Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/144" closed="2018-06-14T17:08:46+00:00">144</issue>
    <ticket>17</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>17-049820b6</id>
    <lines>47-52</lines>
    <body>The current implementation of MWE metric expects information about LDA topics and their probability in skeleton.xml by xpath `class/methods/method/topics/topic`. `topic` items must have two mandatory attributes - `@name` (topic unique identifier) and `@p` (probability of the topic's occurence in the method). Currently this part of information is missing in skeleton.xml. Ensure that the core part of JPeek provides the information about topics and their probability and update the metric in accordance with the provided XML structure.</body>
    <file>src/main/resources/org/jpeek/metrics/MWE.xsl</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-30T22:14:56Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/145" closed="2018-03-19T13:08:28+00:00">145</issue>
    <ticket>17</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>17-f82757ae</id>
    <lines>75-79</lines>
    <body>Di value is supposed to be calculated by formula: Di = sum( -Qdi * log(Qdi) ) / log(n). See the MWE metric description for details. However, logarithm function is currently not available in XSL, that's why it is stubbed. Ensure that there is a way to define logarithm in metrics XSL and unstub Di calculation.</body>
    <file>src/main/resources/org/jpeek/metrics/MWE.xsl</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-01-30T22:14:56Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/146" closed="2018-07-01T19:43:54+00:00">146</issue>
    <ticket>66</ticket>
    <estimate>15</estimate>
    <role>IMP</role>
    <id>66-9d79a0db</id>
    <lines>122-124</lines>
    <body>Add the CCM metric report here when all the puzzles about it are resolved. It requires 'params' to be passed in in order to properly include or exclude ctors.</body>
    <file>src/main/java/org/jpeek/App.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-01T20:32:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/147" closed="2018-06-04T06:12:45+00:00">147</issue>
    <ticket>66</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>66-c487e21b</id>
    <lines>52-55</lines>
    <body>For CCM, the following test cases need to be added after #103 is fixed: NoMethods, WithoutAttributes, OneMethodCreatesLambda, OneVoidMethodWithoutParams. The CCM value for these cases is NaN.</body>
    <file>src/main/resources/org/jpeek/metrics/CCM.xsl</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-01T20:32:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/148" closed="2018-06-25T04:12:58+00:00">148</issue>
    <ticket>66</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>66-1f52dc9d</id>
    <lines>58-60</lines>
    <body>For CCM, cannot add test case for class Bar because it is blocked by #114. Omission of the 'NAME' &lt;op&gt; for "getKey" messes up calculations. Add test case after #114 is fixed.</body>
    <file>src/main/resources/org/jpeek/metrics/CCM.xsl</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-01T20:32:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/149" closed="2018-06-12T17:20:41+00:00">149</issue>
    <ticket>66</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>66-72fdfc23</id>
    <lines>63-67</lines>
    <body>For CCM, need to add OR condition to the following xsl:if to check whether two methods both call another method in common for the same class. The skeleton currently does not produce this information. After this is done, we can add test cases for Foo, OverloadMethods, and TwoCommonAttributes.</body>
    <file>src/main/resources/org/jpeek/metrics/CCM.xsl</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-01T20:32:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/154" closed="2018-06-18T12:49:45+00:00">154</issue>
    <ticket>104</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>104-9f730941</id>
    <lines>104-107</lines>
    <body>The logic for overwriting the target directory is very procedural and needs to be refactored. Suggestion: 'target' should be its own animated object where the logic is triggered in its 'toPath' method.</body>
    <file>src/main/java/org/jpeek/Main.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-04T13:45:04Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/166" closed="2018-02-11T08:01:54+00:00">166</issue>
    <ticket>100</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>100-e0c9e789</id>
    <lines>127-131</lines>
    <body>The skeleton for each Report is transformed by applying various changes via XSLChain. This mechanism is for stuff that does not apply to all the metrics and shouldn't necessarily be in the common skeleton. Start implementing and applying stylesheets (where needed), as required in the initial ticket (#100).</body>
    <file>src/main/java/org/jpeek/App.java</file>
    <author>Mihai Andronache</author>
    <email>amihaiemil@gmail.com</email>
    <time>2018-02-10T09:36:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/175">175</issue>
    <ticket>64</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>64-b6d7d67d</id>
    <lines>66-69</lines>
    <body>Implement the C3 method according to the description above. The variable names and comments have to be extracted into a set of words. JPeek core will have to provide all comments for each method so words can be extracted and LSI calculated for each method.</body>
    <file>src/main/resources/org/jpeek/metrics/C3.xsl</file>
    <author>Rok Povsic</author>
    <email>rok.povsic@gmail.com</email>
    <time>2018-02-09T11:44:40Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/176" closed="2018-12-15T08:47:28+00:00">176</issue>
    <ticket>106</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>106-8e3f4f01</id>
    <lines>73-76</lines>
    <body>Adding a new 'op' for calls to methods broke some tests and hence they were removed. Need to do the math for those tests and then add them back: SCOM with "Foo", SCOM with "MethodsWithDiffParamTypes", and SCOM with "OverloadMethods".</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-09T14:37:39Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/180">180</issue>
    <ticket>114</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>114-7bfa1f3a</id>
    <lines>270-281</lines>
    <body>Find and include the name of the variable the method is called on, if possible. Currently, only the name of called method is retrieved. This is currently implemented in `visitMethodInsn` down below. Example 1: `Bar.NAME.length();` - Here, `length` is retrieved from the method `visitMethodInsn`'s - param `name`, but the word `NAME` itself is not included in any of - the `visitMethodInsn` arguments. Example 2: `src.length();` - Here, `length` is retrieved from the method `visitMethodInsn`'s - param `name` but the word `src` itself is not included in any of - the `visitMethodInsn` arguments.</body>
    <file>src/main/java/org/jpeek/Skeleton.java</file>
    <author>Rok Povsic</author>
    <email>rok.povsic@gmail.com</email>
    <time>2018-02-13T16:51:37Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/181" closed="2019-07-15T19:04:58+00:00">181</issue>
    <ticket>103</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>103-11fe8626</id>
    <lines>63-69</lines>
    <body>NaN-based assertions introduced in #103 made complexity of `testsTarget` higher. Potentially, if more possible invariants will be introduced, enlarging complexity may become real problem for this method. That's why parametrized tests as a generic way of testing all metrics is proposed to be refactored. Possible alternatives are either classical JUnit modules, one per test, or wrapping parameters to reusable test case objects, like described here - https://github.com/yegor256/cactoos-test</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>Kapralov Sergey</author>
    <email>skapralov@mail.ru</email>
    <time>2018-02-08T19:19:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/199" closed="2018-12-17T11:04:05+00:00">199</issue>
    <ticket>134</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>134-9a3b0d90</id>
    <lines>26-28</lines>
    <body>Index.xsd: add `xsd:documentation` tags as per issue #134. We need to document the schemas in src/resources/org/jpeek/xsd so that the semantics of the generated XML documents is transparent for maintainers.</body>
    <file>src/main/resources/org/jpeek/xsd/index.xsd</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-02-19T09:59:19Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/282" closed="2019-10-06T17:24:36+00:00">282</issue>
        <ticket>199</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>199-15890460</id>
        <lines>143-144</lines>
        <body>Index.xsd: add `xsd:documentation` as per #199 to the `bars` element. The element seems to describe the graph on the index.html</body>
        <file>src/main/resources/org/jpeek/xsd/index.xsd</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2018-12-17T10:51:43Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/200">200</issue>
    <ticket>134</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>134-3180ea38</id>
    <lines>26-28</lines>
    <body>Matrix.xsd: add `xsd:documentation` tags as per issue #134. We need to document the schemas in src/resources/org/jpeek/xsd so that the semantics of the generated XML documents is transparent for maintainers.</body>
    <file>src/main/resources/org/jpeek/xsd/matrix.xsd</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-02-19T09:59:19Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/201" closed="2019-01-11T15:30:32+00:00">201</issue>
    <ticket>134</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>134-7dff7043</id>
    <lines>26-28</lines>
    <body>Metric.xsd: add `xsd:documentation` tags as per issue #134. We need to document the schemas in src/resources/org/jpeek/xsd so that the semantics of the generated XML documents is transparent for maintainers.</body>
    <file>src/main/resources/org/jpeek/xsd/metric.xsd</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-02-19T09:59:19Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/203" closed="2018-07-18T06:37:13+00:00">203</issue>
    <ticket>90</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>90-29fbce76</id>
    <lines>77-78</lines>
    <body>OCC metric: need to implement the rest of the test cases. Could only fit test for sample class "Foo" within budget in this one.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-11T17:22:55Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/205" closed="2019-01-24T13:22:32+00:00">205</issue>
    <ticket>67</ticket>
    <estimate>30</estimate>
    <role>IMP</role>
    <id>67-33d40469</id>
    <lines>77-78</lines>
    <body>PCC: add the rest of the test cases for this metric. Could only fit test case for MethodsWithDiffParamTypes within budget.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-12T21:33:09Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/215" closed="2019-01-25T18:36:23+00:00">215</issue>
    <ticket>8</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>8-429ff082</id>
    <lines>55-57</lines>
    <body>LCOM4: #156 needs to be fixed in order to avoid confusing access to fields belonging to other classes as if they actually belong to this class. Once #156 is fixed, refactor xpaths 'this_attrs' and 'other_attrs' accordingly.</body>
    <file>src/main/resources/org/jpeek/metrics/LCOM4.xsl</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-02-26T09:31:08Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/310" closed="2020-03-09T13:54:36+00:00">310</issue>
        <ticket>215</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>215-e68a3c3f</id>
        <lines>76-83</lines>
        <body>LCOM4: Graph algorithm to determine disjoint sets. Currently we can only identify the dependencies via only one graph hop so we can't trace methodFour that uses 'num' indirectly via methodTwo and methodOne. Calculating Disjoint sets (also known as Connected Components), requires a graph traversal algorithm like depth-first search. This one will be tricky to implement in XSLT. After implementing, remove the @Ignore.</body>
        <file>src/test/java/org/jpeek/metrics/Lcom4Test.java</file>
        <author>@rultor</author>
        <email>me@rultor.com</email>
        <time>2019-01-25T18:23:15Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/jpeek/issues/415" closed="2020-03-21T03:31:54+00:00">415</issue>
            <ticket>310</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>310-b9e19c83</id>
            <lines>74-82</lines>
            <body>LCOM4: Graph algorithm to determine disjoint sets. We started to implement disjoint calculus by putting a disabled test. Continue to implement the actual calculus of these sets and remove the @Disabled annotation on DisjointTest. so we can't trace methodFour that uses 'num' indirectly Calculating Disjoint sets (also known as Connected Components), requires a graph traversal algorithm like depth-first search. This one will be tricky to implement in XSLT. After implementing, remove the @Disabled from the below test too.</body>
            <file>src/test/java/org/jpeek/metrics/Lcom4Test.java</file>
            <author>HDouss</author>
            <email>douss.hamdi@gmail.com</email>
            <time>2020-03-06T09:18:44Z</time>
            <children>
              <puzzle alive="true">
                <issue href="https://github.com/yegor256/jpeek/issues/431">431</issue>
                <ticket>415</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>415-1e78bb53</id>
                <lines>74-77</lines>
                <body>LCOM4: Graph algorithm to determine disjoint sets. Disjoint sets calculus is now implemented. We should continue calculating LCOM4 metrics (probably you should wait for #413, #403. After implementing, remove the @Disabled from the below test too.</body>
                <file>src/test/java/org/jpeek/metrics/Lcom4Test.java</file>
                <author>HDouss</author>
                <email>douss.hamdi@gmail.com</email>
                <time>2020-03-10T16:54:19Z</time>
                <children/>
              </puzzle>
            </children>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/216" closed="2019-01-07T18:14:43+00:00">216</issue>
    <ticket>8</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>8-435f2b33</id>
    <lines>60-61</lines>
    <body>LCOM4: need to finish implementing the rest of the test cases. Only test case "MethodMethodCalls" was implemented in this 30min ticket.</body>
    <file>src/main/resources/org/jpeek/metrics/LCOM4.xsl</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-02-26T09:31:08Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/294" closed="2019-10-05T22:48:39+00:00">294</issue>
        <ticket>216</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>216-0c93d2e3</id>
        <lines>60-62</lines>
        <body>LCOM4: need to finish implementing the rest of the test cases. Only test case "OneCommonAttribute", "NotCommonAttributes", "NotCommonAttributesWithAllArgsConstructor", was implemented in this 30min ticket.</body>
        <file>src/main/resources/org/jpeek/metrics/LCOM4.xsl</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2019-01-07T17:55:54Z</time>
        <children/>
      </puzzle>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/295">295</issue>
        <ticket>216</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>216-5540d942</id>
        <lines>65-69</lines>
        <body>LCOM4: "NotCommonAttributesWithAllArgsConstructor" test now fails. Constructor with all attributes parameters should not affect LCOM4 metric. So LCOM4.xsl needs to be fixed in order to avoid constructors affection to the metric values. "NotCommonAttributesWithAllArgsConstructor" test case must be added into collection returning by the targets() in the MetricsTest.java when this puzzle done.</body>
        <file>src/main/resources/org/jpeek/metrics/LCOM4.xsl</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2019-01-07T17:55:54Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/218">218</issue>
    <ticket>65</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>65-657d930a</id>
    <lines>51-53</lines>
    <body>TLCOM: we are including access to ALL fields here. After #156 is fixed, come back and refactor xpath for $Ms_that_use_attrs, $left_attrs, and $right_attrs in order to avoid including access to fields belonging to other classes.</body>
    <file>src/main/resources/org/jpeek/metrics/TLCOM.xsl</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-21T18:13:22Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/219">219</issue>
    <ticket>65</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>65-8529ead1</id>
    <lines>79-83</lines>
    <body>TLCOM: need to establish transitive connections between methods with arbitrarily long chains of method calls between them. Right now, this code can establish transitive connections to a max depth of 3 levels, ie up to something like this: m1 calls m2 calls m3 which uses a3 therefore m1 is connected to m3. It will miss connections in longer chains. After fixing this, maybe we can add it to the standard metrics in App.</body>
    <file>src/main/resources/org/jpeek/metrics/TLCOM.xsl</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-21T18:13:22Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/220">220</issue>
    <ticket>65</ticket>
    <estimate>15</estimate>
    <role>DEV</role>
    <id>65-76f12f4d</id>
    <lines>86-87</lines>
    <body>TLCOM: add test for OneMethodCreatesLambda after #171 is fixed. The extra synthetic method introduced by the compiler distorts this metric's result.</body>
    <file>src/main/resources/org/jpeek/metrics/TLCOM.xsl</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-21T18:13:22Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/224" closed="2019-11-12T03:39:00+00:00">224</issue>
    <ticket>135</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>135-d5b2c3f6</id>
    <lines>26-28</lines>
    <body>Skeleton.xsd: add a reference to this schema from the generated skeleton.xml. Schemas from src/resources/org/jpeek/xsd must be referenced in generated XMLs.</body>
    <file>src/main/resources/org/jpeek/xsd/skeleton.xsd</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-27T16:50:55Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/225" closed="2019-01-04T12:59:23+00:00">225</issue>
    <ticket>135</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>135-9cabe027</id>
    <lines>29-31</lines>
    <body>Matrix.xsd: add a reference to this schema from the generated matrix.xml. Schemas from src/resources/org/jpeek/xsd must be referenced in generated XMLs.</body>
    <file>src/main/resources/org/jpeek/xsd/matrix.xsd</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-27T16:50:55Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/226" closed="2019-04-11T17:22:49+00:00">226</issue>
    <ticket>135</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>135-4462c34d</id>
    <lines>29-31</lines>
    <body>Index.xsd: add a reference to this schema from the generated index.xml. Schemas from src/resources/org/jpeek/xsd must be referenced in generated XMLs.</body>
    <file>src/main/resources/org/jpeek/xsd/index.xsd</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-27T16:50:55Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/227" closed="2019-05-01T22:44:42+00:00">227</issue>
    <ticket>135</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>135-1c80191e</id>
    <lines>142-146</lines>
    <body>The current solution to add the reference to 'metric.xsd' in the generated 'metric.xml' is too complex for the task at hand. Refactor towards a simpler solution that ideally would just require one or two Xembly instructions to add the required attribute.</body>
    <file>src/main/java/org/jpeek/Report.java</file>
    <author>George Aristy</author>
    <email>george.aristy@gmail.com</email>
    <time>2018-02-27T16:50:55Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/327">327</issue>
        <ticket>227</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>227-fbf042c2</id>
        <lines>209-214</lines>
        <body>Add a test to check whether passing params to XSLDocument really works. Currently only C3 metric template is known to use parameter named 'ctors'. However C3.xsl is a work in progress and has impediments, see #175. In case the parameter becomes obsolete, consider simplifying construction of XSLDocument without params (see reviews to #326).</body>
        <file>src/main/java/org/jpeek/Report.java</file>
        <author>Ilyas Gasanov</author>
        <email>torso.nafi@gmail.com</email>
        <time>2019-04-27T17:59:47Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/261" closed="2019-11-20T13:16:34+00:00">261</issue>
    <ticket>156</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>156-4fb50d79</id>
    <lines>39-43</lines>
    <body>Skeleton must be upgraded to determine if a field being accessed in a method belongs to that class or to another class. The test in findFieldWithQualifiedName must be uncommented when this issue is resolved. Please see #156 for more detailing in upgrading skeleton behavior.</body>
    <file>src/test/java/org/jpeek/skeleton/SkeletonTest.java</file>
    <author>rultor</author>
    <email>me@rultor.com</email>
    <time>2018-06-13T16:38:24Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/297" closed="2019-11-25T13:20:53+00:00">297</issue>
    <ticket>188</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>188-d010c845</id>
    <lines>31-33</lines>
    <body>Skeleton.xsd: remove method/@public. We should use the new enum method/@visibility which is more flexible. For this remove the attribute from this file and from XmlClass.java</body>
    <file>src/main/resources/org/jpeek/xsd/skeleton.xsd</file>
    <author>@Serranya</author>
    <email>peterlamby@web.de</email>
    <time>2019-01-04T17:16:37Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/359" closed="2020-01-13T14:37:38+00:00">359</issue>
        <ticket>297</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>297-5540e446</id>
        <lines>85-86</lines>
        <body>this method appears three times and may be useful for future tests, so extract the method as a new class.</body>
        <file>src/test/java/org/jpeek/skeleton/XmlClassTest.java</file>
        <author>Gnusin Pavel</author>
        <email>pavel.sin.gnusin@gmail.com</email>
        <time>2019-11-19T18:37:55Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/357" closed="2020-02-20T11:41:28+00:00">357</issue>
    <ticket>308</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>308-016448ee</id>
    <lines>45-48</lines>
    <body>Due to introduce new version of qulice 0.18.17 there were many 'JavadocTagsCheck' suppression, so we need to fix that by remove author, version and since tags in all javadoc. After that remove 'JavadocTagsCheck' suppression.</body>
    <file>src/main/java/org/jpeek/Main.java</file>
    <author>Gnusin Pavel</author>
    <email>pavel.sin.gnusin@gmail.com</email>
    <time>2019-11-19T18:34:28Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/358" closed="2020-02-17T15:08:44+00:00">358</issue>
    <ticket>156</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>156-7b4862fe</id>
    <lines>38-43</lines>
    <body>Skeleton must be upgraded to determine if a field being accessed in a method belongs to that class or to another class. The test in findFieldWithQualifiedName must be uncommented when this issue is resolved. Please see #156 for more detailing in upgrading skeleton behavior. @checkstyle JavadocTagsCheck (500 lines)</body>
    <file>src/test/java/org/jpeek/skeleton/SkeletonTest.java</file>
    <author>Mohamed Nizar</author>
    <email>nizarucsc@gmail.com</email>
    <time>2019-11-09T06:44:37Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/380" closed="2020-02-21T16:58:45+00:00">380</issue>
    <ticket>323</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>323-1d9c6835</id>
    <lines>31-34</lines>
    <body>Migrate the tests in the sub-packages: org.jpeek.metrics, org.jpeek.skeleton and org.jpeek.web to junit 5, so they won't import any classes from junit 4 anymore. Then, we should find a way to exclude junit 4 from project dependecy, so they won't be imported anymore.</body>
    <file>src/test/java/org/jpeek/package-info.java</file>
    <author>Hamdi Douss</author>
    <email>douss.hamdi@gmail.com</email>
    <time>2020-02-17T21:15:16Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/388" closed="2020-02-27T11:54:12+00:00">388</issue>
        <ticket>380</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>380-bf034369</id>
        <lines>29-33</lines>
        <body>Migrate the tests in the remaining sub-package org.jpeek.web to junit 5, so they won't import any classes from Junit 4 anymore. Once we have no more Junit 4 tests, we can remove junit-vintage-engine dependency. Ideally, we should find a way to exclude junit 4 from project dependecy, so its API won't be imported anymore.</body>
        <file>src/test/java/org/jpeek/package-info.java</file>
        <author>HDouss</author>
        <email>douss.hamdi@gmail.com</email>
        <time>2020-02-19T15:04:43Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/381" closed="2020-02-27T11:54:18+00:00">381</issue>
    <ticket>323</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>323-a6bff461</id>
    <lines>58-59</lines>
    <body>This test is fully written against JUnit 4 API. Migrate this parametrized test to junit 5, so it won't import any classes from junit 4 anymore.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>HDouss</author>
    <email>douss.hamdi@gmail.com</email>
    <time>2020-02-18T14:04:54Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/390" closed="2020-02-26T03:49:29+00:00">390</issue>
    <ticket>296</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>296-9cbcd906</id>
    <lines>32-35</lines>
    <body>Now that we have the infrastructure to implement some metrics in other means than XSL transformations. We should try to implement some metrics with Java. We could start with LCOM4 metric that implies a graph traversal algorithm.</body>
    <file>src/main/java/org/jpeek/Report.java</file>
    <author>Hamdi Douss</author>
    <email>douss.hamdi@gmail.com</email>
    <time>2020-02-21T16:58:09Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/396" closed="2020-03-05T14:00:19+00:00">396</issue>
        <ticket>390</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>390-2105ac60</id>
        <lines>146-151</lines>
        <body>this constructor now has too many arguments. We should find a way to refactor the constructor or the class to have fewer parameters. We could start by analyzing the usage of this.params (args in this constructor) and get rid of it if it is not used. Another idea could be to have a data class contaning reporting params: name, args, mean, sigma.</body>
        <file>src/main/java/org/jpeek/XslReport.java</file>
        <author>HDouss</author>
        <email>douss.hamdi@gmail.com</email>
        <time>2020-02-24T08:59:34Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/397" closed="2020-03-05T14:01:59+00:00">397</issue>
        <ticket>390</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>390-3f627cdf</id>
        <lines>33-36</lines>
        <body>We have a separate interface to calculate XML metrics. We should continue to the goal defined in #296 where we should have a java implementation to calculate metrics. The motivation is to be able to make calculations impossible or too difficult to implement in xsl, like LCOM4.</body>
        <file>src/main/java/org/jpeek/Calculus.java</file>
        <author>Hamdi Douss</author>
        <email>douss.hamdi@gmail.com</email>
        <time>2020-02-22T10:53:07Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/yegor256/jpeek/issues/408" closed="2020-03-06T14:10:16+00:00">408</issue>
            <ticket>397</ticket>
            <estimate>30</estimate>
            <role>DEV</role>
            <id>397-94351875</id>
            <lines>33-36</lines>
            <body>We start having the infrastructure for graph building from skeleton. The graph have just nodes for now without any connection between them. We should continue to build nodes connections to reflect methods (inter-)calls. After that, we should continue to implement an LCOM4 metrics calculus based on the graph.</body>
            <file>src/main/java/org/jpeek/Calculus.java</file>
            <author>HDouss</author>
            <email>douss.hamdi@gmail.com</email>
            <time>2020-02-28T14:29:29Z</time>
            <children>
              <puzzle alive="false">
                <issue href="https://github.com/yegor256/jpeek/issues/412" closed="2020-03-09T18:08:31+00:00">412</issue>
                <ticket>408</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>408-c3533a7c</id>
                <lines>33-35</lines>
                <body>We start having the infrastructure for graph building from skeleton with node connections representing methods intercalls. We should continue to implement XML metrics generation using Java (see original issue #296).</body>
                <file>src/main/java/org/jpeek/Calculus.java</file>
                <author>Hamdi Douss</author>
                <email>douss.hamdi@gmail.com</email>
                <time>2020-03-05T22:09:17Z</time>
                <children>
                  <puzzle alive="true">
                    <issue href="https://github.com/yegor256/jpeek/issues/416">416</issue>
                    <ticket>412</ticket>
                    <estimate>30</estimate>
                    <role>DEV</role>
                    <id>412-3d565676</id>
                    <lines>33-38</lines>
                    <body>We start implementing LCOM4Calculus implementation. We should continue calculating real 'class@value' and 'class/vars/var[@id=pairs]/text' values and remove @Disabled annotation on all Lcom4CalculusTest class. If we choose to calculate LCOM4 with Java only we should also remove LCOM4.xsl part that is doing the calculus and let the xsl here just to build the structure of the xml result. This part is especially the one calculating "xsl:variable name='E'" L73-&gt;L89, and the one doing the division L97 -&gt; L99</body>
                    <file>src/main/java/org/jpeek/calculus/Calculus.java</file>
                    <author>Hamdi Douss</author>
                    <email>douss.hamdi@gmail.com</email>
                    <time>2020-03-06T17:30:39Z</time>
                    <children/>
                  </puzzle>
                  <puzzle alive="false">
                    <issue href="https://github.com/yegor256/jpeek/issues/417" closed="2020-03-12T17:34:38+00:00">417</issue>
                    <ticket>412</ticket>
                    <estimate>30</estimate>
                    <role>DEV</role>
                    <id>412-a459088d</id>
                    <lines>40-42</lines>
                    <body>The methodMethodCalls test is asserting the expected LCOM4 value for MethodMethodCalls. Let's have more test cases for LCOM4 metric to cover more realistic cases.</body>
                    <file>src/test/java/org/jpeek/calculus/java/Lcom4Test.java</file>
                    <author>HDouss</author>
                    <email>douss.hamdi@gmail.com</email>
                    <time>2020-03-09T14:18:00Z</time>
                    <children/>
                  </puzzle>
                </children>
              </puzzle>
              <puzzle alive="false">
                <issue href="https://github.com/yegor256/jpeek/issues/413" closed="2020-04-06T17:46:47+00:00">413</issue>
                <ticket>408</ticket>
                <estimate>30</estimate>
                <role>DEV</role>
                <id>408-56dd88a6</id>
                <lines>71-74</lines>
                <body>Nodes connections are built based on method calls. For now, the skeleton does not reflect which overloaded method is called, so the identification of the called method is made by its name. We should wait for #403 to be solved and enhance this implementation to consider the overloaded called method.</body>
                <file>src/main/java/org/jpeek/graph/XmlGraph.java</file>
                <author>Hamdi Douss</author>
                <email>douss.hamdi@gmail.com</email>
                <time>2020-03-05T22:09:17Z</time>
                <children>
                  <puzzle alive="false">
                    <issue href="https://github.com/yegor256/jpeek/issues/440" closed="2020-04-09T18:29:34+00:00">440</issue>
                    <ticket>413</ticket>
                    <estimate>30</estimate>
                    <role>DEV</role>
                    <id>413-309fe9c4</id>
                    <lines>110-113</lines>
                    <body>The following 2 private methods (call and args) could be extracted in two new class to encapsulate logic of serializing an XML method call to its string representation; and the logic of serializing an XML method arguments to its string representation.</body>
                    <file>src/main/java/org/jpeek/graph/XmlGraph.java</file>
                    <author>Hamdi Douss</author>
                    <email>douss.hamdi@gmail.com</email>
                    <time>2020-04-06T14:24:35Z</time>
                    <children>
                      <puzzle alive="false">
                        <issue href="https://github.com/yegor256/jpeek/issues/443" closed="2020-04-21T19:14:23+00:00">443</issue>
                        <ticket>440</ticket>
                        <estimate>30</estimate>
                        <role>DEV</role>
                        <id>440-332bf733</id>
                        <lines>35-37</lines>
                        <body>This class XmlMethodCall should be made public and a test class named XmlMethodCallTest should be added to verify its behaviour.</body>
                        <file>src/main/java/org/jpeek/graph/XmlMethodCall.java</file>
                        <author>Victor No&#xEB;l</author>
                        <email>victor.noel@crazydwarves.org</email>
                        <time>2020-04-09T17:07:33Z</time>
                        <children/>
                      </puzzle>
                      <puzzle alive="false">
                        <issue href="https://github.com/yegor256/jpeek/issues/444" closed="2020-04-21T19:14:28+00:00">444</issue>
                        <ticket>440</ticket>
                        <estimate>30</estimate>
                        <role>DEV</role>
                        <id>440-83d3f1f7</id>
                        <lines>35-37</lines>
                        <body>This class XmlMethodArgs should be made public and a test class named XmlMethodArgsTest should be added to verify its behaviour.</body>
                        <file>src/main/java/org/jpeek/graph/XmlMethodArgs.java</file>
                        <author>Victor No&#xEB;l</author>
                        <email>victor.noel@crazydwarves.org</email>
                        <time>2020-04-09T17:07:33Z</time>
                        <children>
                          <puzzle alive="false">
                            <issue href="https://github.com/yegor256/jpeek/issues/459" closed="2020-05-01T21:55:04+00:00">459</issue>
                            <ticket>444</ticket>
                            <estimate>30</estimate>
                            <role>DEV</role>
                            <id>444-ff900aeb</id>
                            <lines>54-56</lines>
                            <body>This test was disabled because the implementation of XmlMethodArgs was modified to comply with what will be done in #437. Wait until #437 is resolved and then reenable this test</body>
                            <file>src/test/java/org/jpeek/graph/XmlMethodArgsTest.java</file>
                            <author>Hamdi Douss</author>
                            <email>douss.hamdi@gmail.com</email>
                            <time>2020-04-21T17:09:00Z</time>
                            <children/>
                          </puzzle>
                        </children>
                      </puzzle>
                    </children>
                  </puzzle>
                  <puzzle alive="false">
                    <issue href="https://github.com/yegor256/jpeek/issues/441" closed="2020-06-29T20:38:46+00:00">441</issue>
                    <ticket>413</ticket>
                    <estimate>30</estimate>
                    <role>DEV</role>
                    <id>413-b264bb98</id>
                    <lines>43-45</lines>
                    <body>In #413 we evolved graph connection building to take into account overloaded method differentiation as stated in #403. Wait until #403 is fully resolved (for now, it still has the puzzle #437) and then activate back the 2 tests in this class.</body>
                    <file>src/test/java/org/jpeek/graph/XmlGraphTest.java</file>
                    <author>Hamdi Douss</author>
                    <email>douss.hamdi@gmail.com</email>
                    <time>2020-04-05T13:20:05Z</time>
                    <children>
                      <puzzle alive="false">
                        <issue href="https://github.com/yegor256/jpeek/issues/445" closed="2020-05-01T21:55:09+00:00">445</issue>
                        <ticket>441</ticket>
                        <estimate>30</estimate>
                        <role>DEV</role>
                        <id>441-ed4884a5</id>
                        <lines>40-43</lines>
                        <body>Continue the work started with extracting XmlMethodCall and XmlMethodArgs and extract more code from this class pertaining to serializing XML to string. The objective is to have tested classes and to remove the checkstyle suppression below.</body>
                        <file>src/main/java/org/jpeek/graph/XmlGraph.java</file>
                        <author>Victor No&#xEB;l</author>
                        <email>victor.noel@crazydwarves.org</email>
                        <time>2020-04-09T17:07:33Z</time>
                        <children>
                          <puzzle alive="false">
                            <issue href="https://github.com/yegor256/jpeek/issues/472" closed="2020-06-29T20:38:50+00:00">472</issue>
                            <ticket>445</ticket>
                            <estimate>30</estimate>
                            <role>DEV</role>
                            <id>445-b9bbd966</id>
                            <lines>39-44</lines>
                            <body>Continue the work started with extracting XmlMethodCall, XmlMethodArgs and XmlMethodSignature, and extract more code from this class pertaining to serializing XML to string. The objective is to have tested classes and to remove the checkstyle suppression below. Finally consider extracting the whole 'build' method body into a separate class extending ListEnvelope.</body>
                            <file>src/main/java/org/jpeek/graph/XmlGraph.java</file>
                            <author>Vytautas &#x17D;urauskas</author>
                            <email>zurauskas.vytautas@gmail.com</email>
                            <time>2020-04-24T12:00:24Z</time>
                            <children/>
                          </puzzle>
                          <puzzle alive="false">
                            <issue href="https://github.com/yegor256/jpeek/issues/473" closed="2020-07-26T20:00:48+00:00">473</issue>
                            <ticket>445</ticket>
                            <estimate>30</estimate>
                            <role>DEV</role>
                            <id>445-1cfd81f6</id>
                            <lines>77-80</lines>
                            <body>This method works only for skeletons with a single class because it assigns all methods in the skeleton to the first class it finds. Instead, it should iterate through classes and then through methods of each class.</body>
                            <file>src/main/java/org/jpeek/graph/XmlGraph.java</file>
                            <author>Vytautas &#x17D;urauskas</author>
                            <email>zurauskas.vytautas@gmail.com</email>
                            <time>2020-04-24T12:00:24Z</time>
                            <children>
                              <puzzle alive="true">
                                <ticket>473</ticket>
                                <estimate>30</estimate>
                                <role>DEV</role>
                                <id>473-a79b4155</id>
                                <lines>38-41</lines>
                                <body>Find a way to eliminate this ClassDataAbstractionCouplingCheck. The class probably needs to be split into smaller ones, perhaps extracting the maps into separate objects (extending MapEnvelopes), or maybe the list itself.</body>
                                <file>src/main/java/org/jpeek/graph/XmlGraph.java</file>
                                <author>Vytautas &#x17D;urauskas</author>
                                <email>zurauskas.vytautas@gmail.com</email>
                                <time>2020-07-11T17:27:28Z</time>
                                <children/>
                                <issue href="https://github.com/yegor256/jpeek/issues/484">484</issue>
                              </puzzle>
                            </children>
                          </puzzle>
                        </children>
                      </puzzle>
                    </children>
                  </puzzle>
                </children>
              </puzzle>
            </children>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/400" closed="2020-03-03T17:49:19+00:00">400</issue>
    <ticket>323</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>323-1670a5eb</id>
    <lines>58-62</lines>
    <body>This test is fully written against JUnit 4 API. Migrate this parametrized test to junit 5, so it won't import any classes from junit 4 anymore. Once we have no more Junit 4 tests, we can remove junit-vintage-engine dependency. Ideally, we should find a way to exclude junit 4 from project dependecy, so its API won't be imported anymore.</body>
    <file>src/test/java/org/jpeek/MetricsTest.java</file>
    <author>HDouss</author>
    <email>douss.hamdi@gmail.com</email>
    <time>2020-02-18T14:04:54Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/437" closed="2020-04-29T19:58:46+00:00">437</issue>
    <ticket>403</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>403-214b0d9e</id>
    <lines>87-102</lines>
    <body>Method call description has to contain information about the method's arguments. That is important to differentiate overloaded methods to calculate LCOM4. We need to add a tag 'name' to reflect the method name and a tag 'args' to reflect the method's arguments. skeleton.xsd should be changed to support the method's arguments. Also, don't forget to delete @Disabled lines in SkeletonTest#skeletonShouldReflectExactOverloadedCalledMethod. Example: &lt;op code="call"&gt; &lt;name&gt;OverloadMethods.methodOne&lt;/name&gt; &lt;args&gt; &lt;arg type="Ljava/lang/String"&gt;?&lt;/arg&gt; &lt;arg type="Ljava/lang/String"&gt;?&lt;/arg&gt; &lt;/args&gt; &lt;/op&gt;</body>
    <file>src/main/java/org/jpeek/skeleton/OpsOf.java</file>
    <author>sbt-garus-dg</author>
    <email>garus.d.g@gmail.com</email>
    <time>2020-03-25T11:53:00Z</time>
    <children>
      <puzzle alive="true">
        <issue href="https://github.com/yegor256/jpeek/issues/469">469</issue>
        <ticket>437</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>437-43230a3b</id>
        <lines>52-61</lines>
        <body>Skeleton structure has changed in #437, and therefore some xsl metrics calculus are in error or give bad results. Fix the corresponding xslt files and then reput these expected results in metricstest-params.csv MethodsWithDiffParamTypes,CCM,0.0667d MethodsWithDiffParamTypes,SCOM,0.2381d OverloadMethods,SCOM,0.75d TwoCommonAttributes,TLCOM,4.0d Bar,CCM,0.2222d TwoCommonMethods,CCM,0.0333d TwoCommonMethods,LORM,0.26667d</body>
        <file>src/test/java/org/jpeek/MetricsTest.java</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2020-04-29T19:48:58Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/yegor256/jpeek/issues/470" closed="2020-06-29T20:38:54+00:00">470</issue>
        <ticket>437</ticket>
        <estimate>30</estimate>
        <role>DEV</role>
        <id>437-e6b95171</id>
        <lines>41-42</lines>
        <body>This test was disabled after skeleton structure has changed as in #437. Fix LORM.xsl to make it comply with the new structure and then reenable this test again.</body>
        <file>src/test/java/org/jpeek/metrics/LormTest.java</file>
        <author>rultor</author>
        <email>me@rultor.com</email>
        <time>2020-04-29T19:48:58Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/yegor256/jpeek/issues/453" closed="2020-04-21T19:33:37+00:00">453</issue>
    <ticket>447</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>447-5b43df5f</id>
    <lines>49-54</lines>
    <body>This class includes the constructor as part of the methods it considers, so it breaks some of the metrics. For example the CCM metrics test on OverloadMethods (see metricstest-params.csv) expects 0.6 as a result while it should be 1. See #447 for details on that. Find out if the constructor should be counted as one of the methods or not (does it depend on the metrics for example?) and fix it this class and the tests if needed.</body>
    <file>src/main/java/org/jpeek/skeleton/XmlClass.java</file>
    <author>Victor No&#xEB;l</author>
    <email>victor.noel@crazydwarves.org</email>
    <time>2020-04-16T17:57:30Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/460">460</issue>
    <ticket>452</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>452-fc6e85e0</id>
    <lines>48-50</lines>
    <body>Improve how to use section on README.md How to Use section must be improved; we need to explain the many parameters that jpeek jar accepts and the default values for each parameter.</body>
    <file>README.md</file>
    <author>paulodamaso</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2020-04-21T18:56:06Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/461">461</issue>
    <ticket>452</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>452-6485f2e2</id>
    <lines>138-141</lines>
    <body>Extract report building Analyze method is too big. We need to extract report building from here and use a map instead of if statements se we can make easier to add and remove metrics from execution.</body>
    <file>src/main/java/org/jpeek/App.java</file>
    <author>paulodamaso</author>
    <email>pauloeduardolobo@gmail.com</email>
    <time>2020-04-22T12:33:31Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/481">481</issue>
    <ticket>449</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>449-96cd40b8</id>
    <lines>39-50</lines>
    <body>The `node` method in this interface was designed with only XSL implementation in mind - it uses the `metric` parameter to select the XSL file and uses that file to transform the `skeleton`. This makes Java based implementations a little awkward because the `metric` parameter becomes redundant: there is a Java implementation for each metric, and these implementations already know which metric they are for. The question becomes - how to select correct java implementation for a given metric and integrate it seamlessly with XSL calculus in `XslReport`. One option could be removing the `metric` parameter from the method and injecting a Calculus for a concrete metric in `XslReport` directly. Another could be implementing Chain Of Responsibility pattern. Decide on the best way to integrate Java based Calculus with XSL based Calculus in `XslReport` and implement it.</body>
    <file>src/main/java/org/jpeek/calculus/Calculus.java</file>
    <author>Vytautas &#x17D;urauskas</author>
    <email>zurauskas.vytautas@gmail.com</email>
    <time>2020-06-05T18:41:55Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/yegor256/jpeek/issues/482">482</issue>
    <ticket>449</ticket>
    <estimate>30</estimate>
    <role>DEV</role>
    <id>449-dd12396b</id>
    <lines>88-94</lines>
    <body>Implement NCC calculation with `XmlGraph` and use this class to fix CCM metric (see issue #449). To do this, this class, once it works correctly, should be integrated with XSL based calculuses in `XslReport` (see `todo #449` in Calculus). Write a test to make sure the metric is calculated correctly. Also, decide whether the whole CCM metric should be implemented in Java, or only the NCC part. Update this `todo` accordingly.</body>
    <file>src/main/java/org/jpeek/calculus/java/Ccm.java</file>
    <author>Vytautas &#x17D;urauskas</author>
    <email>zurauskas.vytautas@gmail.com</email>
    <time>2020-06-05T18:41:55Z</time>
    <children/>
  </puzzle>
</puzzles>
