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.