I have been fortunate to work in a very interesting part of the software industry; mission-critical software projects within the aircraft industry. In fact, Atollic has been contracted to develop software development tools for flight-control-system development, and we have been heavily involved in software development for various aircraft models during many years.
What always strikes me is the huge gap in quality consiousness between safety-critical software industries (like the aerospace industry), and more typical commercial development projects. While the full development process used in the aircraft industry might be a bit over-ambitious for most embedded systems development projects, there are lessons to be learned for commercial projects who want to deliver high-quality products.
A clear difference is that the aircraft industry uses stringent requirements definitions, and manage requirement changes in a structured manner, as opposed to the ad-hoc development that is often the case in many commercial embedded development projects. The net result of using a more controlled requirements definition is that the feature-set and software behaviour is not a moving target.
Aircraft projects are typically quite large, and so software projects within the aircraft industry typically uses team collaboration tools to manage important things like source code changes (version control systems), issue tracking (bug database systems) and source code reviews (peer review).
Static source code analysis are rutinely used, to check for coding standards compliance and code complexity levels. In fact, measuring and managing (limiting) the code complexity is arguably the cheapest, fastest and best way of improving software quality.
Additionally, testing is done more formally, and test quality is often measured using advanced code coverage analysis such as modified condition/decision coverage (MC/DC).
With the new modern embedded systems C/C++ IDE's (like Atollic TrueSTUDIO®), many of the methods used by the aerospace industry are available to any embedded developer. In fact, they are deeply integrated into the IDE as well. Many commercial projects would benefit from learning from more quality consious software industries, and at least make use of some of the methods that improve software quality.