> On 13 Sep 2019, at 22:10, Gilles Sadowski <gillese...@gmail.com> wrote:
> 
> Hi.
> 
> Le ven. 13 sept. 2019 à 22:34, Alex Herbert <alex.d.herb...@gmail.com 
> <mailto:alex.d.herb...@gmail.com>> a écrit :
>> 
>> 
>> 
>>> On 13 Sep 2019, at 15:27, Gilles Sadowski <gillese...@gmail.com> wrote:
>>> 
>>> Hello.
>>> 
>>> SonarQube reports "duplicated blocks":
>>>   
>>> https://sonarcloud.io/component_measures?id=commons-rng&metric=duplicated_blocks&view=list
>>> 
>>> Does it report about the license header?
>> 
>> No. If you click though to the source code (from a violation in the list) 
>> and scroll you will see a bar in the left margin for the duplicated code. 
>> You can click on it and it states where the duplicate is.
>> 
>> There are 13 reported duplicates and it’s not always a spurious report. Some 
>> of the code blocks are duplicates. In this case it is for code that performs 
>> work to compute more than a single value. As such it is not a simple 
>> refactor to move the block into a method without having to return an object 
>> encapsulating the multiple values computed; or pass in an array to hold all 
>> the value computed; or have a common parent with shared state variable. In 
>> the case of common code in the random generator next() method of Well19937a 
>> and Well44497a the various workarounds to eliminate common code would have 
>> negative effects and is not worth it IMO. In one case it is in classes 
>> within different packages (e.g. AbstractPcg6432 vs PcgRxsMXs64) where the 
>> amount of duplicate code is actually the same but it is outside of the 
>> package structure to have a common parent. That is unreleased code though so 
>> could be rearranged without breaking binary compatibility.
>> 
>> In about half of the cases it is a spurious report where:
>> 
>> - the code block as text is identical but the types of the variables are 
>> different (e.g. byte/short/int in the MarsagliaTsangWangDiscreteSampler) - 
>> in these cases I could try renaming variables but it seems odd since the 
>> code is deliberately copied with modification only for the data type.
>> - the value of the constants are different on a single line of code that 
>> calls a method (e.g. the AbstractXoRoShiRo128 vs AbstractXoShiRo256).
>> 
>> In one case it is exactly the same algorithm (BoxMullerGaussianSampler vs 
>> BoxMullerNormalizedGaussianSampler); here one is deprecated as it is a known 
>> duplicate.
>> 
>>> If so, how to deactivate that spurious report?
>> 
>> Don’t know. I’m currently OK with all the duplicates as they are. Ideally 
>> they could be removed as exceptions without turning off the duplicates 
>> report but leaving them on is fine.
> 
> IIRC it is possible to instruct SonarQube that a particular should be
> considered as solved.
> [I could do it when SonarQube was located at Apache; but one has to be
> logged in (which
> is reasonable for tracking purpose).]
> 
>> 
>> There are a fair number of other code smells (total = 107).
>> 
>> We can get rid of 9 by renaming SEED to S in the 
>> commons/rng/simple/internal/ Converters.
> 
> I don't agree with this rule as it contradicts a more important one IMO:
> self-documenting code.
> 
>> There are 33 for deprecation to ignore.
>> 
>> There are 18 for tests that have no assertions. These are tests that check 
>> constructors do not throw when self-seeded (i.e. input seed is too small). 
>> They could be updated to assert the created object is not null. It seems 
>> pointless to do that. The methods are commented to state they are checking 
>> construction paths. The generators could be tested to ensure they do not 
>> return all zeros or the same number. But a full statistical test of the 
>> output seems over the top.
>> 
>> There are 15 'Extract the assignment out of this expression’ that I prefer 
>> as is in MarsagliaTsangWangDiscreteSampler. But I did write it. I could 
>> change this and it would not affect sampler performance as the code is all 
>> in the sampler creation method. The other 3 are in the generator next() 
>> methods and are written that way to match the reference code. It is a style 
>> that I am fine with in these cases. If changed I would like to do 
>> performance tests to check it doesn’t make the method slower to remove a 
>> coding style warning. So I recommend not changing those for simplicity.
> 
> Fine.
> Could you check that you can declare issues as "solved”?

I can sign in with GitHub and it links my Apache credentials. This allows me to 
comment on issues and ‘confirm’ them which I could not do when not logged in.

However I do not see options to mark false positives and won’t fix. This stack 
overflow thread [1] for SonarCloud 5 states that I need to be added to an 
"Administer Issues” group for the project. Maybe the SonarCloud instance is a 
new version but the same should apply. I don’t have enough permissions.

Is this an issue to raise with INFRA?

[1] 
https://stackoverflow.com/questions/29646256/sonarqube-5-how-do-i-mark-false-positive
 
<https://stackoverflow.com/questions/29646256/sonarqube-5-how-do-i-mark-false-positive>



> 
> Thanks,
> Gilles
> 
>> 
>> 3 for commented out code in the pom.xml could be fixed.
>> 
>> There are 2 ignored tests using zero array seeds. It is known that xor-shift 
>> based generators cannot handle all zero seeds. These tests would never work 
>> for those generators (there are 18 such generators in the library). I 
>> suggest deleting these tests. An alternative would be to test the first 50 
>> values. If all zero then assume the generator is dead. Otherwise do the 
>> statistical test on the generator. The test could be commented to state that 
>> if a generator is outputting non-zero values from an all zero seed that the 
>> output should be random.
>> 
>> The TODO comment in InternalGamma can be removed. It is 3 years old and 
>> there is not currently a need to move this helper class to a different 
>> component.
>> 
>> Then there are a few legitimate oddities for the remaining 10 or so. I can 
>> comment the code so this can be seen when clicking through from Sonar.
>> 
>> Doing all the fixes would remove 48 code smells. It would make looking at 
>> the Sonar report easier.
>> 
>> Alex
>> 
>> 
>>> 
>>> Regards,
>>> Gilles
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to