A three-pronged approach towards improving the development of safety-critical software systems