[sent this from the wrong address, so it didn't get through to the list]
-------- Message d'origine --------
Envoyé : 5 octobre 2016 00:41:20 GMT+02:00
Le 4 octobre 2016 22:55:35 GMT+02:00, "Anna Petrášová" <kratochanna@gmail.com> a écrit :
On Tue, Oct 4, 2016 at 4:22 PM, Markus Metz
<markus.metz.giswork@gmail.com> wrote:On Tue, Oct 4, 2016 at 5:42 PM, Sören Gebbert
<soerengebbert@googlemail.com> wrote:Hi,
>
> You are very welcome to write the missing tests for core modules.
>
> However, i don't understand the argument that because many coremodules
> have
> no tests, therefore new modules don't need them. If developers ofaddon
> module are serious about the attempt to make their modules usable
and
> maintainable for others, then they have to implement tests. Its
and
> integral
> part of the development process and GRASS has a beautiful test
> environment
> hat makes writing tests easy. Tests and documentation are part ofcoding
> and
> not something special. I don't think this is a hard requirement.
>
> There is a nice statement that is not far from the truth:Untested code
> is
> broken code.these gunittests only test if a module output stays the same. This
This is simply wrong, please read the gunittest documentation.
but then why does
The gunittest for the v.stream.order addon is an example how its
done:
assume certain order numbers for features 4 and 7? What if these
order
numbers are wrong?
Recently I fixed bugs in r.stream.order, related to stream length
calculations which are in turn used to determine stream orders. The
gunittest did not pick up 1) the bugs, 2) the bug fixes.You can write gunittests that will test every flag, every option,
their
combination and any output of a module. I have implemented plenty of
tests,
that check for correct error handling. Writing tests is effort, but
you have
to do it anyway. Why not implementing a gunittest for every feature
while
developing the module?
My guess for the r.stream.* modules is at least 40 man hours of
testing to make sure they work correctly. That includes evaluationof
float usage, handling of NULL data, comparison of results with and
without the -m flag. Testing should be done with both high-res(LIDAR)
and low-res (e.g. SRTM) DEMs.
Tests can be performed on artificial data that tests all aspects of
the
algorithm. Tests that show the correctness of the algorithm for
specific
small cases should be preferred. However, large data should not be
an
obstacle to write a test.
I agree, for tests during development, not for gunittests.
From the examples I read, gunittests expect a specific output. If the
expected output (obtained with an assumed correct version of the
module) is wrong, the gunittest is bogus. gunittests are ok to make
sure the output does not change, but not ok to make sure the outputis
correct. Two random examples are r.stream.order and r.univar.
I am not sure why are we discussing this, it's pretty obvious that
gunittests can serve to a) test inputs/outputs b) catch changes in
results (whether correct or incorrect) c) test correctness of results.
It just depends how you write them, and yes, for some modules c) is
more difficult to implement than for others.
Well, I agree with Markus that unittests are not a panacea and that we should not fall into the trap of thinking that these tests will guarantee that the results of our modules are correct.
However, I do agree that these tests are useful in detecting if any changes to the code change the output, thus raising a flag that the developer has to at least take into account.
I'll try to write some tests for the OBIA tools when I find the time, although I do agree with Markus that it wouldn't be useful to try to write tests that would cover each and every possible corner case...
In the meantime, g.extension is wonderful tool
Moritz
Anna
Markus M
Best regards
Soerenmy2c
Markus M
>
> Best
> Sören
>
>>
>> One thing we could think about is activating the toolbox idea abit
>> more
>> and creating a specific OBIA toolbox in addons.
>>
>>> Identified candidates could be added to core once they fulfillthe
>>> requirements above. Would that happen only in minor releases or
would
>>> that also be possible in point releases?
>>
>>
>> Adding modules to core is not an API change, so I don't see whythey
>> can't
>> be added at any time. But then again, having a series of newmodules
>> can be
>> sufficient to justify a new minor release
>>
>>> Or is that already too much formality and if someone wishes tosee an
>>> addon in core that is simply discussed on ML?
>>
>>
>> Generally, I would think that discussion on ML is the best wayto
>> handle
>> this.
>>
>> Moritz
>>
>>
>> _______________________________________________
>> grass-dev mailing list
>> grass-dev@lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/grass-dev
>
> _______________________________________________
> grass-dev mailing list
> grass-dev@lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-dev_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev