August 11, 2015
By Mark Scantlebury, President and CEO
Software programs and devices with embedded software nearly always have issues or bugs. With the complexity of software these days, there are typically tens or hundreds of thousands of lines of code. Beyond simple mistakes, there are potential conflicts between different parts of the software that run at the same time. This leads to software bugs or issues that impact the system in a production environment. It is nearly impossible to ensure that everything runs exactly as expected all the time with no exceptions. However, there are several things that can be done to decrease the number and severity of software bugs.
One way to avoid some common mistakes up front is the introduction of coding standards. This helps to standardize the way that the code is developed. In most company coding standards, there are specific rules about how to perform certain basic tasks that avoid common pitfalls that can lead to bugs.
Any developer knows that they need to test each piece of code they write to ensure that it does what it is intended to do. Often though, developers can skip testing for failure. This means testing it at or outside of the expected limits and testing to make sure it fails. Seasoned developers will also develop automated tests that stress the software well beyond its limits and do many more iterations than can be done manually.
A code review puts more sets of eyes on the software. This usually involves several developers looking over the lines of code. They look for common mistakes or other potential problems, while also ensuring that the code aligns with the coding standard of the company. If there are major concerns, there will likely be a follow-up review to ensure that the problems were adequately corrected. This is especially helpful for new developers that are still learning good development habits.
Once a software release has been created, this will once again be tested by the developer before being sent to an independent systems integration or quality assurance group. This group is responsible for using the software as the customer would. They will interact with the system and intentionally try things that are not expected or allowed. This is the last opportunity to catch issues before a customer sees the software.
Field trials are very important for any new product or any major release of software. There are still bound to be some problems encountered and it is much easier to work with a select group of established customers to weed out the majority of the problems before sending it to the masses. This period could involve pulling back releases that cause too many problems, several iterations of changes, and more intensive, time consuming testing in the field.
Once a version of software has been deemed stable enough, it will become the production build and released to all customers. There may still be some minor problems or missing features at this point. If software teams waited for it to be perfect, there would typically be substantial delays in the availability of the product.
Even once the software has been released to production, the work doesn’t stop there. As problems are identified, they should be logged into a defect tracking system. This prevents reported issues from slipping through the cracks. They can be given a priority, have more details added, be assigned to a future release and then be sent to a developer to resolve.
As future releases are created, it is important to test all new features or bug fixes as previously stated. It is just as important to test all the other areas of code that should be unaffected. Because much of the software does interact with other parts, unexpected problems can be created. Ideally a full suite of automated regression tests will be implemented so that a standard set of tests are run on each and every release of software.
Far too often I have seen fixes that were rushed to help out a customer. The problem may have been resolved, but another issue that is even more severe is created in the process, causing frustration and more wasted time and effort. It is important to take the time to effectively resolve any unexpected problems that may arise.