My contribution in spreading what is software testing

Reading Time: 1 minute

In order to become better tester, I read a lot about software testing. My primary source are testers that I follow on twitter. They are my “testing learn” twitter list. I also have ‘programming learn’ twitter list. And on that list I came across on following blog post:

http://qualitypoint.blogspot.com/2010/04/software-testing-terms.html


My obligation was to comment on that post. I have this blog post because I am not sure if author will approve my comment.


Hi!


This blog post is only useful if you want to pass ISQTB exam. It will not help you to test software in such manner to help team to produce better product. For example:
“It will help to make sure that we are not having any test cases for the requirements which are not asked by the customer.”
It is not possible to write down all the requirements. What about implicit requirements? For example:
System will not crash down if I try to login with Croatian characters.”


This post is example how process from automobile industry were unsuccessfully copied to software industry. In order to understand what is software testing, start with this video.

http://www.youtube.com/watch?v=ILkT_HV9DVU


Regards, Karlo.  

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Testing in 140 characters (or less) #3

Reading Time: 1 minute

@QualityFrog That’s true; /a performance/ doesn’t pass or fail. A performance focuses attention on interesting stuff. @testobsessed
— Michael Bolton (@michaelbolton) July 19, 2012

My eye saw ‘profs’ at first. RT @jamesmarcusbach: “Testing cannot demonstrate the absence of bugs. NOTHING can do that, not even proofs.”
— Michael Bolton (@michaelbolton) July 21, 2012

“What we see depends mainly on what we look for.”-John Lubbock #testing #quality ow.ly/cpEg1
— Gerald Weinberg (@JerryWeinberg) July 22, 2012

@imccowatt Taleb says that failure prevention is never noticed, and that’s “monstrously unfair”.
— Michael Bolton (@michaelbolton) July 23, 2012

@imccowatt @paulholland_twn Exactly: oracles can be used generatively, in the moment, or retrospectively. #testing
— Michael Bolton (@michaelbolton) July 23, 2012

The implicit theme of Rapid Software #Testing is: testing work doesn’t have to suck, neither in the doing nor the results. @jamesmarcusbach
— Michael Bolton (@michaelbolton) July 25, 2012

If you’re worried about regression, ramp up review, research, pairing, refactoring, #testing, investigation. Checks alone won’t do. #agile
— Michael Bolton (@michaelbolton) July 27, 2012

Worry about regression implies worry about weak knowledge of the code, excessive speed, sloppiness. Consider fixing those. #agile #testing
— Michael Bolton (@michaelbolton) July 27, 2012

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Testing in 140 characters (or less) #2

Reading Time: 1 minute

Scientists don’t like anomalies in the same way devs and testers don’t like bug – @c_wiedemann #CAST2012
— Anand and Komal (@testinggeek) July 17, 2012

Software testing is boring – for non-testers. We have to find ways to expose effects of testing & make ppl aware of it. @mgaertne #cast2012
— lisacrispin (@lisacrispin) July 17, 2012

Everybody is a tester; it just happens that we’re really good at it. @testobsessed #CAST2012
— Markus Gärtner (@mgaertne) July 17, 2012

I believe testers “make stuff up” a lot less than testers uncover and make explicit things that have been latent and implicit. #CAST2012
— Michael Bolton (@michaelbolton) July 17, 2012

Saying “programmers can’t test” is silly; they do it all the time. Like everyone else, they can’t see ALL errors in their own work. #testing
— Michael Bolton (@michaelbolton) July 17, 2012

@michaelbolton We uncover ways in which value is destroyed, in ways that have often not been considered
— Iain McCowatt (@imccowatt) July 17, 2012

@imccowatt Yes. I’d say s/destroyed/threatened, though; the latter encompasses the former. Oracles aren’t perfect; testers aren’t judges.
— Michael Bolton (@michaelbolton) July 17, 2012

@imccowatt Yes; not judge and jury, but exercising judgment about requirements, interpretations, risks, value,…
— Michael Bolton (@michaelbolton) July 17, 2012

Note every tester should code. We end up taking awesome testers and turn some into awful programmers @testobsessed #CAST2012
— Michael Larsen (@mkltesthead) July 17, 2012

@mkltesthead At least as bad, maybe worse: starting with an awful programmer and turning him into an awful tester. @testobsessed
— Michael Bolton (@michaelbolton) July 17, 2012

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Croatian character on trip to Guadalajara

Reading Time: 2 minutes

At the start of this year, my friend and fellow tester Zeljko was working in Mexico, Guadalajara. You can read about his experience here. He provided a Picasa foto album, and, because he is a tester, Zeljko asked a question in this photo comment.
Here is my answer.
As I know that Željko has Croatian letter Ž at the start of his name, and that lettrer was printed as Å½, my first assumption was that Bikla application does not work with utf-8 encoding. First, I wanted to replicate the issue.
I first found one web page with letter Ž. UTF-8 hex code for letter Ž is c5bd (two bytes). In order to check has letter Ž been acctualy encoded in web page source using utf-8 encoding, save page source as html, open it in vim, switch vim to hex mode (:%!xxd), and search for c5bd. In right column, you will see text corresponding to letter Ž (but in vim hex mode it will be displayed as ..).
Other option is to check is your browser encoding set to utf-8 and if you can see letter Ž, then you know that letter has proper uft-8 hex code c5db.
In order to reproduce Bikla issue, after loading web page, I started to change my browser encoding. First in top-down list in Chromium is Western (ISO-8859-1). And browser changed Ž into Å½. Bingo, but this time I was lucky, but skilled tester would not guess, by try to use heuristics (more on heuristics you can find here) in order to determine Bikla page encoding from the first try (there is 37 encoding supported in chromium). I also confirmed that Zeljko’s name was properly encoded in the Bikla database. Question for Zeljko: how was your name entered into Bikla datbase?
Here is my heuristic. Go to google, google for ‘spanish character encoding’ and try those encoding. Google returned following encodings:
utf-8, iso-8859-1, iso-8859-e15.
So, this time, if I will go on the encoding list from left to right, I will get the Bikla encoding from the first try, but without any luck needed.
As I tester I identified following:
the issue: Ž into Å½
testing tools: vim, chromium, google
use of heuristic, how to reproduce issue
Knoweledge: character encodings.
Conclusion: I would inform Bikla that they should implement utf-8 encoding into their application. Their decision would be based on the fact does wrong printed names affects Bikla business.
For testers: find one more Croatian letter from the picture that was wrongly decoded.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Testing in 140 characters (or less)

Reading Time: 2 minutes

In this blog post I will put all important testing tweets. My plan is to use this blog post as repository of testing tweets. All those tweets are important for every tester to become even better tester. I am using “embed this tweet” tweeter feature.



The first principle of critical thinking: things could be different. That’s a core principle in #testing, too. No coincidence.
— Michael Bolton (@michaelbolton) July 14, 2012


RT @jamesmarcusbach “Testers need to know the difference between observing a phenomenon and knowing the whole truth about it.” #testing
— Michael Bolton (@michaelbolton) July 14, 2012

Usabliity BASICS: the user wants to accomplish tasks, NOT exercise functions in your product. Learn and honour the difference. #testing
— Michael Bolton (@michaelbolton) July 14, 2012

“It is necessary to relax your muscles when you can. Relaxing your brain is fatal–Stirling Moss, British racing driver #thinking
— Gerald Weinberg (@JerryWeinberg) July 15, 2012

Arrange software teams so that most of the communication necessary to develop a feature happens within a single team.
— Dale Emery (@dhemery) July 15, 2012

Arrange software teams so that each team is downstream from its own work.
— Dale Emery (@dhemery) July 15, 2012

@adamgoucher – first heuristic – build your own framework and tool chain because problem is specific to the project #CAST2012
— Anand and Komal (@testinggeek) July 16, 2012

Selecting tool set and language which make sense – don’t use same language as development for the sake of it – @adamgoucher #CAST2012
— Anand and Komal (@testinggeek) July 16, 2012


Turn off all the third parties components / tests in functional test environment – explore feature switch / toggle @adamgoucher #CAST2012
— Anand and Komal (@testinggeek) July 16, 2012

Refresh machine, get VMs and run tests on different machines to identify if it’s too much attached to machine @adamgoucher #CAST2012
— Anand and Komal (@testinggeek) July 16, 2012

Start with study, not plan. #CAST2012 keynote
— Markus Gärtner (@mgaertne) July 16, 2012

Tripp Babbitt: “A focus on costs always increases them.”Me: Still, *consider* /opportunity cost/.#CAST2012 #testing
— Michael Bolton (@michaelbolton) July 16, 2012

Surely the people doing the work are those who should design the work. If so, managers’ role is to test & tune the work; remove blocks.
— Michael Bolton (@michaelbolton) July 16, 2012

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Testing experience with utf-8

Reading Time: 3 minutes

I would like to describe what we have learned while testing with utf-8 encoded Croatian characters.

Introduction.

One of our previous project issue was java virtual machine (jvm) thread hang. Web service servlet started application server thread by processing incoming xml message. Xml encoding is utf-8.
     
Then, using spring and hibernate frameworks, jdbc connection towards the Informix database was used in order to store the data into the database. And that thread hang infinitely in some cases in production environment. After we gathered customer bug reports, we confirmed that xml with ‘broken’ encoding caused the hang. By broken encoding we mean when some Croatian character (e.g. ‘š’ with hex code c5 a1) was encoded with some other hex code. We reproduced the case by copy/pasting part of xml message with broken utf-8 Croatian characters. That xml was in mantis bug report. At that moment we did not know how to produce those broken encoding characters. At server side we implemented the code that intercepted those broken encoding and returns appropriate error.

Problem

During the regression test, using the Python as a tool for automation, tester @majapenovic received the broken encoding error. She asked another tester that wrote the testing script about the problem and his solution was to delete Croatian characters used for generating the xml input message. This is VERY BAD TESTERS DECISSION. I told Maja to investigate what was the root of the problem. 

utf-8 and Python

We learned about how to use utf-8 in Python from this excellent post.
We are using Jython for writing integration scripts. So from bottom up, you should configure following for proper utf-8 string manipulation:

  • jvm that runs jython should have following java option: -Dfile.encoding=UTF-8 (You can find that option in bin/jython file.)
  • At the begining of jython script: #coding=utf-8
  • your editor encoding must be set to utf-8.
  • your keyboard must be set to Croatian (if you work with Croatian utf-8 character set)
Your are know ready to write following code:

croCharsAsByteStream = “ŠĐČĆŽšđčćž”

croCharsInUnicodeUTF8

 = unicode (croChars,”utf-8″)

# put back in byte string, for print function, http transport

croCharsBackInByteStream= croCharsInUnicode.encode(‘utf-8’)
croCharsInUnicodeUTF8 = byteStreamReceivedFromHttp.decode(‘utf-8’)
#compare in verification check byte stream with byte stream!


For writing byte stream to file we use following code:

f = codecs.open (file_path, ‘w’, “utf-8”)
f.write(croCharsAsByteStream)

I helped Maja to check is our xml message created with broken encoding. Every xml message is stored in the database. Database encoding was set to utf-8. We unloaded the record with our xml message (informix unload statement), and used vi in hex view mode (:%!xxd) to observe the hex encoding for the character ‘š’ in xml message. At we confirmed that it had wrong hex values.

Tester magic

Maja started investigation. She found bug in our testing script. We called encode() method on byte stream twice in a row in different methods. That caused broken encoding of xml message.
Maja did not followed any best practice, she adopted to context of the problem. She used the existing code functionality. Write to file was called in several places, and she decided to observe the output of that methods. At some point, the output had broken encoding for character ‘š’. After that she easily spotted the line with bug in our script. 


What we learned

Testers job is to find proper solutions, not to do ‘dirty workarounds’. As a result of problem investigation, we now know how to reproduce the broken encoding error.

Question


Are you able to see in browser Croatian characters from this blog post?

Update regarding replace string method

If you need to do something like this:

request = request.replace(“placeholder”, unicode( ‘Š’, ‘utf-8’ ) )

you will get following exception:

UnicodeDecodeError: ‘ascii’ codec can’t decode byte

only if string in which you are doing the replacement (in this example request string) is not in utf-8 format. You usually put some string in utf-8 either by using decode(‘utf-8’) method, or reading a file using following code snippet:


f = codecs.open (‘file_path’, ‘r’, “utf-8”)
request= f.read()

Update2 regarding UnicodeDecodeError: ‘ascii’ codec can’t decode byte

Today I found an excellent post about famous exception


UnicodeDecodeError: ‘ascii’ codec can’t decode byte

From now I finally understand that rather strange exception. In Python 2.x encode and decode methods work on unicode strings. That means if you try to call them on byte object, Python will implicitly try to decode  byte to unicode object using default ‘ascii’ encoding. If your byte object contains bytes out of ascii range, you will trigger that exception.
The problem is that Python2.x is using ascii as default encoding because of the “historical reasons”.  

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather