by Niroshan Rajaduari, EVP at Vector Software

Millions of cars have rolled off the production line since 2010 that have attractive in-dash controls and infotainment systems, offering so-called connected car functionality

Functions include voice commands, parking assistance, and automated braking. Years ago these features were seen as whimsical in cartoons such as The Jetsons. Now they are a reality with the connected car offering crash notifications, speed and safety alerts, and the ability for the driver to interact with their vehicle intuitively. The connected car initiative received a significant boost in 2014 when Google announced the formation of the Open Automotive Alliance (OAA) a group of automakers and technology companies that share a vision for making technology in the car safer.

The safety benefits of this new technology should make consumer adoption easy, but many are sceptical about the reliability of these features. Buggy software still causes many issues in vehicles, with 50% of recalls due to software faults. The average car is running software with 50,000 to 100,000 bugs. With these statistics in mind, automotive manufacturers need improved development processes which produce reliable software, and increase consumer confidence in connected car technology.

Speak the Language of Test

The best way to improve quality is to shorten feedback loops between team members, and ensure that there is a common language for team members to collaborate. Human language is a really inefficient way to define technical requirements or describe bugs. A much better way is to communicate via test cases. Requirements should be created as data tables that formalize: pre-conditions, allowable ranges of inputs, expected values for legal inputs, how to process out-of-range inputs, and post-conditions, just like a test case.

Code changes should be accepted only when accompanied by tests that map to the requirements, prove correctness, and provide complete code coverage of the change. Bugs should be described by automated tests that demonstrate the failure.  Any other way of defining a bug will suffer from the same ambiguities as human language requirements, and result the bug bouncing around the team with statuses of not-repeatable, need more information, works as designed etc.

A methodology where testing and QA is applied at the end of the development cycle is no longer an acceptable process when the software is responsible for human lives.  Software quality must be part of every team member’s responsibility.

Conclusion

The automobile is the most complicated electronic device that any consumer will buy, with six times as much code as a commercial aircraft (Boeing 787) and twice as much as the Hadron Collider at CERN.

In developed countries the average person spends more than an hour per day in a car. With so many humans trusting their lives to the systems in these cars, auto manufactures have an obligation to produce the most robust systems possible. Autonomous cars will greatly raise the stakes, as early versions will be under intense scrutiny from both consumers and government agencies. The manufacturers who “get it right” and can instill confidence in the quality and safety of their autonomous cars will dominate.