Trace your requirements
Tracing your requirements is not only a way to comply with your standards, it’s a powerful tool to ensure your software’s safety. By implementing a good requirement tracking system, every engineer knows the source of each specification (high-level requirement, goal, objective, aim of the functionality). This makes him develop it in a better way and gives him the chance to provide feedback if he feels that the low-level requirement is not achieving the defined goal. Tracking correctly your requirements is also important to guarantee a complete test coverage by linking each test to a specification.
Perform peer reviews
Software peer review is an evaluation of the developed code by one or more people with similar competencies. Its goal is to improve quality, performance and credibility of the developed software. Having different persons reviewing the job of one engineer is a strong method to find possible bugs or requirement misinterpretations. This technique drastically improves quality and confidence in the produced artifact.
Develop automatic and independent tests
Testing your software seems a common practice, nevertheless having a good test methodology is not always simple. The benefit of automatic tests against manual ones is the confidence you have in the results but also the reproducibility of those tests. By ensuring that the tests are always performed the same way and provide the same results, you can guarantee the stability of your software. The independence of the people developing the tests is key. If the same programmer develops the software and the test routine, there is a high risk that the tests will be adapted to the developed code instead of ensuring the correct implementation of requirements. Keep in mind that you test your software in order to prove the absence of errors, not to find errors.
Use recognized coding guidelines
Coding guidelines contain recommendations for programming style, practices and methods for each aspect of the code. It improves maintainability, dependability, efficiency and usability. The implementation of guidelines such as MISRA C ensures compliance of the developed software with most of the requirements contained in the IEC61508. By using only a subset of the C language, it avoids undefined behavior and other possible language misuse. Various automated tools exist in order to test MISRA C compliance, this makes the validation of the software easier.