Exploration Through ExampleExample-driven development, Agile testing, context-driven testing, Agile programming, Ruby, and other things of interest to Brian Marick
|
Fri, 14 Mar 2003Usability bugs and exploratory testing Laurent Bossavit tells of a usability bug his wife encountered. It seems a library checkin system produced an annoying penalty screen, with sound, for each overdue book. When Laurent's wife checked in thirty books, the penalty beeps drove the librarian mad. Laurent asks "Could a tester have seen this one coming?" An interesting question. Suppose I were doing automated product-level testing. I would certainly have a test in which I checked in multiple overdue books. (I'd probably toss in some not-overdue books as well.) That is, I would not at all be surprised to start typing a test like this: def test_big_checkin_with_fines // add code to create some books @terminal.scan(three_days_overdue_book) assert_overdue_notice(@terminal) @terminal.acknowledge assert_checked_in(three_days_overdue_book) @terminal.scan(within_grace_period_book) At about that time, I'd get annoyed because I could see a bunch of redundant typing coming up. So I'd extract a utility: def assert_overdue_checkin(book) @terminal.scan(book) assert_overdue_notice(@terminal) @terminal.acknowledge assert_checked_in(book) end def test_big_checkin_with_fines // add code to create some books assert_overdue_checkin(three_days_overdue_book) assert_overdue_checkin(within_grace_period_book) assert_overdue_checkin(ten_days_overdue_book) @terminal.checkin(actual_on_time_book) assert_checked_in(actual_on_time_book) ... check that the fines were calculated correctly ... end More intention-revealing, though there is room for improvement. Much more pleasant to type. In fact, I've factored out the annoyance that, in a more audible form, is the bug (using Bret's definition of a bug as "something that bugs someone"). It's my belief that the act of automating would make me pretty unlikely to stop and say, "You know... this repetition is really annoying." I further believe that those sorts of annoyances tend to skate past end-of-iteration demonstrations and the trials that product managers or agile-style Customers make. It's only the real users who use things enough to have their nerves rubbed raw. Real users... and manual testers. Manual testers are the only people on most teams who use the product like the real users and anywhere near as much as the real users. That's one of the reasons why, when I talk about agile testing, I swim a bit against the current and hold out a role for manual exporatory testers. P.S. "Nail-Tinted Glasses" (couldn't determine the real name) points out that interface design people ought to have the experience to avoid the problem. Agreed. They, like testers, should learn about bugs from experience. But, when they slip up, who notices? |
|