Stefano,
One question: The refactoring you are providing, does it work? (Did you
run it? Did you test all the features and functionality beforehand and
afterwards?)
I agree with Steve that a refactoring is not worth applying if we don't
know if it doesn't breaks something, regardeless how simple the
refactoring is, how ugly the code was and how shining it is afterwards.
I made this mistake too many times before myself.
Of course, we cannot catch every newly introduced bug at first commit,
but we should try. It's much less effort than hunt it anytime later.
Even if there _are_ unit tests, I see it as my duty as a committer do
run additional functional test by hand. Some things simply can't be done
with unit tests.
IMHO, if you find out that the touched code works like before or better,
go ahead and apply the patch.
And if you already did all this, please ignore my rant. ;-)
Bernd
Stefano Bagnara wrote:
I would like to add an example:
In James 2.1 we had FetchPOP
In James 2.2.0 FetchMail has been introduced and FetchPop deprecated.
Fetchmail was a complete rewrite and had no unit tests, and has been
introduced in a minor (2.#) release.
Does this mean that if I rename the refactored code to "GrabMail" we can
introduce it in James 2.4.0 and deprecate James 2.2.0 ? ;-)
I know that FetchMail was a big improvement over FetchPOP in the
features aspect, but I'm trying to add evidence to my reasons ;-)
I just want to note that if we require people to unittests every aspect
of James in order to change anything this could be the death of James.
The best effort for unit tests on James I ever seen has been done by
Bernd and we all really appreciated this. I also wrote as much unit
tests as possible when working on hard things (mainly MimeMessageWrapper
and the CoW proxy). I also wrote most of the unit tests in jSPF, because
I think tests are really usefull, but I don't think James will get any
new feature if the prerequisite is to write unit tests for the old code.
That said I don't want to enforce a bad practice only because that
practive has been followed in past, I just want to have a better
"measure" for our discussion.
And now a generic comment on this discussions:
What I expect from the PMC committers when anyone make a proposal is a
clean vote in the range -1...+1 with possible technical explanations,
alternative solutions, and blocking issues to change a -X vote to +0, if
any.
Imho if we want to release James much more than once in 2 years we have
to enforce a more agile decision making solution.
Stefano
Steve Brewin wrote:
My main issue is purely practical. I think it seriously unwise to make
changes on such a scale to any component without unit tests with
sufficient coverage to validate it still works across all usage the
scenarios. This is not a minor incrementl refactoring, of which I
fully approve. This is a total rewrite.
Without unit tests, I can't understand how we can have confidence in
such a rewrite when your main argument for doing so is that you do not
understand the existing code, "To me it's something like obfuscated: I
feel worst than browsing decompiled code ;-)".
This is not me being protective. This is me voicing me fears of
treading such a path for any component in a minor (2.#) release. As I
said, "We all know that major changes are prone to creating new
issues". I don't think any component with so few issues open against
it justifies the risk of introducing new bugs this degree of change
will inevitably entail.
I'm more than happy for you to prove me wrong by way of unit tests.
Otherwise I think this belongs in the bucket of things to consider for
3.0.
Cheers
-- Steve
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]