[Webtest] Dynamic field naming

Ben Cox webtest@lists.canoo.com
Fri, 03 May 2002 15:04:48 -0700


Dierk Konig wrote:
 > While functional tests like WebTests are about the externally visible
 > behaviour of your system, unit tests are about the internal logic,
 > program design, interface conditions and communication between 
developers.
 > They enable the development team to refactor continously. The 
internal units
 > cover much more logic than what the user normally cares about
 > (correct handling of DB error conditions, correct construction of dynamic
 > SQL statements, proper implementation of loops, recursions, lookups, and
 > the like).
 >
 > Well unit tests really play in a different ballpark.
 >

Dierk, Erik, et.al.
    Since this started with something from my thread about 
unit/functional testing, I'll have to throw in Tim and my $.04.  Sorry 
about the length, but this is a philisophical discussion, not a 
technical one :-)
    True enough, unit and functional tests are indeed very different. 
Let's add a third term though:  acceptance tests!  The definition would 
be something like: "tests that a customer defines in order to indicate 
that they will accept the system as complete once they all pass".
    In Extreme Programming these acceptance tests are usually defined to 
correspond to stories (short descriptions/reminders) the customer has 
written about individual pieces of required functionality.  With this 
approach, a specification of a system is a large collection of stories 
on index cards, conversations, and customer-defined acceptance tests 
instead of outdated documents that are expensive to produce and 
maintain.  Once the development team has made all of the acceptance 
tests pass, the system is considered done (for the moment, anyway, until 
the customer adds or changes tests).
    These acceptance tests consistently seem to cross back and forth 
over the line between unit and functional tests because the customer 
cares about testing both the logic and the assembly of components.  They 
are usually testing from the user's perspective, doing operations like 
logging in and running a couple searches, or trying to add records. 
Naturally, from that perspective, they want to ensure the user sees the 
right data, as well as that it shows up in the right place.
    For most people doing Exreme Programming now this takes the form of 
the customer defining test steps in a spreadsheet or other document, and 
programmers writing quite boring source code from it.  Quite a waste of 
time, don't you think?  What would be best is if we could empower them 
to manage the tree of test specifications and test data, and change them 
when their needs change with very little training.  In order for that to 
be a real win, they need to be able to define them in an executable 
form, so that the developers could spend their time and the customer's 
money developing unit tests, functional tests, and source code for the 
system, not copying test specs from English (or German) into source.
    We originally thought that Webtest might be the tool to use in 
defining acceptance tests (for a web application, anyway), but it isn't. 
Webtest does what it set out to do quite nicely!  However, it was 
clearly built as a _functional_ testing tool for _developers_ to use, 
while what is needed for Extreme Programming in the web environment is 
an _acceptance_ testing tool for _customers_ to use.
    It seems that Herr Ostermueller is also discovering that his needs 
are more along the lines of an acceptance testing tool, as opposed to a 
functional testing tool, since he wants to delegate some of the testing 
to non-programmers.  Erik, correct me if I'm wrong, but I suspect that 
you want to enable these non-programmers to define tests as simple use 
cases that verify whatever they feel is important!  Since they aren't 
programmers, they don't know or care about the distinction between 
functional and unit tests, so what they feel is important will likely 
include a lot of logic testing.
    Clearly, this is all just opinion, but I think you'll find that the 
distinction between "functional" and "acceptance" tests is a useful one. 
   In the case of WebTest, this distinction helps illuminate why it 
doesn't fully meet our needs, and why we'd like to have access to more 
of HttpUnit's interface.
    Attempting to build an "AntHttpUnit" for acceptance testing, would, 
we believe, require a somewhat different outlook from the beginning, and 
most importantly, non-programmers helping to define the schema.
    So, that said, what do people think?  Is this distinction 
(acceptance/functional) helpful to you?  What would be useful in an 
acceptance testing tool?

      Ben && Tim


Dierk König wrote:
 > Hi Eric,
 >
 >
 >>>>Logic is to be handled by Unit Tests. (cf <http://www.junit.org>)
 >>>
 >>Does anyone have a more specific reference?
 >
 >
 > Behind the link is the best collection of information about unit testing.
 > You may want to refer to the "articles" section for intoduction.
 >
 > For the topic of logic and unit testing I don't disagree with your view.
 >
 > It seems you have a number of testers, developers and non-developers, 
that
 > are capable of writing webtests. That is great! Make your users define
 > their expectations as written tests and you will have a huge benefit.
 >
 > My statement about "logic" (maybe a bad wording) was based on some 
feature
 > requests that would extend WebTest into a full-blown programming 
language.
 > And it is my considered opinion that it needs a programmer to handle
 > a programming language. WebTest is very restricted as much as programming
 > logic is concerned. A WebTest is always linear in execution without any
 > complicated control flow. We believe this to be a benefit.
 >
 > BTW: for those who want to write WebTests using a full-blown programming
 > language, the can do so: just write your tests in Java using HttpUnit
 > directly.
 >
 > While functional tests like WebTests are about the externally visible
 > behaviour of your system, unit tests are about the internal logic,
 > program design, interface conditions and communication between 
developers.
 > They enable the development team to refactor continously. The 
internal units
 > cover much more logic than what the user normally cares about
 > (correct handling of DB error conditions, correct construction of dynamic
 > SQL statements, proper implementation of loops, recursions, lookups, and
 > the like).
 >
 > Well unit tests really play in a different ballpark.
 >
 > Functional tests are like drawing samples from the countless possible
 > combinations.
 >
 > Well, I just found that I'm not able to tell the whole difference in
 > a mail. I can only point yout to the resources and try to make you
 > curious about trying to use unit testing yourself.
 >
 > cheers
 > Mittie
 >
 > BTW: You will find that WebTest itself has a number of functional tests
 > but also a reasonable number of unit tests. Maybe the WebTest sources 
give
 > some hints on where the differences are.
 >
 >
 >
 >>-----Original Message-----
 >>From: webtest-admin@lists.canoo.com
 >>[mailto:webtest-admin@lists.canoo.com]On Behalf Of
 >>Erik.Ostermueller@alltel.com
 >>Sent: Mittwoch, 1. Mai 2002 20:57
 >>To: webtest@lists.canoo.com
 >>Subject: [Webtest] Dynamic field naming
 >>
 >>
 >>First, thanks for providing the community with such a great product.
 >>
 >>I'd like to revisit a thread that ended with this email:
 >>http://lists.canoo.com/pipermail/webtest/2002q1/000038.html
 >>
 >>Dierk Konig wrote:
 >>
 >>>>Logic is to be handled by Unit Tests. (cf <http://www.junit.org>)
 >>>
 >>Does anyone have a more specific reference?  I looked and could not find
 >>it.
 >>If one assumes that logic is only for unit tests, then that suggests
 >>that only developers can test logic.  Is this a correct assumtion?  This
 >>doesn't seem right to me.  We have a great number of non-developers in
 >>our organization that are capable of using XML files to test the logic
 >>of the system.  We want to share the ownship of testing between
 >>developers and non-developers.  That is tough to do when logic testing
 >>is encoded in source code.
 >>
 >>
 >>
 >>_______________________________________________
 >>WebTest mailing list
 >>WebTest@lists.canoo.com
 >>http://lists.canoo.com/mailman/listinfo/webtest
 >>
 >
 >
 > _______________________________________________
 > WebTest mailing list
 > WebTest@lists.canoo.com
 > http://lists.canoo.com/mailman/listinfo/webtest
 >
 >



-- 
Truth is within ourselves; it takes no rise
  From outward things, whate're you may believe
There is an inmost center in us all,
Where Truth abides in fulness;...and, to KNOW,
Rather consists in opening out a way
Whence the imprisoned splendor may escape,
Than in effecting entry for a light
Supposed to be without
    --  Robert Browning, "Paracelsus"