According to the Merriam-Webster dictionary, the noun bug can be defined as an unexpected defect, fault, flaw, or imperfection. Going by that definition, common issues such as cars not accelerating properly beyond some speed, air conditioners making weird sound when the thermostat is set at certain temperature, word processing software crashing once in a while could all be attributed to bugs. However, we generally reserve the word bug and buggy for defects associated with software applications. It is not a common practice to call a defective automobile engine or a defective air conditioner as buggy.
Defects that do not consistently cause undesirable behavior are hard to detect and fix. Most of the software bugs belong to this category and identifying and fixing them could involve hours of tedious troubleshooting. They could be caused by inherent flaws in the program or due to external causes like the hardware configuration of the computer. If your car is acting up only on certain days, no car mechanic would ever think about looking at the weather data to correlate the engine behavior to the relative humidity in the air.
Errors caused by bugs manifest only under certain conditions. Novice users without the help of proper diagnostic tools will not be able to identify the cause of these problems. They would need the help of a software engineer, who would debug the program to identify the problem at hand. The term debug is slightly misleading. The debugging process by itself does not de-bug or kill the bug. It just helps the engineer to locate the bug. Similar to how x-ray, MRI or colonoscopy helps doctors identify issues and decide on a treatment, debugging helps an engineer identify the root cause of a defect in software. In the case of the bug in the word processing software, debugging might reveal that it was crashing because of a memory allocation bug that affects only large files. The designer of the software did not foresee anyone dealing with documents beyond certain size and created the software with that constraint. How a bag that is designed to hold only five pounds would break if you try to squeeze ten pounds inside, the word processing software would crash when it is told to handle documents that are larger than what it was designed to handle. However, unlike a bag, software can be designed to handle these edge conditions gracefully. For example, the software should display error message when an edge condition is reached and provide the users multiple options to recover from the condition. Even though the example might sound trivial, such software bugs are not uncommon and their ramifications could be large. For example, the root cause of the Y2K fiasco was programmers working around the space constraint by using two digits for date instead of four.
There’s generally a callous attitude toward software quality and software bugs are not given the importance they deserve. If you search the internet, you will see that every popular software will have bugs reported against them. With the advent of broadband internet access, most of the vendors rectify the bugs by automatically delivering the fixes to your computer. Software bugs are generally considered inconveniences; not life threatening. If a bug in the image processing software corrupted your honeymoon pictures or a bug in the email software caused delayed delivery of your son’s birthday invitation, they are not considered grave. Even transactional inconsistencies resulting from glitches in banking and financing software are not considered very critical because of the relatively straightforward recovery processes and FDIC assurance.
This is very contrary to other areas of our life where we take quality very seriously. If the quality of a movie does not meet our expectations, we reject it. We probably will never watch another movie by the same director again. If the technicians did unprofessional job by making the transitions between the scenes sloppy, or the sound recording horrible, the director or producer will not get a second chance to fix their “bugs” and release another version of the same movie again, like software companies do. If an architect constructs a building, he will not unveil it to the public unless and until it meets the design he had envisioned. In other words, lot of planning, thought and creativity goes into the making of these products. Ironically, creators of software do not seem to exhibit this level of passion and precision. They are created by individuals who only see the brick and the mortar not the cathedral that is being built.
With the proliferation of software in consumer electronics and other critical parts of our life, the importance of creating bugs free software cannot be stressed enough. With the healthcare reforms, software is becoming an integral part of patient care. Critical workflows like prescription, bed transfers, and lab orders are managed through software. Even minor defects in these software components could produce catastrophic results, including death.
Most of the software defects stem from inadequate testing and improper requirements engineering. While most of the software bugs are identified and fixed though multiple levels of iterative testing by the vendor before the software reach the market, it is nearly impossible to avoid bugs altogether because of the sheer volume of testing involved. Many times, the different software components of a product suite are created by groups that work in siloes without collaborating. If a product owner does not understand the requirements of market and the end users, these gaps in the requirements gathering is going to manifest as bugs in the software. Software programs are made of millions and billions of lines of code that contains several paths of execution. Each path follows different rules and not all these rules get evaluated all the time. For real life use cases, these rules could get very complex and testing all the different combinations becomes cumbersome without good test plans. For example, if a plan of care software determines the course of action based on data like cholesterol level, blood sugar, blood pressure, age, sex, race and prescription medication the person is currently taking, during quality control testing, test data should be created to meet all these different combinations. Acceptable range for the vitals could change and new medications come into the market all the time. Similarly, a claim processing software should be aware of the latest federal and state rules governing insurance policies. If the software is not keeping up with these changes and not getting tested continuously, it could cause unpredictable results and cause unrepairable damage to the users.
Most of the time, a centralized software module will have to integrate with diverse software units to get the necessary data to determine the outcome. Defects in any one of the components could affect the outcome. Traditionally, when you go to a doctor, he or she will check for any allergy reactions before writing a prescription. Once you take the prescription to the pharmacy, the pharmacist will also check for any drug interactions before dispatching the medication. If you are one of the well informed patients, you would probably call your doctor friends to get his or her advice also, before taking the medication. However, in today’s information technology driven world, most doctors don’t write paper prescription anymore; they rely on software. When the doctor submits a prescription, drug interaction checker software will check for any drug-drug and drug-food interactions and send the prescription to the pharmacy. The pharmacy will run similar drug interaction check on their side also before dispatching the drug to the patient. This looks like a very clean and sophisticated workflow; except that if the doctor’s office and the pharmacy used the same drug interaction checker software and the software failed to warn about a potential allergy reaction because of a bug. If the drug interaction checker software is available as a cloud based service, when you check for any interaction from your home computer for final confirmation, you might be using the same defect prone drug interaction checker software that your doctor’s office and pharmacy relied upon and you will be getting similar, invalid result. This is as good as your doctor, pharmacist and your friend all phoned the same expert to get the same (albeit wrong) opinion on the allergy reaction.
Until recently, computers were probably the only consumer devises that relied on software applications. If you did not use computers, you were pretty much isolated from software and software bugs. Unfortunately, that is not the case anymore. Software form integral part of most commonly used electronic items. Your automobiles, TV, cable box, cell phone, security system and even treadmill have software components. Unfortunately, the enriched user experiences provided by these software components come at a price. For example, it is not uncommon, when you are watching your favorite TV program, you are interrupted by annoying messages saying that the cable box will be rebooted because of a firmware update. When you sit down with your family for a pizza and movie night, the blue ray player might not play the disc because of missing software patches. Most of the time, these updates are required to fix software bugs.
Software bugs could also make the electronic devises vulnerable to hacking. The smart phones of today are much more powerful and store way more information than the computers few years ago. Today, you are basically carrying a computer in your pocket or purse. While the mobile apps have brought your medical, financial and other critical data to your fingertips, they add an important concern. Most of these apps are written by not so experienced programmers. Anyone could create and market applications though the app stores. There is no governance or certification process around this. If these apps expose the internals of your phone because of undocumented bugs, you are basically broadcasting your personal information to the rest of the world without your knowledge.
This is not to say that we should avoid software or be overly paranoid about software bugs and vulnerabilities. Remain an educated consumer and be aware of the bugs. Think twice before downloading and installing apps in your mobile devises. First ask the most important question – do you really need it? Do you really need an app that will let you decorate your dog pictures with bow ties on your phone? Check the credibility of the publisher of the app. Check the bug reports. Ask your cable provider to supply the list of bug fixes and enhancements with every firmware update. Get the name of the software your doctor’s office using and go online and check what kind of bugs they have. It is an open, uncontrolled and scary market. Government will intervene only when the catastrophe gets out of control. But as an educated consumer, make use of your rights to information and do not let the software bugs bite you.