Seeing The Bits In The Bytes

In a world of complex systems, it may be easy to forget some of the basic concepts that build these systems.   Software applications can consist of hundreds of individual files as part of one very large project.  Those files all work together to achieve amazing functionality within an embedded system.  There are instances where a project may include files written by teams located in different countries.  We like to think that when this software is put into production all the bugs have been discovered and the software will work perfectly.  Unfortunately, there always seems to be unintended use or a sequence of events that result in undesired functionality.  Other times, there is just a plain old bug that managed to find its way into production software.

Imagine your job assignment is to investigate and provide a fix for software you have no previous experience with.  You must determine why the software is doing ‘x’ when ‘y’ is the desired function.  Or ‘x’ is expected to happen, but does not.  Where do you start?  There are hundreds of files.  How do you determine what part of the embedded system to even begin looking at?  There are various functions being performed within the software project.  How do you avoid getting lost in the thousands of lines of source code?  This is a perfect time to take a step back and remember some of the basics that are often outlined in beginning programming courses.  Remember, this complex system is built through smaller blocks.

Find a way to see the trees through the forest.  Analyze portions of software to identify which files should be of concern.  Determine what data should be of concern; how it is used and the meaning behind the numbers.  Analyze the logical flow of software to help focus on a much smaller portion of the software.  There are various “tools” that could be used to help do this:

  • Hierarchy charts can be helpful to graphically depict the structure of a program.
  • Flowcharts can help show the logical flow of a program.
  • Pseudocode can help eliminate some of the detail and determine if there is an obvious flaw with the logic and/or source code.  Eliminating some of the unnecessary detail can help make sense of the function being performed by the source code.

Obviously, there is a lot behind the “tools” mentioned here.  There are books written around these topics.  However, the point is, don’t get lost in the forest because you cannot see the trees.  Remember there are simple steps that can be taken when diving into unknown source code to help ease the pain.  Sure working through an unfamiliar project can be time consuming, but don’t forget some of the basic concepts often covered when first learning computer science.