- DDJ:  What was your first introduction to testing? 
What did that leave you thinking about the 
act and/or concept of testing?
	
	EFM:
	Probably my first introduction to test was when I was
	working on writing 
	programs to test student programs
	on an IBM 7094. 
	Well, "trying to write" may be more accurate.
	That was before I learned what "undecidable" meant!
	 
	Later, in a much more serious vein,
	for a time in the early 1970's I worked 
	in technology that involved
	attempting to verify quality in terminal guidance 
	for interceptor missiles that
	actually might have had nuclear release authority for their
	nuclear warheads intended for anti-ICBM defense.
	It was such a different era -- 
	when the Soviet Union as a threat was taken very, very seriously 
	-- and missile defense was a serious, serious business.
	 
	And, while it was very challenging work 
	it was also kind of frustrating 
	because of the enormous technical difficulty.
	 
	One of the most difficult things for me to do 
	as I recall was to explain to high ranking military types -- 
	Generals with two or three or more stars! --
	what ACTUALLY was going to be involved in
	confirming the quality, reliability and integrity 
	of some of that missile-borne software.
	 
	By a curious twist, 
	however, the extreme difficulty that we revealed in trying to 
	confirm the software that was doing 
	that kind of guidance and control work led, 
	I'm sure only in small part and in concert 
	with work done by a lot of other teams, 
	to the USA signing on to the ABM treaty.
	That was a good thing, for sure!
	 
	Then later, in the Reagan era, "Star Wars"
	popped up and again was used to foment a kind
	of win for the Western Alliance with the
	demise of the Soviet Union.
 
- DDJ: What has most surprised you 
as you have learned about testing/in 
your experiences with testing?
	
	EFM:
	In a word,
	how really hard it is to test applications automatically.
	 
	For example, back in 2000, 
	we were near the end of the client-server test tool cycle.
	Our product line, TestWorks, had been a success, but we
	knew things were changing.
	So, we looked into the crystal ball to try to see the future and
	-- no big surprise here, not rocket science 
	-- the future we saw was "the web."
	 
	So we said, OK, 
	if you have a web browser enabled application, 
	what is the best way to test it?
	And the answer was pretty easy, 
	and really obvious: test it from a browser.
	 
	That was the easy part, defining the outside concept.
	Just test the web application from the browser and you're done.
	 
	Some seven years later we now have released 
	eValid V8, an IE clone browser that can test 
	ANY kind of web browser application including websites, 
	web services, e-commerce applications, etc.
	Because the test functionality is all inside the eValid browser the
	overhead for performing functions is very low, the fidelity
	of what is done is very high, and the ability to do tests
	reliably -- even when the web pages change around a lot --
	is very good.
	 
	But this isn't a product pitch at all.
	The real point here is that we found out -- in many cases the hard way! --
	that it is a lot more 
	complicated to do a good job of automated testing of a web application
	that you'd think.
	 
	Many times I've said to myself, 
	"if we knew then how complicated it was going to
	be to get this product going we might not have done it."
	Maybe we benefited from a kind of technical blindness to the
	underlying complexity of web applications, but that's water over the dam.
	eValid is a built engine and it functions pretty much as we intended
	and hoped.
	 
	You never really know until you try to build functionality into a web browser 
	to allow you to test those functions just exactly what's actually going 
	on "under the hood"...
	until you jump under the hood and try to get control of it!
	That's when the fun begins, and when things that are
	obvious turn out to be very, very subtle and difficult!
	 
	Believe me, it has been a real challenge.
	As we often say around here, "We don't get boredom...".
	 
	But it turned out for the best.  Our technology 
	now has a U.S. Patent (with more Patents Applied for),
	and there is very strong interest in the technical community 
	in the browser-based approach to web testing applications.
 
- DDJ:  How would you describe your testing philosophy?
	
	EFM:
	There's an old line that goes like this; 
	"In testing good news is good news,
	            bad  news is good news.
	The only news in software testing that's bad news is NO news!"
	 
	In other words, you have to REALLY pay attention
	to what you're doing and what you see and what you observe!
	Everything may turn out to be important, and it
	takes a very sharp eye and very careful thinking
	to do testing well.
	And, if all your tests pass you learn nothing.
	Worse, if all your tests fail, you learn even less.
	 
	Software testing is, in essence, structured experimentation -- a very
	disciplined kind of experimentation.
	Certain stimulii produce certain responses in the thing
	you're testing -- the UUT (the Unit Under Test) --
	and the goal is to somehow characterize whether those
	responses are OK or not, relative to some understanding
	of what the object is supposed to do.
	 
	It's great when there is a "formal specification" you
	can test against, but most of the time that's unavailable
	and instead you have to perform your experiments
	against something of lesser context and detail.
	And in that case, instinct, experience, good judgement,
	and -- to be honest -- quite a bit of luck is needed
	to get a good result.
	 
	Not every test has to produce a failure to be valuable.
	I think too often people focus too much on testing to
	reveal failures rather than testing to confirm operation.
	Of course, finding and documenting anomalies is important,
	but that's maybe only 1% of the whole picture of a 
	"mostly OK application."
	 
	Applying these ideas in the eValid technology brought much
	of the basics of testing into very sharp focus.
	In the context of testing web browser enabled applications --
	which typically are extremely complex and rich with functionality 
	-- even the slightest errors can cause real havoc.
 
- DDJ:  What is the most interesting 
bug you have seen?
	
	EFM:
	It seems to me you have to parse 'interesting'
	in two dimensions: intricacy and value.
	Intricacy as in "how hard to detect",
	and value as in how much impact does the defect have?
	 
	Peter Neumann's  "Risks" publishes the biggies.
	Almost always human goofs that have big impact.
	 
	But here is a subtle problem we found that 
	might have taken years to find and might have
	cost users multiple millions.
	 
	A hardware product we were working on performs 
	a kind of virtualization of web access -- in the
	virtual private network space.
	There is software in the device that scans HTML passages
	that are coming over the wire and has to manipulate them
	in a non-invasive way.
	What we found as the result of applying some very tricky
	test suites to the device was what looked at first like
	just a simple LAN-transmission anomaly.
	 
	But it was a consistent and repeatable anomaly.
	 
	We finally isolated the problem down to a programming error in
	one of the HTML processing modules, and we created from that
	guesswork a set of simple HTML passages that were passed
	through incorrectly every time.
	 
	This was very hard to detect -- in fact, it was a problem
	with the product that had been there for many years.
	But as the web-page sophistication level increased, this
	particular defect had increasingly negative effect.
	We never finalized the total value lost to the client,
	but it was certainly multiple millions.
 
- DDJ:  What do you see as the 
biggest challenge for testers/the test 
discipline for the next five years?
	
	EFM:
	The quick answer: The Web!
	 
	The web is in many ways a real mess,
	yet it has enough redundancy and resiliency so that
	it thrives anyway.
	But far too many websites and web applications are vulnerable to all kinds
	of problems: 
	pages that don't work, sloppy JavaScript that eats performance, 
	new technologies that have (ahem, shall we say) "rough edges".
	(The guilty will need no accuser here!)
	 
	These days it's way beyond "broken links" -- those are there
	of course -- the issues are at the level of very powerful applications
	that just don't work reliably enough, or consistently enough.
	Ask yourself, did you see some website (or web application)
	in the last week that turned you off?  Of course you did;
	it's unavoidable.
	 
	But if I had to list the web quality issues they'd 
	come down to these:
	 
	- Web 2.0
 The implications of the Web 2.0 revolution in collaborative websites
	is going to create some very tough quality and testing challenges.
	You have dynamic content, global asynchrony, and a raft of other
	tough issues to deal with.
- AJAX
 The hard part about AJAX is that the better it gets the more
	"Asynchronous" it gets, and doing QA/QC/Testing on something
	that isn't terribly consistent in when it does what it does
	is daunting.
- Web Development Environments
 New systems, like Google's GWT, the Morfik system, and many others
	like them, make it easy to create big, robust, websites.
	If you don't do things right, you ALSO wind up with websites
	that are nearly impossible to do any serious testing on.
- Service Level Assurance
 How do you successfully assure that a web application,
	which could be hosted "in the cloud" or anyway, really
	is working correctly?
	This requires Rich Internet Application monitoring, which
	is a kind of repetitive functional test process.
- Competitive Webiste Comparison
 As web-based commerce moves closer and closer to being
	the main mechanism of "doing business" it's inevitable that
	firms will need to figure out how their website compares
	with the competition.
	Right now that's almost a total unknown!  
	The methods we know about are effective, but they are TOO
	dependent on human interpretation.  Like everything
	in computing it's gotta be automated.