- From: olivier Thereaux <ot@w3.org>
- Date: Fri, 15 Oct 2004 10:40:44 +0900
- To: Bjoern Hoehrmann <derhoermi@gmx.net>
- Cc: public-qa-dev@w3.org
- Message-Id: <3AEA4907-1E4B-11D9-A806-000393A80896@w3.org>
Bjoern, thanks for developing your thoughts, and sorry for not
answering earlier, I was rather busy preparing an important meeting
on... testing.
I generally think what you propose is sound and applicable, with a few
doubts. In order to explain the doubts, I'll give a small timeline and
background info on our discussion.
We currently only have a "bag" of test cases, mostly self describing,
mostly documented in a valid/invalid/the validator chokes on it. We all
agreed long ago that this was not sufficient, and proceeded to study
ways to build something better.
A short list of criteria for our test suite would be:
1) Must be applicable to automated tests (yes/no, valid/invalid,
wellformed/not...) and human-driven tests (UI glitches) and a gray area
(pattern matching to check that the verbose option actually triggers
verbose
2) Must cover critical features, known document types
3) Must cover all bugs known at time t
4) Ideally, would be tied one way or another to our bugzilla
5) Should have sub-collections of tests for different "modules"
6) Must evolve with the development of the validator, and be able to
test old versions as well as the "newest, latest, greatest"
I worked on a system based on cataloguing and documenting test cases,
which quite sadly never received much more attention that "uh,
whatever", it seems.
Then, following our effort on modularization, Bjoern suggests going
with Test::Builder. This is not a bad idea, given that we're pretty
committed to having a platform in perl for a while anyway, and that
Test::Builder is a good mechanism to build and run test collections at
the same time.
T::B would pass criteria 2 and 3, provided we seriously manage the
tests. Basically, these two criteria depend on us, not so much what
system we use.
T::B is also a rather elegant solution for 5) [[sub-collections of
tests for different "modules"]], since each operational module of the
validator could have its own collection of tests.
6) [[Must evolve with the development of the validator, and be able to
test old versions as well as the "newest, latest, greatest]] is more of
a problem for a T::B-based test suite, because it would not be able to
test versions prior to the switch to the appropriate architecture. This
in itself is not a showstopper, and after a while we would still be
able to test different versions of the validator and compare thest
results...
*However*, as far as I understand, the test suite bundled in the
distribution of version n of the validator will be able to test version
n and n-1. But the tests included with version n-1 will only be a
subset of the tests with n, and in particular they won't include tests
derived from bug reports received on version n-1. Granted, we know n-1
will likely fail these tests, they're based on n-1's bugs, but how
about n-2? To me this is the greatest drawback with having the test
suite not independent of the product tested (and the reason why I
wanted an independent catalogue of test cases). Unless there is a way
to backport the tests? I doubt that.
Noodling on 4) [[ tying to bugzilla ]] a little. Should we use bugzilla
to store test cases? It does not seem to let us query for test cases,
though, that's a pity. And we could decide to use the "uri" field for
the test document's URI, which is probably too limitative given how
this field is also used to point to a discussion related to the issue.
So, no automatic tying of bugzilla with the test cases. But we could
still do something a la SVG WG, setting a rule that no bug is accepted
if a test case is not attached to it (thus allowing us to add it to our
repository of test cases).
Finally 1) [[ Must be applicable to automated tests .. and
human-driven tests .. and a gray area in between ]] is, I think, the
weak point of a test suite solely based on T::B. Bjoern was the first
one to point out that a fully automated test framework was not the way
to go with the validator.
There is, of course, this "gray area" I was referring to, but testing
UI without a "U" forces us to lame tricks, or at best fragile :
> sub has_errors
> {
> my $self = shift;
> my $mess = shift || 'Results contain errors';
> $Test->like($self->{res}->content, qr/<ol id="errors">/, $mess);
> }
Well, the example above is not so bad if the semantics of the test is
"did we output the ordered list delimiter", not so much if it's
supposed to test if there were errors.
I'm also wondering about the fact that, in theory at least,
Test::Builder *could* be used to create human-centered testing, ranging
from a crude commandline interfacing telling the user "go to that page,
do you see a red square? [Y/n]" to perhaps something more
sophisticated?
--
olivier
Received on Friday, 15 October 2004 01:40:49 UTC