He started out at IBM Storage Systems Division in Tucson, Arizona where he developed test and validation systems for new product development, including hardware and software solutions. His last project before returning home to Michigan, was participating in the development of a black-box test architecture in C/C++ for communications protocols. It involves capturing communication protocols using Markov chain modeling techniques, which allows creation of randomized tests with optimized state and path coverage (patent pending). While at IBM, Greg obtained 5 patents for design and testing methodologies for communication protocols and storage system architecture ideas.
Greg came to us from X-Rite, Inc. in Kentwood, MI. X-Rite is a color management company who is one of AO’s biggest customers. He started out in the Automated Test Equipment group where he developed PCB test systems for production line testing. He also led a project to move their test software architecture from Visual Basic to C# .NET. The new system allows tests to be written in XML and added SQL database integration for test versioning and result archival for defect tracking and analysis. He later transitioned into the role of Digital Systems Engineer, designing both hardware, firmware, and software for new color-measurement instruments. He was the primary firmware developer for MonacoOptixXR (for display calibration) and Pulse (for printer calibration). Together, these 2 products have made complete workflow color-management affordable to amateur graphic artists and small companies. Greg has 2 patents pending for innovative ideas in color measurement.
Greg has done professional development in C, C++, C#, Java and Ruby. During his career at Atomic Object, he has worked on project for many customers, including:
- Savant Automation where he worked on AGVs (Automated Guided Vehicles). He developed firmware for modular control and monitoring modules in C, while developing tools and methods for TDD in C for embedded systems, as well as automated system testing using Ruby third-party hardware stimulus and data collection for the hardware/firmware under test.
- Chrysler where he contributed to a Rails/Ruby test architecture for automating the testing of their handheld devices for diagnosing vehicle failures and upgrading firmware in vehicle ECUs.
- X-Rite where he has worked on developing firmware for their color measurement devices in C. He has also developed end-user software applications for updating instrument firmware and providing a diagnostic portal for remote technical support and diagnostics. Greg played a key role in introducing Agile development to X-Rite for embedded systems firmware development.
- Gentex where he has helped the Embedded Group obtain Automotive Spice Level 3 compliance using Unity and CMock (see below) in conjunction with TeamCity for Continuous Integration. The CI setup provides continuous unit and system testing of the Gentex codebases, as well as performing static analysis and generating other metrics for each revision of source code.
In his free time, Greg loves to spend time with his wife Kelli and daughters Natalie and Sedona. He also has a rich musical background, having performed in stage shows and also plays guitar and sings. He shares his musical interests with his wife Kelli, who also sings and plays bass. Another related hobby of his is music recording and post-production.
Presentations
Feature Driven Design Using TDD and Mocks
Embedded Systems Conference Boston
Boston, Massachusetts, USA
October 2008
Mocking the Embedded World: practical TDD, continuous integration, and design patterns
Embedded Systems Conference Silicon Valley
San Jose, California, USA
April 2007
Publications
Fall ESC08 Boston Preview: Software design doesn’t have to be either/or
Interview of Greg Williams and Mark VanderVoord by Bernard Cole
http://embedded.com
October 2008
Mocking the Embedded World: Test-Driven Development, Continuous Integration, and Design Patterns
Embedded Systems Conference Silicon Valley
San Jose, California, USA
April 2007
Open-Source Projects
Unity on SourceForge – Unit Test Framework for C
Unity is a unit test framework written entirely in the C language. It is lightweight and possesses special features for embedded systems. Unity has scaled well from small to large embedded projects but can be used for any C project.
CMock on SourceForge – Mock Framework for C
CMock is a module/object mocking framework for C projects useful for interaction-based unit testing. CMock uses Ruby to auto-generate C source code mock object modules conforming to the interfaces specified in C header files.
Ceedling on SourceForge – C Build System
Ceedling is a build system for C projects that is an extension for Ruby’s Rake (make-ish) build system. Ceedling is primarily targeted at Test-Driven Development in C and is designed to pull together CMock and Unity, two other awesome open-source projects that you can’t live without if you are doing TDD in the C language. In order to spread the awesomeness around, Ceedling is an extensible contraption with a nice plugin mechanism.
Sublime Text Wiki – Plugins for Sublime Text Editor
Sublime Text is a sophisticated text editor for code, html and prose. You’ll love the slick user interface and extraordinary features. It is largely written in Python and has a very extensible plugin mechanism. The Sublime Text Wiki is a GoogleCode project that Greg administers and maintains that indexes available packages and builds distributions that for easily plugging in extra goodness to this awesome editor.
Favorite Blogs

