On 2/28/2011 9:33 AM, Dan Creswell wrote:
Think the nub of the issue is two-fold:

(1) Dealing with namespace clashes (see Patricia's FastList conflict 
discussion).

Okay, but, when I am doing something to replace code/classes with the same name, I most often do this in a branch that I will later reintegrate into the main branch. Sometimes, I will do it in place in an active change-list that I may not submit for some time. There have been times that I've just used the SCM to preserve the changes, in place, by submitting them and then synching to the old version and then submitting that older version over the top of my investigation. Then, I go back later and revisit that idea without losing it, and provide something that others could check out to look at.

I think there are lots of SCM based mechanisms that can be used to "hide" or "manage" these name space based conflicts. Which of these things are people most often using as their reason for being frustrated by testing capabilities?

1) We build this one thing and want to test two version from that single build.
2) Don't have space to have two copies.
3) Can't test locally, so have to submit something to get it into the offline test facilities.
4) Something else I've missed.

(2) Partitioning of tests and fitting them efficiently into development or
build/release cycles.

This points back to 3) above I think. Does that mean that we are just not "testing" the right branch? Shouldn't contributors largely be testing in development branches and then the project integrating and accepting "approved" changes into the production branch that are then tested one more time with a broader integration suite?

In the discussions on the use of branches I didn't really note whether this was something people liked or had experience with. Is there something about this that seems not so attractive? Do many disparate changes can cause integration to be a little more taxing, but that's just a fact of life in some cases where you can't work together, or don't know about another party doing anything in parallel with your work. I do like perforce's centralized store for this reason, because it does make it possible to see where your coworkers are tweaking things so you can expect conflicts or ask them about what things you need to be aware of.

Gregg

On 28 February 2011 15:29, Gregg Wonderly <[email protected]
<mailto:[email protected]>> wrote:

    So, maybe I am not understanding the real issue.  When I run testing on some
    new development, I do it in the branch or changelist that I am working on,
    and record the results.  If I feel like I need to adjust the test strategy,
    I do that as a separate change on a separate branch/changelist that I can
    use to run against the existing code.

    I can checkout/copy (rsync is my friend) stuff to an appropriate place to do
    longer term testing.

    Is the real issue that communicating the "test stuff" (source etc.) really
    requires a "submission" so that it can go over to the test servers because
    the type of change that Patricia wants to test can't be tested in her local
    environment?  I'd guess it is because of the parallel discussion about
    modularity.

    It seems like we have a "different" type of development model that the
    source tree was designed to support vs what the test environment we have
    supports?

    Gregg Wonderly


    On 2/28/2011 9:08 AM, Dan Creswell wrote:

        On 28 February 2011 14:50, Patricia Shanahan<[email protected]
        <mailto:[email protected]>>  wrote:

            Dennis Reedy wrote:

                On Feb 28, 2011, at 1247AM, Patricia Shanahan wrote:

                    How would you propose handling a case like 
outrigger.FastList?

                    It is package access only, so changing its interface to the
                    rest of
                    outrigger did not affect any public API. Several classes
                    needed to be
                    changed to handle the interface change.


                If I understand your question correctly, I think it should be 
fairly
                straightforward. Following module conventions, we would have a
                structure
                that would look (something) like:

                outrigger/src/main/java/org/apache/river/outrigger
                outrigger/src/test/java/org/apache/river/outrigger

                The test (or benchmark) code would be in the same package, just 
in a
                different directory. You would be able to accommodate your
                package access
                only requirement.



            I don't see how that answers the problem of a possible intra-package
            interface change that needs to be benchmarked *before* the changes
            to the
            rest of the package that would be needed to integrate the class
            under test
            with the rest of what would be its package if it wins the benchmark.

            If I had initially named my new FastList implementation
            "com.sun.jini.outrigger.FastList" I could not have compiled
            outrigger in its
            presence. It is not a drop-in replacement for the old FastList.

            If it had turned out to be slower than the existing FastList I would
            still
            have wanted to preserve it, and the relevant benchmark, because of 
the
            possibility that future java.util.concurrent changes would make it
            better.
            On the other hand, I would not have done the changes to the rest of
            outrigger.



        So I think we're coming down to the new FastList implementation having 
to be
        called something else for benchmarking purposes to avoid conflict with 
old
        FastList. Or the new implementation needs to be an inner class of the
        benchmark and that could live in the same package as original FastList. 
Of
        course, still packaging and source organisation concerns to conquer.




Reply via email to