How users can help developers fix bugs
A software bug (crash/unwanted behavior) is always a bummer, and developers
usually want their software to be useful by their users.
To help software developers fix your bug, it helps to understand how
they think about bug fixing:
Question 1. Do I understand the behavior the user doesn't like?
A computer program is a precise machine that when you give it <X> inputs,
it performs <Y> actions, and developers think about the software in that
same way. To help the developer understand what is wrong, provide this
a. I performed <this specific set of actions>
b. The software did <something I did not like>
c. However, I expected it to do <something else>
A bug can't be fixed without these three critical pieces of information.
If you don't provide them at the start, then the programmer has to track
you down and discuss the matter with you. For many developers this makes
the problem "hard" and they may lose interest. You want your bug report
to scream out "this is easy!" to the developer.
Rule #1 -- If the programmer does not believe that you clearly understand
whether something is a bug or not, he will assume it isn't, and
go work on something else.
Question 2. Can I reproduce this problem myself?
Bugs fall into two categories 1) Reproducable and 2) Non-Reproducable.
The first thing the programmer will try to do is perform the steps in 1(a)
above. This is the first moment of truth. If the programmer is unable to
reproduce the problem using the steps you provided, he will make a snap
decision on whether the problem is important enough to spend a lot of time on.
If he decides at this moment the problem you describe isn't as important as
other things he has to do, then game over -- he won't fix your bug.
Rule #2 -- A bug that cannot be reproduced at will through a clearly
designed set of steps cannot be properly fixed. If you
make the programmer do the hard work of figuring out what
set of steps reproduce your bug, he may go work on something
Rule #2b -- Good developers will not "fix" a bug that cannot be
reproduced, because that invariably breaks something else,
and they don't want to make your life even worse.
Poor developers will fix a bug without understanding why
it is broken, just to make you go away.
Question 3. Can the software be changed in the way the user wants?
Once the developer understands what you didn't like, and he can reproduce
it himself in his environment, he needs to know what the "fixed" behavior
should look like.
But programmers are human beings too -- and they have their limitations.
Sometimes it's easy for you and the programmer to agree on what the program
*should* do in this situation, but the programmer may not actually have the
skill to make the program do that.
The programmer combines what you wish would happen, with what he knows he
can make happen, and compromises with you on how to fix the bug
Rule #3 -- If the behavior you want is too hard, or will take too much
time, the developer may log the bug as "to do later" and go
work on something else.
You have an input file with three lines in it:
You run this file through the sort program.
$ sort < myfile
It outputs this:
Wait -- what? This isn't right you think -- Apple clearly comes before
Bob and Canary. You might think "this program is broken and the developer
should be fired".
But a well written bug notice will get attention!
I have a file containing three lines
I ran this through "sort < myfile"
It gave me this output
But I was expecting to see
Can you tell me if this is a software issue?
The developer can look at this and say to himself, "hrm. this doesn't seem
right, does it", and he will create your text file and run it through sort
on his machine, and he will get the same results you do.
He would investigate the sort program and determine that by default, the
sort program is case sensitive by default -- and that all capital letters
come before lower case letters.
But there is a flag you can use to change this behavior, -f.
So if you do
$ sort -f < myfile
It will output
So the developer will send you an email back:
By default, the sort command is case sensitive, and lower case
letters come after uppser case letters, so 'Z' sorts before 'a'.
That is why 'apple' comes after 'Canary'.
There is a flag, -f, that makes sort case insensitive.
Can you please use 'sort -f < myfile' and confirm this works for you?