Test, TEST or Tester may refer to: read more at WikiPedia

    • Durability of Usability GuidelinesAbout 90% of usability guidelines from 1986 are still valid, though several guidelines are less important because they relate to design elements that are rarely used today.The 944 guidelines related to military command and control systems built in the 1970s and early 1980s; most used mainframe technology. You might think that these old findings would be completely irrelevant to today's user interface designers.60 guidelines reviewed here
    • Jakob Nielsen pageDr. Nielsen founded the "discount usability engineering" movement for fast and cheap improvements of user interfaces and has invented several usability methods, including heuristic evaluation. He holds 76 United States patents, mainly on ways of making the Internet easier to use.

  • Agile testing is a software testing practice that follows the principles of agile software development. Agile testing is built upon the philosophy that testers need to adapt to rapid deployment cycles and changes in testing patterns. Providing and getting feedback early, fast and regularly is one of the testers main task.


    From http://bbv.ch/images/bbv/pdf/downloads/poster/bbv12_poster_agile_testing_1.0_web.pdf

    You can order a print version at http://www.bbv.ch/de/posterbestellung.html

    Find more at http://bbv.ch/de/unternehmen/publikationen.html

  • In computer programming, a unit test is a method of testing the correctness of a particular module of source code. The idea is to write test cases for every non-trivial function or method in the module so that each test case is separate from the others if possible.

    JUNIT: A testcase framework for Java


    In computer programming, a unit test is a method of testing the correctness of a particular module of source code. The idea is to write test cases for every non-trivial function or method in the module so that each test case is separate from the others if possible.

    The goal of unit testing is to isolate each part of the program and show that the individual parts are correct. It provides a written contract that the piece must satisfy. This isolated testing provides two main benefits:

    • Encourages change
      Unit testing allows the programmer to refactor code at a later date, and make sure the module still works correctly (regression testing). This provides the benefit of encouraging programmers to make changes to the code since it is easy for the programmer to check if the piece is still working properly.
    • Simplifies Integration
      Unit testing helps eliminate uncertainty in the pieces themselves and can be used in a bottom-up testing style approach. By testing the parts of a program first and then testing the sum of its parts will make integration testing easier.
    • Documentation
      As an added value, all your Testcases can act as a documentation for your set of classes

    Kent Beck, (CSLife) and Erich Gamma, (OTI Zürich) have made a very good article:
    "Testing is not closely integrated with development. This prevents you from measuring the progress of development- you can't tell when something starts working or when something stops working. Using JUnit you can cheaply and incrementally build a test suite that will help you measure your progress, spot unintended side effects, and focus your development efforts." more here

    It is important to realize that unit-testing will not catch every error in the program. By definition, it only tests the functionality of the units themselves. Therefore, it will not catch integration errors, performance problems and any other system-wide issues. Unit testing is only effective if it is used in conjunction with other software testing activities.

    There is a lot of ways to use JUNIT:

    • Write your set of classes, then some Testcase that should run and validate the work done,
    • Write Testcases first that won't run because no classes are existing yet, then write the code that will make it run!
    • Correct a bug in a piece of code, and write a Testcase for being sure that it won't reappear one day.

    Junit is based on fact that you want to test a code. Normally you know the result expected, all you have to do is to ask your code (class, method, set of cooperating class) and to test if the response is correct.
    Let's take an example.... I have a Class that can replace patterns in a string (like in JDK 1.4.2: "aText".replace("seachPattern","withThisPattern"))). Since I wrote the class, and know the purpose of it, I can write some pertinent testcases. I want to protect this Object and all other Object that may use it from loss of functionnality, bugs which may lead to malfunction in a complex system.

    Writing good Testcases

    There is no rule how to write a test, but remember

    • That a testcase should be pertinent, otherwise it will have no quality impact and will lead to a loss of developer time.
    • Be honest: push your Objects to the limit of their usage! try to describe and test all functionnality of your set of objects.
    • You need to do some dummy/obvious assertions (but sometimes these dummy tests are not obvious with complex object and or runtime environment).
      Constructor should not give back the same instance
      (Except if you are using a singleton pattern)
      ClassA classA = new ClassA();
      ClassA classA1 = new ClassA();
      assertNotEquals(classA, classA1);

    The JUNIT language

    JUnit use some primitives methods to achieve regression testing. As today in JUNIT 1.3.8, The assertion methods are all located in junit.framework.AssertA lot of third party tools has been developed to extends possibilities of tests with database, EJB, JSP for example.

    • Assert methods are testing equality of nearly all Java standard type
    • If these methods are not enough, you can always decide to validate your objects by Your own and call fail() if you decide that conditions are not met.

    Write your first Testcase

    A Junit test is a classe which extends junit.framework.Tescase and has some methods beginning with the word "test"

    A trivial example:

    Your first JUNIT testcase classe
    public class SquareTest extends junit.framework.TestCase {
            public void testClassA {
             Square squareA = new Square();
             Square squareB = new Square();
            public void testCloneability() {
             Square squareA = new Square();
             Square squareB = (Square) squareA.clone();

    Writing a Testcase is always more or less the same:

    1. Create one or more classes extending junit.framework.Tescaseand implement some test methods
    2. Create in these methods instances of the object you want to test or validate.
    3. Use your object, use setter and getter, constructor to change their internal state (here is the concept of pushing your object to the limits: use the full range of input data accepted by your objects)
    4. Test values returned by methods, assuming that you know what would be the correct result,
    5. Write a lot of them to test the maximum of functionnalities provided by your objects.

    Run your testcases
    Different TestRunner or how to run your suite of testcases

    A TestRunner is able to run JUNIT testcases, there is more or less 2 categories:

    • Textual TestRunner (console output)
      • The fastest to launch and can be used when you don't need a red green success indication. This is recommended with ANT.
    • Graphical TestRunners (client server web GUI, swing, AWT in eclipse....)
      • They show a simple graphical dialog to start/stop and display results of tests and provide some graphical progress indication.

    A TestRunner can be configured to be either loading or non-loading. In the loading configuration the TestRunner reloads your class from the class path for each run. As a consequence you don't have to restart the TestRunner after you have changed your code. In the non-loading configuration you have to restart the TestRunner after each run. The TestRunner configuration can be either set on the command line with the -noloading switch or in the junit.properties file located in the "user.home" by adding an entry loading=false.

    JUNIT find all testcase using java.lang.reflexion package, in fact it will call all methods starting with the word test will be found.

    In a JAVA main class:
    String[] listUnitTest = {ClassA.class.getName(), ClassB.class.getName()}; //list of classname containing your units tests
    junit.textui.TestRunner.main(listUnitTest); //Text based
    junit.awtui.TestRunner.main(listUnitTest);//green mean all test successful red is bad in case of error, you see the stack and which test failed.
    junit.swingui.TestRunner.main(listUnitTest); //green mean all testcases successful red is badin case of error, you see the stack and which test failed.
    JUnit Testrunner in Eclipse is a standar View

    Testsuite is a suite of testcase or method, you can give this testsuite to a testrunner.

    Some particular TestSuite

    Multi threading test
    If you need to have multiple threads hitting your class. ActiveTestSuite starts each test in its own thread However, ActiveTestSuite does not have a constructor which automatically adds all testXXX methods in a class to the test suite. I tried addTestSuite method with class name as the argument, but it added all tests in the class to run sequentially in the same thread. So, I had to manually add each test name to the ActiveTestSuite.
    public static Test suite() {
    TestSuite suite = new ActiveTestSuite();
    suite.addTest(new com.waltercedric.junit.ClassA ("testClonability"));
    suite.addTest(new com.waltercedric.junit.ClassA ("testSerialization"));
    suite.addTest(new com.waltercedric.junit.ClassA ("testRandom"));
    return suite;

    public static void runTest (String[] args) {
    junit.textui.TestRunner.run( suite() );

    JUNIT can be extended with 3rd party extensions, if you need some specials capabilities, refer to this page: JUNIT extensions


  • apache_maven

    In this small post i will present you how to

    1. Track and identify across your Apache Maven multi project builds all components, their versions, and class path if needed
    2. Get valuable information from your testing team, and add it to the GUI of your web applications

    To solve the problem number 1, we will use Manifest files

    On the Java platform, a manifest file is a specific file contained within a JAR archive. It is used to define extension and package related data. It is a metadata file that contains name-value pairs organized in different sections. If a JAR file is intended to be used as an executable file, the manifest file specifies the main class of the application. The manifest file is named MANIFEST.MF. [Wikipedia]

    If you do nothing special in Maven., you will see across your jar files the following in all META-INF/MANIFEST.MF

    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Created-By: Apache Maven


    The solution I propose here will write all these META-INF/MANIFEST.MF the following  content:

    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Created-By: Apache Maven
    Built-By: agent1
    Build-Jdk: 1.6.0_20
    Specification-Title: Unnamed - com.waltercedric:web:war:1.0.0-SNAPSHOT
    Specification-Version: 1.0.0-SNAPSHOT
    Specification-Vendor: waltercedric
    Implementation-Title: Unnamed - com.waltercedric:web:war:1.0.0-SNAPSHOT
    Implementation-Version: 1.0.0-SNAPSHOT
    Implementation-Vendor-Id: com.waltercedric
    Implementation-Vendor: waltercedric
    buildDate: 2010.09.22-14:12
    svnrevision: 18625
    Class-Path: spring-ws-core-1.5.6.jar spring-aop-2.5.6.jar spring-
     web-2.5.6.jar spring-webmvc-2.5.6.jar spring-context-support-2.5.6.jar
    .. .. ..


  • Still hesitating about using or not using regression tests in your code? (JUNIT for java for ex.) Look here at Failed fixes haunt credibility of Microsoft's Trustworthy Computing Initiative. Even Microsoft has some problem today...because they do not have invested enough time/money/power into it....

  • Open-sourceITP - Powerful web application tester

    ITP is a deceptively simple, yet powerful web testing harness. It is a stand-alone Java application that can test your website from a user's perspective. It is amazingly simple and lightweight, yet can be used for powerful test-scripting by using building blocks to create large test runs.
    ITP is the fastest test harness software to learn. A test script is simply made up out of a few lines of XML. There is no programming involved! You will be testing your application in seconds.

  •  apache_maven

    'Integration testing' (sometimes called Integration and Testing, abbreviated I&T) is the activityof software testing in which individual software modules are combined and tested as a group. It occurs after unit testing and before system testing. Integration testing takes as its input modules that have been unit tested, groups them in larger aggregates, applies tests defined in an integration test plan to those aggregates, and delivers as its output the integrated system ready for system testing. [WikiPedia]


    I will put Selenium to that JOB. Selenium will allow me to run a set of unit test against a running instance of my application and get a feedback on the quality before delivering the software to a testing team.

    Making any Maven module Selenium enable is really easy, all you have to do is to add to the dependencies section the following


    Now you should be able to cut and paste any test cases developed with Selenium IDE into /src/test/java/

    Selenium IDE is a Firefox add-on that records clicks, typing, and other actions to make a test, which you can play back in the browser or export to may different languages: Ruby, Python, Java, PHP, Perl, .Net, JavaScript to name a few. [Learn more]

    The java code is in no way different than regular JUNIT test cases, except that it does not use the latest JUNIT 4.x annotations. You’ll be able to run tests like before (right click Run As Junit)

    package com.waltercedric.maven;
    import com.thoughtworks.selenium.SeleneseTestCase; 
    public class TestHello extends SeleneseTestCase {
      public void setUp() throws Exception {
        setUp(http://localhost/helloworld, "*iexplore");
      public void testNew() throws Exception {
    verifyTrue(selenium.isTextPresent("Are you an existing Customer")); } }

    Some explanations are needed:

    • http://localhost/helloworld is the URL of my tomcat container where my web applications will be deployed (port 80)
    • I choose internet explorer as browser as it is nearly always available on any windows pc, Firefox is not far away, use “*firefox” and  firefox.exe has to be in the environment PATH.
    • The Code above assume that a selenium RC server is running at localhost on port 4444, I will show you how to start one later in this post.

    Some remarks about the code above

    You will have to somehow make your own Selenium framework out of the generated code, for obvious reasons,

    • You’ll have soon to support many browser "*iexplore", "*firefox", "*opera" and as such use environment variables or configuration files. I recommend you in that case to use Selenium Grid instead of Selenium RC.
    • You can not let the URL and port of the container fix coded http://localhost/helloworld, this URL may change if you target different runtime. 
    • You may want to reuse some part of the generated code multiple times, in different unit test, (like login/logout stuff), java inheritance, interface, and patterns may arrive sooner or later, even if this is unit test code.

    Selenium test cases or integration tests are meant to be run in phase “integration-test” against a running instance of your application. That is why don’t forget to deploy your application with Maven cargo or run it inside Jetty in Maven phase “pre-integration-test”

    How to use Surefire to run JUnit test in phase “test” and integration tests in phase “integration-test”

    The response is by carefully configuring Surefire and naming your Java packages. The pom.xml below show this trick

    In phase test, test cases with a word integration or selenium are omitted, while in phase “integration-test” they are run.

            <argLine> -Xmx512m -DuseSystemClassLoader=true</argLine>

    Now it is time to start a selenium server locally or remotely so we can start our newly defined test cases.

    Selenium Remote control

    Selenium Remote Control (RC) is a test tool that allows you to write automated web application UI tests in any programming language against any HTTP website using any mainstream JavaScript-enabled browser.


    You can either start a selenium RC server

    • Outside Eclipse, like any java process,
    • Inside Eclipse with a java launcher,
    • Inside Eclipse with Maven and a java launcher.
    • Inside any Maven Phase thank to a plugin XXXXXXXXXXXXX

    I recommend you to install Selenium RC in a dedicated VM (VMWare, Virtual desktop, XEN) and to make it team or enterprise wide. I would always recommend to put Linux at work for such a task, unfortunately Internet Explorer is not running at all on Mac nor Linux.. I recommend you this way to run a shared Selenium server in your infrastructure that can be later access by many continuous build agents.

    Selenium RC is a Java process requiring only 2 jar to properly start, Download and unpack to c:\selenium-server-1.0-beta-2




    Create following in a batch file start.bat, normally all you have to do is to change the first 3 lines

    set JAVA_HOME=c:\jdk1.6
    set FIREFOX_HOME=C:\tools\Firefox3
    set SELENIUM_RC_HOME=c:/selenium-server-1.0-beta-2
    set CLASSPATH=%CLASSPATH%;%SELENIUM_RC_HOME%/selenium-server.jar;%SELENIUM_RC_HOME%/selenium-server-coreless.jar 
    %JAVA_HOME%/bin/java -jar %SELENIUM_RC_HOME%/selenium-server.jar

    If everything run properly, you should see an ugly DOS windows like the one below


    Pointing the browser to http://localhost:4444 will return an error 403, which is no sign of malfunction, currently Selenium RC has no web GUI.



    Start Selenium RC server inside Eclipse

    If you decide to run selenium RC inside Eclipse, you’ll be mainly benefit from:

    • Project sharing and versioning in CVS/SVN,
    • Command line parameters that will start Selenium RC can also be shared,

    Selenium Server in a Maven project/module

    Create a new Maven Project named “SeleniumServer” and copy into its pom.xml the following

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    Create a Java launcher and use org.openqa.selenium.server.SeleniumServer as main class. If you start the launcher, you will see the following in eclipse console



    Selenium RC is now waiting on port 4444 for Selenium Test case orders.

    You can now run your test case in eclipse like any other test case using Eclipse build in Junit runner.

  • I am still waiting on the 4 last hard disks, they should arrive next week. While mounting everything together in the case, I was thinking on the range of tests I may do with this NAS before putting it online in production.

    What kind of operating system will I use? 
    RAID 5/6
    RAID 5/6
    Windows XPNeed Windows Server BUT there is a workaroundthrough the Promise EX350 driverI do not want a fully fledged OS for a file server, but want to look at performances
    Linux OpenFilerstandard using "mdam"through the Promise EX350 Linux driverelegant, free and OS footprint can be reduce at it's minimum
    OpenSolarisusing ZFS Raid-Zno driver supportZFS is a great file system, and RAID-Z solve some problem of software RAID5 and Hardware RAID5 at the same time!
    feel free to submit an alternative
    Contact me or use

    click

    And this is how my Network Array Storage looks like:
    NAS server
    Processor(s)AMD Athlon 64 3000+  BOX, Socket 939, Venice
    PlatformAsus A8N-VM CSM, mATX, Nvidia 6150/430 Video, socket 939, SATA RAID
    BIOS xxxxx
    RAMCorsair CM72DD512AR-400 (DDR2-400 ECC, reg.)
    2x 512 MB, CL3-3-3-10 Timings
    System Hard DriveRaid 6:
    2 Maxtor 7L300R0 MaXLine III, 7200rpm, 16MB, 300GB, IDE, 24/7 server.
    4  Western Digital Caviar RE, 7200rpm, 8MB, 320GB, SATA, 24/7

    USB attached:
    1 Maxtor onetouch USB2/Firewire 300GB
    1 Maxtor onetouch2
    Mass Storage Controller(s)Promise SuperTrak EX8350, SATA2, 8 SATA port, Raid6 Controller
    Graphics CardOn-Board Graphics
    NVIDIA GeForce 6150

    What kind of  performances test I will do?
    Performance-testc't h2benchw 3.6
    I/O PerformanceIOMeter

    Future client using the NAS fileserver
    Windows XP professional
    HP nx7000
    100Mb NIC
    Pentium-M 1.6GHz
    1500MB Ram
    60GB Harddisk
    Home desktop,
    Linux SuSe 10.1
    1000 Mb NIC
    AMD Athlon XP 3400+
    1500 Mb RAM
    Asus A78Nx Nforce2 mainboard

    Of course I will stress the box 1 week before putting any vital/useless data on it!
  • Official Novell Press release here, due mid april 2005
    • A complete Linux Operating System: SUSE LINUX OS built upon the Linux kernel 2.6.11,X.org 6.8.2
    • Multiple intuitive desktop environments: Latest KDE 3.4 and GNOME* 2.10,
    • A comprehensive set of Internet tools: Firefox* 1.0 Web browser; e-mail and instant messaging clients (supporting AOL, Yahoo!, MSN, Novell® GroupWise® Instant Messenger, and more),
    • A complete office suite: OpenOffice.org 2.0 (works with Microsoft* Office documents) ,
    • Leading graphics and multimedia applications: F-Spot photo organizer, the GIMP 2.2 and Inkscape graphics programs, multimedia viewers, CD/DVD burners and more,
    • Fully integrated system security: integrated firewall, spam blocker and virus scanner,
    • World class advanced networking services: Apache Web server, SAMBA, CUPS, DHCP, DNS and popular open source databases
    • Cutting edge new Mobility Support: Improved Wifi connections and Bluetooth devices, PDA and phone synchronization
    • Robust Virtualization: based on XEN (what is XEN?)
    • Voice over IP support
    • Multiple development Tools: Mono® ; KDevelop; Eclipse

    SUSE LINUX 9.3 Professional Review by Novell : not a very neutral review, but with some screenshots...
    Novell Packs Apps Into SuSE Linux 9.3 By David Worthington, BetaNews


  • PrinciplesBehindTheAgileManifesto

    We follow these principles:

    Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

    Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

    Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

    Business people and developers must work together daily throughout the project.

    Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

    The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

    Working software is the primary measure of progress.

    Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

    Continuous attention to technical excellence and good design enhances agility.

    Simplicity--the art of maximizing the amount of work not done--is essential.

    The best architectures, requirements, and designs emerge from self-organizing teams.

    At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.



  • AgileRequirementEngineeringPoster

    From http://bbv.ch/images/bbv/pdf/downloads/poster/bbv11_poster_agile_re.pdf

    You can order a print version at http://www.bbv.ch/de/posterbestellung.html

    Find more at http://bbv.ch/de/unternehmen/publikationen.html

  • com_securityimages joomla_1.5open.qa.logo

    I've done my homework today, in order to insured the
    release quality and avoid manual testing of SecurityImages
    at every release, I release Selenium testcases so anybody/
    any developer can run them against their homepage.



    • Extract this zip file in a new directory (link soon available)
    • Load the test suite (set of tests) named securityimages.testsuite
    • Take care at the Base URL, in test suite I use http://localhost/T1 put the right base of course, for example http://www.yourhost.com/
    • The user login/password has to be changed to an existing user! 
    • SecurityImages has to be put in TEST mode. This is a new setting in administrator panel. This force SecurityImages in this mode to accept only the word "test123" as captcha response and nothing else. This is because I can not read, or find in the test case the word hidden in the picture without a lot of effort.
    • Testsuite is working only for HNcapctha at the moment.
    • You can run all test cases in the suite by clicking on seleniumSecurityImages2 or just one or two with seleniumSecurityImages3 but in that case don't forget to also always select the test InitializeTestcases.test (use ALT GR)


    seleniumSecurityImages4 Currently only 4 tests are not working, and this because selenium can not submit the contact and register form of Joomla! this has nothing to do with my code.


    The next step is to put everything in XINC...

    Read also

  • 51 minutes of pure joy! Thanks you Sara Bareilles!!! Listening to this on my Grado Sr-325 headphones is pure magic!

    On 9/10/12, Sara Bareilles played an online concert hosted by Stageit.com in order to raise money for an organization called Playing For Change http://playingforchange.org . Link to the organization with be posted below. All song rights and credits goes to Sara Bareilles and her respective label.

    • Playing for Change @ 4:34
    • Bright Lights and Cityscapes @ 9:45
    • Love Song @ 16:55
    • Only Shadows @ 24:40
    • Sittin' on the Dock of the Bay @ 31:56
    • King of Anything @ 37:35
    • Gravity @ 45:29
  • section-java-testing.gifMost programmers do not write tests. We all know that we should write them, but for whatever reason, most of us don't. This is unfortunate, because testing is the most powerful tool we know of to improve software quality. Tests reduce bugs, provide accurate documentation, and improve design.

    Read the Top 12 Reasons why You must also try to convince your colleagues 

  • Bug Tracking Tool
    Work in progress

    or Why it is not possible to manage any software development without a bug tracking tool

    A bug tracking system is basically a database linked to  a frontend:
    • The frontend can be a FAT client, understand a windows or application running on your pc and that need to be install by each developer/client, or may be
    • Adhering to a light client server model: HTML frontend which submit queries to a server.



    When was the bug open, and closed, what is its status now. Who has reported it (login is required and all system support profile (user, tester, manager, developer, administrator) and/or isolation of project). Did It already existed in a previous version (regression in code), etc...


     Easily dispatch responsability or find quickly who was reponsible for solving it, how  much time was needed to close this bug, some system may send email automatically to developer to inform them... etc...


    How difficult will it be to solve this issues, (can be a bugnote add by other developer). Most of the time, technical leader decide of the value of this field together with developers.


    How many bugs are still open at a date "t", how do I determine the order in which I will solve them...etc

    Standardisation of records

    By forcing tester/customer to enter some mandatory fields in a graphical forms. It may avoid You to hear some ridiculous statement like: "the application is not printing, working". It force the user talking a language You have decide together, having agreed on a "bug category" list is a very good and common example.


    All modern bug tracking tool let You define and customize some part of the system according to your need.

    Addition of information

    A screenshot is better than thousand word, a file create by the application, a memory dump, anything that will help developer to reproduce the bug.


    A lot of very powerful queries can be executed. It is always interesting to know, how many improvement were done in the next/past releases, or if a team has use more power to develop new functionnalities (also changes request which interest the customer the most) or loose time tracking some low level bug priority.
    In case of reporting, Bugzilla support the following:
    • Tabular reports - tables of bug counts in 1, 2 or 3 dimensions, as HTML or CSV.
    • Graphical reports - line graphs, bar and pie charts.

    Al of the above will have a positive result on:
    • communication among the team of developers and customers,
    • It will improve the product quality by several magnitude,
    • Developer will be more productive as the will know what to concentrate on or what is worth to do.
    AND Your customers will be happier!!

    Golden rules

    1. A bug that can be reproduce can be analysed/corrected.
    2. Correcting a bug is not always trivial, a correction may introduce new bugs.
    3. The intrinseque quality of a software is always improved with a tracking tool over time

    Some open source software:

    Bugzilla (http://www.bugzilla.org/) is the more famous, use in a lot of open source application (Mozilla, Apache, and even eclipse) version 2.19.2 (MySQL+PHP, Solaris, Linux, Win32, MacOS X, BSD) 370 companies are currently using it. (Nasa, IBM, Mozilla and others)- Wikipedia has a very brief article on it, Features are listed here

    Mantis. (http://mantisbt.sourceforge.net/) A very simple bug tracking tool with limited search functionnality compared to bugzilla, a strong community but not so much stable release as expected.

    Buggit (http://www.matpie.drw.net/PBSystems/products/buggit/Buggit.html) no new release since 2000 and bounded to MS access, aka running only unde windows. Listed Here because I use to play with it in 2001.