Tests are a very valuable component of software development. There are several categories of tests. There are unit tests that exercise a single class in Java programming language - a single unit of work, hence the name unit tests. Then there are functional tests that verify the broader application logic and data flows and usually span over several classes that make up the test. As developers we deal with these types of test on a daily basis.
Last week I was doing support for JIRA. There was a customer with a problem. He created a support request at Atlassian Support System. He was not very happy bouncing e-mails between us and him; he wanted to have a solution instantly. We love our customers so I took him to chat. I looked at his log file, which gave me few clues. Then I asked him to run the integrity checker in JIRA. Problem was solved, issue closed and we have one more happy customer.
What was so great about this experience that made me to write this blog post? It was the sheer fact that all I had to do was to ask the customer to run the integrity checker, it not only finds possible problems with data but also offers a “Fix� button to correct any found inconsistencies.
Then I realized that there are more than unit and functional tests that we have in JIRA. The Pragmatic Project Automation book that I finished reading also last week would call our integrity checker automated self test.
There are many ways how to create self tests. The idea is to have extra code that checks the “health� of the application and its data. This code can be an extra package that can be installed separately or can be bundled and shipped together with software itself. The later is the case of JIRA’s integrity checker, which can be found under Administration section.
Having this kind of check helped the user as well as me, a support person. I think that it would be a good idea if we compiled a list of frequent problems that our users run into when configuring and using our software. Then we could go though this list and see if we could create more self-tests. This way the users could fix many problems by themselves before even reaching for support at Atlassian.

